iptables 黑白名单机制
Write by lyc at 2020-8-31
iptables的黑白名单机制
1.链的默认 policy
- 当链的默认策略设置为
ACCEPT
时:如果对应的链中没有配置任何规则,就表示接受所有的报文,如果对应的链中存在规则,但是这些规则没有匹配到报文,报文还是会被接受。 - 当链的默认策略设置为
DROP
时:如果对应的链中没有配置任何规则,就表示拒绝所有报文,如果对应的链中存在规则,但是这些规则没有匹配到报文,报文还是会被拒绝。
1.1 黑名单机制 policy=ACCEPT
当链的默认策略设置为 ACCEPT
时,按照道理来说,我们在链中配置规则时,对应的动作应该设置为 DROP
或者 REJECT
,因为默认策略已经为 ACCEPT
了,如果我们在设置规则时,对应动作仍然为 ACCEPT
,那么所有报文都会被放行了,因为不管报文是否被规则匹配到都会被ACCEPT,所以就失去了访问控制的意义。
当链的默认策略为 ACCEPT
时,链中的规则对应的动作应该为 DROP
或者 REJECT
,表示只有匹配到规则的报文才会被拒绝,没有被规则匹配到的报文都会被默认接受,这就是”黑名单”机制。
1.2 白名单机制 policy=DROP (不推荐)
当链的默认策略为 DROP
时,链中的规则对应的动作应该为 ACCEPT
,表示只有匹配到规则的报文才会被放行,没有被规则匹配到的报文都会被默认拒绝,这就是”白名单”机制。
1.3 黑白名单机制的特征:
白名单机制似乎更加安全一些,黑名单机制似乎更加灵活一些:
- 黑名单机制,我们就要把所有人都当成好人,只拒绝坏人。
- 白名单机制,我们就要把所有人都当做坏人,只放行好人。
2.policy=DROP 白名单机制存在的问题
问题:
如果我们把默认的 policy
设置为 DROP
:
- 在对应的链中没有设置任何规则时,这样使用默认策略为
DROP
是非常不明智的,因为管理员也会把自己拒之门外。 - 即使对应的链中存在放行规则,当我们不小心使用
iptables -F
清空规则时,放行规则被删除,则所有数据包又都无法进入,这个时候就相当于给管理员挖了个坑
解决:使用 policy=ACCEPT 的白名单机制
我们如果想要使用”白名单”的机制,最好将链的默认策略保持为 ACCEPT
,然后将”拒绝所有请求”这条规则放在链的尾部,将”放行规则”放在前面,这样做,既能实现”白名单”机制,又能保证在规则被清空时,管理员还有机会连接到主机,示例如下:
1 | # chain的默认规则ACCEPT |