参考
- iptables详解(1):iptables概念
- iptables详解(2):iptables实际操作之规则查询
- iptables详解(3):iptables规则管理
- iptables详解(4):iptables匹配条件总结之一
- iptables详解(5):iptables匹配条件总结之二(常用扩展模块)
- iptables详解(6):iptables扩展匹配条件之’–tcp-flags’
- iptables详解(7):iptables扩展之udp扩展与icmp扩展
- iptables详解(8):iptables扩展模块之state扩展
- iptables详解(9):iptables的黑白名单机制
- iptables详解(10):iptables自定义链
- iptables详解(11):iptables之网络防火墙
- iptables详解(12):iptables动作总结之一
- iptables详解(13):iptables动作总结之二
- iptables详解(14):iptables小结之常用套路
准备工作
重新安装一个新的Centos7系统,关闭firewalld,因为firewalld也是使用iptables规则。打开firewalld会自动生成很多iptables规则。
$ systemctl stop firewalld
$ iptables -t nat -nvL
Chain PREROUTING (policy ACCEPT 8 packets, 1194 bytes)
pkts bytes target prot opt in out source destination
Chain INPUT (policy ACCEPT 8 packets, 1194 bytes)
pkts bytes target prot opt in out source destination
Chain OUTPUT (policy ACCEPT 13 packets, 1729 bytes)
pkts bytes target prot opt in out source destination
Chain POSTROUTING (policy ACCEPT 13 packets, 1729 bytes)
pkts bytes target prot opt in out source destination
Example.01 docker
首先看一下docker中iptables的使用,分别是nat表和filter表。raw和mangle表没有被docker使用。
$ yum install docker
$ systemctl start docker
SNAT
我们用docker启动一个镜像,然后安装ping和tcpdump,结构如下。
docker0 和 ens33 之间数据转发需要打开ipforward
DNAT
重新启动一个镜像,映射一个1234端口到容器的5678
$ docker run -it --rm -p1234:5678 ubuntu bash