iptables基础(续)

举报
黄生 发表于 2022/09/18 13:14:47 2022/09/18
【摘要】 只有内核打开IP包转发功能后,一个封包才可能被送到转发链(FORWARD)进行规则检查。如果没有打开转发功能,则与防火墙相连的两边网络是完全隔离的。/etc/sysctl.conf 添加 net.ipv4.ip_forward=1或/etc/sysconfig/network 添加 FORWARD_IPV4=true可以保存包转发的设置,重启后生效。当时生效可修改/proc/sys/net/...

只有内核打开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表的处理位置和流程如图:

image.png

只有新连接的第一个数据包才会遍历NAT表,而随后的数据包将根据第一个数据包的结果进行同样的转换处理。

Linux从1.1 版本的内核开始,就已经具备包过滤功能,2.0 版本的内核使用ipfwadm来操作包过滤规则,2.2 版本使用ipchains,在 2.4 版本和以上的内核中,则使用iptables,与ipchains和ipfwadm不兼容,iptables引入了包状态检测(SPI)功能。

filter表用于本机的数据包过滤,是默认的表;
nat表用于转发的数据包过滤,例如内、外网间需要网络地址转换才能访问时;
mangle用于高级路由数据包,修改数据包的TOS、TTL及给数据包作标记(MARK);
每种表又由多个链组成,链用来标明处理数据包的时间点。
看一个全览图:
image.png

还有这个处理流向图,很清楚:
image.png
(参考 <网络信息对抗> 杜晔)

命令有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,这样自定义规则链中后续的规则不再去匹配。

image.png

参考 <Linux系统及网络管理> 何杰

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。