源地址

-s选项除了指定单个IP,还可以一次指定多个,用”逗号”隔开即可

[root@web-1 ~]# iptables -I INPUT -s 172.16.0.116,172.16.0.115 -d 172.16.0.113 -p tcp -j REJECT

[root@web-1 ~]# iptables -L -n -v --line
Chain INPUT (policy ACCEPT 13 packets, 1428 bytes)
num pkts bytes target prot opt in out source destination
1 0 0 REJECT tcp -- * * 172.16.0.115 172.16.0.113 reject-with icmp-port-unreachable
2 0 0 REJECT tcp -- * * 172.16.0.116 172.16.0.113 reject-with icmp-port-unreachable

“逗号”两侧均不能包含空格,多个IP之间必须与逗号相连。

还能指定某个网段

iptables -I INPUT -s 10.6.0.0/16 -j REJECT

还可以对匹配条件取反

iptables -I INPUT ! -s 172.16.0.116 -j ACCEPT

只要发往本机的报文的源地址不是172.16.0.116,就接受报文。

此刻,你猜猜,按照上例中的配置,如果此时从116主机上向防火墙所在的主机发送ping请求,116主机能得到回应吗?(此处不考虑其他链,只考虑filter表的INPUT链)

答案是:能,也就是说,按照上例的配置,116主机仍然能够ping通当前主机,为什么呢?我们来分析一下。

上例中,filter表的INPUT链中只有一条规则,这条规则要表达的意思就是:

只要报文的源IP不是172.16.0.116,那么就接受此报文,但是,某些小伙伴可能会误会,把上例中的规则理解成如下含义,

只要报文的源IP是172.16.0.116,那么就不接受此报文,这种理解与上述理解看似差别不大,其实完全不一样,这样理解是错误的,上述理解才是正确的。

换句话说就是,报文的源IP不是172.16.0.116时,会被接收,并不能代表,报文的源IP是172.16.0.116时,会被拒绝。

上例中,因为并没有任何一条规则指明源IP是172.16.0.116时,该执行怎样的动作,所以,当来自172.16.0.116的报文经过INPUT链时,并不能匹配上例中的规则,于是,此报文就继续匹配后面的规则,可是,上例中只有一条规则,这条规则后面没有其他可以匹配的规则,于是,此报文就会去匹配当前链的默认动作(默认策略),而上例中,INPUT链的默认动作为ACCEPT,所以,来自116的ping报文就被接收了,如果,把上例中INPUT链的默认策略改为DROP,那么,116的报文将会被丢弃,116上的ping命令将得不到任何回应,但是如果将INPUT链的默认策略设置为DROP,当INPUT链中没有任何规则时,所有外来报文将会被丢弃,包括我们ssh远程连接。

好了,我们通过上例,不仅了解到了怎样对匹配条件取反,还加深了我们对默认策略的了解,一举两得,我们继续聊。

-d与-s选项同理

但是请注意,不管是-s选项还是-d选项,取反操作与同时指定多个IP的操作不能同时使用。

需要明确的一点就是:当一条规则中有多个匹配条件时,这多个匹配条件之间,默认存在”与”的关系。

匹配条件:协议类型

使用-p选项,指定报文的协议类型。

[root@web-1 ~]# iptables -I INPUT -s 172.16.0.116 -d 172.16.0.113 -p tcp -j REJECT

#测试一下(ssh属于tcp协议 )
[root@slave ~]# ssh 172.16.0.113
ssh: connect to host 172.16.0.113 port 22: Connection refused #使用ping命令试试 (ping命令使用icmp协议)
[root@slave ~]# ping 172.16.0.113
PING 172.16.0.113 (172.16.0.113) 56(84) bytes of data.
64 bytes from 172.16.0.113: icmp_seq=1 ttl=64 time=0.686 ms

可以看到,PING命令可以ping通156,证明icmp协议并没有被规则匹配到,只有tcp类型的报文被匹配到了。

centos6中,-p支持如下协议

tcp, udp, udplite, icmp, esp, ah, sctp

centos7中,-p支持如下协议

tcp, udp, udplite, icmp, icmpv6,esp, ah, sctp, mh

当不使用-p指定协议类型时,默认表示所有类型的协议都会被匹配到,与使用-p all的效果相同。

匹配条件:网卡接口

当本机有多个网卡时,使用 -i 选项去匹配报文是通过哪块网卡流入本机的。

当前主机的网卡名称为eth4,假设想要拒绝由网卡eth4流入的ping请求报文,则可以进行如下设置。

iptables -t filter -I INPUT -i eth4 -p icmp -j DROP

-i选项是用于判断报文是从哪个网卡流入的,-i选项只能用于PREROUTING链、INPUT链、FORWARD链,

使用-o选项,匹配报文将由哪块网卡流出,-o选项只能用于FORWARD链、OUTPUT链、POSTROUTING链。

扩展匹配条件

“源端口”与”目标端口”。

当我们使用ssh工具远程连接主机时,默认会连接服务端的22号端口.

设置一条规则,拒绝来自172.16.0.116的ssh请求

iptables -t filter -I INPUT -s 172.16.0.116 -p tcp -m tcp --dport 22 -j REJECT

使用–dport选项时,必须事先指定了使用哪种协议,即必须先使用-p选项

-m选项,指定了对应的扩展模块为tcp,也就是说,如果想要使用–dport这个扩展匹配条件,则必须依靠某个扩展模块完成,上例中,这个扩展模块就是tcp扩展模块,最终,我们使用的是tcp扩展模块中的dport扩展匹配条件。

在使用扩展匹配条件之前,需要指定相应的扩展模块才行。

现在你明白了吗? -m tcp表示使用tcp扩展模块,–dport表示tcp扩展模块中的一个扩展匹配条件,可用于匹配报文的目标端口。

注意,-p tcp与 -m tcp并不冲突,-p用于匹配报文的协议,-m 用于指定扩展模块的名称,正好,这个扩展模块也叫tcp。

其实,上例中,我们可以省略-m选项,示例如下。

iptables -t filter -I INPUT -s 172.16.0.116 -p tcp  --dport 22 -j REJECT

当使用-p选项指定了报文的协议时,如果在没有使用-m指定对应的扩展模块名称的情况下,使用了扩展匹配条件, iptables默认会调用与-p选项对应的协议名称相同的模块。

上例中,我们使用-p选项指定了协议名称,使用扩展匹配条件–dport指定了目标端口,在使用扩展匹配条件的时候,如果没有使用-m指定使用哪个扩展模块,iptables会默认使用”-m 协议名”,而协议名就是-p选项对应的协议名,上例中,-p 对应的值为tcp,所以默认调用的扩展模块就为-m tcp,

“源端口”的扩展匹配条件为–sport

使用–sport可以判断报文是否从指定的端口发出,即匹配报文的源端口是否与指定的端口一致,–sport意为source-port

扩展匹配条件是可以取反的,同样是使用”!”进行取反,比如 “! –dport 22”,表示目标端口不是22的报文将会被匹配到。

不管是–sport还是–dsport,都能够指定一个端口范围,比如

iptables -t filter -I INPUT -s 172.16.0.116 -p tcp  --dport 22:25 -j REJECT

也可以写成

iptables -t filter -I INPUT -s 172.16.0.116 -p tcp  --dport :22 -j REJECT
iptables -t filter -I INPUT -s 172.16.0.116 -p tcp --dport 80: -j REJECT

第一条规则表示匹配0号到22号之间的所有端口,下图中的第二条规则表示匹配80号端口以及其以后的所有端口(直到65535)。

刚才聊到的两个扩展匹配条件都是tcp扩展模块的,其实,tcp扩展模块还有一个比较有用的扩展匹配条件叫做”–tcp-flags”,但是由于篇幅原因,以后再对这个扩展匹配条件进行总结。

借助tcp扩展模块的–sport或者–dport都可以指定一个连续的端口范围,但是无法同时指定多个离散的、不连续的端口,如果想要同时指定多个离散的端口,需要借助另一个扩展模块,”multiport”模块。

我们可以使用multiport模块的–sports扩展条件同时指定多个离散的源端口。

我们可以使用multiport模块的–dports扩展条件同时指定多个离散的目标端口。

示例如下

iptables -t filter -I INPUT -s 172.16.0.116 -p tcp-m multiport --dports 22,36,80 -j REJECT

上图中的-m multiport是不能省略的,如果你省略了-m multiport,就相当于在没有指定扩展模块的情况下,使用了扩展条件(”–dports”),那么上例中,iptables会默认调用”-m tcp”

其实multiport模块也可以指定连续的端口范围,并且能够在指定连续的端口范围的同时,指定离散的端口号

iptables -t filter -I INPUT -s 172.16.0.116 -p tcp -m multiport --dports 22,80:88 -j REJECT

不过需要注意,multiport扩展只能用于tcp协议与udp协议,即配合-p tcp或者-p udp使用。

iptables匹配条件总结1的更多相关文章

  1. iptables(五)iptables匹配条件总结之二(常用扩展模块)

    iprange扩展模块 之前我们已经总结过,在不使用任何扩展模块的情况下,使用-s选项或者-d选项即可匹配报文的源地址与目标地址,而且在指定IP地址时,可以同时指定多个IP地址,每个IP用" ...

  2. 2.iptables 匹配条件(基础)

    基本匹配条件 -s 用于匹配报文的源地址,可以同时指定多个源地址,每个IP地址用逗号分开,也可以指定网段 iptables -t filter -I INPUT -s 192.168.1.111,19 ...

  3. iptables(四)iptables匹配条件总结之一

    经过前文的总结,我们已经能够熟练的管理规则了,但是我们使用过的"匹配条件"少得可怜,之前的示例中,我们只使用过一种匹配条件,就是将"源地址"作为匹配条件. 那么 ...

  4. iptables详解(5):iptables匹配条件总结之二(常用扩展模块)

    所属分类:IPtables  Linux基础 在本博客中,从理论到实践,系统的介绍了iptables,如果你想要从头开始了解iptables,可以查看iptables文章列表,直达链接如下 iptab ...

  5. iptables详解(4):iptables匹配条件总结之一

    所属分类:IPtables  Linux基础 在本博客中,从理论到实践,系统的介绍了iptables,如果你想要从头开始了解iptables,可以查看iptables文章列表,直达链接如下 iptab ...

  6. linux防火墙(三)—— iptables语法之匹配条件

    一.iptables规则的匹配条件类型有三类 1.通用匹配:可直接使用,不依赖于其他条件或扩展,包括网络协议.IP地址.网络接口等条件 2.隐含匹配:要求以特定的协议匹配作为前提,包括端口.TCP标记 ...

  7. iptables详解(6):iptables扩展匹配条件之’–tcp-flags’

    如果你看过前文,那么你一定知道,前文已经对"tcp扩展模块"做过总结,但是只总结了tcp扩展模块中的"--sport"与"--dport"选 ...

  8. Linux防火墙之iptables基本匹配条件和隐式扩展匹配条件

    一.iptables的基本匹配条件 上一篇博文我们说到了iptables的基本工作原理.数据报文在内核的走向和管理链.管理规则.以及查看规则.导入和导出规则:回顾请参考https://www.cnbl ...

  9. Linux防火墙之iptables常用扩展匹配条件(一)

    上一篇博文讲了iptables的基本匹配条件和隐式匹配条件,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/12269717.html:今天在来说说iptabel ...

随机推荐

  1. xcode使用spdlog(1.7)总结

    !!版权声明:本文为博主原创文章,版权归原文作者和博客园共有,谢绝任何形式的 转载!! 作者:mohist 注意️ 请选择对c++11支持完善的编译器, 因为spdlog一直更新. 本文演示环境: m ...

  2. 【LeetCode】541. Reverse String II 解题报告(Python)

    作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 Java解法 Python解法 日期 题目地址:ht ...

  3. 【LeetCode】Pascal's Triangle II 解题报告

    [LeetCode]Pascal's Triangle II 解题报告 标签(空格分隔): LeetCode 题目地址:https://leetcode.com/problems/pascals-tr ...

  4. 【LeetCode】385. Mini Parser 解题报告(Python)

    [LeetCode]385. Mini Parser 解题报告(Python) 标签: LeetCode 题目地址:https://leetcode.com/problems/mini-parser/ ...

  5. 【Java笔记】Java使用mysql包注意

    注意 安装的mysql5.x版本对应 5.x版本的驱动包 安装的mysql8.x版本对应 8.x版本的驱动包 如果安装的MySQL版本和驱动包版本不符合,则Java的连接不了数据库

  6. Linux组

    Linux组 介绍 Linux中,没有用户和文件可以脱离组而存在 用户有"组"这一属性:相关链接 文件有"所有者""组""其他组& ...

  7. Java面向对象笔记 • 【第2章 面向对象进阶】

    全部章节   >>>> 本章目录 2.1 成员变量 2.1.1 成员变量与局部变量的区别 2.1.2 成员变量的使用 2.1.3 实践练习 2.2 this关键字 2.2.1 ...

  8. 编写Java程序,模拟网上商城购物,当用户选好物品提交订单时,每笔订单会自动生成一个唯一的订单编号。

    查看本章节 查看作业目录 需求说明: 模拟网上商城购物,当用户选好物品提交订单时,每笔订单会自动生成一个唯一的订单编号.而部分电子商务网站在数据高峰期时,一毫秒可能需要处理近千笔的订单 现在简单模拟 ...

  9. SQLServer中的CTE(Common Table Expression)通用表表达式使用详解

    概述 我们经常会编写由基本的 SELECT/FROM/WHERE 类型的语句派生而来的复杂 SQL 语句.其中一种方案是需要编写在 FROM 子句内使用派生表(也称为内联视图)的 Transact-S ...

  10. EMQX源码编译过程

    以emqx4.0.7版本为例 1.安装erlang环境 可以参考:https://www.cnblogs.com/shanfeng1000/p/11951703.html 这里需要注意一下,要按照em ...