Linux防火墙对比【iptables、firewalld、ufw】
iptables、firewalld和ufw都是Linux系统中用于防火墙配置的工具,但它们在功能、操作复杂度和适用场景上有所不同。以下以表格的形式列出一些相关的特性:
| 防火墙 | iptables | firewalld | ufw |
|---|---|---|---|
| 介绍 | iptables则直接操作Linux内核中的netfilter包过滤框架来实现数据包的过滤和处理。iptables提供了更为底层和灵活的防火墙配置能力,但相应的,其操作也更复杂。 | firewalld并不直接使用iptables命令或内核模块来管理防火墙规则。相反,firewalld通过调用libnftables库来使用nftables作为其后端来配置防火墙规则。尽管firewalld在底层使用nftables,但它仍然提供了与iptables规则集的兼容性 | ufw实际上是iptables的前端应用,其设计目的是为了简化iptables的使用。当你使用ufw添加或删除规则时,ufw会在底层调用iptables来处理实际的规则配置。 |
| 默认规则 | 无,默认策略可以是允许(ACCEPT)或拒绝(DROP/REJECT),具体取决于管理员如何设置它。 | 默认情况下,firewalld通常配置为拒绝未明确允许的流量。 | ufw的默认规则通常是禁止所有入站连接,而允许所有出站连接。这意味着,除非管理员明确指定允许某个入站连接,否则该连接将被拒绝。 |
| 应用于 | 大多数的linux系统 | 麒麟服务器操作系统、centos/redhat类的操作系统 | 麒麟桌面操作系统、ubuntu/debian类系统 |
| 放行端口 | sudo iptables -A INPUT -p tcp --dport <port> -j ACCEPT |
sudo firewall-cmd --zone=public --add-port=<port>/tcp --permanent |
sudo ufw allow <port>/tcp |
| 禁止端口 | sudo iptables -A INPUT -p tcp --dport <port> -j DROP |
sudo firewall-cmd --zone=public --remove-port=<port>/tcp --permanent |
sudo ufw deny <port>/tcp |
| 允许IP地址 | sudo iptables -A INPUT -p tcp -s <ip_address> --dport <port> -j ACCEPT |
firewalld不直接支持基于IP地址的允许或禁止规则。你通常需要在区域设置中进行配置,或者调整服务的允许地址。 | sudo ufw allow from <ip_address> |
| 禁止IP地址 | sudo iptables -A INPUT -p tcp -s <ip_address> -j DROP |
firewalld不直接支持基于IP地址的禁止规则。你可能需要使用其他工具或方法来实现。 | sudo ufw deny from <ip_address> |
| 保存配置 | sudo iptables-save > /etc/iptables/rules.v4,sudo iptables-restore < /etc/iptables/rules.v4 |
firewalld的配置是自动保存的,并且在重启后会保留。你不需要手动保存配置。 | ufw的配置是自动保存的,并且在重启后会保留。你不需要手动保存配置。 |
| 删除清空配置 | sudo iptables -F |
firewalld没有直接删除特定规则或清空所有规则的命令。但是,你可以通过修改区域设置或服务定义来移除规则,或者重新加载默认配置。 | sudo ufw reset |
常见配置命令:
iptables:
- 清除所有iptables规则:
iptables -F - 允许SSH入站连接:
iptables -A INPUT -p tcp --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT - 设置默认策略:
iptables -P INPUT ACCEPT - 添加端口转发规则:
iptables -t nat -A PREROUTING -p tcp --dport <目标端口> -j DNAT --to-destination <IP地址>:<原始端口>
firewalld:
- 启动firewalld服务:
systemctl start firewalld - 开启某个端口:
firewall-cmd --permanent --zone=public --add-port=8080/tcp - 禁用某个端口:
firewall-cmd --permanent --zone=public --remove-port=8080/tcp - 设置默认策略:
firewall-cmd --permanent --add-default-policy=accept - 查看防火墙规则:
firewall-cmd --list-all
ufw:
- 关闭防火墙:
sudo ufwdisable - 开启防火墙:
sudo ufwenable - 允许特定端口:
sudo ufw allow 8080/tcp - 禁用特定端口:
sudo ufw deny 8080/tcp - 查看防火墙规则:
sudo ufwstatus以上是一些常见的配置命令,但具体的配置方式可能会因操作系统和版本的不同而有所差异。在进行配置时,建议参考官方文档或相关资料,以确保配置的正确性和安全性。