本文的主要思想互联网整理归纳而来。如有雷同,纯属巧合。
按照国人的传统思维,我先对iptbale下个定义
iptables是什么
维基百科对iptables的定义是:
iptables或netfilter(网络过滤器)是一个工作于用户空间的防火墙应用软件,允许系统管理员可以调整设置X表(Xtables)提供相关的系统表格(目前主要位于iptables/netfilter)以及相关的“链”与“规则”来管理网络数据包的流动与转送的动作。因相关动作上的需要,iptables的操作需要用到超级用户的权限。在大部份的Linux系统上面,iptables是使用/usr/sbin/iptables来操作,文件则放置在手册页(Man page[2])底下,可以通过 man iptables 指令取得。通常iptables都需要内核层级的模块来配合运作,Xtables是主要在内核层级里面iptables API运作功能的模块。
目前iptables系在2.4、2.6及3.0的内核底下运作,旧版的Linux内核(2.2)使用ipchains及ipwadm(Linux 2.0)来达成类似的功能,2014年1月19日起发布的新版Linux内核(3.13后)则使用nftables取而代之。
说白了,就是一个防火墙应用软件,依据特定的规则管理IP包的流动或者转发。
iptables和ip6_tables、arp_tables一同都是建构在Xtables的架构下,这个方案让系统管理员定义“表(tables)”、“链(chain)”、“规则(rules)”三个数据来处理数据包的运送。
每一个“表”都和不同的数据包处理有关、决定数据包是否可以穿越的是“链”、而一条“规则”在键里面则可以决定是否送往下一条链(或其它的动作),这个处理可以在嵌套的结构里面重复使用。每一个网络数据包从抵达到离开该计算机至少会经过一个链(亦即转送或本机路由)。
iptables中的术语
表
nat表、filter表、mangle表;各个表都和不同的数据包处理有关
mangle表,一般作为特殊处理时使用,我们般不需要使用mangle。
filter表:也就是过滤。
在不同的链上,通过过滤特定的数据包以达到防火墙的目的。我们的所有防火墙规则都是通过该表来实现。
nat表:顾名思义,即完成NAT操作;
nat分为SNAT(针对外网是静态IP地址的NAT转换),DNAT(目的地址NAT)和伪装(类似SNAT,但是针对WAN是动态的处理)三种类型。后续会详细讨论
链
1. prerouting,在网络上接受数据报文的链;
如果目的MAC地址匹配的话,就会进入该链。---我们在此处可以实现 VPN 的pass through
默认的匹配规则也一般在此处落点。
prerouting处理完之后,判断路由进入
2. input,output,
3. forwarding
所有转发的数据报文,均在该链进行匹配操作。路由器的过滤一般在此处。
4. postrouting,将数据包推送到网络上(通过SNAT或者MASQUERATE);
规则
根据条件执行特定的动作。
1. 默认规则(通常称之为策略)
1. 匹配
通用匹配,适用所有规则
比如 -p -s -d -i -o -f
tcp,适用tcp的规则
-sport
-dport
-tcp-flags
--syn
--tcp-option
udp
-
icmp
--icmp-type
2. 显式匹配
-m 【limit, mac,mark,multiport,owner,state,tosttl】
3.动作
即target/jump,用以决定符合条件的包到何处去,语法是--jump target或-j target。
target的类型
1. ACCEPT --firewall
2. DROP --firewall
3. MASQUERADE--NAT
4. DNAT --porting forwarding
5. MARK
6. REJECT
7. LOG
8. Mirror
9. QUEUE
10. REDIRECT
11. SNAT
12 RETURN
13 TOS
14 TTL
15 ULOG
参考资料:
https://www.frozentux.net/iptables-tutorial/cn/iptables-tutorial-cn-1.1.19.html
http://zh.wikipedia.org/zh-cn/Iptables