Linux服务器安全加固实战:SSH防护、内核参数调优与入侵检测全流程

Linux服务器安全加固为什么不可忽视

Linux服务器安全加固是运维工作的基础环节。一台默认配置的Linux服务器暴露在公网后,平均6小时内就会遭到自动化扫描和暴力破解尝试。SSH端口22每天可能收到数千次未授权登录请求,未加固的系统存在被攻破的实质风险。安全加固不是一次性动作,而是持续性的防护体系构建。

SSH服务安全防护配置

SSH是服务器管理的主要入口,也是攻击者最常尝试的突破口。完整的SSH加固包含以下配置:

修改默认端口并禁用root直接登录:

# /etc/ssh/sshd_config
Port 2222
PermitRootLogin no
MaxAuthTries 3
LoginGraceTime 30
MaxSessions 5
PermitEmptyPasswords no
PasswordAuthentication no
PubkeyAuthentication yes

使用ed25519算法生成高强度密钥对:

ssh-keygen -t ed25519 -a 100 -f ~/.ssh/server_key
# -a 100 增加100轮KDF迭代,防止密钥被离线暴力破解

配置fail2ban自动封禁暴力破解IP:

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

启用两步验证(TOTP)作为SSH登录的第二层防护:

apt install libpam-google-authenticator
google-authenticator -t -d -r 3 -R 30
# 在/etc/pam.d/sshd添加:
# auth required pam_google_authenticator.so nullok
# 在sshd_config添加:
# AuthenticationMethods publickey,keyboard-interactive

内核网络安全参数调优

Linux内核提供丰富的网络栈参数,合理配置可以有效防御DDoS、SYN Flood等网络攻击。

关键sysctl参数配置:

# /etc/sysctl.d/99-security.conf

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

# 启用SYN Cookies防御SYN Flood
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_synack_retries = 2

# 缩短TCP连接超时,释放资源更快
net.ipv4.tcp_fin_timeout = 15
net.ipv4.tcp_tw_reuse = 1

# 限制未完成连接队列长度
net.ipv4.tcp_max_syn_backlog = 8192
net.core.somaxconn = 8192

# 禁用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

# 禁用响应ICMP时间戳请求
net.ipv4.icmp_echo_ignore_all = 0
net.ipv4.icmp_echo_ignore_broadcasts = 1

# 内核日志级别控制
kernel.printk = 3 4 1 3

# 限制ptrace权限,防止进程注入
kernel.yama.ptrace_scope = 2

# 启用ASLR地址空间随机化
kernel.randomize_va_space = 2

应用配置:

sysctl --system
# 验证关键参数
sysctl net.ipv4.tcp_syncookies
sysctl kernel.yama.ptrace_scope

iptables/nftables防火墙规则设计

防火墙遵循默认拒绝原则——只放行已知必要流量,其余全部丢弃。

使用nftables实现(Debian/Ubuntu推荐):

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

        ct state established,related accept
        ct state invalid drop

        iif lo accept

        # SSH (修改后的端口)
        tcp dport 2222 accept

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

        # 限制ICMP速率
        icmp type echo-request limit rate 5/second 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;
    }
}

文件系统与权限加固

最小权限原则贯穿文件系统配置:

# 设置关键目录权限
chmod 700 /root
chmod 600 /etc/shadow
chmod 644 /etc/passwd

# 查找SUID/SGID文件,移除不必要的
find / -perm -4000 -type f 2>/dev/null
find / -perm -2000 -type f 2>/dev/null

# 移除常见危险SUID
chmod u-s /usr/bin/chsh /usr/bin/chfn /usr/bin/gpasswd

# 禁用不需要的setuid
chmod u-s /bin/mount /bin/umount

# 检查全局可写目录
find / -xdev -type d -perm -0002 2>/dev/null

挂载选项加固,为/tmp等分区增加nosuid/noexec:

# /etc/fstab
# /tmp使用tmpfs,禁用suid和exec
tmpfs /tmp tmpfs defaults,nosuid,nodev,noexec,size=2G 0 0

# /dev/shm禁用suid
tmpfs /dev/shm tmpfs defaults,nosuid,nodev,noexec 0 0

入侵检测与审计日志

部署AIDE做文件完整性检查,定期比对关键文件哈希:

apt install aide
aideinit          # 初始化数据库
aide --update    # 更新数据库(检查变更后确认安全再更新)
aide --check     # 执行检查

配置auditd审计关键系统调用:

# /etc/audit/rules.d/audit.rules
-a exit,always -F arch=b64 -S execve -F key=exec
-a exit,always -F arch=b64 -S openat -F auid>=1000 -F key=file_access
-w /etc/passwd -p wa -k passwd_changes
-w /etc/shadow -p wa -k shadow_changes
-w /etc/ssh/sshd_config -p wa -k sshd_config
-w /etc/nftables.conf -p wa -k firewall
-w /etc/cron* -p wa -k cron
-w /var/log/auth.log -p wa -k auth_log

查看审计日志:

ausearch -k sshd_config -ts recent
aureport -x -l  # 查看可执行文件审计报告

服务器安全加固是纵深防御体系:网络层防火墙控制流量入口,SSH防护阻断未授权访问,内核参数调优抵抗网络攻击,文件权限限制横向移动,入侵检测发现异常行为。每一层独立生效,叠加后形成完整的防护链路。定期执行安全扫描(如Lynis审计)、及时更新系统补丁、监控登录日志异常,才能维持加固效果的持续性。

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

(0)
小编小编
上一篇 2026年8月18日
下一篇 2026年8月18日

相关推荐

Linux服务器安全加固实战:SSH防护、内核调优与入侵检测全流程

服务器安全加固为什么是上线前必做项

裸机或云服务器交付后默认配置几乎无法抵抗自动化扫描攻击。2026年公开威胁情报显示,一台暴露SSH 22端口的Linux服务器平均在4分钟内就会被暴力破解工具锁定。安全加固不是可选项,是上线前的硬性要求。下面按攻击面顺序,从网络层到内核层逐项加固。

SSH访问防护:禁用密码登录与密钥管理

SSH暴力破解占服务器入侵事件的67%。加固的第一步:

# /etc/ssh/sshd_config 修改以下配置
Port 29722                          # 改掉默认端口
PermitRootLogin no                  # 禁止root直接登录
PasswordAuthentication no           # 禁用密码认证
PubkeyAuthentication yes            # 仅允许密钥登录
MaxAuthTries 3                      # 最多3次认证尝试
LoginGraceTime 30                   # 30秒内完成认证
AllowUsers deploy admin@10.0.0.0/8  # 限制用户和来源IP

密钥生成与分发:

# 本地生成Ed25519密钥(比RSA更短更安全)
ssh-keygen -t ed25519 -C "deploy@prod-01" -f ~/.ssh/prod_ed25519

# 将公钥推送到服务器
ssh-copy-id -i ~/.ssh/prod_ed25519.pub -p 29722 deploy@1.2.3.4

Ed25519密钥仅68字符,比3072位RSA的544字符短很多,认证速度也快3倍。

防火墙配置:只放行必要端口

用iptables或nftables做白名单策略:

# nftables规则示例
nft flush ruleset

table inet filter {
    chain input {
        type filter hook input priority 0; policy drop;
        
        # 已建立连接放行
        ct state established,related accept
        
        # 回环接口
        iif lo accept
        
        # SSH只允许办公网段
        ip saddr 10.0.0.0/8 tcp dport 29722 accept
        
        # HTTP/HTTPS
        tcp dport { 80, 443 } accept
        
        # ICMP限速放行
        icmp type echo-request limit rate 5/second accept
        
        # 记录丢弃包
        log prefix "nft-drop: " drop
    }
}

所有未明确放行的流量默认DROP。SSH端口只对管理网段开放,公网完全不可达。

内核参数安全调优

sysctl内核参数调整,防SYN Flood、IP欺骗等网络层攻击:

# /etc/sysctl.d/99-security.conf

# SYN Flood防护
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_max_syn_backlog = 8192
net.ipv4.tcp_synack_retries = 2

# 禁用IP转发和源路由
net.ipv4.ip_forward = 0
net.ipv4.conf.all.accept_source_route = 0
net.ipv4.conf.default.accept_source_route = 0

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

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

# 连接跟踪调优
net.netfilter.nf_conntrack_max = 524288
net.netfilter.nf_conntrack_tcp_timeout_established = 7200

生效:sysctl --system

文件系统与权限加固

关键目录权限收紧:

# /etc/passwd /etc/shadow 权限
chmod 644 /etc/passwd
chmod 600 /etc/shadow

# 禁止SUID滥用,查找所有SUID文件
find / -perm -4000 -type f 2>/dev/null

# 移除不必要的SUID权限
chmod u-s /usr/bin/chsh /usr/bin/chfn /usr/bin/gpasswd
chmod u-s /usr/bin/newgrp /usr/bin/passwd

# /tmp分区noexec选项(编辑/etc/fstab)
# /tmp ext4 defaults,nosuid,nodev,noexec 0 0

攻击者提权时经常利用SUID二进制文件。去掉chshchfn等非必要SUID后,即使拿到普通用户shell也无法通过这些路径提权。

入侵检测:AIDE文件完整性监控

AIDE(Advanced Intrusion Detection Environment)定期扫描文件系统,对比哈希值发现篡改:

# 安装
apt install aide   # Debian/Ubuntu
yum install aide   # CentOS

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

# 每日检查cron
cat > /etc/cron.daily/aide-check << 'EOF'
#!/bin/bash
aide --update > /var/log/aide/diff-$(date +%Y%m%d).log 2>&1
cp /var/lib/aide/aide.db.new /var/lib/aide/aide.db
# 发现变更发告警
grep -q "changed entries" /var/log/aide/diff-$(date +%Y%m%d).log &&   mail -s "AIDE Alert" admin@example.com < /var/log/aide/diff-$(date +%Y%m%d).log
EOF
chmod +x /etc/cron.daily/aide-check

Fail2Ban自动封禁暴力破解IP

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

3次失败尝试即封IP 24小时。配合修改过的SSH端口,暴力破解流量基本被拦截。

自动安全审计与合规检查

lynis做一键安全审计:

apt install lynis
lynis audit system --quick

Lynis输出100+检查项的评分和修复建议。重点关注BOOT-5122(GRUB密码)、AUTH-9228(密码强度策略)、FIRE-4512(防火墙状态)。每次加固后跑一遍,确认关键项全部通过。

安全加固没有终点,定期更新内核补丁、审计异常登录、review防火墙规则,形成闭环运维习惯。

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

(0)
小编小编
上一篇 2026年7月29日
下一篇 2026年7月29日

相关推荐