Linux服务器安全加固实战:SSH配置、防火墙、入侵检测与审计全流程

SSH安全配置加固

SSH是Linux服务器最常用的远程管理协议,也是攻击者最常利用的入口。默认SSH配置存在多个安全隐患:允许root直接登录、使用密码认证、监听默认22端口。以下逐项配置SSH安全策略,显著降低暴力破解和未授权访问风险。

编辑SSH配置文件 /etc/ssh/sshd_config,逐项调整:

# 禁止root直接登录,改用普通用户su或sudo提权
PermitRootLogin no

# 禁用密码认证,强制使用密钥对
PasswordAuthentication no
ChallengeResponseAuthentication no

# 修改默认端口(避免自动扫描脚本,不提供真正安全但减少日志噪音)
Port 2922

# 限制登录尝试次数,3次失败断开
MaxAuthTries 3

# 设置登录超时,60秒未完成认证断开
LoginGraceTime 60

# 禁用空密码
PermitEmptyPasswords no

# 限制可登录的用户和组
AllowUsers deploy admin
AllowGroups ssh-users

# 禁用不必要的认证方式
GSSAPIAuthentication no
KerberosAuthentication no
HostbasedAuthentication no

# 启用严格模式,检查权限
StrictModes yes

# 限制会话超时(客户端300秒无操作断开)
ClientAliveInterval 300
ClientAliveCountMax 2

修改前务必备份原配置,修改后执行 sshd -t 验证语法,确认无误再重启:systemctl restart sshd

SSH密钥对生成与管理

密钥认证比密码认证安全几个数量级——RSA 4096位密钥的暴力破解在当前算力下不现实。密钥管理的关键是私钥保护:

# 生成ED25519密钥对(比RSA更短更快更安全,推荐优先使用)
ssh-keygen -t ed25519 -C "deploy@prod-2026" -f ~/.ssh/id_ed25519

# 如需兼容旧系统,生成RSA 4096位密钥
ssh-keygen -t rsa -b 4096 -C "deploy@prod-2026" -f ~/.ssh/id_rsa

# 为密钥添加密码短语(私钥被窃取后仍需密码才能使用)
# 生成时设置,或后续添加:
ssh-keygen -p -f ~/.ssh/id_ed25519

# 将公钥部署到目标服务器
ssh-copy-id -i ~/.ssh/id_ed25519.pub -p 2922 deploy@server-ip

# 配置SSH客户端 ~/.ssh/config 简化管理
Host prod-web01
    HostName 10.0.1.10
    Port 2922
    User deploy
    IdentityFile ~/.ssh/id_ed25519
    ServerAliveInterval 60
    ServerAliveCountMax 3

生产环境建议使用SSH Certificate代替密钥对:由内部CA签发短期有效的证书,证书过期自动失效,避免密钥泄露后长期有效的问题。签发命令:

# CA签发用户证书,有效期8小时
ssh-keygen -s ca_key -I deploy-20260807 -V +8h -n deploy user_key.pub

# 服务器信任CA:在sshd_config中配置
TrustedUserCAKeys /etc/ssh/ca.pub
AuthorizedPrincipalsFile /etc/ssh/auth_principals/%u

fail2ban配置与暴力破解防护

fail2ban通过监控日志文件,自动封禁异常IP。默认规则对SSH防护有效,但需要根据实际场景调优参数:

# 安装fail2ban
apt install fail2ban -y   # Debian/Ubuntu
yum install fail2ban -y   # CentOS/RHEL

# 创建本地配置 /etc/fail2ban/jail.local(不要修改jail.conf)
[DEFAULT]
bantime  = 86400          # 封禁时长24小时
findtime = 600            # 检测窗口10分钟
maxretry = 3              # 3次失败即封禁
banaction = iptables-multiport
action = %(action_mwl)s   # 封禁+邮件通知

[sshd]
enabled  = true
port     = 2922
filter   = sshd
logpath  = /var/log/auth.log
maxretry = 3
bantime  = 86400

# 防止扫描器探测
[sshd-ddos]
enabled  = true
port     = 2922
filter   = sshd-ddos
logpath  = /var/log/auth.log
maxretry = 5
bantime  = 7200

自定义过滤规则,检测多种攻击模式。创建 /etc/fail2ban/filter.d/sshd-custom.conf:

[Definition]
failregex = ^%(__prefix_line)sFailed password for .* from <HOST>
            ^%(__prefix_line)sInvalid user .* from <HOST>
            ^%(__prefix_line)sConnection closed by .* <HOST>
            ^%(__prefix_line)sDisconnected from .* <HOST> \[preauth\]
ignoreregex =

查看封禁状态:fail2ban-client status sshd,手动解封:fail2ban-client set sshd unbanip 1.2.3.4。将信任IP加入白名单:在jail.local的DEFAULT段添加 ignoreip = 127.0.0.1/8 10.0.0.0/8 192.168.0.0/16

iptables防火墙策略配置

服务器安全加固的核心是网络层访问控制——只开放必要端口,拒绝其他所有入站流量:

# 清空现有规则
iptables -F
iptables -X

# 默认策略:入站拒绝,出站允许
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT

# 允许回环接口
iptables -A INPUT -i lo -j ACCEPT

# 允许已建立的连接和相关连接
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

# 允许SSH(自定义端口2922),限制单IP并发连接数
iptables -A INPUT -p tcp --dport 2922 -m connlimit --connlimit-above 3 -j DROP
iptables -A INPUT -p tcp --dport 2922 -m state --state NEW -m recent --set --name SSH
iptables -A INPUT -p tcp --dport 2922 -m state --state NEW -m recent --update --seconds 60 --hitcount 4 --name SSH -j DROP
iptables -A INPUT -p tcp --dport 2922 -j ACCEPT

# 允许HTTP/HTTPS(如为Web服务器)
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -p tcp --dport 443 -j ACCEPT

# 允许内网ICMP(ping)
iptables -A INPUT -p icmp -s 10.0.0.0/8 -j ACCEPT

# 记录被拒绝的连接(限速,避免日志爆炸)
iptables -A INPUT -m limit --limit 5/min -j LOG --log-prefix "iptables-dropped: "

# 持久化规则
apt install iptables-persistent -y
netfilter-persistent save

入侵检测系统部署

网络层防护无法发现已突破边界的攻击。部署主机入侵检测系统(HIDS)和文件完整性监控是纵深防御的关键一环。

OSSEC部署:OSSEC是开源主机入侵检测系统,支持日志分析、文件完整性检查和rootkit检测:

# 安装OSSEC HIDS
wget https://github.com/ossec/ossec-hids/archive/3.7.0.tar.gz
tar xf 3.7.0.tar.gz && cd ossec-hids-3.7.0
./install.sh  # 选择local安装

# 配置关键目录文件完整性监控 /var/ossec/etc/ossec.conf
<syscheck>
    <directories check_all="yes">/etc,/usr/bin,/usr/sbin</directories>
    <directories check_all="yes">/var/www,/opt/app</directories>
    <ignore>/etc/mtab</ignore>
    <ignore>/etc/resolv.conf</ignore>
    <frequency>3600</frequency>
</syscheck>

# 配置rootkit检测
<rootcheck>
    <rootkit_files>/var/ossec/etc/shared/rootkit_files.txt</rootkit_files>
    <rootkit_trojans>/var/ossec/etc/shared/rootkit_trojans.txt</rootkit_trojans>
    <frequency>86400</frequency>
</rootcheck>

AIDE文件完整性检查:AIDE比OSSEC的syscheck模块更专业,适合对核心系统文件做完整性基线管理:

# 安装AIDE
apt install aide -y

# 初始化数据库
aideinit
mv /var/lib/aide/aide.db.new /var/lib/aide/aide.db

# 执行检查
aide --check

# 更新基线(确认变更合法后)
aide --update
mv /var/lib/aide/aide.db.new /var/lib/aide/aide.db

# 设置每日自动检查cron
echo '0 3 * * * /usr/bin/aide --check | mail -s "AIDE Report" admin@example.com' | crontab -

服务器安全审计与持续加固

安全加固不是一次性工作,需要持续审计和更新。建立定期审计机制:

账户审计:每月检查系统账户,删除离职员工和不必要的系统账户。awk -F: '$3 >= 1000 {print $1, $3}' /etc/passwd 列出所有普通用户。lastlog 查看各账户最近登录时间,长期未登录的账户应禁用。

SUID/SGID检查:SUID文件是提权攻击的常见利用点:find / -perm -4000 -type f 2>/dev/null 列出所有SUID文件,对比基线,新增的SUID文件需要逐一排查。

开放端口审计:ss -tlnp 列出所有监听端口和对应进程,确认每个端口都有合法用途。不明端口立即追查进程来源。

自动安全更新:启用unattended-upgrades自动安装安全补丁,降低已知漏洞暴露窗口:dpkg-reconfigure -plow unattended-upgrades,配置 /etc/apt/apt.conf.d/50unattended-upgrades 只启用安全更新源。

原创文章,作者:小编,如若转载,请注明出处:https://www.yunthe.com/linux-fu-wu-qi-an-quan-jia-gu-shi-zhan-ssh-pei-zhi-fang-huo/

(0)
小编小编
上一篇 1天前
下一篇 1天前

相关推荐