iptables学习笔记
一、iptables概念:
1.1、iptables表:
1.2、数据经过防火墙的流程图:
链的规则存放于哪些表中(从链到表的对应关系):
表中的规则可以被哪些链使用(从表到链的对应关系):
1.3、 规则的概念(处理动作)
二、iptables操作之规则查询:
2.1、查询格式举例:
查询参数总结:
2.2、查询规则说明举例:
三、增,删,改,存
3.1、增
增参数总结:
3.2。删
删参数总结:
3.3、改:
改参数总结:
3.4、存:
四、iptables匹配条件总结:
4.1、常用匹配参数一:
常用匹配参数
4.2、扩展匹配条件
扩展匹配参数:指定端口号
五、扩展模块升级:
iprange :指定连续IP地址段范围
string:匹配字符串
time:时间匹配
1.1、iptables表:
1.2、数据经过防火墙的流程图:
链的规则存放于哪些表中(从链到表的对应关系):
表中的规则可以被哪些链使用(从表到链的对应关系):
1.3、 规则的概念(处理动作)
二、iptables操作之规则查询:
2.1、查询格式举例:
查询参数总结:
2.2、查询规则说明举例:
三、增,删,改,存
3.1、增
增参数总结:
3.2。删
删参数总结:
3.3、改:
改参数总结:
3.4、存:
四、iptables匹配条件总结:
4.1、常用匹配参数一:
常用匹配参数
4.2、扩展匹配条件
扩展匹配参数:指定端口号
五、扩展模块升级:
iprange :指定连续IP地址段范围
string:匹配字符串
time:时间匹配
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 |