在linux中,netfilter(ip信息包过滤系统)是内核的一部分,提供防火墙(Firewall)、网络地址转换(NAT)、数据包记录、流量统计等功能,换言之,它是工作于主机或网络边缘,对于进出的报文根据定义的规则作检查,进而对被规则匹配到的报文作为相应处理的套件。iptables是用户空间的netfilter控制工具,它使插入、修改和除去信息包处理表中的规则变得容易。
一、iptables/netfilter的链和表
1、链
netfilter在整个网络流程中内置了几条链(检测点),而在每条链上登记了一些处理函数进行处理(如包过滤,NAT等,甚至可以是 用户自定义的功能)。
netfilter内置的五条链:
PREROUTING:路由决策前
INPUT:到达本机内部的报文必经之路
FORWARD:由本机转发的报文必经之路
OUTPUT:由本机发出的报文的必经之路
POSTROUTING:路由决策后
数据报文流程:
①跟本机内部进程通信:
进:PREROUTING,INPUT
出:OUTPUT,POSTROUTING
②由本机转发:
PREROUTING,FORWARD,POSTROUTING
2、表
netfilter由一些按功能分类的信息包处理表组成,这些表是内核用来控制信息包处理的规则集。
netfilter的四个表:
filter:过滤,定义是否允许通过防火墙
nat:网络地址转换,会启用connection_track;
SNAT:源地址转换
DNAT:目标地址转换
PNAT:端口和地址转换
mangle:可以用来改变包的一些属性,如
TOS(TYPE OF SERVICE):设置或改变数据包的服务类型
TTL(TIME TO LIVE):改变数据包的生存时间
MARK:给包设置特殊的标记
raw:关闭nat表上启用的连接追踪功能(因连接追踪功能比较消耗系统性能)
表的处理优先级:raw > mangle > nat > filter
3、表和链的对应关系为:
filter:INPUT,FORWARD,OUTPUT
nat:PREROUTING(DNAT),POSTROUTING(SNAT),OUTPUT
mangle:PREROUTING,INPUT,FORWARD,OUTPUT,POSTROUTING
raw:PREROUTING,OUTPUT
二、iptables的用法
1、基本语法:iptables [-t TABLE] COMMAND CHAIN CRETIRIA -j TARGET
■-t TABLE:nat, mangle, raw, filter。默认为filter
■COMMAND:
链:
-F:flush,清空表中的指定链,缺省为所有链
-N:new,自建一条链
自定义的链只能被主链上的规则作为跳转目标,若自定义链上没有规则能匹配报文,应让其返回主链
例:
iptables -N http_in
iptables -A http_in -m iprange --src-range 172.16.100.1-172.16.100.100 -j DROP
iptables -A http_in -m state --state NEW -j ACCEPT
iptables -A http_in -j RETURN #返回主链
iptables -A INPUT -d 172.16.100.7 -p tcp --dport 80 -j http_in
-X:delete,删除自定义且零引用的空链
-Z:zero,计数器归零
-P chain target:policy,设置默认策略,对filter表来讲,默认策略为ACCEPT或DROP;注意 target 前面没有-j
-E old_name new_name:重命名零引用的自定义链
链上的规则:
-A:append,附加规则于链末
-I chain [#]:insert,向链中插入规则;#表示规则编号,缺省为1
-D chain #(或-D chain rule-specification):delete,删除指定的规则
-R chain #:替换指定的规则
查询:
-L:列出指定链上的所有规则,缺省为所有链
-n:以数字格式显示
-v:详细格式,-vv,-vvv
-x:exactly,不要对计数器的计数结果做单位换算,而显示其精确值
--line-numbers:显示规则编号
■匹配条件:
通用匹配:
-s 地址:指定报文源IP地址匹配的范围;可以是IP或网络地址;可使用!取反;
--src, --source
-d 地址:指定报文目标IP地址匹配的范围;
--dst, --destination
-p 协议:指定匹配报文的协议类型,一般为tcp, udp或icmp;
-i INTERFACE:数据报文流入的接口;(PREROUTING, INPUT, FORWARD)
-o INTERFACE:数据报文流出的接口;(OUTPUT, FORWARD, POSTROUITING)
▲扩展匹配:调用netfilter额外模块实现特殊检查
△隐式扩展:当使用-p {tcp|udp|icmp}中的一种时,可以直接使用扩展专用选项;
-p tcp:
--sport PORT[-PORT]:指定源端口,可以是端口范围
--dport PORT[-PORT]:指定目标端口
--tcp-flags 要检查标志位列表(逗号分隔) 必须为1的标志位列表(逗号分隔)
例如:--tcp-flags syn,ack,rst,fin syn
--tcp-flags all none #这些标志位全为1或全为0都不正常
--syn:相当于--tcp-flags syn,ack,rst,fin syn
-p udp:
--sport
--dport
-p icmp:
--icmp-type
0:echo-reply, ping响应
8:echo-request, ping请求
例如:
允许ping其它主机而不允许其它主机ping自己:
iptables -A OUTPUT -s 172.16.100.7 -p icmp --icmp--type 8 -j ACCEPT
iptables -A INTPUT -d 172.16.100.7 -p icmp --icmp--type 0 -j ACCEPT
△显式扩展:必须明确说明使用哪个模块进行扩展,而后才能使用其扩展专用选项;
-m 扩展模块名称
常用模块:
multiport:多端口匹配;可用于匹配非连续或连续端口,最多指定15个端口;
专用选项:
--source-ports, --sports port[,port,port:port]
--destination-ports, --dports
--ports
例如:
iptables -I INPUT -d 172.16.100.7 -p tcp -m multiport --dports 22,80 -j ACCEPT
iptables -I OUTPUT -s 172.16.100.7 -p tcp -m multiport --sports 22,80 -j ACCEPT
iprange:匹配指定范围内的地址;
专用选项:
[!] --src-ragne IP[-IP]
[!] --dst-range
例如:
iptables -A INPUT -d 172.16.100.7 -p tcp --dport 23 -m iprange --src-range 172.16.100.1-172.16.100.100 -j ACCEPT
iptables -A OUTPUT -s 172.16.100.7 -p tcp --sport 23 -m iprange --dst-range 172.16.100.1-172.16.100.100 -j ACCEPT
string:字符串匹配,能够检测报文应用层中的字符串
字符匹配检查高效算法:kmp, bm
专用选项:
--algo {kmp|bm}
--string "STRING"
--hex-string "HEX_STRING":HEX_STRING为编码成16进制格式的字串;
例如:iptables -I OUTPUT -m string --algo kmp --string "sex" -j DROP
time:基于时间做访问控制
专用选项:
--datestart YYYY[-MM][-DD[Thh[:mm[:ss]]]]
--datestop
--timestart hh:mm[:ss]
--timestop hh:mm[:ss]
--weekdays day[,day]
例如:iptables -I INPUT -d 172.16.100.7 -p tcp --dport 80 -m time --timestart 08:30 --timestop 17:30 --weekdays Mon,Tue,Thu,Fri -j REJECT
connlimit:连接数限制,对每IP所能够发起并发连接数做限制;
专用选项:
[!] --connlimit-above [n]
例如:iptables -A INPUT -d 172.16.100.7 -p tcp --dport 22 -m connlimit --connlimit-above 3 -j DROP
limit:速率限制
专用选项:
--limit n[/second|/minute|/hour|/day]
--limit-burst n
例如:iptables -A INPUT -d 172.16.100.7 -p icmp --icmp-type 8 -m limit --limit 20/minute --limit-burst 5 -j ACCEPT
state:状态检查
专用选项:
--state
连接追踪中的状态:
NEW: 新建立一个会话
ESTABLISHED:已建立的连接
RELATED: 有关联关系的连接
INVALID: 无法识别的连接
例如:
iptables -I INPUT -d 172.16.100.7 -p tcp -m multiport --dports 22,80 -m state --state NEW -j ACCEPT
iptables -I INPUT -m state --state ESTABLISHED
iptables -I OUTPUT -m state --state ESTABLISHED
调整连接追踪功能所能容纳的连接数上限:
/proc/sys/net/nf_conntrack_max和/proc/sys/net/netfilter/nf_conntrack_max(若连接数超出了上限,服务器会拒绝新的连接请求)
当前追踪的所有连接:
/proc/net/nf_conntrack
不同协议或连接类型追踪时的属性:
/proc/sys/net/netfilter目录
★放行被动模式下的FTP服务:
⑴装载模块:modprobe nf_conntrack_ftp
/lib/modules/KERNEL_VERSION/kernel/net/netfilter/ 使用modprobe命令装载模块只是即时有效,重启系统后失效,要想长期有效,可编辑iptables配置文件:
vim /etc/sysconfig/iptables-config
IPTABLES_MODULES="nf_conntrack_ftp"
⑵放行请求报文
①放行NEW状态对21端口请求的报文;
②放行ESTABLISHED以及RELATED状态的报文
⑶放行响应报文:
放行ESTABLISHED以及RELATED状态的报文
■处理目标:
DROP,REJECT,ACCEPT
defi_chain
RETURN:在自义链中无法匹配报文时,让其返回主链
iptables -A defi_chain -j RETURN
SNAT,DNAT,MASQUERADE
LOG,REDIRECT, MARK
LOG表示记录日志,例如 iptables -A INPUT -d 192.168.30.20 -p tcp --dport 80 -j LOG [--log-prefix "iptables:" [--log-level #]]
2、规则文件:/etc/sysconfig/iptables
通过iptables命令编写的规则会立即有效,但不会长期有效。若想长期有效,需将生成的规则保存于规则文件中:
①iptables-save > /etc/sysconfig/iptables #iptables-save可将规则保存到其它指定位置
②service iptables save
生效规则文件中的规则(会同时清空现有规则):
①iptables-restore < /etc/sysconfig/iptables
②service iptables restart
[root@node2 ~]# iptables -L -n -v #以数字格式显示filter表中各条链上规则信息。 # 可以看到,filter表中只有三条链,默认策略均为ACCPET Chain INPUT (policy ACCEPT 0 packets, 0 bytes) 匹配的包数 字节数 目标 协议 流入口 流出口 源地址 目标地址 pkts bytes target prot opt in out source destination 263 19097 ACCEPT all -- * * 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED 0 0 ACCEPT icmp -- * * 0.0.0.0/0 0.0.0.0/0 0 0 ACCEPT all -- lo * 0.0.0.0/0 0.0.0.0/0 1 52 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:22 240 20506 REJECT all -- * * 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited Chain FORWARD (policy ACCEPT 0 packets, 0 bytes) pkts bytes target prot opt in out source destination 0 0 REJECT all -- * * 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited Chain OUTPUT (policy ACCEPT 190 packets, 20699 bytes) pkts bytes target prot opt in out source destination [root@node2 ~]# iptables -t nat -L -n #显示nat表中的规则信息 Chain PREROUTING (policy ACCEPT) target prot opt source destination Chain POSTROUTING (policy ACCEPT) target prot opt source destination Chain OUTPUT (policy ACCEPT) target prot opt source destination [root@node2 ~]# iptables -F #清空filter表中的所有链 [root@node2 ~]# iptables -L -n Chain INPUT (policy ACCEPT) target prot opt source destination Chain FORWARD (policy ACCEPT) target prot opt source destination Chain OUTPUT (policy ACCEPT) target prot opt source destination [root@node2 ~]# iptables -N ssh_in [root@node2 ~]# iptables -N web_in [root@node2 ~]# iptables -N dns_in [root@node2 ~]# iptables -N ftp_in [root@node2 ~]# iptables -A ssh_in -m state --state NEW -j ACCEPT [root@node2 ~]# iptables -A ssh_in -j RETURN [root@node2 ~]# iptables -A web_in -m iprange --src-range 192.168.30.101-192.168.30.254 -j DROP [root@node2 ~]# iptables -A web_in -m state --state NEW -j ACCEPT [root@node2 ~]# iptables -A web_in -j RETURN [root@node2 ~]# iptables -A dns_in -m state --state NEW -j ACCEPT [root@node2 ~]# iptables -A dns_in -j RETURN [root@node2 ~]# modprobe nf_conntrack_ftp [root@node2 ~]# lsmod | grep 'ftp' nf_conntrack_ftp 12913 0 nf_conntrack 79758 6 nf_conntrack_ftp,iptable_nat,nf_nat,nf_conntrack_ipv4,nf_conntrack_ipv6,xt_state [root@node2 ~]# vim /etc/sysconfig/iptables-config # Load additional iptables modules (nat helpers) # Default: -none- # Space separated list of nat helpers (e.g. 'ip_nat_ftp ip_nat_irc'), which # are loaded after the firewall rules are applied. Options for the helpers are # stored in /etc/modprobe.conf. IPTABLES_MODULES="nf_conntrack_ftp" ... [root@node2 ~]# iptables -A ftp_in -m state --state NEW -j ACCEPT [root@node2 ~]# iptables -A ftp_in -j RETURN [root@node2 ~]# iptables -A INPUT -d 192.168.30.20 -p tcp --dport 22 -j ssh_in [root@node2 ~]# iptables -A INPUT -d 192.168.30.20 -p tcp --dport 80 -j web_in [root@node2 ~]# iptables -A INPUT -d 192.168.30.20 -p tcp --dport 53 -j dns_in [root@node2 ~]# iptables -A INPUT -d 192.168.30.20 -p udp --dport 53 -j dns_in [root@node2 ~]# iptables -A INPUT -d 192.168.30.20 -p tcp --dport 21 -j ftp_in [root@node2 ~]# iptables -A INPUT -d 192.168.30.20 -p icmp -j ACCEPT [root@node2 ~]# iptables -A INPUT -i lo -j ACCEPT [root@node2 ~]# iptables -I INPUT -m state --state ESTABLISHED,RELATED [root@node2 ~]# iptables -A OUTPUT -m state --state ESTABLISHED,RELATED [root@node2 ~]# iptables -A OUTPUT -s 192.168.30.20 -p tcp --sport 22 -m state --state NEW -j ACCEPT [root@node2 ~]# iptables -A OUTPUT -s 192.168.30.20 -p icmp -j ACCEPT [root@node2 ~]# iptables -A OUTPUT -o lo -j ACCEPT
3、网络防火墙
netfilter在INPUT和OUTPUT链上表现的是其作为 主机防火墙 的角色,而其在FORWARD链上则表现是的作为 网络防火墙 的角色
在以下的示例中:
node2为服务器,其地址为192.168.30.20;node3为客户端,其地址为172.16.30.3;node1有两张网卡eth0和eth1,地址分别为192.168.30.10和172.16.30.1,位于两个不同网络中。
在node1上开启了报文转发功能,并将其设为两个网络的默认网关,从而使得其将两个网络连接起来,充当了路由的角色,而且在转发链上生成了一些过滤规则,使其具有了网络防火墙的功能
[root@node1 ~]# ifconfig eth1 172.16.30.1/16 #给node1有eth1配置一个地址 [root@node1 ~]# ifconfig eth1 up [root@node1 ~]# ifconfig eth1 eth1 Link encap:Ethernet HWaddr 00:0C:29:40:35:A7 inet addr:172.16.30.1 Bcast:172.16.255.255 Mask:255.255.0.0 inet6 addr: fe80::20c:29ff:fe40:35a7/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:184 errors:0 dropped:0 overruns:0 frame:0 TX packets:909 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:11040 (10.7 KiB) TX bytes:309294 (302.0 KiB) [root@node1 ~]# iptables -F [root@node1 ~]# echo 1 > /proc/sys/net/ipv4/ip_forward #开启报文转发功能 [root@node1 ~]# modprobe nf_conntrack_ftp [root@node1 ~]# iptables -A FORWARD -d 192.168.30.20 -p tcp -m multiport --dports 21,22,80 -m state --state NEW -j ACCEPT [root@node1 ~]# iptables -A FORWARD -s 192.168.30.20 -p tcp --sport 22 -m state --state NEW -j ACCEPT [root@node1 ~]# iptables -A FORWARD -p icmp -j ACCEPT [root@node1 ~]# iptables -I FORWARD -m state --state ESTABLISHED,RELATED [root@node1 ~]# iptables -P FORWARD DROP [root@node1 ~]# iptables -L FORWARD -n Chain FORWARD (policy DROP) target prot opt source destination all -- 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED ACCEPT tcp -- 0.0.0.0/0 192.168.30.20 multiport dports 21,22,80 state NEW ACCEPT tcp -- 192.168.30.20 0.0.0.0/0 tcp spt:22 state NEW ACCEPT icmp -- 0.0.0.0/0 0.0.0.0/0
[root@node2 ~]# route del default gw 192.168.30.2 [root@node2 ~]# route add default gw 192.168.30.10 #将node2的网关指向node1
4、nat
如上图,假定node2和node3分别位于公网和内网中,node1的两张网卡eth0、eth1分别配有公有地址和私有地址。node2的ip地址和node1的eth0的地址位于不同的网络中,意即node2和node1之间通信会经过若干个路由器。
此时,若想实现node3和node2的通信,在node1上仅开启报文转发功能是不够的,必须做地址转换,因为公网上的路由器是不给私有地址路由的。
如果是内网访问公网,如node3访问node2,则源地址是私有地址,需要做源地址转换(SNAT),且要在请求报文即将离开node1时即POSTROUTING链上处理。用户只需要制定前半段规则,后半段即响应阶段无需参与,因为NAT机制会自动记录内部和外部的连线信息。
如果是外网请求内网中的主机,则目标地址是私有地址,需要在PREROUTING链上做目标地址转换(DNAT),同样,用户只需参与前半段。
在以下的示例中,为演示的方便,node1的eth0和node2的eth0地址仍为192.168.30.10、192.168.30.20,只是假定它们位于公网上的不同网络中
⑴SNAT示例:
ptables -t nat -A POSTROUTING -s 172.16.0.0/16 -j SNAT --to-source 192.168.30.10
[root@node1 ~]# iptables -t nat -A POSTROUTING -s 172.16.0.0/16 -j SNAT --to-source 192.168.30.10 [root@node1 ~]# iptables -t nat -L -n Chain PREROUTING (policy ACCEPT) target prot opt source destination Chain POSTROUTING (policy ACCEPT) target prot opt source destination SNAT all -- 172.16.0.0/16 0.0.0.0/0 to:192.168.30.10 Chain OUTPUT (policy ACCEPT) target prot opt source destination
[root@node2 ~]# route del default gw 192.168.30.10 #node2的网关不再指向node1
[root@node2 ~]# tail -1 /usr/local/apache/logs/access_log 192.168.30.10 - - [18/Feb/2016:02:07:46 +0800] "HEAD / HTTP/1.1" 200 -
■上面演示的是将内网地址转换为一个固定的公网地址,但是,设想这样一种情况,若代理上网主机(如node1)是拨号上网,意即其获得的公网地址不固定,则该如何做源地址转换呢?
iptables -t nat -A POSTROUTING -s 172.16.0.0/16 -j MASQUERADE(地址伪装)
⑵DNAT示例:
iptables -t nat -A PREROUTING -d 192.168.30.10 -p tcp --dport 80 -j DNAT --to-destination 172.16.30.3[:8080]
[root@node1 ~]# iptables -t nat -A PREROUTING -d 192.168.30.10 -p tcp --dport 80 -j DNAT --to-destination 172.16.30.3 [root@node1 ~]# iptables -I FORWARD 3 -d 172.16.30.3 -p tcp --dport 80 -m state --state NEW -j ACCEPT [root@node1 ~]# service httpd status httpd is stopped #node1的httpd处于关闭状态
[root@node2 ~]# curl -I 192.168.30.10 HTTP/1.1 200 OK Date: Thu, 10 Dec 2015 22:08:42 GMT Server: Apache/2.2.15 (CentOS) Last-Modified: Thu, 10 Dec 2015 22:03:42 GMT ETag: "60b8c-6-52692613e8b37" Accept-Ranges: bytes Content-Length: 6 Connection: close Content-Type: text/html; charset=UTF-8
5、关于连接追踪
连接追踪是实现NAT必不可少的机制,并且可以用来制定更为高效和精确的防火墙过滤规则,缺点是比较消耗系统资源。当访问数超过追踪记录表所能允许的最大值时,服务器会拒绝新的连接请求。为了满足更多的访问需求,解�Q方法一般有两个:
①加大 nf_conntrack_max 值
vim /etc/sysctl.conf
net.ipv4.nf_conntrack_max = 393216
net.ipv4.netfilter.nf_conntrack_max = 393216
②降低 nf_conntrack timeout 时间
vim /etc/sysctl.conf
net.ipv4.netfilter.nf_conntrack_tcp_timeout_established = 300
net.ipv4.netfilter.nf_conntrack_tcp_timeout_time_wait = 120
net.ipv4.netfilter.nf_conntrack_tcp_timeout_close_wait = 60
net.ipv4.netfilter.nf_conntrack_tcp_timeout_fin_wait = 120
对于访问量大的服务器,最好关闭连接追踪功能:
①删除含有 -m state 的规则,清空nat表
②移除 nf_conntrack 模块:modprobe -r nf_conntrack
6、利用iptables的connlimit和recent模块来抵御DOS攻击
以SSH为例:
方式一:
iptables -I INPUT -p tcp --dport 22 -m connlimit --connlimit-above 3 -j DROP
说明:利用connlimit模块将单IP的并发设置为3;会误杀使用NAT上网的用户,可以根据实际情况增大该值
方式二:
iptables -I INPUT -p tcp --dport 22 -m state --state NEW -m recent --set --name SSH
iptables -I INPUT -p tcp --dport 22 -m state --state NEW -m recent --update --seconds 300 --hitcount 3 --name SSH -j LOG --log-prefix "SSH Attack: "
iptables -I INPUT -p tcp --dport 22 -m state --state NEW -m recent --update --seconds 300 --hitcount 3 --name SSH -j DROP
说明:
①利用recent和state模块限制单IP在300s内只能与本机建立2个新连接。被限制五分钟后才可恢复访问。
②第一句是记录访问tcp 22端口的新连接,记录名称为SSH。--set表示记录数据包的来源IP,如果IP已经存在将更新已经存在的条目
③第三句是指SSH记录中的IP,300s内发起超过3次连接则拒绝此IP的连接。
--update 是指每次建立连接都更新列表;
--seconds必须与--rcheck或者--update同时使用
--hitcount必须与--rcheck或者--update同时使用
④iptables的记录:/proc/net/xt_recent/SSH
三、iptables总结
①过滤应做白名单,即把默认策略设为DROP
②先添加规则放行自己的会话
③在编写规则前可先定义一个重启iptables服务的任务计划,这样即使因操作不当被防火墙屏蔽,待iptables重启后又可重新进入
④尽量减少规则条目,彼此不相关的匹配机会较多的放在上面,属于同一功能匹配规则更严格的放在上面
四、iptables使用示例
1、限制本地主机的web服务器在周一不允许访问;新请求的速率不能超过100个每秒;web服务器包含了admin字符串的页面不允许访问;web服务器仅允许响应报文离开本机;
iptables -N web_in
iptables -A web_in -m time --weekdays Mon -j DROP
iptables -A web_in -m string --algo kmp --string "admin" -j DROP
iptables -A web_in -m state --state ESTABLISHED -j ACCEPT
iptables -A web_in -m state --state NEW -m limit --limit 100/second -j ACCEPT
iptables -A web_in -j RETURN
iptables -A INPUT -d 192.168.30.20 -p tcp --dport 80 -j web_in
iptables -A OUTPUT -m state --state ESTABLISHED -j ACCEPT
2、在工作时间,即周一到周五的8:30-18:00,开放本机的ftp服务给172.16.0.0网络中的主机访问;
iptables -I INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -s 172.16.0.0/16 -p tcp --dport 21 -m time --timestart 08:30 --timestop 17:30 --weekdays Mon,Tue,Wen,Thu,Fri -j ACCEPT
iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
3、开放本机的ssh服务给172.16.30.1-172.16.30.100中的主机,新请求建立的速率一分钟不得超过2个;仅允许响应报文通过其服务端口离开本机;
iptables -I INPUT -m state --state ESTABLISHED -j ACCEPT
iptables -A INPUT -p tcp --dport 22 -m iprange --src-range 172.16.30.1-172.16.30.100 -m state --state NEW -m limit --limit 2/minute -j ACCEPT
iptables -A OUTPUT -m state --state ESTABLISHED -j ACCEPT
4、拒绝TCP标志位全部为1及全部为0的报文访问本机;
iptables -I INPUT -p tcp --tcp-flags all none -j DROP
iptables -I INPUT -p tcp --tcp-flags all all -j DROP