iptables 规则学习

iptables 一共有 3 张表:mangle,nat,filter

mangle 表主要处理 ttl,tos,mark 等信息(进)

filter 顾名思义就是过滤器,用作防火墙(出)

nat 主要处理 ip、端口转换的信息

 

input chain

1
)Chain INPUT (policy ACCEPT) 2)target     prot opt source               destination          3)ACCEPT     all  --  anywhere             anywhere            state RELATED,ESTABLISHED 4)ACCEPT     icmp --  anywhere             anywhere                     5)ACCEPT     tcp  --  anywhere             anywhere            state NEW tcp dpt:ssh 6)ACCEPT     tcp  --  anywhere             anywhere            state NEW tcp dpt:http

 

chain:chain 就是要执行的防火墙操作的列表;

Chain INPUT:Ip 包发往本机的时候要进行的防火墙操作;

Chain FORWARD:目的地不是本机的时候,要进行的防火墙的操作;

Chain OUTPUT:本机发出的包需要进行的防火墙的操作;

Chain POSTROUTING:进入本机路由变换前进行的防火墙操作;

Chain QoSAppRule0:进行路由转换操作后进行的防火墙操作;

chain 还可以自定义新增 chain,自定义的 chain 由系统定义的 chain 里跳入,执行完后跳回原来的 chain

policy Accept :的意思是如果 Chain 中的所有条目都没有命中并执行,则默认 Accept放行

第3行 的意思是 匹配 连接的状态(什么是连接的状态?https://blog.csdn.net/jcxch/article/details/52536425)若连接的状态被防火墙判断为 related 或者 established 的话,就 Accept 放行。

related 指代某个已经放行的通讯相关联的端口通讯

establish 的意思是已经建立连接的话那么就放行(何为已经建立连接?就是本地发出去一堆信息,远程有回应信息   或者 远程发一堆信息 本地有回应信息)

第5行 如果是连接到 ssh 端口的 状态为 NEW 的连接,则放行(状态为 NEW 的意思是,发出去一堆信息,还没有收到回应  或者 收到一堆信息,还没有回应)

 

output chain

1)Chain OUTPUT (policy ACCEPT)
2)target     prot opt source               destination      

 

第一行标明了如果没有匹配的规则,则放行,也就是说 本地总是可以发信息到外面,一旦发出去,那么连接就变成了 new 只要对方有回应 连接就变成 establish,在 input 的列表里 establish 是放行的

pkts:由规则或链所匹配到的报文的个数;

bytes:由规则或链匹配到的所有报文大小之和;

target :  处理机制;

prot: 协议:tcp, udp, icmp等,放行哪种协议;

opt :    额外的选项,--表示没有 ;

source :源地址

destination :目标地址

保存规则:

[root@test3~]#/etc/init.d/iptables save

保存规则至其他文件

[root@test3~]# iptables-save > /tmp/iptables  

加载iptables文件规则

[root@test3~]# iptables-resotre < /tmp/iptables  

 显式扩展

在iptalbes中数据包和被跟踪连接的4种不同状态相关联,这四种状态分别是NEW、ESTABLISHED、RELATED及INVALID,除了本机产生的数据包由NAT表的OUTPUT链处理外,所有连接跟踪都是在NAT表的PREROUTING链中进行处理的,也就是说iptables在NAT表的PREROUTING链里从新计算所有数据包的状态。如果发送一个流的初始化数据包,状态就会在NAT表的OUTPUT链里被设置为NEW,当收到回应的数据包时,状态就会在NAT表的PREROUTING链里被设置为ESTABLISHED,如果第一个数据包不是本机生成的,那就回在NAT表PREROUTING链里被设置为NEW状态,所以所有状态的改变和计算都是在NAT表中的表链和OUTPUT链里完成的。

使用-m来指定其状态并赋予匹配规则,语法如下

-mstate --state 状态

   NEW

   ESTABLISHED

   RELATED          

   INVALID

NEW:

NEW状态的数据包说明这个数据包是收到的第一个数据包。比如收到一个SYN数据包,它是连接的第一个数据包,就会匹配NEW状态。第一个包也可能不是SYN包,但它仍会被认为是NEW状态。

ESTABLISHED:

只要发送并接到应答,一个数据连接就从NEW变为ESTABLISHED,而且该状态会继续匹配这个连接后继数据包。

RELATED:

当一个连接和某个已处于ESTABLISHED状态的连接有关系时,就被认为是RELATED,也就是说,一个连接想要是RELATED的,首先要有个ESTABLISHED的连接,这个ESTABLISHED连接再产生一个主连接之外的连接,这个新的连接就是RELATED。

INVALID:

INVALID状态说明数据包不能被识别属于哪个连接或没有任何状态。

例:

对本机22端口做状态监测:

进来的请求状态为new,而出去的状态则为ESTABLISHED,如果自动连接别人 状态肯定为NEW,如果正常去响应别人那么状态肯定是ESTABLISHED

[root@test3~]# iptables -I INPUT -s 10.0.10.0/24 -d 10.0.10.62 -p tcp --dport 22 -m state--state NEW,ESTABLISHED -j ACCEPT

出口的响应都必须是ESTABLISHED

[root@test3~]# iptables -A OUTPUT -s 10.0.10.62 -d 10.0.10.0/24 -p tcp --dport 22 -m state--state ESTABLISHED -j ACCEPT

[root@test3~]# iptables -L -n

ChainINPUT (policy ACCEPT)

target     prot opt source               destination        

ACCEPT     tcp --  10.0.10.0/24         10.0.10.62          tcp dpt:22 state NEW,ESTABLISHED

 

ChainFORWARD (policy DROP)

target     prot opt source               destination        

 

ChainOUTPUT (policy ACCEPT)

target     prot opt source               destination        

ACCEPT     tcp  -- 10.0.10.62          10.0.10.0/24        tcp dpt:22state ESTABLISHED

多端口规则匹配

使用参数-m multiport 可以指定15个以内的非连续端口,比如21-22,80

-mmulitport  

   --src-prots

   --dst-ports

   --prots

#对多端口进行匹配,只要匹配以下端口,则全部放行

[root@test3~]# iptables -A INPUT  -s 10.0.10.0/24 -d10.0.10.62 -p tcp -m state --state NEW  -m mulitport--destination-ports 21,22,80 -j ACCEPT

多IP匹配,指定匹配的IP地址范围:

-miprange

   --src-range

   --dst-range

指定匹配的连续ip段

[root@test3~]# iptables -A INPUT -s  -m iprange --src-range 10.0.10.100-10.0.10.200

指定速率匹配

默认为每秒匹配3个报文,基于令牌桶算法

-mlimit

   --limit             #NUMBER,表示允许收集多少个空闲令牌

   --limit-burst          #RATE,允许放行多少个报文

比如:ssh一分钟之内只能建立20个链接,平均5秒一个,而一次性只能放行2个空闲令牌

   --limit 20/min

   --limit-burst 2

只有在大量空闲令牌存储的情况下,才可有limit-burst控制

例:控制NEW状态的请求

[root@test3~]# iptables -A INPUT -s 10.0.10.0/24 -d 10.0.10.62 -m state --state NEW -mlimit --limit 12/min --limit 12/min --limit-burst 2 -j ACCEPT

例2:每次只允许2个ping包进来

[root@test3~]# iptables -F

[root@test3~]# iptables -A INPUT -s 10.0.10.0/24 -d 10.0.10.62 -p icmp --icmp-type 8 -mlimit --limit 20/min --limit-burst 5 -j ACCEPT

新建立一终端,在其终端ping10.0.10.62可以看到效果,不再演示

posted @ 2018-07-31 11:04  LLSix  阅读(328)  评论(0编辑  收藏  举报