iptables 规则记录

本博客参考博客地址朱双印的博客

iptables 分为链,表,,匹配条件,处理动作
- 链:prerouting ,forward ,postrouting ,input,output
- 表:filter,mangle,nat,raw
- 匹配条件:源地址,目标地址,源端口,目标端口
- 处理动作
ACCEPT,DROP,REJECT,SNAT,MASQUERADE,DNAT,REDIRECT,LOG


链,表,处理动作之间的关系

数据经过防火墙的流程

iptables 的管理规则:

1.查看指定链的规则:

iptables -nL 链名
iptables -nL INPUT

2.刷新之前规则:

iptables -F 链名
iptables -F INPUT   

3.增加规则:

iptables -t-I/A 链 -s 源地址 -j 处理动作
-I表示在最前插入,-A表示在最后追加
如果报文被前边的规则匹配到,那么就不会再被后边的规则匹配。
iptables -t filter -I INPUT  -s 192.168.1.1 -j DROP
如果表是filter 可以默认不使用
iptables -nvL
Chain INPUT (policy ACCEPT 28 packets, 1900 bytes)
 pkts bytes target     prot opt in     out     source               destination         
    0     0 DROP       all  --  *      *       192.168.1.1          0.0.0.0/0 
在iptables 中,target 表示动作
pkts 表示有多少包被匹配到,bytes 表示匹配的总大小为多少    

4.删除规则:

删除规则有两种方法:
根据规则编号
根据规则匹配条件和动作
查看规则编号:
iptables --line -vnL INPUT
iptables --line -nvL INPUT
Chain INPUT (policy ACCEPT 236 packets, 24265 bytes)
num   pkts bytes target     prot opt in     out     source               destination         
1        0     0 DROP       all  --  *      *       192.168.1.1          0.0.0.0/0  
进行删除规则:
iptables -t filter -D INPUT  1
iptables -D INPUT -s 192.168.1.1 -j DROP 
删除表上的规则
iptables -t 表名 -F
iptables -F 

5.修改规则:

iptables -R INPUT 1 -s 192.168.1.1 -j REJECT 
-R 选项表示修改指定的链, 1 表示指定链的第一条规则,-s 选项表示规则对应的源地址,且**-s 不可省略**,即使我们已经指定了规则对应的编号,使用-R修改规则时,也不能省略,如果么有指定的话,修改完成后,规则中的源地址自动变为0.0.0.0/0 ,-j 又是REJECT ,这样,所有的ip 请求都被拒绝。
建议 先删除,再重建。

6.保存规则:

service iptables save
cat /etc/sysconfig/iptables
iptabls-save ,将所有的规则输出到屏幕上
可以使用重定向将其放入配置文件中,原有规则会被覆盖

7.设置默认规则

iptables -t 表名 -P 链名 动作
表示将链名中的默认规则设置为动作。 

匹配条件的更多用法

-s 指定多个IP或者指定地址段

iptables -t filter -I INPUT -s 192.168.1.1,182.234.21.1 -j DROP
iptables -t filter -I INPUT -s 192.168.1.0/24  -j DROP

对源地址匹配条件取反

iptables -I INPUT ! -s 120.26.48.161 -j ACCEPT
iptables -t filter  -P INPUT ACCEPT
! s 表示对120.26.48.161 不匹配,并没有指定如果是120 的话,如何处理,所以,当120 进行ping 时,匹配不到这个规则,所以继续向下匹配,最后匹配到默认规则。默认规则 时ACCEPT

-d 匹配目标地址

iptables -t filter -I INPUT -s 192.168.21.1 -d 192.158.13.2 -j ACCEPT 
表示只有报文来自192.168.21.1,且目的地是192.158.13.2  才会被匹配到。 

-p 协议类型
如果要拒绝所有tcp 请求,那么可以如下设置:

iptables -t filter -I INPUT  -s 192.168.1.1 -d 192.168.1.2 -p tcp -j REJECT 
在centos6 中,-p 选项支持:
tcp ,udp,udplite icmp esp ah ,sctp
tcp : ssh 
icmp : ping 

-i -o 网卡接口
当主机有多个网卡时,我们可以使用-i 选项来匹配报文是通过那块网卡流入本机的。
由于是流入本机,根据上边的数据流向图可以看出:
-i 选项只适用于PREROUTING ,FORWARD , INPUT 三条链
当主机有多个网卡时,我们可以使用-o选项来匹配报文是通过那块网卡流出本机的。
由于是流出本机,根据上边的数据流向图可以看出:
FORWARD OUTPUT POSTROUTING 三条链, FORWARD 属于中立链,能同时适用于-i 和-o
扩展匹配条件
除了上边的匹配地址,匹配网卡,匹配协议,剩下的都是扩展匹配,扩展匹配要指定扩展模块
如果没有使用-m 指定对应的扩展模块,那么就会默认使用与-p 对应协议名称相同的模块

iptables -t filter -I INPUT -s 192.168.1.22 -p tcp -m tcp --dport 22 -j REJECT
-p 指协议 -m 指模块 --dport 指目标端口 --sport 指源端口 可以指定范围但无法离散指定多个不连续的端口:--dport 20:3306 。 如果需要指定多个离散的端口,需要借助multiport 模块
--dport 22: 指22 端口后的所有端口
iptables -t filter -I INPUT  -s 192.168.1.22 -p tcp -m multiport --dport 22,33,44 -j REJECT
 ``` 
 **iprange 扩展模块**
 如果我们需要指定一段连续的IP地址范围,用于匹配报文的源地址或者目标地址,就需要指定iprange模块
 iprange 的两个扩展匹配条件:
 --scr-range     --dst-range 用来匹配范围IP

iptables -I INPUT -s 192.168.1.22 -m iprange –src-range 192.168.1.22-192.168.1.33 -j DROP
iptables -I INPUT -s 192.168.1.22 -p tcp -m iprange –src-range 192.168.1.22-192.168.1.33 -j DROP

**string扩展模块**
使用string 模块,可以指定需要匹配的字符串,如果报文中包含对应的字符串,那么符合匹配条件

创建一个http 服务,在首页写上要过滤的字符。
iptables -I OUTPUT -m string –algo bm –string “hello” -j REJECT
那么,无法通过http 协议访问到该网页
–algo 用于表示匹配算法,可选算法有bm 和kmp ,此选项为必选项,可以任意指定一个
–string 用于指定需要匹配那个字符串

**time 模块**
用于限制访问时间
**connlimit 扩展模块**
connlimit 模块可以限制每个IP地址同时连接到server 的链接数量,不用指定IP,默认就是所有。
如果我们要限制,每个IP,最多只能有两个ssh  连接到server,那么,可以如下:

iptables -I INPUT -p tcp -m tcp –dport 22 -m connlimit –connlimit-above 2 -j REJECT
表示每个客户端IP的ssh 请求最多不能高于2
iptables -I INPUT -p tcp –dport 22 -m connlimit –connlimit-above 2 –connlimit-mask 24 -j DROP
表示在24位子网内,只有2个客户端可以连接。

**limit 扩展模块**
connlimit 是针对链接数量进行限制的,limit模块是对"报文到达速率"限制的
我们可以用limit 限制单位时间内流入的流量。
我们可以以秒,分钟,小时,计算。 
比如,限制每秒最多流入3个包,每分钟限制30个包,等等。。

iptables -I INPUT -m limit -p icmp –limit 10/minute -j ACCEPT
iptables -A INPUT -p icmp -j REJECT
第一条规则: 每6秒放行一个包,到第六秒时,达到的报文就会进行规则匹配,执行对应的动作,而上面的动作是ACCEPT,在6秒之前到达的包是无法被上述规则匹配到的,而默认匹配规则是ACCEPT,所以,所有的报文包,都会被接受
添加上第二条规则后,报文默认是REJECT ,没有到第6个包之前,所有的包都拒绝,到第六个包,接受。 所以,ping 报文放行的速率就会发生变化。
注意: limit模块使用了令牌桶算法,使用–limit 用于指定多长时间生成一个新令牌,而–limit-bust 用于指定木桶中存放几块令牌,只有持有令牌的包才能从防火墙中穿过。
(实验未成功,需要外加验证)

tcp 扩展模块”tcp-flags”
TCP报文结构
tcp 报文结构
TCP的三次握手
TCP三次握手
在使用iptables 时,使用TCP扩展模块”–TCP-flags”选项对应上述的标志位进行匹配。判断指定的标志位值是否为1

iptables -t filter -I INPUT -p tcp -m tcp --dport 22 --tcp-flags SYN,ACK,FIN,RST,URG,PSH SYN -j REJECT

SYN,ACK,FIN,RST,URG,PSH 表示我们需要匹配报文的TCP头中的那些标志位,根据上述的配置,我们要匹配报文中的6个标志位。
SYN表示在第一部分的表示列表中,那些标志位必须为1 。

iptables -t filter -I INPUT -p tcp -m tcp --dport 22 --tcp-flags SYN,ACK,FIN,RST,URG,PSH SYN -j REJECT
表示匹配第一次握手的标志位的情况
iptables -t filter -I INPUT -p tcp -m tcp --dport 22 --tcp-flags SYN,ACK,FIN,RST,URG,PSH SYN,ACK -j REJECT
表示匹配第二次握手的情况
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值