Linux系统安全加固实战:SSH防护、iptables防火墙与审计日志配置

服务器暴露在公网上时,默认配置的Linux系统存在大量安全隐患。SSH暴力破解、端口扫描、提权攻击是最常见的入侵手段。本文从SSH加固、防火墙规则、文件权限审计、入侵检测四个维度,演示Linux服务器从默认状态到生产级安全的完整加固流程。

SSH安全配置与端口防护

SSH是服务器远程管理的入口,也是攻击者首选目标。以下配置在 /etc/ssh/sshd_config 中修改:

# 修改默认端口(22改为高位端口,减少自动扫描命中)
Port 52222

# 禁止root直接登录
PermitRootLogin no

# 禁止密码认证,仅允许密钥认证
PasswordAuthentication no
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys

# 限制登录用户白名单
AllowUsers deploy admin

# 空闲超时自动断开(300秒无操作)
ClientAliveInterval 300
ClientAliveCountMax 0

# 限制认证尝试次数
MaxAuthTries 3

# 禁止X11转发和端口转发(非必要场景)
X11Forwarding no
AllowTcpForwarding no

# 登录前Banner警告
Banner /etc/ssh/banner.txt

# 使用强加密算法
Ciphers chacha20-poly1305@openssh.com,aes256-gcm@openssh.com,aes128-gcm@openssh.com
MACs hmac-sha2-512-etm@openssh.com,hmac-sha2-256-etm@openssh.com
KexAlgorithms curve25519-sha256,curve25519-sha256@libssh.org

修改前确保已配置SSH密钥认证并测试可登录,否则禁用密码后将无法远程接入。生成密钥对使用ed25519算法,安全性高于RSA且密钥更短:

ssh-keygen -t ed25519 -a 100 -f ~/.ssh/server_key
# 将公钥追加到服务器
ssh-copy-id -i ~/.ssh/server_key.pub -p 52222 deploy@server_ip

安装fail2ban自动封禁暴力破解IP:

yum install -y fail2ban
# /etc/fail2ban/jail.local
[sshd]
enabled = true
port = 52222
filter = sshd
logpath = /var/log/secure
maxretry = 3
findtime = 600
bantime = 3600
# 重复违规者永久封禁
bantime.increment = true
bantime.maxtime = -1

fail2ban监控SSH日志,10分钟内3次认证失败则封禁IP 1小时。配合bantime.increment对累犯递增封禁时长,彻底封堵持续性暴力破解。

iptables防火墙规则设计与默认拒绝策略

安全加固的核心原则是默认拒绝(Default Deny),仅放行明确需要的流量。以下iptables规则遵循此原则:

# 清除现有规则
iptables -F
iptables -X
iptables -Z

# 设置默认策略:全部DROP
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT

# 回环接口放行
iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT

# 已建立连接放行(状态检测)
iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT

# SSH(自定义端口)
iptables -A INPUT -p tcp --dport 52222 -m conntrack --ctstate NEW -m recent --set --name SSH
iptables -A INPUT -p tcp --dport 52222 -m conntrack --ctstate NEW -m recent --update --seconds 60 --hitcount 4 --name SSH -j DROP
iptables -A INPUT -p tcp --dport 52222 -j ACCEPT

# HTTP/HTTPS
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -p tcp --dport 443 -j ACCEPT

# ICMP限速放行(允许ping但防flood)
iptables -A INPUT -p icmp --icmp-type echo-request -m limit --limit 1/s -j ACCEPT

# 日志记录被拒绝的包(调试用,生产可关闭)
iptables -A INPUT -m limit --limit 5/min -j LOG --log-prefix "iptables-DROP: " --log-level 4

# 保存规则
iptables-save > /etc/sysconfig/iptables
systemctl enable iptables

SSH规则中的recent模块实现连接速率限制:60秒内超过3次新连接请求的第4次将被DROP,有效防止SSH连接洪水攻击。正常用户不会在1分钟内连接4次以上。

firewalld用户等价配置:

# 设置默认区域为drop
firewall-cmd --set-default-zone=drop

# 放行SSH自定义端口
firewall-cmd --permanent --add-port=52222/tcp
firewall-cmd --permanent --add-port=80/tcp
firewall-cmd --permanent --add-port=443/tcp

# 限速规则(富规则)
firewall-cmd --permanent --add-rich-rule='rule port port=52222 protocol=tcp limit value=3/m accept'

firewall-cmd --reload

文件系统权限审计与关键目录保护

查找SUID/SGID文件,这些文件是提权攻击的潜在入口:

# 查找所有SUID文件
find / -perm -4000 -type f 2>/dev/null

# 查找所有SGID文件
find / -perm -2000 -type f 2>/dev/null

# 移除不必要的SUID(如ping、chmod等非必要场景)
chmod u-s /usr/bin/ping
chmod u-s /usr/bin/chage
chmod u-s /usr/bin/chfn
chmod u-s /usr/bin/chsh

# 关键系统目录设置为不可变(防篡改)
chattr +i /etc/passwd
chattr +i /etc/shadow
chattr +i /etc/group
chattr +i /etc/gshadow
chattr +i /etc/ssh/sshd_config

# 如需修改这些文件,先解除不可变属性
# chattr -i /etc/passwd

chattr +i设置不可变属性后,即使是root用户也无法修改、删除、重命名该文件,直到用chattr -i解除。这能有效防止入侵者创建后门账号或修改SSH配置。

检查全局可写目录并修正:

# 查找全局可写目录(不包含sticky bit的)
find / -writable -type d 2>/dev/null | grep -v -E '^/(proc|sys|tmp|var/tmp)'
# /tmp和/var/tmp应设置sticky bit
chmod 1777 /tmp /var/tmp

# 检查空密码账号
awk -F: '($2==""){print "无密码账号: "$1}' /etc/shadow

# 检查UID为0的非root账号
awk -F: '($3==0){print "UID为0的账号: "$1}' /etc/passwd

审计日志配置与入侵检测

auditd是Linux内核级审计子系统,记录文件访问、系统调用、权限变更等安全事件:

yum install -y audit
systemctl enable --now auditd

# /etc/audit/rules.d/audit.rules
# 监控关键文件修改
-w /etc/passwd -p wa -k identity
-w /etc/shadow -p wa -k identity
-w /etc/group -p wa -k identity
-w /etc/sudoers -p wa -k sudo_changes
-w /var/log/secure -p wa -k log_changes

# 监控SSH配置文件
-w /etc/ssh/sshd_config -p wa -k ssh_config

# 监控cron任务(防后门定时任务)
-w /etc/crontab -p wa -k cron
-w /etc/cron.d/ -p wa -k cron
-w /var/spool/cron/ -p wa -k cron

# 监控系统时间和日期变更
-w /etc/localtime -p wa -k time_change

# 记录所有命令执行
-a always,exit -F arch=b64 -S execve -k cmd_exec

# 搜索审计日志
ausearch -k identity --start today
ausearch -k ssh_config --start today
aureport --summary

安装rkhunter扫描rootkit和后门:

yum install -y rkhunter

# 首次运行(更新数据库)
rkhunter --update
rkhunter --propupd

# 扫描系统
rkhunter --check --sk

# 设置每日自动扫描
echo "0 3 * * * root /usr/bin/rkhunter --check --sk --report-warnings-only | mail -s 'Rkhunter Report' admin@yunthe.com" > /etc/cron.d/rkhunter

内核参数安全加固

/etc/sysctl.conf 安全相关内核参数:

# 禁用IP转发(非路由器场景)
net.ipv4.ip_forward = 0

# 防SYN洪水攻击
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_max_syn_backlog = 4096
net.ipv4.tcp_synack_retries = 2

# 禁用源路由
net.ipv4.conf.all.accept_source_route = 0
net.ipv4.conf.default.accept_source_route = 0

# 禁用ICMP重定向
net.ipv4.conf.all.accept_redirects = 0
net.ipv4.conf.default.accept_redirects = 0
net.ipv4.conf.all.send_redirects = 0

# 禁用反向路径过滤
net.ipv4.conf.all.rp_filter = 1
net.ipv4.conf.default.rp_filter = 1

# 忽略ICMP广播请求(防Smurf攻击)
net.ipv4.icmp_echo_ignore_broadcasts = 1

# 禁用魔术包转发
net.ipv4.conf.all.log_martians = 1

# 限制内核符号信息(防信息泄露)
kernel.kptr_restrict = 2
kernel.dmesg_restrict = 1

# 限制ptrace(防进程注入)
kernel.yama.ptrace_scope = 1

# 应用生效
sysctl -p

以上加固措施覆盖了网络层(iptables)、传输层(SYN cookies)、应用层(SSH/fail2ban)、文件系统(权限审计/chattr)、内核(sysctl)五个层面的安全防护。生产环境上线前执行完整加固流程,并定期通过auditd日志和rkhunter扫描进行安全巡检,保障服务器持续安全运行。

原创文章,作者:小编,如若转载,请注明出处:https://www.yunthe.com/linux-xi-tong-an-quan-jia-gu-shi-zhan-ssh-fang-hu-iptables/

(0)
小编小编
上一篇 11小时前
下一篇 11小时前

相关推荐