SSH访问安全加固:从默认配置到生产级防护
Linux服务器暴露在公网后,SSH是头号攻击入口。默认配置的SSH服务几乎等同于邀请攻击者来试密码。安全加固的第一步就是收紧SSH。
修改/etc/ssh/sshd_config:
# 禁用root直接登录
PermitRootLogin no
# 禁用密码认证,仅允许密钥
PasswordAuthentication no
PubkeyAuthentication yes
# 修改默认端口(减少自动化扫描命中)
Port 2222
# 限制登录尝试
MaxAuthTries 3
LoginGraceTime 30
# 仅允许特定用户组登录
AllowGroups ssh-users
# 禁用空密码
PermitEmptyPasswords no
# 设置登录超时
ClientAliveInterval 300
ClientAliveCountMax 2
修改后执行systemctl restart sshd生效。注意:改端口前确认防火墙已放行新端口,否则直接锁死自己。
内核参数加固:网络与文件系统层面
通过sysctl调整内核参数,可以在系统层拦截大量自动化攻击和异常行为。
/etc/sysctl.d/99-security.conf:
# 禁用IP转发(非路由器场景)
net.ipv4.ip_forward = 0
# 防SYN Flood攻击
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_max_syn_backlog = 8192
net.ipv4.tcp_synack_retries = 2
# 禁用ICMP重定向
net.ipv4.conf.all.accept_redirects = 0
net.ipv4.conf.all.send_redirects = 0
net.ipv6.conf.all.accept_redirects = 0
# 防IP欺骗
net.ipv4.conf.all.rp_filter = 1
net.ipv4.conf.default.rp_filter = 1
# 禁用源路由
net.ipv4.conf.all.accept_source_route = 0
net.ipv6.conf.all.accept_source_route = 0
# 限制core dump
fs.suid_dumpable = 0
# 隐藏内核指针
kernel.kptr_restrict = 2
# 限制dmesg访问
kernel.dmesg_restrict = 1
执行sysctl -p /etc/sysctl.d/99-security.conf立即生效。这些参数不影响正常业务,但能有效阻断常见网络层探测手段。
防火墙规则:白名单思维而非黑名单
安全策略的核心原则:默认拒绝,显式放行。不要逐个封禁已知攻击IP——那是打地鼠,永远打不完。
# 清空现有规则
iptables -F
iptables -X
# 默认策略:拒绝所有入站
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT
# 放行回包
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
# 放行lo
iptables -A INPUT -i lo -j ACCEPT
# 放行SSH(新端口)
iptables -A INPUT -p tcp --dport 2222 -m state --state NEW -m recent --set --name SSH
iptables -A INPUT -p tcp --dport 2222 -m state --state NEW -m recent --update --seconds 60 --hitcount 4 --name SSH -j DROP
iptables -A INPUT -p tcp --dport 2222 -j ACCEPT
# 放行HTTP/HTTPS
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -p tcp --dport 443 -j ACCEPT
# 放行ICMP(限制速率)
iptables -A INPUT -p icmp --icmp-type 8 -m limit --limit 1/s --limit-burst 3 -j ACCEPT
# 记录被拒绝的包
iptables -A INPUT -j LOG --log-prefix "IPTables-Dropped: " --log-level 4
SSH那两行recent模块规则实现了暴力破解防护:同一IP在60秒内尝试超过4次连接直接丢弃。
入侵检测:AIDE文件完整性校验
AIDE(Advanced Intrusion Detection Environment)通过对比文件哈希值检测系统文件是否被篡改。
# 安装
apt install aide # Debian/Ubuntu
yum install aide # CentOS/RHEL
# 初始化数据库
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
将AIDE检查加入cron,每天凌晨执行一次,结果发送到管理员邮箱。任何关键二进制文件被修改都会被检出。
# /etc/cron.d/aide
0 3 * * * root /usr/bin/aide --check | /usr/bin/mail -s "AIDE Report $(hostname)" admin@example.com
日志审计与异常行为检测
系统日志是事后追溯的核心依据。配置集中式日志采集,同时设置关键事件实时告警。
# /etc/audit/rules.d/audit.rules
# 监控关键系统文件变更
-w /etc/passwd -p wa -k identity
-w /etc/shadow -p wa -k identity
-w /etc/ssh/sshd_config -p wa -k ssh_config
-w /etc/sudoers -p wa -k privilege
# 监控sudo使用
-w /usr/bin/sudo -p x -k sudo_usage
# 监控用户切换
-w /bin/su -p x -k su_usage
# 监控cron任务变更
-w /etc/cron* -p wa -k cron_changes
执行augenrules加载规则,ausearch -k identity查询特定事件的审计记录。
常见问题排查
Q: 加固后SSH连不上怎么办?
A: 保持一个已建立的SSH会话不要断开,在另一个终端修改配置。如果已经断开,通过VNC或IPMI控制台登录回滚配置。建议每次修改SSH配置前先做备份。
Q: sysctl参数不生效?
A: 检查/etc/sysctl.d/下是否有多个文件定义了相同参数,后加载的会覆盖先加载的。用sysctl -a | grep 参数名确认实际运行值。
Q: AIDE报告大量误报?
A: 排除频繁变化的文件路径,在/etc/aide/aide.conf中添加!/var/log、!/run、!/proc等排除项。只监控核心系统文件和业务配置文件。
原创文章,作者:小编,如若转载,请注明出处:https://www.yunthe.com/linux-fu-wu-qi-an-quan-jia-gu-shi-cao-shou-ce-ssh-fang-hu/