Linux 防火墙(iptables/firewalld)配置:端口放行、IP 黑白名单与规则保存
·
Linux 防火墙配置指南:iptables 与 firewalld
一、工具概述
-
iptables
传统 Linux 防火墙工具,直接操作内核级 netfilter 框架,适用于所有主流发行版。- 优势:灵活性高,功能全面
- 劣势:规则语法较复杂
-
firewalld
CentOS/RHEL 7+ 和 Fedora 的默认动态防火墙管理器,基于 iptables 但提供更友好的抽象层。- 优势:支持运行时动态更新,无需重启服务
- 特性:使用区域(zone)和服务(service)概念管理规则
二、端口放行配置
iptables 方法
# 放行 TCP 80 端口(HTTP)
$ sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT
# 放行 UDP 53 端口(DNS)
$ sudo iptables -A INPUT -p udp --dport 53 -j ACCEPT
firewalld 方法
# 永久放行 HTTP 服务(自动包含端口 80)
$ sudo firewall-cmd --permanent --add-service=http
# 直接放行自定义端口(如 TCP 8080)
$ sudo firewall-cmd --permanent --add-port=8080/tcp
# 重载配置生效
$ sudo firewall-cmd --reload
三、IP 黑白名单配置
iptables 黑名单(拒绝特定 IP)
# 拒绝 192.168.1.100 的所有访问
$ sudo iptables -A INPUT -s 192.168.1.100 -j DROP
# 拒绝某网段(如 10.0.0.0/24)
$ sudo iptables -A INPUT -s 10.0.0.0/24 -j REJECT
iptables 白名单(仅允许特定 IP)
# 先拒绝所有流量
$ sudo iptables -P INPUT DROP
# 仅允许 192.168.1.50 访问 SSH(端口 22)
$ sudo iptables -A INPUT -p tcp -s 192.168.1.50 --dport 22 -j ACCEPT
firewalld 黑名单
# 添加 IP 到黑名单(rich rule 语法)
$ sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="203.0.113.5" reject'
# 重载生效
$ sudo firewall-cmd --reload
firewalld 白名单
# 创建新区域 "trusted" 并添加白名单 IP
$ sudo firewall-cmd --permanent --new-zone=trusted
$ sudo firewall-cmd --permanent --zone=trusted --add-source=192.168.1.50
# 将默认区域设为 "public" 并限制访问
$ sudo firewall-cmd --set-default-zone=public
四、规则保存与持久化
iptables 规则保存
# 保存当前规则到文件(Debian/Ubuntu)
$ sudo iptables-save > /etc/iptables/rules.v4
# CentOS/RHEL 7 以下版本
$ sudo service iptables save
# 开机自动加载:安装 iptables-persistent
$ sudo apt install iptables-persistent # Debian/Ubuntu
firewalld 规则持久化
# 所有 --permanent 参数的操作自动写入配置文件
$ sudo firewall-cmd --runtime-to-permanent # 将临时规则转为永久
# 配置文件位置:/etc/firewalld/zones/
五、关键注意事项
-
操作顺序
iptables 规则按顺序匹配,优先级:DROP/REJECT规则应放在ACCEPT之后,避免封锁自己。 -
SSH 安全
修改防火墙前,确保放行当前 SSH 连接 IP:$ sudo iptables -A INPUT -p tcp -s $(who | awk '{print $5}') --dport 22 -j ACCEPT -
规则检查
- iptables:
sudo iptables -L -v -n - firewalld:
sudo firewall-cmd --list-all
- iptables:
-
故障恢复
- 清空错误规则:
sudo iptables -F - firewalld 重置:
sudo firewall-cmd --reload
- 清空错误规则:
提示:生产环境建议先在测试机验证规则,避免触发服务器断连。
更多推荐
所有评论(0)