源地址

-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. 【LeetCode】364. Nested List Weight Sum II 解题报告 (C++)

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

  2. 【九度OJ】题目1153:括号匹配问题 解题报告

    [九度OJ]题目1153:括号匹配问题 解题报告 标签(空格分隔): 九度OJ http://ac.jobdu.com/problem.php?pid=1153 题目描述: 在某个字符串(长度不超过1 ...

  3. 【剑指Offer】数值的整数次方 解题报告(Python)

    [剑指Offer]数值的整数次方 解题报告(Python) 标签(空格分隔): LeetCode 题目地址:https://www.nowcoder.com/ta/coding-interviews ...

  4. 【LeetCode】797. All Paths From Source to Target 解题报告(Python & C++)

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

  5. treecnt 算法马拉松20(告别美国大选及卡斯特罗)

    treecnt 基准时间限制:1 秒 空间限制:131072 KB 给定一棵n个节点的树,从1到n标号.选择k个点,你需要选择一些边使得这k个点通过选择的边联通,目标是使得选择的边数最少. 现需要计算 ...

  6. How many integers can you find(hdu1796)

    How many integers can you find Time Limit: 12000/5000 MS (Java/Others)    Memory Limit: 65536/32768 ...

  7. 教学日志:javaSE-初识java

    一.编译执行第一个java程序 /* 总结: 1.编译执行第一个java程序 步骤如下: 1.安装JDK开发环境: 2.配置环境变量,JAVA_HOME,PATH;--验证环境变量配置是否成功 jav ...

  8. idea使用教程-常用快捷键

    [1]创建内容:alt+insert [2]main方法:psvm [3]输出语句:sout [4]复制行:ctrl+d [5]删除行:ctrl+y [6]代码向上/下移动:Ctrl + Shift ...

  9. .NET Core 实现动态代理做AOP(面向切面编程)

    1.介绍 1.1 动态代理作用 用动态代理可以做AOP(面向切面编程),进行无入侵式实现自己的扩展业务,调用者和被调用者之间的解耦,提高代码的灵活性和可扩展性,比如:日志记录.性能统计.安全控制.事务 ...

  10. TriggerBN ++

    目录 motivation settings results motivation 用两个BN(一个用于干净样本, 一个用于对抗样本), 结果当使用\(\mathrm{BN}_{nat}\)的时候, ...