iptables基础(续)
只有内核打开IP包转发功能后,一个封包才可能被送到转发链(FORWARD)进行规则检查。如果没有打开转发功能,则与防火墙相连的两边网络是完全隔离的。
/etc/sysctl.conf 添加 net.ipv4.ip_forward=1
或
/etc/sysconfig/network 添加 FORWARD_IPV4=true
可以保存包转发的设置,重启后生效。
当时生效可修改/proc/sys/net/ipv4/ip_forward为“1”
或
sysctl -w net.ipv4.ip_forward=“1”
Linux内建的 IP 伪装(MASQUERADE)实际上是SNAT的一个特例,它将封包的源地址直接替换修改为封包出去的网卡的 IP 地址(使用了网卡设备名称,还很适用于其IP地址变化的情况)。语句是
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
NAT表的处理位置和流程如图:
只有新连接的第一个数据包才会遍历NAT表,而随后的数据包将根据第一个数据包的结果进行同样的转换处理。
Linux从1.1 版本的内核开始,就已经具备包过滤功能,2.0 版本的内核使用ipfwadm来操作包过滤规则,2.2 版本使用ipchains,在 2.4 版本和以上的内核中,则使用iptables,与ipchains和ipfwadm不兼容,iptables引入了包状态检测(SPI)功能。
filter表用于本机的数据包过滤,是默认的表;
nat表用于转发的数据包过滤,例如内、外网间需要网络地址转换才能访问时;
mangle用于高级路由数据包,修改数据包的TOS、TTL及给数据包作标记(MARK);
每种表又由多个链组成,链用来标明处理数据包的时间点。
看一个全览图:
还有这个处理流向图,很清楚:
(参考 <网络信息对抗> 杜晔)
命令有2个之前未说明:
-E(–rename-chain) 用于重命名自定义的链
-X(–delete-chain) 用于删除自定义的链,需要确认没有规则引用该链。
规则的处理动作,DROP是最简单的。其他的,需要补充一些信息,比如
-j REJECT --reject-with tcp-reset
当然这里可以不补充,会有一个默认信息。归纳有unreachable和prohibited这2类信息。
(PREROUTING) -j REDIRECT --to-ports 3128
还有RETURN,和编程语言里类似,是改变默认流程,结束对当前链中规则的比较,返回主规则链。
默认链中,对规则的处理动作可以是一个自定义链。
一般是在自定义规则链中,匹配到某条规则进行RETURN,这样自定义规则链中后续的规则不再去匹配。
参考 <Linux系统及网络管理> 何杰
- 点赞
- 收藏
- 关注作者
评论(0)