Linux服务器安全加固实战:从SSH防护到内核参数调优

Linux服务器安全加固的核心思路

服务器暴露在公网上的每一秒都在承受扫描和攻击尝试。安全加固不是一次性操作,而是建立纵深防御体系:网络层限制访问入口,系统层减少攻击面,应用层控制权限边界,审计层留存操作痕迹。这套组合策略远比依赖单一防火墙规则可靠。

SSH安全加固:堵住最大的攻击入口

SSH是Linux服务器被暴力破解最多的服务。加固SSH需要从认证方式和访问控制两个维度同时入手:

# /etc/ssh/sshd_config 安全配置
Port 2222                          # 修改默认端口,规避自动化扫描
PermitRootLogin no                 # 禁止root直接登录
PasswordAuthentication no          # 禁用密码认证
PubkeyAuthentication yes           # 启用密钥认证
MaxAuthTries 3                     # 最大认证尝试次数
LoginGraceTime 30                  # 登录超时时间
AllowUsers deploy admin            # 白名单用户
AllowGroups ssh-users              # 白名单用户组

# 重启sshd生效
systemctl restart sshd

密钥认证配置中,ed25519算法比RSA更安全且密钥更短:

# 客户端生成ed25519密钥
ssh-keygen -t ed25519 -C "deploy@prod-01" -f ~/.ssh/id_ed25519

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

# 服务器端确认authorized_keys权限
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys

fail2ban自动封禁暴力破解IP

SSH加固后仍需应对分布式暴力破解。fail2ban通过解析日志自动识别并封禁异常IP:

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

# /etc/fail2ban/jail.local
[sshd]
enabled = true
port = 2222
filter = sshd
logpath = /var/log/auth.log
maxretry = 3
findtime = 600
bantime = 86400
action = iptables-multiport[name=sshd, port="2222", protocol=tcp]

[sshd-aggressive]
enabled = true
port = 2222
filter = sshd[mode=aggressive]
logpath = /var/log/auth.log
maxretry = 2
findtime = 300
bantime = 604800

systemctl enable fail2ban
systemctl start fail2ban

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

iptables/nftables防火墙规则配置

防火墙规则遵循最小暴露原则:只开放业务必需的端口,拒绝一切默认入站流量:

# nftables配置 (/etc/nftables.conf)
table inet firewall {
    chain input {
        type filter hook input priority 0; policy drop;

        # 允许回环
        iif lo accept

        # 允许已建立连接
        ct state established,related accept

        # 允许ICMP (限速)
        ip protocol icmp limit rate 5/second accept

        # SSH - 仅允许管理网段
        ip saddr 10.0.1.0/24 tcp dport 2222 accept

        # HTTP/HTTPS
        tcp dport { 80, 443 } accept

        # 记录被拒绝的连接
        log prefix "nftables-drop: " drop
    }

    chain forward {
        type filter hook forward priority 0; policy drop;
    }

    chain output {
        type filter hook output priority 0; policy accept;
    }
}

systemctl enable nftables
systemctl restart nftables

内核参数安全调优

内核参数调优是容易被忽略的加固层,通过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

# 连接追踪优化
net.netfilter.nf_conntrack_max = 1048576
net.netfilter.nf_conntrack_tcp_timeout_established = 7200

# 禁用核心转储(防止信息泄露)
fs.suid_dumpable = 0

# ASLR增强
kernel.randomize_va_space = 2

# 生效
sysctl --system

文件系统权限与敏感目录防护

权限控制是纵深防御的最后一道屏障。关键目录和文件的权限必须严格限制:

# 关键文件权限设置
chmod 600 /etc/shadow
chmod 600 /etc/gshadow
chmod 644 /etc/passwd
chmod 644 /etc/group
chmod 700 /root
chmod 700 /home/deploy

# 禁用不必要的SUID/SGID二进制
find / -perm -4000 -type f 2>/dev/null > /root/suid_files.txt

# 移除常见被利用的SUID权限(谨慎操作)
chmod u-s /usr/bin/chsh
chmod u-s /usr/bin/chfn

# 设置不可变属性保护关键文件
chattr +i /etc/passwd
chattr +i /etc/shadow
# 需要修改时先 chattr -i 解除

# /tmp安全挂载选项(/etc/fstab)
# tmpfs /tmp tmpfs defaults,nosuid,nodev,noexec 0 0

审计日志与入侵检测

审计系统记录所有敏感操作,是事后追溯和实时告警的基础:

# 安装auditd
apt install auditd -y

# 关键审计规则 /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 sshd_config
-w /etc/sudoers -p wa -k sudoers
-a always,exit -F arch=b64 -S mount -k mount
-a always,exit -F arch=b64 -S init_module -k kernel_module
-a always,exit -F arch=b64 -S delete_module -k kernel_module

# 搜索审计日志
ausearch -k sshd_config -ts recent
aureport -f

# 安装rkhunter做根kit检测
apt install rkhunter -y
rkhunter --update
rkhunter --check --skip-keypress

安全加固完成后,定期检查是保持安全状态的关键。建议建立cron任务,每周自动运行安全扫描,审计日志转发到集中式日志平台做实时分析。服务器安全不是配置完成就结束,而是一个持续的对抗过程。

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

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

相关推荐