Linux服务器安全加固实战:SSH配置到UFW防火墙完整方案

SSH服务安全配置与端口加固

服务器安全加固的第一道防线是SSH服务。默认的SSH配置存在多项安全隐患,包括允许root直接登录、使用默认22端口、密码认证方式等。生产环境必须对这些默认配置进行修改。

修改SSH配置文件/etc/ssh/sshd_config,执行以下加固操作:

# 禁止root用户直接登录
PermitRootLogin no

# 禁止密码认证,强制使用密钥
PasswordAuthentication no
PubkeyAuthentication yes

# 修改默认端口(避免被批量扫描)
Port 22022

# 限制允许登录的用户
AllowUsers deploy admin

# 设置登录超时和最大尝试次数
LoginGraceTime 30
MaxAuthTries 3
ClientAliveInterval 300
ClientAliveCountMax 2

# 禁止空密码和X11转发
PermitEmptyPasswords no
X11Forwarding no

# 禁用不必要的认证方式
ChallengeResponseAuthentication no
GSSAPIAuthentication no

修改完成后重启SSH服务并验证配置:systemctl restart sshd。使用ss -tlnp | grep sshd确认新端口已生效。在关闭当前SSH会话前,先用新端口测试连接是否正常。

fail2ban暴力破解防护部署

fail2ban通过监控日志文件自动封禁异常登录的IP地址,是服务器安全加固中防暴力破解的核心工具。

# 安装fail2ban
apt-get update && apt-get install fail2ban -y

# 创建本地配置(不要直接修改jail.conf)
cat > /etc/fail2ban/jail.local << 'EOF'
[DEFAULT]
bantime = 3600
findtime = 600
maxretry = 3
banaction = ufw

[sshd]
enabled = true
port = 22022
filter = sshd
logpath = /var/log/auth.log
maxretry = 3
bantime = 86400
EOF

# 启动并设置开机自启
systemctl enable fail2ban
systemctl start fail2ban

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

bantime设置为86400秒(24小时),findtime窗口内超过maxretry次失败将触发封禁。banaction设置为ufw表示通过UFW防火墙规则执行封禁,比iptables方式更易管理。

UFW防火墙规则配置与端口管理

UFW(Uncomplicated Firewall)是Ubuntu默认的防火墙管理工具,底层调用iptables但提供更简洁的命令行接口。服务器安全加固中UFW的核心原则是默认拒绝、按需放行。

# 重置防火墙规则
ufw --force reset

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

# 放行业务端口
ufw allow 22022/tcp comment 'SSH'
ufw allow 80/tcp comment 'HTTP'
ufw allow 443/tcp comment 'HTTPS'

# 限制内部服务端口(仅允许内网访问)
ufw allow from 10.0.0.0/8 to any port 3306 proto tcp comment 'MySQL-Internal'
ufw allow from 10.0.0.0/8 to any port 6379 proto tcp comment 'Redis-Internal'

# 速率限制(防CC攻击)
ufw limit 22022/tcp

# 启用防火墙
ufw --force enable

# 查看规则状态
ufw status verbose

ufw limit命令对指定端口启用速率限制,每个IP在30秒内最多建立6个连接,超过则拒绝。该规则适用于SSH等容易被暴力扫描的端口。

文件系统权限加固与审计

关键系统文件的权限必须严格控制,以下是一份基线检查脚本:

#!/bin/bash
# 文件权限加固脚本

# SUID/SGID文件检查
find / -perm -4000 -type f 2>/dev/null > /tmp/suid_files.txt
find / -perm -2000 -type f 2>/dev/null > /tmp/sgid_files.txt

# 移除不必要的SUID权限
chmod u-s /usr/bin/chage
chmod u-s /usr/bin/chfn
chmod u-s /usr/bin/chsh
chmod u-s /usr/bin/wall
chmod u-s /usr/bin/write

# 关键目录权限设置
chmod 700 /root
chmod 600 /etc/ssh/sshd_config
chmod 644 /etc/passwd
chmod 640 /etc/shadow
chmod 644 /etc/group
chmod 640 /etc/gshadow

# 禁用不必要的系统账户
usermod -s /sbin/nologin sync
usermod -s /sbin/nologin shutdown
usermod -s /sbin/nologin halt

# 设置密码策略
cat > /etc/security/pwquality.conf << 'EOF'
minlen = 12
minclass = 4
maxrepeat = 3
maxsequence = 3
dcredit = -1
ucredit = -1
lcredit = -1
ocredit = -1
EOF

# 密码过期策略
sed -i 's/PASS_MAX_DAYS.*/PASS_MAX_DAYS 90/' /etc/login.defs
sed -i 's/PASS_MIN_DAYS.*/PASS_MIN_DAYS 2/' /etc/login.defs

Linux内核参数安全加固

内核参数加固通过sysctl配置生效,主要针对网络层面的安全防护:

cat > /etc/sysctl.d/99-security.conf << 'EOF'
# 禁用IP转发(非路由器场景)
net.ipv4.ip_forward = 0

# 防止SYN洪水攻击
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_max_syn_backlog = 4096
net.ipv4.tcp_synack_retries = 2

# 禁用ICMP重定向
net.ipv4.conf.all.accept_redirects = 0
net.ipv4.conf.default.accept_redirects = 0
net.ipv4.conf.all.send_redirects = 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.icmp_echo_ignore_broadcasts = 1

# 禁用时间戳(防止TCP序列号预测)
net.ipv4.tcp_timestamps = 0

# 记录可疑数据包
net.ipv4.conf.all.log_martians = 1
net.ipv4.conf.default.log_martians = 1

# 内核ASLR
kernel.randomize_va_space = 2

# 禁用core dump
kernel.core_pattern = |/bin/false
fs.suid_dumpable = 0
EOF

sysctl --system

net.ipv4.tcp_syncookies设置为1后,当SYN队列满时内核会使用syncookie技术响应连接请求,有效防御SYN洪水攻击。rp_filter开启反向路径过滤,丢弃源地址欺骗的数据包。

自动化安全扫描与巡检方案

使用Lynis进行服务器安全基线扫描,定期生成审计报告:

# 安装Lynis
apt-get install lynis -y

# 执行安全审计
lynis audit system --quick

# 查看审计结果
cat /var/log/lynis-report.dat | grep Warning
cat /var/log/lynis-report.dat | grep Suggestion

Lynis会检查超过200项安全配置,输出Warning和Suggestion两类问题。每次加固后重新运行审计,确保所有高危项已修复。对于无法修复的项,在审计报告中记录豁免原因。

服务器安全加固是一个持续过程,建议每月执行一次安全基线扫描,每周检查fail2ban封禁日志,实时关注系统审计日志中的异常行为。配合上述SSH配置、防火墙规则和内核参数加固,可以构建一套完整的Linux服务器安全防护体系。

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

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

相关推荐