CentOS 7 如何关闭不必要端口防止暴力破解攻击

文章导读
关闭不必要端口是减少服务器攻击面的基础操作,但仅靠关闭端口无法完全防止暴力破解。CentOS 7 默认使用 firewalld 管理防火墙,建议结合 SSH 密钥认证与 fail2ban 工具构建纵深防御体系。
📋 目录
  1. A 防火墙端口管理
  2. B SSH 安全加固实践
  3. C 安装配置 fail2ban 防止暴力破解
  4. D 验证与紧急恢复
  5. E 常见风险与注意事项
A A

关闭不必要端口是减少服务器攻击面的基础操作,但仅靠关闭端口无法完全防止暴力破解。CentOS 7 默认使用 firewalld 管理防火墙,建议结合 SSH 密钥认证与 fail2ban 工具构建纵深防御体系。

核心建议:不要盲目关闭所有端口,应先识别业务必需端口。对于必须开放的 SSH 端口,务必配置密钥登录并部署防爆破工具。操作前请确保拥有控制台(VNC/物理)访问权限,以防规则错误导致失联。

  • 先判断:使用 ss 或 netstat 确认当前开放端口及对应服务
  • 优先做:利用 firewalld 移除多余服务,配置 SSH 密钥登录
  • 再验证:从外部测试端口可达性,确保业务不受影响且管理通道畅通
  • 留后路:保留控制台访问权限,以便紧急恢复防火墙规则

防火墙端口管理

操作前请确保你有服务器的控制台访问权限(VNC 或物理机),以防防火墙规则错误导致 SSH 断开无法连接。

1. 确认当前开放情况

运行以下命令查看防火墙放行的服务和端口:

firewall-cmd `--list-all`

同时检查系统层面实际监听的端口,确认是否有防火墙未管控的监听:

ss -tulpn | grep LISTEN

2. 移除多余策略

使用 firewall-cmd 移除不需要的服务或端口。注意加上 `--permanent` 参数否则重启后失效:

firewall-cmd `--permanent` `--remove-service`=服务名
firewall-cmd `--permanent` `--remove-port`=端口号/协议

示例:关闭 http 服务端口和 8080 端口

firewall-cmd `--permanent` `--remove-service`=http
firewall-cmd `--permanent` `--remove-port`=8080/tcp

3. 重载配置

CentOS 7 如何关闭不必要端口防止暴力破解攻击

修改永久配置后必须重载才能生效:

firewall-cmd `--reload`

SSH 安全加固实践

关闭端口只能减少扫描面,无法防止针对开放端口(如 SSH 22)的暴力破解。建议禁用密码登录,改用密钥认证。

1. 生成密钥对(本地执行)

ssh-keygen -t rsa -b 4096

2. 上传公钥至服务器

ssh-copy-id -i ~/.ssh/id_rsa.pub root@你的服务器 IP

3. 修改 SSH 配置

编辑 /etc/ssh/sshd_config,确保以下配置项正确:

PubkeyAuthentication yes
PasswordAuthentication no
PermitRootLogin prohibit-password

4. 重启 SSH 服务

注意:在关闭密码登录前,务必新开一个终端窗口测试密钥登录是否成功,切勿直接关闭当前会话。

systemctl restart sshd

安装配置 fail2ban 防止暴力破解

对于无法关闭的管理端口,可使用 fail2ban 监控日志并自动封禁多次尝试失败的 IP。

1. 安装 EPEL 源及 fail2ban

CentOS 7 如何关闭不必要端口防止暴力破解攻击
yum install epel-release -y
yum install fail2ban -y

2. 配置 jail.local

复制默认配置并编辑:

cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
vi /etc/fail2ban/jail.local

确保 [sshd] 部分启用:

[sshd]
enabled = true
port = ssh
filter = sshd
logpath = /var/log/secure
maxretry = 3
bantime = 3600

3. 启动服务

systemctl start fail2ban
systemctl enable fail2ban

4. 查看状态

fail2ban-client status sshd

验证与紧急恢复

1. 连通性验证

配置完成后,不要立即退出当前 SSH 会话,新开一个终端窗口进行测试。

本地验证:firewall-cmd `--list-all` 确认多余端口已消失。

CentOS 7 如何关闭不必要端口防止暴力破解攻击

外部验证:从另一台机器使用 telnet 或 nmap 测试端口连通性。例如测试 80 端口是否已关闭:

telnet 你的服务器 IP 80

如果显示 Connection refused 或超时,说明端口已关闭或不可达。同时测试 SSH 端口确保还能连接。

2. 紧急恢复预案

如果防火墙规则错误导致无法连接 SSH,请按以下步骤恢复:

  • 方案 A(推荐):通过云厂商控制台或物理机 VNC 登录服务器。
  • 方案 B(命令行):如果还能通过控制台访问,执行以下命令临时关闭防火墙或重置规则:
# 临时关闭防火墙(测试用)
systemctl stop firewalld

# 或重置防火墙规则为默认
firewall-cmd `--panic-off`
firewall-cmd `--reload`

恢复连接后,重新审查防火墙规则,避免再次发生。

常见风险与注意事项

1. 把自己锁在外面:修改防火墙规则前,务必确保 SSH 端口在允许列表中,或者拥有控制台救援权限。建议先在测试环境验证规则。

2. 忘记重载:使用 `--permanent` 参数修改后,如果不执行 reload,当前运行配置不会更新,可能导致你以为改了但实际没生效,或者重启后突然生效导致断连。

3. 服务与端口混淆:firewalld 中 service 和 port 是两种概念。移除 service 会自动移除该服务定义的所有端口,但自定义端口需用 port 参数管理。混用可能导致清理不干净。

4. 忽略 IPv6:默认配置可能同时影响 IPv4 和 IPv6,如果业务只用 IPv4,建议确认 IPv6 策略是否干扰,或在内核层面禁用 IPv6 以减少复杂度。