iptables:
表:
Filter: 用于过滤的时候;
Nat: 用于做NAT的时候(NAT:Network Address Translator)
链:
INPUT:位于filter表,匹配目的IP是本机的数据包;
FORWARD:位于filter表,匹配穿过本机的数据包;
PREROUTING:位于nat表,用于修改目的地址(DNAT);
POSTROUTING:位于nat表,用于修改源地址(SNAT)
语法:
iptables [-t 要操作的表] <操作命令> [要操作的链] [规则号码] [匹配条件] [-j 匹配到以后的动作]
操作命令:
(-A、-I、-D、-R、-P、-F)
-A<链名> append,追加一条规则(放到最后)
-I<链名> insert,插入一条规则;
-D<链名><规则号码|具体规则内容> delete,删除一条规则
-R<链名><规则号码><具体规则内容> replace,替换一条规则
-P<链名><动作> policy,设置某个链的默认规则
-F<链名> flush,清空规则
查看命令(-[vnx]L)
iptables –vnL
iptables –t nat –vnL
iptables-save
匹配条件
流入、流出接口(-i、-o)
来源、目的地址(-s、-d)
协议类型(-p)
来源、目的端口(--sport、--dport)
注明:
--sport、--dport必须联合-p使用,必须指明协议类型是什么
动作(处理方式)
-j ACCEPT:通过,允许数据包通过本链而不拦截它
-j DROP:丢弃,阻止数据包通过本链而丢弃它
-j SNAT –to IP[-IP][:端口-端口](nat表的POSTROUTING链)源地址转换
-j DNAT –to IP[-IP][:端口-端口](nat表的PREROUTING链)目的地址转换
-j MASQUERADE:动态源地址转换(动态IP的情况下使用)
Iptables –t nat –A POSTROUTING –s 192.168.0.0/24 –j MASQUERADE
将源地址是192.168.0.0/24的数据包进行地址伪装
附加模块:
按包状态匹配(state)
-m state –state 状态(NEW、RELATED、ESTABLISHED、INVALID)
按来源MAC匹配(mac)
-m mac –mac-source MAC(匹配某个mac地址,注:报文经过路由后,数据包中原有的mac信息会被替换,所以在路由后的iptables中使用mac模块是没有意义的)
按包速率匹配(limit)
-m limit –limit 匹配速率 [--burst 缓冲数量](用一定速率去匹配数据包,要想限制的话后面要再跟一条DROP)
多端口匹配(multiport)
-m multiport < --sports| --dports| --ports> 端口1[,端口2,……,端口n] (一次性匹配多个端口,可以区分源端口,目的端口或不指定端口,必须与-p参数一起使用)
必加项:
echo "1" > /proc/sys/net/ipv4/ip_forward
echo "1" > /proc/sys/net/ipv4/tcp_syncookies
echo "1" > /
/proc/sys/net/ipv4/icmp_ignore_bogus_error_responses
modprobe ip_nat_ftp
可选方案:
堵:
iptables –A FORWARD –p tcp –dport xxx –j DROP
通:
iptables –A FORWARD –p tcp –dport xxx –j ACCEPT
iptables –A FORWARD –m state –state RELATE,ESTABLISHED –j ACCEPT
实例分析:
如何做网关:
弄清网络拓扑
本机上网
设置nat 启用路由转发 地址伪装SNAT/MASQUERADE
ADSL 拨号上网的拓扑:
echo "1" > /proc/sys/net/ipv4/ip_forward
iptables –t nat –A POSTROUTING –s 192.168.1.0/24 –o ppp0 –j MASQUERADE
如何限制内网用户
过滤位置filter表FORWARD链
匹配条件 –s –d –p –s/dport
处理动作 ACCEPT DROP
iptables –A FORWARD –s 192.168.0.3 –j DROP
iptables –A FORWARD –m mac –mac-source 11:22:33:44:55:66 –j DROP
iptables –A FORWARD –d bbs.chinaunix.net –j DROP
【Filter,这是默认的表,包含了内建的链INPUT(处理进入的包)、FORWORD(处理通过的包)和OUTPUT(处理本地生成的包)。Nat,这个表被查询时表示遇到了产生新的连接的包,由三个内建的链构成:PREROUTING(修改到来的包)、OUTPUT(修改路由之前本地的包)、POSTROUTING(修改准备出去的包)。Mangle这个表用来对指定的包进行修改,它有两个内建的规则:PREROUTING(修改路由之前进入的包)和OUTPUT(修改路由之前本地的包)。】