Linux服务器安全加固的第一道防线在哪里
服务器安全加固从来不是装个防火墙就完事的工作。攻击者进入系统最常见的入口是SSH暴力破解、Web应用漏洞和内核提权。本文从SSH防护、用户权限管控、内核参数调优三个维度,给出一套可直接落地的服务器安全加固方案。
SSH防护:堵住最常被攻击的入口
SSH是Linux服务器暴露面最大的服务。2025年全年的攻击数据显示,超过78%的自动化攻击从SSH端口22发起。
禁用密码认证,强制密钥登录
暴力破解密码是最低成本的攻击方式。直接禁用密码认证:
# /etc/ssh/sshd_config 修改
PasswordAuthentication no
ChallengeResponseAuthentication no
UsePAM no
PubkeyAuthentication yes
# 生成密钥对(推荐ed25519,比RSA更快更安全)
ssh-keygen -t ed25519 -C "admin@production-2026" -f ~/.ssh/id_ed25519
# 将公钥部署到服务器
ssh-copy-id -i ~/.ssh/id_ed25519.pub user@server-ip
# 重启sshd前先测试配置语法
sshd -t && systemctl restart sshd
密钥长度对比:ED25519密钥仅44字节,RSA 4096位密钥约3.2KB。ED25519在签名验证速度上比RSA快100倍以上。
修改默认端口并配置Fail2Ban
改端口不是安全措施,但能过滤掉90%的自动化扫描脚本:
# /etc/ssh/sshd_config
Port 29722
ListenAddress 0.0.0.0
# Fail2Ban安装与配置
apt install fail2ban -y
# /etc/fail2ban/jail.local
[sshd]
enabled = true
port = 29722
filter = sshd
logpath = /var/log/auth.log
maxretry = 3
findtime = 300
bantime = 3600
action = iptables-multiport[name=sshd, port="29722", protocol=tcp]
systemctl enable fail2ban && systemctl start fail2ban
# 查看当前封禁IP
fail2ban-client status sshd
生产环境中建议bantime设为86400(24小时),对于持续性攻击可启用recidive jail对重复违规IP延长封禁时间。
用户权限管控:最小权限原则落地
root直接操作生产服务器是严重的安全风险。权限管控的核心是:普通用户执行日常操作,需要提权时通过sudo审计。
# 创建运维用户并加入sudo组
useradd -m -s /bin/bash ops-admin
usermod -aG sudo ops-admin
# 配置sudo规则:限制可执行的命令
# /etc/sudoers.d/ops-admin
ops-admin ALL=(ALL) NOPASSWD: /usr/bin/systemctl restart nginx
ops-admin ALL=(ALL) NOPASSWD: /usr/bin/systemctl restart php-fpm
ops-admin ALL=(ALL) NOPASSWD: /usr/bin/journalctl -u *
ops-admin ALL=(ALL) /usr/bin/apt update, /usr/bin/apt upgrade
# 禁止root直接SSH登录
# /etc/ssh/sshd_config
PermitRootLogin no
AllowUsers ops-admin@10.0.* ops-admin@192.168.1.*
AllowUsers指令同时限制了来源IP段,只有内网运维跳板机能连接SSH。这是网络层的第二道防线。
文件系统关键权限修复
# 检查SUID文件——攻击者提权的常见路径
find / -perm -4000 -type f 2>/dev/null
# 移除不必要的SUID权限(根据业务评估)
chmod u-s /usr/bin/passwd # 如果使用集中认证
chmod u-s /usr/bin/mount # 非物理机不需要
chmod u-s /usr/bin/umount
chmod u-s /usr/bin/su # 禁止本地su切换
# 关键目录权限收紧
chmod 700 /root
chmod 600 /etc/shadow
chmod 640 /etc/ssh/sshd_config
# 检查全局可写目录
find / -xdev -type d -perm -0002 2>/dev/null
内核参数调优:从系统层面封堵攻击面
Linux内核的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
# 禁止源路由
net.ipv4.conf.all.accept_source_route = 0
net.ipv6.conf.all.accept_source_route = 0
# 反向路径过滤——防止IP欺骗
net.ipv4.conf.all.rp_filter = 1
net.ipv4.conf.default.rp_filter = 1
# 连接跟踪优化
net.netfilter.nf_conntrack_max = 1048576
net.netfilter.nf_conntrack_tcp_timeout_established = 7200
# 禁止核心转储
fs.suid_dumpable = 0
# 应用配置
sysctl -p /etc/sysctl.d/99-security.conf
SYN Cookie是最有效的SYN Flood防御手段,开启后内核不再为半连接分配资源,而是通过加密Cookie验证客户端合法性。实测可在万级SYN Flood攻击下保持服务可用。
iptables防火墙规则:白名单模式
防火墙策略的核心原则是:默认拒绝,显式放行。
# 清空已有规则
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 -s 10.0.0.0/8 -p tcp --dport 29722 -j ACCEPT
# 放行Web服务
iptables -A INPUT -p tcp --dport 443 -j ACCEPT
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
# 放行监控Agent
iptables -A INPUT -s 10.0.0.50 -p tcp --dport 9100 -j ACCEPT
# 记录被拒绝的连接
iptables -A INPUT -j LOG --log-prefix "IPTABLES-DROP: " --log-level 4
# 持久化规则
apt install iptables-persistent -y
netfilter-persistent save
安全加固检查清单
加固完成后,用以下命令验证关键配置:
#!/bin/bash
# 服务器安全加固验证脚本
echo "=== SSH配置检查 ==="
grep -E "^(PasswordAuthentication|PermitRootLogin|Port)" /etc/ssh/sshd_config
echo ""
echo "=== 监听端口检查 ==="
ss -tlnp | grep -v "127.0.0"
echo ""
echo "=== SUID文件检查 ==="
find / -perm -4000 -type f 2>/dev/null | wc -l
echo ""
echo "=== 失败登录统计 ==="
grep "Failed password" /var/log/auth.log | tail -5
echo ""
echo "=== 内核参数验证 ==="
sysctl net.ipv4.tcp_syncookies net.ipv4.conf.all.rp_filter
安全加固不是一次性工作。建议配合auditd记录关键文件变更、AIDE做文件完整性校验,并定期用Lynis做系统级安全审计。每季度review一次sudo规则和防火墙策略,清理不再需要的放行规则。
原创文章,作者:小编,如若转载,请注明出处:https://www.yunthe.com/linux-fu-wu-qi-an-quan-jia-gu-shi-zhan-ssh-fang-hu-dao-nei/