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

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

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

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

input chain

1)Chain INPUT (policy ACCEPT)
)target     prot opt source               destination         
)ACCEPT     all  --  anywhere             anywhere            state RELATED,ESTABLISHED
)ACCEPT     icmp --  anywhere             anywhere                    
)ACCEPT     tcp  --  anywhere             anywhere            state NEW tcp dpt:ssh
)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可以看到效果,不再演示

最新文章

  1. C#-WebForm-点击网页中的按钮后跳转到其他页面是怎么实现的?
  2. [html]选项卡效果
  3. FILTER优化
  4. 从零开始学习jquery (二)
  5. Unity FixedUpdate 与 Update 的线程关系实验
  6. Android View动画
  7. 七牛云存储C#例用小例子 C#笔记
  8. php生成图片缩略图的类方法
  9. Struts框架中struts-config.xml文件配置小结
  10. html中几种常见长度单位介绍
  11. iterm2 快捷键大全
  12. 痞子衡嵌入式:ARM Cortex-M文件那些事(5)- 映射文件(.map)
  13. 20172328 2018-2019《Java软件结构与数据结构》第八周学习总结
  14. 2019 年 Spread.NET 产品路线图(Roadmap)
  15. June 16. 2018, Week 24th. Saturday
  16. Python_socket
  17. CF294C Shaass and Lights
  18. 最短路算法模板--SPFA
  19. 图片的Base64编码
  20. perl debug

热门文章

  1. python语法入门之变量
  2. tp中model加载机制
  3. vue中methods、computed、watch区别
  4. 设计模式 AOP,OOP
  5. 不会前后端,用vps搭建个人博客(二)
  6. 不一样的go语言-玩转语法之一
  7. git 学习笔记---操作标签
  8. 打印从1到n位数的最大值
  9. Windows 创建 Redis 和 zookeeper 系统服务
  10. ASP.NET SignalR 系列(二)之项目创建