通常遇到一些在设定防火墙规则时,经常忽略掉IP欺骗***的问题,什么是IP欺骗呢﹖首先请教您一个问题,如果图中防火墙的规则为iptables -A FORWARD -i eth0 -p all -s 192.168.1.10 -j DROP,请问***192.168.1.10主机上,能不能将***封包送到192.168.2.50这部主机上﹖

以上这个问题是肯定的,因为***只要伪造来源端IP,即可轻易的骗过防火墙,而将***封包注入192.168.2.50这部主机,因此,当我们在设计防火墙规则时,请留意下列几种特定的来源端IP

l Localhost IP

IP欺骗的***中,127.0.0.1这个IP也是常被拿来伪装的对象,我们可以在防火墙规则中加入以下的规则,以滤除这类的IP欺骗的***。

iptables -A INPUT -i ! lo -s 127.0.0.0/8 -j DROP

l Private IP

Internet IP的划分上,将IP划分成Class ABC三个区段,而在每个层级的Class中都有保留一段Private IP,如果我们从因特网上收到从Private IP区段送来的封包,皆可视为不正常的来源封包,因此,我们可以在防火墙规则中加入以下的规则,以滤除这类的IP欺骗的***。

iptables -A INPUT -p all -s 10.0.0.0/8 -j DROP

iptables -A INPUT -p all -s 172.16.0.0/12 -j DROP

iptables -A INPUT -p all -s 192.168.0.0/16 -j DROP

l MULTICAST IP

MULTICAST通常用于音讯或视讯讯号的传送,而MULTICAST封包所使用的IP网段为224.0.0.0/4,且封包传输协议一定为UDP,如果有封包来自于224.0.0.0/4区段,而其传输协议为UDP以外的协议,即可将之丢弃掉。我们可以在防火墙规则中加入以下的规则,以滤除这类IP欺骗的***。

iptables -A INPUT -p ! udp -s 224.0.0.0/4 -j DROP

IP欺骗的防御中,除了可以滤除前面所提的这些IP之外,另一种可能出现的行为也必须注意,例如,防火墙主机上有连接ABC三个网段,我们可以在A网段上伪造B网段的IP来***C网段的主机,因此,早期在Linux防火墙的设定上,我们都会加上如下的规则﹕

iptables -A FORWARD -i eth0 -s ! 192.168.0.0/24 -j DROP

也就是说,如果从eth0接口送进来的封包,其来源端IP不是来自于192.168.0.0/24网段的封包,就将该封包丢弃掉,藉此达到滤除这类IP欺骗的手法,不过,现在Linux核心有提供特别的参数来自动滤除这种不合理的来源端IP,其参数及修改方式如下﹕

for i in /proc/sys/net/ipv4/conf/*/rp_filter; do

  echo 1 > $i

done

如此一来,Linux核心就可自动滤除这类封包了。