侧边栏壁纸
博主头像
ZDREAM

一万年太久,只争朝夕

  • 累计撰写 35 篇文章
  • 累计创建 2 个标签
  • 累计收到 1 条评论

目 录CONTENT

文章目录

服务器基础安全加固

Thassarian
2023-02-15 / 0 评论 / 0 点赞 / 16 阅读 / 0 字

我自己的服务器是ubuntu,目前我们的国产化服务器也是兼容的Ubuntu(也有兼容centos的)。

一、修改登录验证方式

把密码验证换成秘钥文件验证:

生成秘钥

windows下使用powershell即可创建秘钥文件

#使用Ed25519算法生成秘钥文件
ssh-keygen -t ed25519 -C "your_email@example.com"

#或者兼容性强的话,使用RSA算法,4096位生成秘钥
ssh-keygen -t rsa -b 4096 -C "your_email@example.com"

设置密码(Passphrase):接下来,系统会提示您输入一个密码来保护您的私钥文件。

为秘钥再设置密码,多重保险

将公钥上传到Linux服务器

添加到~/.ssh/authorized_keys 文件中,上传的话需要授权,手动创建文件编辑保存则不需要

修改配置

修改验证方式 /etc/ssh/sshd_config

PasswordAuthentication no 
PermitRootLogin no 
MaxAuthTries 3

重启ssh服务

sudo systemctl restart sshd

二、安装防火墙

第一步:基础防火墙配置 (只需配置一次)

在开始屏蔽IP之前,我们需要确保防火墙已正确设置并启用。

1. 检查 UFW 状态
首先,查看 UFW 是否已经激活。

codeBash

sudo ufw status
  • 如果是 inactive (未激活),请继续以下步骤。

  • 如果是 active (激活),请检查现有规则,确保SSH端口已开放,然后再进行后续操作。

2. 设置默认规则 (安全基石)
我们先设置一个安全的默认策略:拒绝所有进入的连接,允许所有出去的连接。

codeBash

# 拒绝所有未经允许的入站连接
sudo ufw default deny incoming

# 允许所有出站连接
sudo ufw default allow outgoing

3. 开放必要端口 (!!! 防止失联 !!!)
这是最关键的一步!在启用防火墙之前,必须先允许 SSH 连接,否则您将会被服务器拒之门外。

codeBash

# 允许默认的 SSH 端口 (22)
sudo ufw allow ssh

# 如果您的 SSH 端口是自定义的,比如 2222,请使用下面的命令
# sudo ufw allow 2222/tcp

同时,根据您的服务开放其他必要端口,例如网站服务:

codeBash

# 允许 HTTP (80端口)
sudo ufw allow http

# 允许 HTTPS (443端口)
sudo ufw allow https

4. 启用 UFW
确认 SSH 规则已添加后,可以安全地启用防火墙。

codeBash

sudo ufw enable

系统会提示操作可能中断现有连接,输入 y 并回车。


第二步:分析日志并管理 IP 黑名单

当服务器配置完成后,我们可以日常监控并屏蔽有恶意行为的 IP。

1. 查询 SSH 连接日志
这些命令可以帮助我们快速定位可疑 IP。

codeBash

# 查询近期成功的 SSH 登录记录和来源 IP
grep 'sshd' /var/log/auth.log | grep 'Accepted'

# 查询近期失败的 SSH 登录记录
grep 'sshd' /var/log/auth.log | grep 'Failed'

# 统计每个 IP 的失败登录次数,并排序
grep 'sshd' /var/log/auth.log | grep 'Failed' | awk '{print $(NF-3)}' | sort | uniq -c | sort -nr```
通过最后一个命令的输出,您可以轻松找到那些频繁尝试登录失败的 IP 地址。

**2. 添加 IP 到黑名单**
假设我们发现 IP `139.162.154.81` 存在恶意行为,使用下面简单的命令即可屏蔽它。

```bash
sudo ufw deny from 139.162.154.81

3. 检查防火墙状态
可以随时查看当前的规则列表,确认 IP 是否已被屏蔽。

codeBash

# 使用 numbered 参数可以显示规则序号,方便后续删除
sudo ufw status numbered

您会在列表中看到一条 DENY 规则针对 139.162.154.81

4. 从黑名单中移除 IP (如果误伤)
如果需要解除对某个 IP 的屏蔽,操作同样简单。

codeBash

# 直接通过规则内容删除
sudo ufw delete deny from 139.162.154.81

# 或者,通过 "ufw status numbered" 看到的规则序号来删除(假设序号是 10)
# sudo ufw delete 10

三、安装杀毒软件

以ClamAV为例:

1. 安装 ClamAV 核心组件
此命令会安装 clamscan (手动扫描工具) 和 freshclam (病毒库更新工具)。

codeBash

sudo apt update
sudo apt install clamav

2. 理解并检查病毒库自动更新
安装完成后,系统会自动创建一个名为 clamav-freshclam 的后台服务,该服务会定时自动更新病毒库。

  • 这是为什么不应手动执行 freshclam 的原因
    因为后台服务在运行时会锁定日志文件,此时如果您在命令行中手动运行 freshclam,就会因无法获取文件锁而报错。

  • 正确的检查方法是查看日志文件

    codeBash

    # 查看最新的日志,确认更新状态 (按 Ctrl+C 退出)
    sudo tail -f /var/log/clamav/freshclam.log

    如果您在日志中看到 Database is up-to-date 或下载更新的记录,就证明自动更新工作正常。

  • (仅在特殊情况下)如何手动强制更新
    如果您确实需要立即强制更新,需要先停掉后台服务。

    codeBash

    # 1. 临时停止后台服务
    sudo systemctl stop clamav-freshclam
    
    # 2. 手动执行更新
    sudo freshclam
    
    # 3. 重新启动后台服务以恢复自动更新
    sudo systemctl start clamav-freshclam

第二部分:执行手动扫描 (clamscan)

clamscan 是一个按需运行的命令行扫描工具。

1. 扫描指定目录 (推荐)
扫描单个用户的家目录或网站目录,目标明确,耗时较短。

codeBash

# -r: 递归扫描子目录
# -i: 只打印被感染的文件
clamscan -r -i /home

2. 扫描整个系统 (谨慎使用)
警告:此操作会扫描您的整个文件系统,将消耗大量 CPU 和 I/O 资源,并可能需要数小时才能完成。请在服务器负载较低时执行。

codeBash

clamscan -r /

3. 高级扫描示例
您可以指定多个路径进行扫描,并使用更多参数。

codeBash

# 扫描多个指定的、风险较高的目录
clamscan -r --bell -i /root /tmp /var/www /opt
  • --bell: 在发现病毒时发出系统响铃提示。

  • -i: 只显示(打印)被感染文件的详细信息,正常的扫描过程不会显示。


第三部分:安装并使用后台扫描服务 (高级)

clamav-daemon 是一个后台守护进程 (clamd),它会将病毒库一直加载在内存中,提供更快的扫描性能。它主要用于:

  • 为其他需要调用杀毒引擎的应用(如邮件服务器)提供实时扫描接口。

  • 执行更快的、由 clamdscan 命令触发的扫描。

1. 安装守护进程

codeBash

sudo apt install clamav-daemon -y

2. 启动并设置开机自启
安装后,服务可能不会自动启动,需要手动操作。

codeBash

sudo systemctl start clamav-daemon
sudo systemctl enable clamav-daemon

# 检查服务状态,确保其 'active (running)'
sudo systemctl status clamav-daemon

3. 编辑守护进程配置 (可选)
守护进程的配置位于 clamd.conf。大多数情况下,默认配置即可工作。

codeBash

sudo nano /etc/clamav/clamd.conf

注意:修改此配置文件只影响 clamav-daemon 服务,不影响手动运行的 clamscan

4. 使用 clamdscan 进行快速扫描
clamav-daemon 运行时,您应该使用 clamdscan 命令来请求服务进行扫描,而不是 clamscan。因为 clamdscan 只是一个客户端,它将扫描任务发送给已在内存中准备就绪的守护进程,速度会快得多。

codeBash

# 使用 clamdscan 的语法与 clamscan 基本相同
clamdscan -r /home

总结:命令速查

目的

命令

备注

安装

sudo apt install clamav clamav-daemon

一次性安装所有组件

检查更新日志

sudo tail -f /var/log/clamav/freshclam.log

首选的更新检查方式

手动扫描

clamscan -r -i [目录]

适合按需、不频繁的扫描

服务控制

sudo systemctl [start/stop/status] clamav-daemon

管理后台服务

快速服务扫描

clamdscan -r [目录]

clamav-daemon 运行时使用

四、安装fail2ban

sudo apt update 
sudo apt install fail2ban -y

#查看启动状态
systemctl status fail2ban

#查看ssh封禁状态
fail2ban-client status sshd

Status for jail: sshd

|- Filter
|  |- Currently failed: 1              # 当前失败次数(在重置周期内)
|  |- Total failed:     78             # 自服务启动后,总共记录到的失败尝试次数
|  `- File list:        /var/log/auth.log
`- Actions
   |- Currently banned: 5              # 当前正处于封禁状态的 IP 地址数量
   |- Total banned:     12             # 自服务启动后,总共执行了多少次封禁操作
   `- Banned IP list:   1.2.3.4 5.6.7.8 9.10.11.12 13.14.15.16 17.18.19.20

Fail2ban 的主配置文件是 /etc/fail2ban/jail.conf我们永远不要直接修改这个文件,因为它在软件更新时可能会被覆盖。

正确的做法是创建一个本地配置文件 jail.local,在这里覆盖默认设置。

  1. 复制配置文件:

    codeBash

    sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
  2. 编辑本地配置文件:

    codeBash

    sudo nano /etc/fail2ban/jail.local
  3. 修改 [DEFAULT] 全局设置:
    jail.local 文件中找到 [DEFAULT] 段落,这里是几个最需要关注的核心参数:

    codeIni

    [DEFAULT]
    #
    # "bantime" is the number of seconds that a host is banned.
    # bantime = 10m
    bantime = 1h  # 封禁时长,例如 1小时 (1h), 1天 (1d)
    
    # "findtime" is the number of seconds that a host is observed.
    # findtime = 10m
    findtime = 10m # 观察时间窗口,例如 10分钟
    
    # "maxretry" is the number of failures before a host get banned.
    # maxretry = 5
    maxretry = 3  # 在观察时间内,允许的最大失败次数

    简单理解: 如果一个 IP 在 10分钟 (findtime) 内失败了 3次 (maxretry),它就会被封禁 1小时 (bantime)。

  4. 保存并退出编辑器 (在 nano 中是 Ctrl+X, Y, Enter)。

  5. 重启 Fail2ban 服务 以应用新的配置:

    codeBash

    sudo systemctl restart fail2ban
  6. 检查服务状态,确保没有错误:

    codeBash

    sudo systemctl status fail2ban

    看到 active (running) 就表示成功了。

  7. 检查 sshd 监狱是否已激活

    codeBash

    sudo fail2ban-client status

    你应该能在 Jail list 中看到 sshd

  8. 查看 sshd 监狱的详细状态

    codeBash

    sudo fail2ban-client status sshd

    这里会显示当前被封禁的 IP 列表和统计数据。

附一:CentOS防火墙管理

查看防火墙状态

systemctl status firewalld

查看端口放通情况

firewall-cmd --list-ports

添加放通的端口

firewall-cmd --add-port=6379/tcp --permanent

重启防火墙应用更改

firewall-cmd --reload

附二:其他措施了解

入侵检测系统(IDS)推荐:

  1. Snort:Snort 是一款开源软件,因此是免费的。它可以在通用的硬件上运行,但对于高速网络或大规模部署,可能需要更强大的硬件支持。

  2. Suricata:Suricata 也是一款开源软件,免费使用。它需要一定的硬件资源来支持高性能的流量分析,因此在大规模部署时可能需要更强大的硬件支持。

  3. Zeek(前身为Bro):Zeek 也是开源软件,免费使用。它需要在通用硬件上运行,并且可以根据需要进行灵活的配置。

入侵防御系统(IPS)推荐:

  1. Cisco Firepower:Cisco Firepower 是商业产品,需要购买许可证来使用。它通常需要专门的硬件设备,如Cisco Firepower安全设备,以支持其功能和性能。

  2. Palo Alto Networks:Palo Alto Networks 提供商业级的入侵防御系统,通常需要购买许可证和专门的硬件设备来支持其功能和性能。

  3. Fortinet FortiGate:Fortinet FortiGate 也是商业产品,需要购买许可证来使用。它通常需要专门的硬件设备,如FortiGate安全网关,以支持其功能和性能。

0

评论区