09 iptables黑名单机制
9_iptables 黑白名单机制¶
前文中一直在强调; 报文经过iptables 链时, 会匹配链中的规则, 遇到匹配的规则时,就会执行相应的动作, 如果链中的规则都没有匹配到的时候, 就使用默认规则(默认策略)
- 当链的默认策略为
ACCEPT
时 , 表示链中任意没有匹配到的报文, 都会默认接受所有报文,如果对应的链中存在规则,但是这些规则没有匹配到报文,报文还是会被接受。 - 当链的默认策略为
DROP
时 , 表示链中任意没有匹配到的报文, 都会默认丢弃所有报文,如果对应的链中存在规则,但是这些规则没有匹配到报文,报文还是会被丢弃。
所以, 当默认规则为 ACCEPT
时 ,对应链中的规则 应设为 DROP
, REJECT
; 因为如果给定的规则为ACCEPT , 其实豪无作用,还会增加链的长度, 增加匹配耗时.
可以这么理解:
- 白名单: 我们把所有人都当成坏人, 只放行好人
- 黑名单: 我们把所有人都当成好人, 只拒绝坏人
设置方式如下:
# 设置默认input 链的规则为DROP, 丢弃掉所有的报文
iptables -t filter -P INPUT DROP
但是, 使用上述方法配置是不明智的; 因为将所有的规则都设置为DROP, 所有报文都会被丢弃, 假设我们不小心执行了iptables -F
就清理掉了所有的规则, 这样会导致管理员也访问不了该端口;
建议修改为:
# iptables 白名单规则设置
iptables -t filter -I INPUT -p tcp -dport 22 -j ACCEPT
iptables -t filter -I INPUT -p tcp -dport 80 -j ACCEPT
iptables -t filter -A INPUT -j REJECT
因为链式匹配原理, 会从规则中逐步向下匹配,在匹配了前面所有的规则都没匹配上之后, 最后一行会将所有没有匹配上的规则都拒绝掉, 这样在误使用 iptables -F
的时候, 就不会影响到管理员上去操作处理了