09 Iptables的黑白名单机制

所谓的黑白名单机制并不是iptables有功能提供了黑白名单直接可以使用,而是用户根据链的默认策略不同,自定义规则来实现的

比如,当INPUT链默认策略为ACCEPT,这代表着所有的报文如果没有其他规则匹配过滤,那么默认将会被iptables放行接受,如果我们此时定义几条不允许满足某些匹配条件的报文进入我们的主机,那么这些满足某些匹配条件的报文就像是被我们拉入黑名单了一样;同样的,如果INPUT链默认策略为DROP,我们自定义了一些满足某匹配条件才放行的规则,此时这些满足某些匹配条件的报文就相当于加入了特殊照顾的白名单;

我们现在来看一下比较容易出问题的白名单机制,要实现白名单,需要拒绝所有报文的前提下来定义被允许的规则;按照我们的想法,应该先定义一条规则保证ssh服务相关的报文不会被拒绝或丢弃,所有得添加以下规则

iptables -I INPUT -p tcp --dport 22 -j ACCEPT

很好,在保证不会断开远程连接后,使用 iptables -P INPUT DROP 来修改默认策略为DROP,此时我们便完成了简单的白名单,即除了ssh远程的22端口的报文可以被接受,其余的全部被丢弃了

很简单,但是却存在巨大的坑,有没有想过我们误操作了 iptables -F 命令,可能是我们不小心,但这却会把我们的白名单规则全部清掉,又因为此时的默认策略是DROP,恭喜你,你现在无法通过远程控制主机了,并且所有的端口都无法连通

所以在使用白名单的时候,我们一般不采取默认策略是DROP,然后再放行部分的报文;而是采用在默认策略是ACEEPT的情况下,在规则的末尾加一条拒绝所有报文的规则,这样一来,能匹配被接受的在之前的规则便被接受了,不想被接受的便会被最后一条规则匹配后丢弃或拒绝;并且我们也不用担心误操作清掉所有规则导致无法远程主机的情况了,具体规则便是在默认策略为ACCEPT前提下,在最后加入拒绝所有的报文规则

iptables -A INPUT -j REJECT【Iptables】iptables目录【Iptables】10 Iptables自定义链