Iptables和Firewalld都是Linux系统中的防火墙工具,它们都可以进行网络访问控制,保护系统安全。然而,随着时间的推移,Iptables逐渐取代了Firewalld成为了主流的选择,原因主要有以下几点:
- Iptables更灵活:Iptables提供了更多的选项和更高的自定义程度。用户可以根据自己的需要,对每一个数据包的处理进行详细的规定。
- Iptables性能更高:相比于Firewalld,Iptables在处理大量网络流量时,可以提供更高的性能和更低的延迟。
- Iptables兼容性更好:Iptables可以在几乎所有的Linux发行版上运行,而Firewalld只能在特定的发行版上运行。
关于它们的历史,Iptables是在2001年左右由Netfilter项目开发的,它是基于早期的ipchains和ipfwadm工具的改进版本。而Firewalld则是后来出现的,它是在2011年左右由Red Hat公司开发的,目的是为了替代Iptables。然而,由于上述的一些原因,Firewalld并没有完全取代Iptables,反而是被Iptables逐渐超越。
虽然Firewalld在某些方面可能更加易用,但是由于Iptables的灵活性、性能和兼容性更好,所以现在基本上都用Iptables,而不用linux自带的Firewalld了。
一些使用的实例:
以下是使用iptables的一些例子:
- 允许192.168.1.100访问本机tcp 11500:
iptables -A INPUT -p tcp --dport 11500 -s 192.168.1.100 -j ACCEPT
- 允许10.10.0.0/16的网段访问本机的3306:
iptables -A INPUT -p tcp --dport 3306 -s 10.10.0.0/16 -j ACCEPT
- 允许任意机器ping本机:
iptables -A INPUT -p icmp --icmp-type echo-request -j ACCEPT
- 允许192.168.100.1访问本机UDP范围为30000-40000的端口:
iptables -A INPUT -p udp --dport 30000:40000 -s 192.168.100.1 -j ACCEPT
以上命令都是将新的规则添加到INPUT链的末尾,-A表示添加,-p指定协议,--dport指定目标端口,-s指定源IP地址,-j ACCEPT表示接受这个包。
需要注意的是,这些命令只是临时的,重启后会失效。如果想让这些规则永久生效,就需要保存iptables的配置。这可以通过执行service iptables save(CentOS 6)或iptables-save > /etc/sysconfig/iptables(CentOS 7)来完成。
要查看iptables的规则,可以使用以下命令:
iptables -L -n --line-numbers
这个命令会列出所有的iptables规则,并显示规则在链中的位置编号。
如果你想删除某条规则,你需要知道这条规则在哪个链中以及它的位置编号。例如,如果你想删除INPUT链中的第1条规则,你可以使用以下命令:
iptables -D INPUT 1
在这个命令中,-D表示删除,INPUT是链的名称,1是规则的位置编号。
这里要注意了哦,每删除一条规则,其后的规则的位置编号都会向前移动一位。所以,如果想删除多条规则,咱们最好从编号最大的规则开始删除,这样就不会影响到其他规则的编号。
当使用iptables命令创建或更新规则时,这些规则会立即生效,无需要刷新或重启。但是,这些规则只是临时的,如果系统重启,这些规则会丢失。如果你想让这些规则永久生效,你需要保存iptables的配置。
在CentOS 6中,你可以使用以下命令保存配置:
service iptables save
在CentOS 7和其他使用systemd的系统中,iptables服务可能没有提供自动保存的功能。在这种情况下,你可以手动保存配置,然后在系统启动时加载这个配置。以下是保存和加载配置的命令:
iptables-save > /etc/sysconfig/iptables
iptables-restore < /etc/sysconfig/iptables
你可以将加载配置的命令添加到系统启动脚本中,这样每次系统启动时都会自动加载iptables的配置。
对于iptables的默认行为,其实是可以自定义的。默认的策略可以是接受(ACCEPT),也可以是拒绝(DROP)或者拒绝并发送错误消息(REJECT)。这取决于你如何设置你的iptables的默认策略。
如果你没有明确设置默认策略,那么iptables的默认行为通常是接受所有的包。这意味着,除非你明确地设置了一个规则来拒绝某个包,否则这个包会被接受。
这个和我们大部分的逻辑是相悖的,咱们必须改成使得所有没有明确允许的包都被拒绝,那就是设置默认策略为DROP。下面是设置INPUT链默认策略为DROP的命令:
iptables -P INPUT DROP
在这个命令中,-P表示设置默认策略,INPUT是链的名称,DROP是默认策略。
这个命令会立即生效,并且会影响到所有的包,包括已经建立的连接。所以,在执行这个命令之前,你应该确保你已经设置了所有必要的规则,以允许你的重要的网络连接,输入之前就先检查一下必要的连接是否已经被允许,特别是云主机,你用秘钥文件登录ssh的,如果之前没有添加的话,你就惨咯,centos配置ssh秘钥文件登录可以参考这个
阅读更多:Iptables用法 centos配置ssh使用秘钥文件登录