在服务器上配置防火墙规则以开放或关闭端口是保障网络安全的关键步骤。以下是基于常见防火墙工具(如 iptables、firewalld 和 ufw)的详细配置方法,以及如何检查和验证规则的完整流程。
1. 准备工作
1.1 检查当前防火墙状态
Linux 系统通常使用以下防火墙工具之一:
- iptables(传统防火墙工具)。
- firewalld(现代服务,CentOS/RHEL 7+ 默认)。
- ufw(Ubuntu/Debian 默认的简化防火墙工具)。
检查防火墙状态:
bash
复制
# 检查 firewalld 是否运行 systemctl status firewalld # 检查 ufw 是否启用 ufw status # 检查 iptables 规则 iptables -L -n -v
2. 使用 firewalld 配置防火墙规则
firewalld 是 CentOS/RHEL 7+ 和 Fedora 的默认防火墙工具,支持动态配置。
2.1 开放端口
永久开放端口(如 80 和 443):
bash
复制
firewall-cmd --permanent --add-port=80/tcp firewall-cmd --permanent --add-port=443/tcp
重新加载规则以生效:
bash
复制
firewall-cmd --reload
开放特定服务(如 HTTP 和 HTTPS):
如果服务已注册:bash
复制
firewall-cmd --permanent --add-service=http firewall-cmd --permanent --add-service=https firewall-cmd --reload
2.2 关闭端口
永久关闭端口(如 8080):
bash
复制
firewall-cmd --permanent --remove-port=8080/tcp firewall-cmd --reload
关闭服务:
bash
复制
firewall-cmd --permanent --remove-service=http firewall-cmd --reload
2.3 查看当前防火墙规则
列出所有开放的端口:
bash
复制
firewall-cmd --list-ports
列出所有开放的服务:
bash
复制
firewall-cmd --list-services
3. 使用 iptables 配置防火墙规则
iptables 是传统的 Linux 防火墙工具,功能强大但配置复杂。
3.1 开放端口
开放 TCP 80 端口:
bash
复制
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
开放 UDP 53 端口(DNS 服务):
bash
复制
iptables -A INPUT -p udp --dport 53 -j ACCEPT
保存规则:
- CentOS/RHEL 7+:
bash
复制
service iptables save
- Ubuntu/Debian(安装
iptables-persistent
):bash
复制
netfilter-persistent save
- CentOS/RHEL 7+:
3.2 关闭端口
禁止 TCP 8080 端口:
bash
复制
iptables -A INPUT -p tcp --dport 8080 -j DROP
删除规则(如误加规则):
先找到规则编号:bash
复制
iptables -L --line-numbers
然后删除:
bash
复制
iptables -D INPUT [规则编号]
3.3 查看当前规则
列出所有规则:
bash
复制
iptables -L -n -v
仅查看 INPUT 链规则:
bash
复制
iptables -L INPUT -n -v
4. 使用 ufw 配置防火墙规则
ufw(Uncomplicated Firewall)是 Ubuntu/Debian 的默认防火墙工具,操作简单。
4.1 开放端口
永久开放端口(如 22 和 3306):
bash
复制
ufw allow 22/tcp ufw allow 3306/tcp
开放服务(如 HTTP 和 HTTPS):
bash
复制
ufw allow http ufw allow https
4.2 关闭端口
永久关闭端口(如 8080):
bash
复制
ufw deny 8080
禁用服务(如 HTTP):
bash
复制
ufw deny http
4.3 查看当前规则
- 列出所有规则:
bash
复制
ufw status
5. 验证防火墙配置
5.1 检查端口开放状态
使用
netstat
检查端口监听:bash
复制
netstat -tuln | grep [端口号]
使用
ss
命令替代netstat
:bash
复制
ss -tuln | grep [端口号]
5.2 外部测试端口开放
本地测试:
bash
复制
telnet 127.0.0.1 [端口号]
外部测试(如从另一台服务器):
bash
复制
telnet [服务器IP] [端口号]
使用
nmap
扫描端口:bash
复制
nmap [服务器IP] -p [端口号]
6. 防火墙配置的安全建议
默认拒绝所有入站流量:
- 配置默认策略为拒绝:
bash
复制
# firewalld firewall-cmd --set-default-zone=drop # iptables iptables -P INPUT DROP # ufw ufw default deny incoming
- 配置默认策略为拒绝:
仅开放必要端口:
- 如 Web 服务仅开放
80
和443
,SSH 仅开放22
。
- 如 Web 服务仅开放
限制 SSH 访问:
- 仅允许特定 IP 地址访问:
bash
复制
# firewalld firewall-cmd --permanent --add-rich-rule="rule family=ipv4 source address=192.168.1.100 port port=22 protocol=tcp accept" # iptables iptables -A INPUT -p tcp -s 192.168.1.100 --dport 22 -j ACCEPT # ufw ufw allow from 192.168.1.100 to any port 22
- 仅允许特定 IP 地址访问:
启用日志记录:
- 便于排查问题或检测攻击流量:
bash
复制
iptables -A INPUT -j LOG --log-prefix "iptables-log: "
- 便于排查问题或检测攻击流量:
定期检查规则:
- 确保规则符合当前需求,删除不必要的开放端口。
总结
配置防火墙规则以开放或关闭端口的关键步骤包括:
- 确认防火墙工具(
firewalld
、iptables
或ufw
)。 - 根据需求开放或关闭端口。
- 验证防火墙规则是否生效。
- 定期检查和优化防火墙配置。
通过合理的防火墙配置,可以有效提高服务器的安全性,减少攻击风险。