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/