先说loopback回环的大致个人理解:
1、lo的主要作用是基于本地访问本地的数据包会经过lo这张网卡。
2、比如ping 127.0.0.1时,你在eth0抓不到,只能在lo这张网卡捕获。
再来看下简单的iptables的几个链的规则:
PREROUTING
:在做出路由决策之前,数据包将进入此链。INPUT
:数据包将在本地交付。它与打开套接字的进程没有任何关系; 本地交付由“本地交付”路由表控制:ip route show table local
。FORWARD
:所有已路由但不用于本地传递的数据包将遍历此链。OUTPUT
:从机器本身发送的数据包将访问此链。POSTROUTING
:路由决定已经做出。数据包在将它们交给硬件之前进入该链。
那么下面来看下为什么需要再iptables增加lo的访问:
1、如果我们在iptables设置了防火墙,一般防火墙会放在默认规则里面:iptables -P INPUT DROP,注意这里的-P是默认规则的意思,顺序在最后,且链表为filter。
2、那么如果要能在本机可以ping通本机,那么需要将lo的访问规则打开:iptables -A INPUT -i lo -j ACCEPT
3、通过上面可以看出,iptables做防火墙的特性,不需要指定非默认规则,默认规则对于iptables来说是最后才执行,但凡有一个匹配到就不往下执行,所以此时ping本机可以通。
4、在网上很多只是增加了这两条规则:
iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT
而没有真正说明为什么要这样加,其实这样加主要还是因为限制的防火墙规则后这两台才生效。
5、很多情况是在转发上会用到,其实如果不增加防火墙规则时,这一点的意义不太大。
6、所以,只要是本机进程内相互访问的,都会去到lo这张网卡上,所以在外部IP时对于iptables选择的是eth0这样的网卡,要捕获本机时是lo这个网卡。