一、iptables原理学习资料:
云计算底层计算
重温iptables #感谢作者,写的真细
二、概念原理总结,辅助理解
1)iptables是用户空间命令,通过netlink和内核的netfilter模块进行交互,在L3/L4操控封包。
2)PREROUTING链和OUTPUT链,可以DNAT,OUTROUTING链可以SNAT。其他链路都没NAT操作。
3)raw,mangle,nat,filter,四张表加上security五张表,一般有用途上的区别
raw表:最高优先级,一般用于连接跟踪,Connection Tracking
mangle表:一般用于修改封包,典型:设置TTL,MARK标记;
nat表,一般用于nat地址转换
filter表,一般记录过滤条件,决定封包的放行,丢弃,拒绝
security表:安全相关,甚少使用。
4)根据规则看NAT,判断方法
例如OUTROUTING链路,见到规则 -j MASQUERADE,那就是SNAT
iptables -t nat -A POSTROUTING -o wlan0 -j MASQUERADE
例如PREROUTING链和OUTPUT链,见到-j DNAT,那就是DNAT
iptables -t nat -A PREROUTING # 入站后第一个链
-p tcp --dport 7777 -i eth0 # 如果封包来自eth0且目标端口为7777
-j DNAT --to-destination 172.16.87.132:80
5)TCP标记,可用的标记SYN, ACK, FIN, RST, URG, PSH,还有两个特殊的值ALL, NONE分别匹配具有任何标记的封包、没有任何标记的封包
三、调试iptables的方法(ubuntu 20.04版本)
开启iptables调试内核模块
$ modprobe nf_log_ipv4
$ sysctl net.netfilter.nf_log.2
net.netfilter.nf_log.2 = nf_log_ipv4
添加iptables规则
$ iptables -t raw -A PREROUTING -p icmp -j TRACE
$ iptables -t raw -A OUTPUT -p icmp -j TRACE
$ iptables -t raw -A PREROUTING -p tcp -j TRACE
$ iptables -t raw -A OUTPUT -p tcp -j TRACE
测试规则
客户端执行 ping 命令,
$ ping 192.168.6.23 -n 1
这里使用 -n 参数指定发送的包数量为1,方便我们分析日志
此时在服务器上执行查看日志命令, 日志文件为:/var/log/syslog 或者 /var/log/kern.log 或者 /var/log/messages
$ tail -f /var/log/syslog
iptables -t raw -nvL PREROUTING --line-number
iptables -t raw -nvL OUTPUT --line-number
iptables -t raw -D PREROUTING 4
iptables -t raw -D OUTPUT 8
iptables -t raw -A PREROUTING -p tcp -j TRACE
iptables -t raw -A OUTPUT -p tcp -j TRACE
向xx.xx.xx.xx的80端口发起一次tcp syn请求
hping3 -c 1 -S -p 80 xx.xx.xx.xx
网友评论