
配置服务器防火墙规则以开放或关闭端口是确保服务器安全、控制流量的重要步骤。以下是基于不同防火墙工具(如 UFW
、Firewalld
和 Iptables
)的详细配置方法,适用于不同的 Linux 发行版。
1. 防火墙工具简介
在 Linux 系统中,以下是常见的防火墙工具:
- UFW(Uncomplicated Firewall):适用于 Ubuntu/Debian,操作简单,适合新手。
- Firewalld:默认用于 CentOS/RHEL 系统,支持动态防火墙规则。
- Iptables:低级防火墙工具,功能强大,但配置复杂。
2. 使用 UFW 配置防火墙规则
UFW 是 Debian/Ubuntu 系统的默认防火墙工具,配置简单直观。
2.1 启用 UFW
默认情况下,UFW 可能未启用:
bash
sudo ufw enable
2.2 开放端口
单个端口
开放 HTTP 服务(端口 80):
bash
sudo ufw allow 80/tcp
多个端口
同时开放 HTTP 和 HTTPS 服务:
bash
sudo ufw allow 80,443/tcp
端口范围
开放 3000 到 3100 的端口范围:
bash
sudo ufw allow 3000:3100/tcp
允许特定 IP 访问指定端口
只允许 IP 192.168.1.100
访问 SSH(端口 22):
bash
sudo ufw allow from 192.168.1.100 to any port 22
2.3 关闭端口
关闭 SSH 服务(端口 22):
bash
sudo ufw deny 22/tcp
2.4 查看防火墙状态和规则
查看所有规则和状态:
bash
sudo ufw status
2.5 删除规则
删除某条规则:
bash
sudo ufw delete allow 80/tcp
3. 使用 Firewalld 配置防火墙规则
Firewalld 是 CentOS/RHEL 的默认防火墙工具,支持动态规则管理。
3.1 启用 Firewalld
安装并启动 Firewalld:
bash
sudo yum install firewalld -y
sudo systemctl start firewalld
sudo systemctl enable firewalld
3.2 开放端口
单个端口
开放 HTTP 服务(端口 80):
bash
sudo firewall-cmd --permanent --add-port=80/tcp
端口范围
开放 3000 到 3100 的端口范围:
bash
sudo firewall-cmd --permanent --add-port=3000-3100/tcp
允许特定 IP 访问指定端口
只允许 IP 192.168.1.100
访问 SSH(端口 22):
bash
sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.1.100" port protocol="tcp" port="22" accept'
3.3 关闭端口
关闭 HTTP 服务(端口 80):
bash
sudo firewall-cmd --permanent --remove-port=80/tcp
3.4 查看防火墙状态和规则
查看所有开放端口
bash
sudo firewall-cmd --list-ports
查看完整规则
bash
sudo firewall-cmd --list-all
3.5 应用更改
每次修改规则后,重新加载防火墙:
bash
sudo firewall-cmd --reload
4. 使用 Iptables 配置防火墙规则
Iptables 是 Linux 系统中功能强大的防火墙工具,适用于所有发行版。
4.1 检查并启用 Iptables
启动并启用 Iptables:
bash
sudo systemctl start iptables
sudo systemctl enable iptables
4.2 开放端口
单个端口
开放 HTTP 服务(端口 80):
bash
sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT
端口范围
开放 3000 到 3100 的端口范围:
bash
sudo iptables -A INPUT -p tcp --dport 3000:3100 -j ACCEPT
允许特定 IP 访问指定端口
只允许 IP 192.168.1.100
访问 SSH(端口 22):
bash
sudo iptables -A INPUT -p tcp -s 192.168.1.100 --dport 22 -j ACCEPT
4.3 关闭端口
单个端口
关闭 HTTP 服务(端口 80):
bash
sudo iptables -A INPUT -p tcp --dport 80 -j DROP
4.4 查看防火墙规则
列出所有规则:
bash
sudo iptables -L -n -v
4.5 保存规则
每次修改后,保存规则以防重启失效:
bash
sudo service iptables save
5. 防火墙配置最佳实践
-
默认策略设置:
-
将默认策略设置为拒绝所有流量,然后仅开放必要端口。
-
在 UFW 中: bash
sudo ufw default deny incoming sudo ufw default allow outgoing
-
-
限制 SSH 访问:
-
修改 SSH 默认端口并限制来源 IP: bash
sudo ufw allow from 192.168.1.100 to any port 2222
-
-
禁用 ICMP(Ping)请求:
-
防止恶意探测: bash
sudo ufw deny proto icmp
-
-
启用日志:
-
在 UFW 中启用日志记录: bash
sudo ufw logging on
-
-
定期审查规则:
- 定期检查防火墙规则,删除不必要的端口开放。
6. 总结
- 使用 UFW:适合 Ubuntu/Debian 用户,操作简单直观。
- 使用 Firewalld:适合 CentOS/RHEL 用户,动态管理规则更灵活。
- 使用 Iptables:适合高级用户,需要更细粒度的防火墙规则配置。
通过合理配置防火墙规则,您可以有效地限制访问、保护服务器,减少被攻击的风险。