iptables包含有4个表,5个链,链在表中。html
4个表:filter,nat,mangle,raw。linux
默认表是filter(在没有指定表的清空),表的优先级:rawtcp
>mangle>nat>filter.ide
filter:通常的过滤功能。
性能
nat:用于nat功能(端口映射,地址映射,)spa
mangle:对特定数据包的修改.net
raw:有限级最高,设置raw时通常是为了避免再让iptables作数据包的连接跟踪处理,提升性能orm
5个链:PREROUTING,INPUT,FORWARD,OUTPUT,POSTROUTING。htm
INPUT: 位于 filter 表,匹配目的 IP 是本机的数据包
FORWARD: 位于 filter 表,匹配穿过本机的数据包,
PREROUTING: 位于 nat 表,用于修改目的地址(DNAT)
POSTROUTING:位于 nat 表,用于修改源地址 (SNAT)ip
PREROUTING:数据包进入路由表以前
INPUT:经过路由表后目的地为本机
FORWARDING:经过路由表后,目的地不为本机
OUTPUT:由本机产生,向外转发
iptables语法使用:
iptables [-t 表名] <操做命令> [要操做的链] [规则号码] [匹配条件] [-j 匹配到之后的动做]
操做命令:(-A -I -D -R -P -F)
-A <链名>:增长一条规则(在全部规则的后面)
例如:iptables -t filter -A INPUT -j DORP
#在filter表INPUT链中增长一条规则,匹配全部访问本机ip的数据包,匹配到了就丢弃。
-I <链名> [规则号码]:插入一条规则
例如:iptables -I INPUT 3 -j DORP
在filter表INPUT链插入一条规则,插入为第3条,前面必需要有2条规则.若是没有规则号码,默认为1,
-D <链名> [规则号码|链的内容]:删除一条规则
例如:iptables -D INPUT 2
#删除filter表INPUT链的第2条规则
iptables -D INPUT -s 192.168.0.1 -j DROP
删除filter表INPUT链内容为 -s 192.168.0.1 -j DROP 的规则
若规则列表中有多条相同的规则时,按内容匹配只删除序号最小的一条
-R <链名><规则号码><内容>:替换一条规则
例如:iptables -R INPUT 3 -j ACCEPT
将规则号3的内容替换为‘-j ACCEPT’
-P <链名> <动做> :设置某个链的默认规则
例如:iptables -P INPUT DORP
设置 INPUT表的默认规则为DROP.若是数据包没有匹配大规则里的任何规则,就匹配默认规则
-F <链名>:状况规则
例如:iptables -F INPUT
清空INPUT链的全部规则,-F仅是清空链中规则,-P设置的默认规则不被清空。
查看命令 [-(vnx)L]
-L<链名>:列出规则(通常用iptables -nvL)
v:显示详细信息
x:在v的基础上,禁止自动单位换算(K,M)
n:只显示ip地址和端口,不显示域名和服务
例如:iptables -nvL #详细列出filter表全部链的规则
iptables -t nat -nvL OUTPUT #列出nat表OUTPUT链的规则
匹配条件
-i:流入 -o:流出
-s:来源地址 -d:目的地址
-sport:来源端口 -dport:目的端口
-p:协议类型
-i和-o(匹配数据从网口的进和出)
-i eth0 #匹配从eth0网口进来的数据包
-o eth1 #匹配从eth1网口出去的数据包
-s(匹配来源地址)能够是ip,网段,域名也能够为空(全部地址)
-s 192.168.10.130 #匹配来自192.168.10.130的数据包
-s 192.168.10.130/24 #匹配来自192.168.10.130/24网段的数据包
-d(匹配目的地址)能够是ip,网段,域名也能够为空(全部地址)
-d www.cong.com 匹配去往域名www.cong.com的数据包
-p(匹配协议类型)能够为tcp udp icmp等,也可为空
-p tcp
-p udp
--sport(匹配来源端口)能够是个别端口,也能够是端口范围
--sport 80 匹配源端口是80的数据包
--sport 80-8080 匹配源端口80-8080的数据包(含80,8080)
--sport :80 匹配源端口是80如下的数据包(含80)
--sport 80: 匹配源端口是80以上的数据包(含80)
--dport(匹配目的端口)能够是个别端口,能够是端口范围
--dport 80 匹配目的端口是80的数据包
--dport 80-8080 匹配目的端口80-8080的数据包(含80,8080)
--dport :80 匹配目的端口是80如下的数据包(含80)
--dport 80: 匹配目的端口是80以上的数据包(含80)
--sport 和--dport必须配合-p参数使用,必须指明协议类型
匹配举例
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
在INPUT增长一条规则匹配 协议类型为tcp 目的端口为80的规则操做为放行经过
iptables -I OUTPUT -s 192.168.10.12 -d 192.168.10.131 -j ACCEPT
在OUTPUT插入一条 匹配源地址192.168.10.12目的地址192.168.10.131的规则,放行经过
-s 192.168.10.12 -d www.cong.com -p tcp --dport 80
匹配来自192.168.10.12到www.cong.com 的80端口,tcp协议的数据包
动做/处理方式
ACCEPT:经过,容许数据包经过,不拦截
DROP:丢弃,阻止数据包经过本链而丢弃它
SNAT:源地址转换 能够是单个ip也能够是ip地址池
DNAT:目的地址转换 能够是单个ip也能够是ip地址池
MASQUERADE:动态源地址转换
REDIRECT:用于把数据包转发到另外一个端口
REJECT:和DROP同样,可是DROP不返回信息,REJECT能够返回指定错误信息
-j ACCEPT
匹配到的数据包容许经过
-j DROP
匹配到的数据包不容许经过,丢弃
-j SNAT --to ip[-ip:端口-端口](在nat表的POSTROUTING链)
例:iptables -t nat -A POSTROUTING -s 192.168.10.0/24 -j SNAT --to 1.1.1.1
iptables -t nat -A POSTROUTING -s 192.168.10.12 -j SNAT --to 1.1.1.1-1.1.1.10
-j DNAT --to ip[-ip:端口-端口](在nat表的PREROUTING链)
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j DNAT --to 192.168.10.12:80
iptables -t nat -A PREROUTING -d 192.168.10.12 -j DNAT --to 127.0.0.1
-j MASQUERDE
iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -j MASQUERADE
将源地址是 192.168.0.0/24 的数据包进行地址假装
-j REDIRECT
iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 8080
访问数据包访问的80端口转换为8080端口
-j REJECT
iptables -A FORWARD -p TCP --dport 22 -j REJECT --reject-with icmp-net-unreachable
附加模块
按包状态匹配(state)
按来源MAC匹配(mac)
按包速率匹配(limit)
多端口匹配(multiport)
state -m state --state状态
状态:
NEW:创建新的链接
RELATED:相关的
ESTABLISHED:已创建链接
INVALID:无效的
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
mac -m mac --mac-source MAC
iptables -A FORWARD -m --mac-source xx:xx:xx:xx:xx:xx -j DROP
mac地址不能经过路由,因此不要去匹配路由后面的MAC地址
limit -m limit --limit 速率
iptables -A FORWARD -d 192.168.10.130 -m limit --limit 50/s -j ACCEPT
multiport (--sports|--dports|--ports)
iptables -A INPUT -p tcp -m multiports --ports 22,25,80 -j ACCEPT
必须与-p参数一块儿使用
参考:http://www.jb51.net/os/RedHat/1335.html
http://www.linuxidc.com/Linux/2012-08/67505.htm