iptables是集成在内核中的包过滤型防火墙,通过分析IP数据包的标志位、端口、ip地址、链接状态等特征,与定义的处理规则进行匹配,然后根据处理规则对数据包作出放行或丢弃等处理,还可以做NAT数据转发。
iptables分为两部分:一部分位于内核中存放处理规则,称为netfilter;另一部分位于用户空间,用来向内核空间传递定义规则,这段在用户控件中的程序就叫做iptables。
iptables有5个规则连分别处在不同位置,控制不同流向的数据包:
1、INPUT(对被接收下来并经路由选择以后发往用户空间程序的数据包进行处理)
2、OUTPUT(对本机用户空间应用程序发出的数据包进行处理)
3、FORWARD (对接收下来的数据包进行路由选择数据转发处理)
4、prerouting(对到达的数据包进行路由前的过滤筛选处理)
5、postrouting(对路由选择后的数据进行发送前处理)
数据包的流向有:
到本机:
PREROUTING–>INPUT
经本机转发:
PREROUTING–>FORWARD–>POSTROUTING
由本级发出:
OUTPUT–>POSTROUTING
iptables内置了4张规则表,常用的只有filter,nat和mangle三张表。按优先级依次为:
1、raw:可以对收到的数据包在连接跟踪前进行处理
作用链:PREROUTING,OUTPUT
2、mangle:对数据包进行重组
作用链:PREROUTING,INPUT,FORWARD,OUTPUT,POSTROUTING
3、nat:对数据包源或目标IP进行转换
作用链:PREROUTING,OUTPUT,POSTROUTING
4、filter:对数据包进行筛选过滤
作用链:INPUT,FORWARD,OUTPUT
以OUTPUT链为例:匹配顺序依次为raw–>mangel–>nat–>filter。匹配到哪个规则就按哪个规则表处理,不再匹配其他规则,如果所有规则都匹配不到则按默认规则处理。
语法格式:iptables [-t TABLE] COMMAND CHAIN [CRETIRIA] -j ACCEPT|DROP
注意:所有链名必须大写,表明必须小写,动作必须大写,匹配必须小写
COMMAND:对链中的规则进行管理操作
链中规则:
-A:追加,向规则链中添加一条规则,默认被添加到末尾
-I # :插入一条规则,插入为第#条
-R #: 替换第#条
-R CRETERIA:替换指定规则的条目
-D #:删除第#条规则
链:
-N:新建一条自定义的链
-X:删除一条自定义的
-E:重命名一条自定义链
-F:清空指定链,如果不指定链,则清空整个表中的所有链
-P(大):设定链的默认策略
-Z:置零(对策略无效,只针对规则置零,每条规则,包括默认策略都有两个计数器:一个是被)
查看:
-L:查看
-v,vv,vvv :显示详细信息
–line-numbers:指定行号
-x:显示精确值
-n:不做反解,显示数字地址
匹配条件:
通用匹配:
-s:源地址
-d:目标地址
IP
NETWORK
!
-p:协议
{icmp|tcp|udp}
-i ininterface 数据包流入接口
PREROUTING、INPUT、FORWARD
-o outinterface 流出接口
OUTPUT、FORWARD、POSTROUTING
扩展匹配:
隐式扩展
-p tcp
–sport PORT[-PORT2]
–dport PORT[-PORT2]
–tcp-flags URG,ACK,SYN,RST,FIN,PSH,ALL,NONE
–syn=–tcp-flags
-p udp
–sport
–dport
-p icmp
–icmp-type
8:ping请求echo-reply
0:ping响应echo-request
显式扩展:需要指定扩展模块,模块位于/lib/iptables/
netfilter
-m state:链接的状态检测
–state
NEW,ESTABLISHED(新链接,正在进行链接)
RELATED,INVALID(一个服务多个链接,无效链接)
-m multiport
–source-ports PORT[,port..]
–ports
–destination-ports
iptable基本操作
iptables -L 列出iptables规则
iptables -F 清除iptables内置规则
iptables -X 清除iptables自定义规则
设定默认规则
iptables -P INPUT DROP
iptables -P OUTPUT ACCEPT
iptables -P FORWARD DROP
源地址转换,隐藏内部地址
iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -j SNAT –to 1.1.1.1
iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -j SNAT –to 1.1.1.1-1.1.1.10
地址伪装,动态ip的NAT
iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -j MASQUERADE
masquerade和snat的主要区别在于,snat是把源地址转换为固定的IP地址或者是地址池,而masquerade在adsl等方式拨号上网时候非常有用,因为是拨号上网所以网卡的外网IP经常变化,这样在进行地址转换的时候就要在每次都要修改转换策略里面的ip,使用masquerade就很好的解决了这个问题,他会自己去探测外网卡获得的ip地址然后自动进行地址转换,这样就算外网获得的ip经常变化也不用人工干预了。
开启转发功能
iptables -A FORWARD -i eth0 -o eth1 -m state –state RELATED,ESTABLISHED -j ACCEPT 只允许已建连接及相关链接对内转发
ptables -A FORWARD -i eth1 -o eh0 -j ACCEPT 允许对外转发
过滤某个MAC
iptables -A FORWARD -m mac –mac -source MAC地址 -j DROP
报文经过路由后,数据包中原有的MAC信息会被替换,所以在路由后的iptables中使用mac匹配没有意义。
数据包整流
iptables -A FORWARD -d 192.168.0.1 -m limit –limit 50/s -j ACCEPT
iptables -A FORWARD -d 192.168.0.1 -j DROP
多端口匹配
用以一次匹配多个端口
iptables -A INPUT -p tcp -m muliport –dport s 21,22,25,80,110 -j ACCEPT
丢弃非法连接
iptables -A INPUT -m state –state INVALID -j DROP
iptables -A OUTPUT -m state –state INVALID -j DROP
iptables-A FORWARD -m state –state INVALID -j DROP
存储于恢复iptables规则
iptables-save > somefile
iptables-restore < somefile