Linux服务器安全加固20条:SSH防爆破、Fail2ban、防火墙规则配置实录

新服务器开通后的前24小时是安全风险最高的阶段。互联网上的自动化扫描机器人会在几分钟内发现你的服务器并开始尝试暴力破解SSH密码。本文给出20条安全加固措施,从最基础的配置到进阶防护,按优先级排列。

一、SSH安全加固(优先级:最高)

1. 修改默认SSH端口

默认22端口是攻击者首要扫描目标,改为高位随机端口可减少90%的自动化扫描攻击。

nano /etc/ssh/sshd_config
# 找到 #Port 22,修改为:
Port 2233  # 选择1024~65535之间的随机数

systemctl restart sshd

2. 禁用root直接登录

# 在sshd_config中设置:
PermitRootLogin no

# 先确保已创建普通用户并加入sudo组
adduser 你的用户名
usermod -aG sudo 你的用户名

3. 使用SSH密钥认证,禁用密码登录

# 本地生成密钥对
ssh-keygen -t ed25519 -C "your_email"

# 上传公钥到服务器
ssh-copy-id -i ~/.ssh/id_ed25519.pub 用户名@服务器IP

# 确认密钥登录正常后,禁用密码登录
# sshd_config中设置:
PasswordAuthentication no

4. 限制SSH登录的IP范围

# /etc/hosts.allow 中添加
sshd: 你的固定IP地址

# /etc/hosts.deny 中添加
sshd: ALL

二、安装Fail2ban防暴力破解

5. 安装Fail2ban

apt install fail2ban -y
systemctl enable fail2ban
systemctl start fail2ban

6. 配置SSH防护规则

nano /etc/fail2ban/jail.local

写入以下内容:

[DEFAULT]
bantime  = 3600
findtime = 600
maxretry = 5
banaction = iptables-multiport

[sshd]
enabled = true
port = 2233  # 改为你的SSH端口
logpath = /var/log/auth.log
systemctl restart fail2ban

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

三、防火墙配置(UFW)

7. 启用UFW防火墙

apt install ufw -y

# 设置默认策略
ufw default deny incoming
ufw default allow outgoing

# 开放必要端口
ufw allow 2233/tcp   # SSH自定义端口
ufw allow 80/tcp     # HTTP
ufw allow 443/tcp    # HTTPS

# 启用防火墙
ufw enable
ufw status verbose

8. 限制特定端口的访问频率(防CC)

# 限制SSH连接频率(30秒内超过6次连接则封禁)
ufw limit 2233/tcp

四、系统层面加固

9. 保持系统更新

apt update && apt upgrade -y

# 配置自动安全更新
apt install unattended-upgrades -y
dpkg-reconfigure -plow unattended-upgrades

10. 禁用不必要的服务

# 查看运行中的服务
systemctl list-units --type=service --state=running

# 禁用不需要的服务(如rpcbind)
systemctl disable rpcbind
systemctl stop rpcbind

11. 配置sysctl内核参数

nano /etc/sysctl.conf

添加以下内容:

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

# 防SYN洪水攻击
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_max_syn_backlog = 2048

# 禁用ICMP重定向
net.ipv4.conf.all.accept_redirects = 0
net.ipv4.conf.all.send_redirects = 0
sysctl -p  # 立即生效

12. 限制core dump

echo "* hard core 0" >> /etc/security/limits.conf
echo "fs.suid_dumpable = 0" >> /etc/sysctl.conf

五、Web服务加固(Nginx)

13. 隐藏Nginx版本号

# nginx.conf的http块中添加:
server_tokens off;

14. 添加安全响应头

add_header X-Frame-Options "SAMEORIGIN";
add_header X-Content-Type-Options "nosniff";
add_header X-XSS-Protection "1; mode=block";
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains";

15. 限制请求频率

http {
    limit_req_zone $binary_remote_addr zone=api:10m rate=10r/s;
}
server {
    location /wp-login.php {
        limit_req zone=api burst=5 nodelay;
    }
}

六、监控与审计

16. 安装rkhunter检测Rootkit

apt install rkhunter -y
rkhunter --update
rkhunter --check

17. 配置登录告警(发邮件通知)

# /etc/pam.d/sshd末尾添加
session optional pam_exec.so /usr/local/bin/ssh-notify.sh

18. 启用审计日志(auditd)

apt install auditd -y
systemctl enable auditd
auditctl -w /etc/passwd -p wa -k passwd_changes
auditctl -w /etc/sudoers -p wa -k sudoers_changes

19. 定期检查开放端口

ss -tlnp  # 查看所有监听端口
netstat -tulpn | grep LISTEN

20. 配置日志轮转与集中存储

# 确保logrotate正常运行
logrotate --debug /etc/logrotate.conf

# 重要日志文件:
# /var/log/auth.log  - SSH登录记录
# /var/log/syslog    - 系统日志
# /var/log/nginx/    - Web访问日志

七、安全加固优先级总结

优先级措施时间成本
立即执行修改SSH端口、禁用root登录、启用UFW10分钟
今天完成配置SSH密钥、安装Fail2ban、系统更新30分钟
本周完成Nginx安全头、内核参数、监控告警1~2小时

IDC.Net的香港服务器交付时提供免费一次性安全加固服务,包含关闭危险端口和SSH密钥配置,是快速完成服务器安全基线配置的捷径。

THE END