在运维中,了解和掌握 iptables 和 firewalld 的使用是非常重要的,因为它们是 Linux 系统中管理防火墙规则的两种主要工具。下面详细解释如何在运维中使用这两种工具。
iptables
iptables 是 Linux 系统中最基本和直接的防火墙管理工具,它直接操作 Linux 内核中的 netfilter 模块,用于设置和管理防火墙规则、网络地址转换(NAT)和数据包过滤。iptables 使用的规则基于表(table)、链(chain)和规则(rule)的概念来管理网络数据包的流向和处理。
主要特点和用法
-
基本概念:
- 表(table):iptables 通过不同的表来组织规则,如 filter 表(默认表,用于过滤数据包)、nat 表(用于网络地址转换)、mangle 表(用于特殊修改)等。
- 链(chain):规则按照链的顺序逐一检查数据包,包括输入链(INPUT)、输出链(OUTPUT)和转发链(FORWARD)等。
- 规则(rule):定义具体的操作,如允许、拒绝或转发特定类型的数据包。
-
常见应用场景:
-
常用命令:
iptables 是 Linux 系统中非常强大和灵活的防火墙管理工具,可以通过设置规则来控制网络数据包的流向、转发和过滤。以下是一些 iptables 的常用操作和命令查看当前规则:
- 查看所有规则:
iptables -L
- 查看指定表的规则(如 filter 表):
iptables -L -t filter
- 查看详细的规则信息:
iptables -S
添加规则:
- 添加到指定链(如 INPUT、OUTPUT、FORWARD):
iptables -A <chain> <rule>
- 示例:允许从指定 IP 访问 SSH 服务:
iptables -A INPUT -s <IP_address> -p tcp --dport 22 -j ACCEPT
- 示例:允许从指定 IP 访问 SSH 服务:
删除规则:
- 删除指定链上的规则:
iptables -D <chain> <rule>
- 示例:删除指定 IP 访问 SSH 的规则:
iptables -D INPUT -s <IP_address> -p tcp --dport 22 -j ACCEPT
- 示例:删除指定 IP 访问 SSH 的规则:
插入规则:
- 在指定位置插入规则到链上:
iptables -I <chain> <rule_number> <rule>
- 示例:在 INPUT 链上第 2 条规则之前插入允许 ICMP 数据包的规则:
iptables -I INPUT 2 -p icmp -j ACCEPT
- 示例:在 INPUT 链上第 2 条规则之前插入允许 ICMP 数据包的规则:
修改规则:
- 修改已存在规则的参数或动作:首先删除旧规则,然后添加新规则。
- 查看所有规则:
规则设置
-
允许或拒绝数据包:
- 允许特定 IP 访问某端口的服务:
iptables -A INPUT -s <IP_address> -p tcp --dport <port_number> -j ACCEPT
- 拒绝特定 IP 访问某端口的服务:
iptables -A INPUT -s <IP_address> -p tcp --dport <port_number> -j DROP
- 允许特定 IP 访问某端口的服务:
-
网络地址转换(NAT):
- 设置端口转发:
iptables -t nat -A PREROUTING -p tcp --dport <external_port> -j DNAT --to-destination <internal_IP>:<internal_port>
- 添加 SNAT 规则:
iptables -t nat -A POSTROUTING -o <interface> -j SNAT --to-source <source_IP>
- 设置端口转发:
保存和恢复规则
-
保存规则:
- 保存当前规则到文件(通常是
/etc/sysconfig/iptables
):iptables-save > /etc/sysconfig/iptables
- 保存当前规则到文件(通常是
-
恢复规则:
- 从文件加载规则:
iptables-restore < /etc/sysconfig/iptables
- 从文件加载规则:
其他常用命令
- 清空规则:清除所有规则和计数器,重置防火墙:
iptables -F
- 禁用或启用特定链:
iptables -P <chain> ACCEPT
或iptables -P <chain> DROP
注意事项
- 修改 iptables 规则可能会导致网络断开或无法访问,谨慎操作。
- 始终确保规则设置符合安全策略和需求,避免误操作导致安全风险。
使用这些命令和操作,可以对 iptables 进行基本的配置和管理,实现网络安全策略的控制和管理。
firewalld
firewalld 是建立在 iptables 之上的动态管理工具,提供了更高级别的抽象和动态管理防火墙规则的能力。它使用了“区域”(zone)和“服务”(service)的概念来简化配置,支持在运行时动态添加、删除和更新规则,适用于桌面系统、多用户环境和云环境等需要灵活管理的场景。
主要特点和用法
-
基本概念:
-
常见应用场景:
-
常用命令:
Firewalld 是一个动态管理防火墙规则的工具,相比于 iptables,它提供了更高级别的抽象和动态管理能力。以下是一些 firewalld 的常用操作和命令查看防火墙状态:
- 查看当前防火墙状态:
sudo firewall-cmd --state
查看防火墙规则:
- 查看所有活动区域的规则:
sudo firewall-cmd --list-all
- 查看指定区域(如 public)的规则:
sudo firewall-cmd --zone=public --list-all
查询支持的服务和端口:
- 查询可用的服务:
sudo firewall-cmd --get-services
- 查询已打开的端口:
sudo firewall-cmd --list-ports
- 查看当前防火墙状态:
配置区域和服务
-
设置默认区域:
- 设置默认区域为 public:
sudo firewall-cmd --set-default-zone=public
- 设置默认区域为 public:
-
添加和删除服务:
- 添加服务到指定区域(如 public):
sudo firewall-cmd --zone=public --add-service=<service>
- 删除服务:
sudo firewall-cmd --zone=public --remove-service=<service>
- 添加服务到指定区域(如 public):
-
添加和删除端口:
- 添加端口到指定区域(如 public):
sudo firewall-cmd --zone=public --add-port=<port>/tcp
- 删除端口:
sudo firewall-cmd --zone=public --remove-port=<port>/tcp
- 添加端口到指定区域(如 public):
运行时配置和永久配置
-
运行时生效:
- 添加服务并立即生效:
sudo firewall-cmd --zone=public --add-service=<service> --permanent
- 添加端口并立即生效:
sudo firewall-cmd --zone=public --add-port=<port>/tcp --permanent
- 添加服务并立即生效:
-
永久生效:
- 应用运行时配置到永久配置:
sudo firewall-cmd --runtime-to-permanent
- 应用运行时配置到永久配置:
高级设置
-
管理 rich 规则:
- 添加 rich 规则:
sudo firewall-cmd --zone=public --add-rich-rule='rule family="ipv4" source address="192.168.1.0/24" accept'
- 删除 rich 规则:
sudo firewall-cmd --zone=public --remove-rich-rule='rule family="ipv4" source address="192.168.1.0/24" accept'
- 添加 rich 规则:
-
防火墙重载和重启:
- 重新加载防火墙配置:
sudo firewall-cmd --reload
- 重启防火墙服务:
sudo systemctl restart firewalld
- 重新加载防火墙配置:
注意事项
- Firewalld 的动态管理和抽象层次使得配置更加简洁和灵活,特别适合需要频繁调整和管理防火墙规则的环境。
- 确保配置符合安全策略和需求,避免误操作导致安全风险。
通过这些命令和操作,可以有效地管理和配置 firewalld,确保系统和网络的安全性和稳定性。
选择适合的工具
- iptables 适合需要精细控制和高级网络功能的场景,对网络和安全专家更为熟悉和适应。
- firewalld 更适合需要动态管理和简化配置的环境,适用于桌面系统、多用户环境和云环境,能够快速调整规则以适应网络变化和安全需求。
综上所述,理解和掌握 iptables 和 firewalld 的特点、用法和适用场景,对于有效地管理和保护 Linux 系统和网络非常重要。根据具体需求和环境特点选择合适的工具,可以提高运维效率和系统安全性。