iptables学习笔记

toc

iptables学习目录链接:https://www.zsythink.net/archives/tag/iptables/page/2

一、iptables概念:

iptables其实不是真正的防火墙,我们可以把它理解成一个客户端代理,用户通过iptables这个代理,将用户的安全设定执行到对应的”安全框架”中,这个”安全框架”才是真正的防火墙,这个框架的名字叫netfilter
netfilter才是防火墙真正的安全框架(framework),netfilter位于内核空间。
iptables其实是一个命令行工具,位于用户空间,我们用这个工具操作真正的框架。
netfilter/iptables(下文中简称为iptables)组成Linux平台下的包过滤防火墙,与大多数的Linux软件一样,这个包过滤防火墙是免费的,它可以代替昂贵的商业防火墙解决方案,完成封包过滤、封包重定向和网络地址转换(NAT)等功能。

1.1、iptables表:

功能
filter表 负责过滤功能,防火墙;内核模块:iptables_filter
nat表 network address translation,网络地址转换功能;内核模块:iptable_nat
mangle表 拆解报文,做出修改,并重新封装的功能;iptable_mangle
raw表 关闭nat表上启用的连接追踪机制;iptable_raw

1.2、数据经过防火墙的流程图:

注意:实际的使用过程中,往往是通过”表”作为操作入口,对规则进行定义的
优先级次序(由高而低):
raw –> mangle –> nat –> filter

链的规则存放于哪些表中(从链到表的对应关系):

PREROUTING 的规则可以存在于:raw表,mangle表,nat表。
INPUT 的规则可以存在于:mangle表,filter表,(centos7中还有nat表,centos6中没有)。
FORWARD 的规则可以存在于:mangle表,filter表。
OUTPUT 的规则可以存在于:raw表mangle表,nat表,filter表。
POSTROUTING 的规则可以存在于:mangle表,nat表。

表中的规则可以被哪些链使用(从表到链的对应关系):

表-功能 链-钩子
raw 表中的规则可以被哪些链使用:PREROUTING,OUTPUT
mangle 表中的规则可以被哪些链使用:PREROUTING,INPUT,FORWARD,OUTPUT,POSTROUTING
nat 表中的规则可以被哪些链使用:PREROUTING,OUTPUT,POSTROUTING(centos7中还有INPUT,centos6中没有)
filter 表中的规则可以被哪些链使用:INPUT,FORWARD,OUTPUT

1.3、 规则的概念(处理动作)

动作 注解
ACCEPT: 允许数据包通过。
DROP: 直接丢弃数据包,不给任何回应信息,这时候客户端会感觉自己的请求泥牛入海了,过了超时时间才会有反应。
REJECT: 拒绝数据包通过,必要时会给数据发送端一个响应的信息,客户端刚请求就会收到拒绝的信息。
SNAT: 源地址转换,解决内网用户用同一个公网地址上网的问题。
MASQUERADE: 是SNAT的一种特殊形式,适用于动态的、临时会变的ip上。
DNAT: 目标地址转换。
REDIRECT: 在本机做端口映射。
LOG: 在/var/log/messages文件中记录日志信息,然后将数据包传递给下一条规则,也就是说除了记录以外不对数据包做任何其他操作,仍然让下一条规则去匹配

[========]

二、iptables操作之规则查询:

2.1、查询格式举例:

iptables -t 表名 -L
查看对应表的所有规则,-t选项指定表,省略”-t 表名”时,默认filter表,-L表示列出规则,即查看规则。
表名参数:filter,raw,mangle,nat

iptables -t 表名 -L 链名
查看指定表的指定链中的规则。
链名参数:PREROUTING,INPUT,FORWARD,OUTPUT,POSTROUTING

iptables -t 表名 -v -L
-v表示verbose详细信息,会显示出”计数器”的信息

iptables -t 表名 -n -L
在显示规则时,不对规则中的IP或者端口进行名称反解,-n选项表示不解析IP地址

iptables --line-numbers -t 表名 -L
显示规则的序号,–line-numbers选项表示显示规则的序号,可以简写为--line

iptables -t 表名 -v -x -L
或iptables --line -t filter -nvxL
显示更详细的信息(-v选项,计数器中的信息显示为精确的计数值),-x选项表示显示计数器的精确值。

iptables --line -t filter -nvxL INPUT
只查看某张表中的某条链,此处以filter表的INPUT链

查询参数总结:

查参数 注解
-t 指定表名,省略默认filter表
-L 列出规则,可指定链名
-v 显示详细信息及计数器
-x 和-vx一起使用,显示计数器精确值
-n 不解析IP地址,更易读
--line --line-numbers显示规则序号

2.2、查询规则说明举例:

[root@elk-test ~]# iptables --line -t filter -vnL
Chain INPUT (policy ACCEPT 108K packets, 52M bytes)
num   pkts bytes target     prot opt in     out     source               destination

Chain FORWARD (policy DROP 0 packets, 0 bytes)
num   pkts bytes target     prot opt in     out     source               destination
1     3353  187K DOCKER-USER  all  --  *      *       0.0.0.0/0            0.0.0.0/0
2     3353  187K DOCKER-ISOLATION-STAGE-1  all  --  *      *       0.0.0.0/0            0.0.0.0/0
3      716 28640 ACCEPT     all  --  *      docker0  0.0.0.0/0            0.0.0.0/0            ctstate RELATED,ESTABLISHED
4        0     0 DOCKER     all  --  *      docker0  0.0.0.0/0            0.0.0.0/0
5     2637  158K ACCEPT     all  --  docker0 !docker0  0.0.0.0/0            0.0.0.0/0
6        0     0 ACCEPT     all  --  docker0 docker0  0.0.0.0/0            0.0.0.0/0

Chain OUTPUT (policy ACCEPT 102K packets, 27M bytes)
num   pkts bytes target     prot opt in     out     source               destination

Chain DOCKER (1 references)
num   pkts bytes target     prot opt in     out     source               destination
1        0     0 ACCEPT     tcp  --  !docker0 docker0  0.0.0.0/0            172.17.0.2           tcp dpt:5000
2        0     0 ACCEPT     tcp  --  !docker0 docker0  0.0.0.0/0            172.17.0.2           tcp dpt:2222
3        0     0 ACCEPT     tcp  --  !docker0 docker0  0.0.0.0/0            172.17.0.3           tcp dpt:8080

Chain DOCKER-ISOLATION-STAGE-1 (1 references)
num   pkts bytes target     prot opt in     out     source               destination
1     2637  158K DOCKER-ISOLATION-STAGE-2  all  --  docker0 !docker0  0.0.0.0/0            0.0.0.0/0
2     3353  187K RETURN     all  --  *      *       0.0.0.0/0            0.0.0.0/0

Chain DOCKER-ISOLATION-STAGE-2 (1 references)
num   pkts bytes target     prot opt in     out     source               destination
1        0     0 DROP       all  --  *      docker0  0.0.0.0/0            0.0.0.0/0
2     2637  158K RETURN     all  --  *      *       0.0.0.0/0            0.0.0.0/0

Chain DOCKER-USER (1 references)
num   pkts bytes target     prot opt in     out     source               destination
1     3353  187K RETURN     all  --  *      *       0.0.0.0/0            0.0.0.0/0

注解一:

Chain INPUT (policy ACCEPT 108K packets, 52M bytes)

链名:INPUT
packets:匹配到的包的数量
bytes:策略匹配到的所有包的大小总和

注解二:

Chain FORWARD (policy DROP 0 packets, 0 bytes)
num   pkts  bytes   target       prot   opt   in     out     source         destination
1     3353  187K   DOCKER-USER    all   --    *      *       0.0.0.0/0      0.0.0.0/0
  • pkts:对应规则匹配到的报文的个数
  • bytes:对应匹配到的报文包的大小总和。
  • target:规则对应的target,往往表示规则对应的”动作”,即规则匹配成功后需要采取的措施。
  • prot:表示规则对应的协议,是否只针对某些协议应用此规则。
  • opt:表示规则对应的选项。
  • in:表示数据包由哪个接口(网卡)流入,我们可以设置通过哪块网卡流入的报文需要匹配当前规则。
  • out:表示数据包由哪个接口(网卡)流出,我们可以设置通过哪块网卡流出的报文需要匹配当前规则。
  • source:表示规则对应的源头地址,可以是一个IP,也可以是一个网段。
  • destination:表示规则对应的目标地址。可以是一个IP,也可以是一个网段。

三、增,删,改,存

3.1、增

#在指定表的指定链的尾部添加一条规则,-A选项表示在对应链的(末尾添加)规则,省略-t选项时,表示默认操作filter表中的规则
命令语法:iptables -t 表名 -A 链名 匹配条件 -j 动作
示例:
[root@elk-test ~]# iptables -t filter -A INPUT -s 192.168.87.131 -j DROP
[root@elk-test ~]# iptables --line -nvL  INPUT
Chain INPUT (policy ACCEPT 43 packets, 10522 bytes)
num   pkts bytes target     prot opt in     out     source               destination
1        0     0 DROP       all  --  *      *       192.168.87.131       0.0.0.0/0

#在指定表的指定链的首部添加一条规则,-I选型表示在对应链的开头添加规则(默认开头处)
命令语法:iptables -t 表名 -I 链名 匹配条件 -j 动作
示例:
[root@elk-test ~]# iptables -t filter -I INPUT -s 192.168.87.131 -j ACCEPT
[root@elk-test ~]# iptables --line -nvL  INPUT
Chain INPUT (policy ACCEPT 46 packets, 10778 bytes)
num   pkts bytes target     prot opt in     out     source               destination
1        0     0 ACCEPT     all  --  *      *       192.168.87.131       0.0.0.0/0
2        0     0 DROP       all  --  *      *       192.168.87.131       0.0.0.0/0

#在指定表的指定链的(指定位置)加一条规则
命令语法:iptables -t 表名 -I 链名 规则序号 匹配条件 -j 动作
示例:
[root@elk-test ~]# iptables -t filter -I INPUT 3 -s 192.168.87.131 -j REJECT
[root@elk-test ~]# iptables --line -nvL  INPUT
Chain INPUT (policy ACCEPT 86 packets, 17412 bytes)
num   pkts bytes target     prot opt in     out     source               destination
1        0     0 ACCEPT     all  --  *      *       192.168.87.131       0.0.0.0/0
2        0     0 REJECT     all  --  *      *       192.168.87.131       0.0.0.0/0            reject-with icmp-port-unreachable
3        0     0 DROP       all  --  *      *       192.168.87.131       0.0.0.0/0

增参数总结:

参数 注解
-A 追加,末尾处追加
-I 插入,默认开头处,可指定行数位置(大写i)

3.2。删

#按照规则序号删除规则,删除指定表的指定链的指定规则,-D选项表示删除对应链中的规则。
命令语法:iptables -t 表名 -D 链名 规则序号
示例:iptables -t filter -D INPUT 3

删除filter表中INPUT链中序号为3的规则
[root@elk-test ~]# iptables --line -nvL INPUT
Chain INPUT (policy ACCEPT 13294 packets, 3822K bytes)
num   pkts bytes target     prot opt in     out     source               destination
1        0     0 REJECT     all  --  *      *       192.168.87.131       0.0.0.0/0            reject-with icmp-port-unreachable
2        0     0 ACCEPT     all  --  *      *       192.168.87.131       0.0.0.0/0
3        0     0 REJECT     all  --  *      *       192.168.87.131       0.0.0.0/0            reject-with icmp-port-unreachable
4        0     0 DROP       all  --  *      *       192.168.87.131       0.0.0.0/0
[root@elk-test ~]# iptables -t filter -D  INPUT 3
[root@elk-test ~]# iptables --line -nvL INPUT
Chain INPUT (policy ACCEPT 63 packets, 17839 bytes)
num   pkts bytes target     prot opt in     out     source               destination
1        0     0 REJECT     all  --  *      *       192.168.87.131       0.0.0.0/0            reject-with icmp-port-unreachable
2        0     0 ACCEPT     all  --  *      *       192.168.87.131       0.0.0.0/0
3        0     0 DROP       all  --  *      *       192.168.87.131       0.0.0.0/0


#按照具体的匹配条件与动作删除规则,删除指定表的指定链的指定规则。
命令语法:iptables -t 表名 -D 链名 匹配条件 -j 动作
示例:iptables -t filter -D INPUT -s 192.168.87.131 -j DROP

默认从上至下匹配,匹配到第一点删除后停止
[root@elk-test ~]# iptables --line -nvL INPUT
Chain INPUT (policy ACCEPT 146 packets, 35399 bytes)
num   pkts bytes target     prot opt in     out     source               destination
1        0     0 DROP       all  --  *      *       192.168.87.131       0.0.0.0/0
2        0     0 REJECT     all  --  *      *       192.168.87.131       0.0.0.0/0            reject-with icmp-port-unreachable
3        0     0 ACCEPT     all  --  *      *       192.168.87.131       0.0.0.0/0
4        0     0 DROP       all  --  *      *       192.168.87.131       0.0.0.0/0
[root@elk-test ~]# iptables -t filter -D  INPUT -s 192.168.87.131 -j DROP
[root@elk-test ~]# iptables --line -nvL INPUT
Chain INPUT (policy ACCEPT 44 packets, 10598 bytes)
num   pkts bytes target     prot opt in     out     source               destination
1        0     0 REJECT     all  --  *      *       192.168.87.131       0.0.0.0/0            reject-with icmp-port-unreachable
2        0     0 ACCEPT     all  --  *      *       192.168.87.131       0.0.0.0/0
3        0     0 DROP       all  --  *      *       192.168.87.131       0.0.0.0/0


#删除指定表的指定链中的所有规则,-F选项表示清空对应链中的规则,执行时需三思
命令语法:iptables -t 表名 -F 链名
示例:iptables -t filter -F INPUT

[root@elk-test ~]# iptables --line -nvL INPUT
Chain INPUT (policy ACCEPT 55 packets, 11221 bytes)
num   pkts bytes target     prot opt in     out     source               destination
1        0     0 REJECT     all  --  *      *       192.168.87.131       0.0.0.0/0            reject-with icmp-port-unreachable
2        0     0 ACCEPT     all  --  *      *       192.168.87.131       0.0.0.0/0
3        0     0 DROP       all  --  *      *       192.168.87.131       0.0.0.0/0
[root@elk-test ~]# iptables -t filter -F INPUT
[root@elk-test ~]# iptables --line -nvL INPUT
Chain INPUT (policy ACCEPT 37 packets, 10023 bytes)
num   pkts bytes target     prot opt in     out     source               destination

#删除指定表中的所有规则,执行时需三思
命令语法:iptables -t 表名 -F
示例:iptables -t filter -F

删参数总结:

参数 注解
-D 删除,1)可指定行号,2)匹配动作,默认从上至下
-F 清空,不指定对应链默认整个表,或指定对应链,只清空当前配置

3.3、改:

#修改指定表中指定链的指定规则,-R选项表示修改对应链中的规则,使用-R选项时要同时指定对应的链以及规则对应的序号,并且规则中原本的匹配条件不可省略。
命令语法:iptables -t 表名 -R 链名 规则序号 规则原本的匹配条件 -j 动作
示例:iptables -t filter  -R INPUT  2 -s 192.168.87.131 -j REJEC

表示修改filter表中INPUT链的第2条规则,将这条规则的动作修改为ACCEPT, -s 192.168.1.146为这条规则中原本的匹配条件,如果省略此匹配条件,修改后的规则中的源地址可能会变为0.0.0.0/0

[root@elk-test ~]# iptables --line -nvL INPUT
Chain INPUT (policy ACCEPT 63 packets, 17816 bytes)
num   pkts bytes target     prot opt in     out     source               destination
1        0     0 REJECT     all  --  *      *       192.168.87.131       0.0.0.0/0            reject-with icmp-port-unreachable
2        0     0 REJECT     all  --  *      *       192.168.87.131       0.0.0.0/0            reject-with icmp-port-unreachable
[root@elk-test ~]# iptables -t filter  -R INPUT  2 -s 192.168.87.131 -j ACCEPT
[root@elk-test ~]# iptables --line -nvL INPUT
Chain INPUT (policy ACCEPT 30 packets, 8056 bytes)
num   pkts bytes target     prot opt in     out     source               destination
1        0     0 REJECT     all  --  *      *       192.168.87.131       0.0.0.0/0            reject-with icmp-port-unreachable
2        0     0 ACCEPT     all  --  *      *       192.168.87.131       0.0.0.0/0


#修改指定表的指定链的默认策略(默认动作),并非添加规则
命令语法:iptables -t 表名 -P 链名 动作
示例:iptables -t filter -P FORWARD ACCEPT

表示将filter表中FORWARD链的默认策略修改为ACCEPT

[root@elk-test ~]# iptables -nvL FORWARD
Chain FORWARD (policy DROP 0 packets, 0 bytes)
[root@elk-test ~]# iptables -t filter -P FORWARD ACCEPT
[root@elk-test ~]# iptables -nvL FORWARD
Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)

改参数总结:

参数 注解
-R 修改规则中的动作,需指定序号并且规则原条件不能省略
-P 修改指定链的默认策略

3.4、存:

将iptables规则保存至/etc/sysconfig/iptables文件中,如果对应的操作没有保存,那么当重启iptables服务后配置丢失

#cento6与centos7保存配置命令(centos7需要先yum安装一下)
[root@elk-test ~]# service iptables save
iptables: Saving firewall rules to /etc/sysconfig/iptables:[  确定  ]
[root@elk-test ~]# ll /etc/sysconfig/iptables
-rw-------. 1 root root 2631 8月   6 14:18 /etc/sysconfig/iptables

#通用保存方法:
iptables-save:将当前的iptables规则以”保存后的格式”输出到屏幕上
保存规则至文件:iptables-save > /etc/sysconfig/iptables
重载规则:iptables-restore < /etc/sysconfig/iptables

#centos7安装使用iptables命令:
systemctl stop firewalld
systemctl disable firewalld

yum install -y iptables-services
systemctl start iptables
systemctl restart iptables
systemctl reload iptables
systemctl enable iptables

四、iptables匹配条件总结:

注意:多个条件是“与”的关系,必须同时满足才能匹配上

4.1、常用匹配参数一:

#-s源地址,指定多个源地址,用“逗号”分隔,并且中间不能有空格必须与逗号相连
[root@elk-test ~]# iptables -t filter -I INPUT -s 192.168.87.131,192.168.87.132 -j DROP
[root@elk-test ~]# iptables -nvL INPUT
Chain INPUT (policy ACCEPT 69 packets, 18408 bytes)
 pkts bytes target     prot opt in     out     source               destination
    0     0 DROP       all  --  *      *       192.168.87.132       0.0.0.0/0
    0     0 DROP       all  --  *      *       192.168.87.131       0.0.0.0/0

#指定某个网段
[root@elk-test ~]# iptables -t filter -I INPUT -s 192.168.87.0/24 -j DRO
Chain INPUT (policy ACCEPT 69 packets, 18408 bytes)
 pkts bytes target     prot opt in     out     source               destination
   57  5682 DROP       all  --  *      *       192.168.87.0/24       0.0.0.0/0

#“!”匹配条件取反
[root@elk-test ~]# iptables -t filter -A INPUT  ! -s 192.168.87.131 -j ACCEPT
[root@elk-test ~]# iptables --line -nvL  INPUT
Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
num   pkts bytes target     prot opt in     out     source               destination
1       30  8088 ACCEPT     all  --  *      *      !192.168.87.131       0.0.0.0/0

#-d目标地址作为匹配条件
丢弃从87.131发放87.132的报文
[root@elk-test ~]# iptables -t filter  -I INPUT  -s 192.168.87.131 -d 192.168.87.132 -j DROP
[root@elk-test ~]# iptables --line -nvL INPUT
Chain INPUT (policy ACCEPT 48 packets, 9952 bytes)
num   pkts bytes target     prot opt in     out     source               destination
1        0     0 DROP       all  --  *      *       192.168.87.131       192.168.87.132

#所有IP发往192.168.87.132都将被丢弃
[root@elk-test ~]# iptables -t filter  -I INPUT  -s 192.168.87.0/24  -d 192.168.87.132 -j DROP
[root@elk-test ~]# iptables --line -nvL INPUT
Chain INPUT (policy ACCEPT 43 packets, 9790 bytes)
num   pkts bytes target     prot opt in     out     source               destination
1        0     0 DROP       all  --  *      *       192.168.87.0/24      192.168.87.132

#-p 选项支持如下协议类型:
centos6:tcp, udp, udplite, icmp, esp, ah, sctp
centos7:tcp, udp, udplite, icmp, icmpv6,esp, ah, sctp, mh
当不使用-p指定协议时,默认表示所有类型都会被匹配,与-p all的效果相同

#-i 指定流入网卡
注意:-i选项只能用于PREROUTING链、INPUT链、FORWARD链

使用-i指定ens37网卡,-p指定icmp协议,表示丢弃由ens37流入的icmp报文
[root@elk-test ~]# iptables -t filter -I INPUT -i ens37 -p icmp -j DROP
[root@elk-test ~]# iptables --line -nvL INPUT
Chain INPUT (policy ACCEPT 421 packets, 115K bytes)
num   pkts bytes target     prot opt in     out     source               destination
1        4   240 DROP       icmp --  ens37  *       0.0.0.0/0            0.0.0.0/0

#-o指定流出网卡
注意:-o选项只能用于FORWARD链、OUTPUT链、POSTROUTING链

[root@elk-test ~]# iptables -t filter -I OUTPUT -o ens37 -p icmp -j DROP
[root@elk-test ~]# iptables --line -nvL OUTPUT
Chain OUTPUT (policy ACCEPT 225 packets, 63580 bytes)
num   pkts bytes target     prot opt in     out     source               destination
1        0     0 DROP       icmp --  *      ens37   0.0.0.0/0            0.0.0.0/0
[root@elk-test ~]# ping 172.16.2.1
PING 172.16.2.1 (172.16.2.1) 56(84) bytes of data.
ping: sendmsg: 不允许的操作

常用匹配参数

参数 注解
-s 指定源地址,指定多个源地址,用“逗号”分隔,也可以指定网段
-d 指定目标地址,用“逗号”分隔,也可以指定网段
! 匹配条件取反
-p 指定协议类型
匹配协议类型:tcp、udp、udplite、icmp、esp、ah、sctp等(centos7中还支持icmpv6、mh)
-i 指定流入网卡:用于PREROUTING链、INPUT链、FORWARD链
-o 指定流出网卡:用于FORWARD链、OUTPUT链、POSTROUTING链

4.2、扩展匹配条件

#-m --dport:可以匹配报文的目标端口
注意:–dport前有两条”横杠”,而且,使用–dport选项时,必须事先指定了使用哪种协议,即必须先使用-p选项

[root@elk-test ~]# iptables -t filter -I INPUT -s 192.168.87.131 -p tcp -m tcp --dport 22 -j REJECT
[root@elk-test ~]# iptables --line -nvL INPUT
Chain INPUT (policy ACCEPT 46 packets, 9762 bytes)
num   pkts bytes target     prot opt in     out     source               destination
1        0     0 REJECT     tcp  --  *      *       192.168.87.131       0.0.0.0/0            tcp dpt:22 reject-with icmp-port-unreachable
[root@131 ~]# ssh 192.168.87.130
ssh: connect to host 192.168.87.130 port 22: Connection refused

当使用-p选项指定了报文的协议时,如果在没有使用-m指定对应的扩展模块名称的情况下,使用了扩展匹配条件,  iptables默认会调用与-p选项对应的协议名称相同的模块
[root@elk-test ~]# iptables -t filter -I INPUT -s 192.168.87.131 -p tcp --dport 22 -j REJECT
[root@elk-test ~]# iptables -t filter -I INPUT -s 192.168.87.131 -p tcp --dport 22:25 -j REJECT
[root@elk-test ~]# iptables -t filter -I INPUT -s 192.168.87.131 -p tcp --dport 22: -j REJECT
[root@elk-test ~]# iptables --line -nvL INPUT
Chain INPUT (policy ACCEPT 60 packets, 12536 bytes)
num   pkts bytes target     prot opt in     out     source               destination
1        0     0 REJECT     tcp  --  *      *       192.168.87.131       0.0.0.0/0            tcp dpts:22:65535 reject-with icmp-port-unreachable
2        0     0 REJECT     tcp  --  *      *       192.168.87.131       0.0.0.0/0            tcp dpts:22:25 reject-with icmp-port-unreachable
3        0     0 REJECT     tcp  --  *      *       192.168.87.131       0.0.0.0/0            tcp dpt:22 reject-with icmp-port-unreachable


#-m multiport --dport指定多个离散目标端口号
禁止来自87.131的主机上的tcp报文访问本机的22号端口、36号端口以及80号端口
[root@elk-test ~]# iptables -t filter -I INPUT -s 192.168.87.131 -p tcp -m multiport --dport  22,36,80 -j DROP
[root@elk-test ~]# iptables --line -nvL INPUT
Chain INPUT (policy ACCEPT 17 packets, 2871 bytes)
num   pkts bytes target     prot opt in     out     source               destination
1        0     0 DROP       tcp  --  *      *       192.168.87.131       0.0.0.0/0            multiport dports 22,36,80

扩展匹配参数:指定端口号

参数 注解
-m -m指定扩展模块名称
-m tcp --sport 扩展模块:tcp
--sport指定源端口,--dport 22: 指定22至65535
-m tcp --dport 扩展模块:tcp
--dport指定目标端口,--dport 22:25指定端口连续范围
-m multiport --sports 扩展模块:multiport
扩展条件同时指定多个离散的源端口
-m multiport --dports 扩展模块:multiport
扩展条件同时指定多个离散的目标端口

五、扩展模块升级:

iprange :指定连续IP地址段范围

iprange扩展模块中有两个扩展匹配条件可以使用
–src-range  匹配报文的源地址所在范围
–dst-range  匹配报文的目标地址所在范围

[root@elk-test ~]# iptables -t filter -I INPUT -m iprange --src-range 192.168.87.20-192.168.87.40  -j DROP
[root@elk-test ~]# iptables --line -nvL INPUT
Chain INPUT (policy ACCEPT 55 packets, 11888 bytes)
num   pkts bytes target     prot opt in     out     source               destination
1        0     0 DROP       all  --  *      *       0.0.0.0/0            0.0.0.0/0            source IP range 192.168.87.20-192.168.87.40
表示源地址如果在192.168.87.20到192.168.87.40之间,则丢弃报文,中间用“横杠-”连接,–src-range与–dst-range和其他匹配条件一样,能够使用”!”取反

string:匹配字符串

使用string扩展模块,可以指定要匹配的字符串,如果报文中包含对应的字符串,则符合匹配条件
比如,如果报文中包含字符”OOXX”,我们就丢弃当前报文

首先,我们在IP为131的主机上启动http服务,然后在默认的页面目录中添加两个页面,页面中的内容分别为”OOXX”和”Hello World”,如下图所示,在没有配置任何规则时,130主机可以正常访问131主机上的这两个页面

[root@elk-test ~]# iptables -t filter -I INPUT -m string --algo bm --string "ooxx" -j REJECT
[root@elk-test ~]# iptables --line -nvL INPUT
Chain INPUT (policy ACCEPT 87 packets, 13744 bytes)
num   pkts bytes target     prot opt in     out     source               destination
1        0     0 REJECT     all  --  *      *       0.0.0.0/0            0.0.0.0/0            STRING match  "ooxx" ALGO name bm TO 65535 reject-with icmp-port-unreachable

参数注解:
-m string:表示使用string模块
–algo bm:表示使用bm算法去匹配指定的字符串,可选的算法有bm与kmp
–string “OOXX” 则表示我们想要匹配的字符串为”OOXX”

time:时间匹配

#设置每天早8:00-18:00不能看网页:
[root@elk-test ~]# iptables -t filter -I OUTPUT -p tcp --dport 80 -m time  --timestart 09:00:00 --timestop 18:00:00 -j REJECT 
[root@elk-test ~]# iptables -t filter -I OUTPUT -p tcp --dport 443 -m time  --timestart 09:00:00 --timestop 18:00:00 -j REJECT 
[root@elk-test ~]# iptables --line -nvL OUTPUT
Chain OUTPUT (policy ACCEPT 162 packets, 45340 bytes)
num   pkts bytes target     prot opt in     out     source               destination
1        0     0 REJECT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            tcp dpt:443 TIME from 09:00:00 to 18:00:00 UTC reject-with icmp-port-unreachable
2        0     0 REJECT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            tcp dpt:80 TIME from 09:00:00 to 18:00:00 UTC reject-with icmp-port-unreachable

#使用–weekdays设置周六日不能看网页:
[root@elk-test ~]# iptables -t filter -I OUTPUT -p tcp --dport 80 -m time --weekdays 6,7 -j REJECT
[root@elk-test ~]# iptables --line -nvL OUTPUT
Chain OUTPUT (policy ACCEPT 53 packets, 16060 bytes)
num   pkts bytes target     prot opt in     out     source               destination
1        0     0 REJECT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            tcp dpt:80 TIME on Sat,Sun UTC reject-with icmp-port-unreachable

#周六日9:00-18:00不能浏览网页
[root@elk-test ~]# iptables -t filter -I OUTPUT -p tcp --dport 80 -m time --timestart 09:00:00 --timestop 18:00:00   --weekdays 6,7 -j REJECT
[root@elk-test ~]# iptables --line -nvL OUTPUT
Chain OUTPUT (policy ACCEPT 36 packets, 9034 bytes)
num   pkts bytes target     prot opt in     out     source               destination
1        0     0 REJECT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            tcp dpt:80 TIME from 09:00:00 to 18:00:00 on Sat,Sun UTC reject-with icmp-port-unreachable

#使用–monthdays设置每个月的哪一天
设置表示指明每月的22号,23号
[root@elk-test ~]# iptables -t filter -I OUTPUT -p tcp --dport 80 -m time --monthdays 22,23 -j REJECT
[root@elk-test ~]# iptables --line -nvL OUTPUT
Chain OUTPUT (policy ACCEPT 19 packets, 3088 bytes)
num   pkts bytes target     prot opt in     out     source               destination
1        0     0 REJECT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            tcp dpt:80 TIME on 22nd,23rd UTC reject-with icmp-port-unreachable

#设置条件为每月的第四个星期五
[root@elk-test ~]# iptables -t filter -I OUTPUT -p tcp --dport 80 -m time  --weekdays 5 --monthdays 22,23,24,25,26,27,27 -j REJECT
[root@elk-test ~]# iptables --line -nvL OUTPUT
Chain OUTPUT (policy ACCEPT 22 packets, 7980 bytes)
num   pkts bytes target     prot opt in     out     source               destination
1        0     0 REJECT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            tcp dpt:80 TIME on Fri on 22nd,23rd,24th,25th,26th,27th UTC reject-with icmp-port-unreachable

#日期范围–datestart 选项与-datestop选项
指定日期范围为2021-08-01至2021-08-20
[root@elk-test ~]# iptables -t filter -I OUTPUT -p tcp --dport 80 -m time  --datestart 2021-08-01 --datestop 2021-08-20 -j REJECT
[root@elk-test ~]# iptables --line -nvL OUTPUT
Chain OUTPUT (policy ACCEPT 17 packets, 3040 bytes)
num   pkts bytes target     prot opt in     out     source               destination
1        0     0 REJECT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            tcp dpt:80 TIME starting from 2021-08-01 00:00:00 until date 2021-08-20 00:00:00 UTC reject-with icmp-port-unreachable
参数 注解
--timestart
--timestop
--weekdays
--monthdays
--datestart
--datestop
posted @ 2021-08-06 14:30  姜浩  阅读(118)  评论(0编辑  收藏  举报