当前位置: 首页 > 运维技术 > 正文

iptables基础语法与iptables扩展选项详细说明

Mr.linus 发表于2016年8月7日 16:18

iptables由4张表5个链(chains)构成:

filter表(默认使用的表):用于过滤数据包的进出,其中又包含了3个链:

INPUT:负责过滤进入主机的数据包

OUTPUT:负责过滤主机发出的数据包

FORWARD:负责转发该主机的数据包到其他目标地址

nat表(网络地址转换):多用于内外网地址转换,包含了3个链:

PREROUTING:实现DNAT功能,改变数据包的目的地址,多用于局域网接收公网数据时将目标的地址转换为局域网的一个地址

POSTROUTING:实现SNAT功能,改变数据包的源地址,多用于局域网向公网发送数据时将地址转换为公网地址

OUTPUT:同filter

mangle表与raw表很少使用,这里略


iptables语法规则:

首先看一条命令,这条命令是给INPUT链增加一条规则,当访问目标为tcp协议的80端口则允许(其中的-t选项可不加,因为默认就是filter表)

1 [root@iZ25aj1q2ovZ ~]# iptables -t filter -A INPUT -p tcp --dport 80 -j ACCEPT


iptables常用选项(注意大小写)

-A |-D |-I  [CHAINS]    #给指定的链增加或者删除或者插入一个规则

1 [root@iZ25aj1q2ovZ ~]# iptables -A INPUT -p tcp --dport 80 -j DROP    #先定义一条规则用于测试 
2 [root@iZ25aj1q2ovZ ~]# iptables -L --line-numbers    #加上--line-numbers参数可以显示规则的编号,可以看到之前设置的编号为1
3 Chain INPUT (policy ACCEPT)
4 num  target     prot opt source              destination        
5 1    DROP       tcp  --  anywhere             anywhere            tcp dpt:http
6      
7 [root@iZ25aj1q2ovZ ~]# iptables -D INPUT 1    #删除编号为1的规则


-L    #显示所有链下的所有规则,可以跟上-n选项,对主机或端口信息不做反向解析

1 [root@iZ25aj1q2ovZ ~]# iptables -L -n  
2 Chain INPUT (policy ACCEPT)    #INPUT链下的规则
3 target     prot opt source               destination        
4  
5 Chain FORWARD (policy ACCEPT)    #FORWARD链下的规则
6 target     prot opt source               destination        
7  
8 Chain OUTPUT (policy ACCEPT)    #OUTPUT链下的规则
9 target     prot opt source               destination


-X    #清空用户自定义规则

-Z    #计数器归零

-F    #清空所有规则

-j  ACCEPT|DROP|REJECT|DNAT|SNAT|MASQUERADE|MARK     #指定防火墙的行为,ACCEPT是允许;DROP是丢弃(放弃响应对方请求且不作答复);REJECT是拒绝(会明确给对方一个消息说自己拒绝请求);DNAT为目标地址转换;SNAT为源地址转换;MASQUERADE是地址伪装;MARK防火墙标记,可用于LVS持久连接

-p(小写)    #指定协议,如tcp、udp、icmp、all

-P(大写)    #指定默认的规则。在生产环境中一般把默认规则设置为拒绝,然后对需要放行的服务设置允许规则,不过再做这个设置时要注意先把22端口放行,不然自己就无法远程上服务器了

1 iptables -P INPUT DROP    #把INPUT链的默认规则改为DROP
2   


iptables2.png

-s    #指定源地址,通常是对访问来源做限制

--dport    #指定目标端口,通常是对访问的端口做限制,可以指定连续的端口

--sport    #指定源端口

iptables扩展选项:

所有扩展选项都通过-m来指定,然后再指定子选项,以下是iptables常用扩展选项的用法

1、multiport扩展:可以离散定义多个端口,最多指定15个

[!] --source-ports,--sports port[,port|,port:port]...:指定多个源端口

[!] --destination-ports,--dports port[,port|,port:port]...:指定多个目标端口

[!] --ports port[,port|,port:port]...:同时指定源端口和目标端口

1 iptables -t filter -A INPUT -s 192.168.100.10 -d 192.168.100.20 -p tcp -m multiport --dports 22,80 -j ACCEPT


2、iprange扩展:指明连续的IP地址范围

[!] --src-range from[-to]:源IP地址

[!] --dst-range from[-to]:目标IP地址

1 iptables -A INPUT -p tcp --dport 80 -m iprange --src-range 192.168.100.50-192.168.100.60 -j DROP  #拒绝192.168.100.50-60这几个IP对80端口的访问


3、connlimit扩展:根据客户端IP并发连接数做限制

--connlimit-upto n:连接的数量小于等于n时匹配

--connlimit-above n:连接的数量大于n时匹配

1 iptables -A INPUT -p tcp --dport 80 -m connlimit --connlimit-above 10 -j DROP  #对80端口连接数大于10个就拒绝


4、limit扩展:基于速率做限制

--limit rate[/second|/minute|/hour|/day]:平均速率

--limit-burst number:初始放行数量

iptables -I INPUT -d 192.168.100.10 -p icmp -m limit --limit 3/minute

5、state扩展:根据连接追踪机制检查连接的状态

[!] --state statestate包含以下几种状态

NEW:新请求

ESTABLISHED:NEW状态后所建立好的连接

RELATED:相关联的连接,如FTP服务有2个端口且相关

INVALID:无效连接

1 iptables -A INPUT -d 192.168.100.10 -p tcp -m multiport --dports 22,80 -m state --state NEW,ESTABLISHED -j ACCEPT


 

iptables连接跟踪表最大容量问题:

1、加大nf_conntrack_max值(/pro/sys/net/ipv4/nf_conntrack_max)

2、降低nf_conntrack_timeout值(/pro/sys/net/ipv4/nf_conntrack_timeout)

iptables规则的保存

通过命令对iptables做的操作都是临时生效,重启服务后就会失效,要永久生效的话需要保存配置信息,或者用iptables-save > filename 来把配置重定向到一个文件中,日后再用iptabels-restore < filename恢复

1 [root@iZ25aj1q2ovZ ~]# service iptables save
2 iptables: Saving firewall rules to /etc/sysconfig/iptables:[  OK  ]
3 [root@iZ25aj1q2ovZ ~]# /etc/init.d/iptables save
4 iptables: Saving firewall rules to /etc/sysconfig/iptables:[  OK  ]
 
全文完
本文标签: 防火墙iptables
本文标题: iptables基础语法与iptables扩展选项详细说明
本文链接: http://www.90qj.com/m/?post=381

〓 随机文章推荐

共有5857阅 / 6我要评论
  1. @微信一键转发:谢谢支持~ 么么哒
  2. 从百度点进来的,支持一下,希望站长您多出一些好文章。
  3. @今日捷财:<div class="zdy">
        <h2></h2>
        <ul>
        <h3>有空帮我喂下老鼠,谢谢!</h3><div class="textwidget"><p><object type="application/x-shockwave-flash" style="outline:none;" data="http://cdn.abowman.com/widgets/hamster/hamster.swf?" width="263" height="200"><param name="movie" value="http://cdn.abowman.com/widgets/hamster/hamster.swf?"></param><param name="AllowScriptAccess" value="always"></param><param name="wmode" value="opaque"></param></object></p>    </ul>
        </div>
  4. 我也发现那个很好玩,代码能分析吗?
  5. Mr.linus板凳
    @威客兼职:就是嵌套了一个div,这种flash动画网上很多的
  6. 我就想问右侧的喂老鼠是什么情况?怎么做到的?还蛮好玩的,有点像QQ宠物,呵呵呵

发表你的评论吧返回顶部

!评论内容需包含中文


请勾选本项再提交评论