Iptables防火墙基本匹配条件应用详解

目录
  • 引言
  • 基本匹配条件案例一
    • **需求:**
    • 1)实现该需求的防火墙规则如下
    • 2)查看设置的防火墙规则
    • 3)测试结果
  • 基本匹配条件案例二
    • 1)实现该需求的防火墙规则如下
    • 2)查看设置的防火墙规则
    • 3)测试结果
  • 基本匹配条件案例三
    • 1)实现该需求的防火墙规则如下
    • 2)查看设置的防火墙规则
    • 3)测试结果

引言

@[TOC] 应用匹配条件时,经常会用到以下几个参数。

  • -p:指定要操作的协议类型,不指定-p参数声明是那种协议,默认是all,也就是所有协议。
  • -s:指定源地址。
  • -d:指定目标地址。
  • --sport:指定源端口.
  • --dport:指定目标端口。
  • -i:指定从哪个网卡进入的报文。
  • -o:指定从哪个网卡出去的报文。
  • -m
  • -j:指定策略的动作。

基本匹配条件案例一

**需求:**

仅允许 192.168.20.21 访问 192.168.20.20 的80端口,其余的来源客户端都拒绝访问。

明确需求后,下面来分析应该如何实现。

这条需求分包含两种不同的条件,首先是允许192.168.20.21访问目标端口,然后是拒绝其他所有的客户端访问。

  • 首先来思考允许的条件如何实现:

1、允许某个来源访问本机的特定服务,这种访问属于数据的流入,那么就会经过PREROUTING和INPUT两个链,允许或者拒绝这些操作都是在filter表实现的,PREROUTING链没有filter,因此首先就可以得出结论,这条规则会在INPUT链的filter表中进行添加。

2、允许192.168.20.21这个地址,那么就需要指定来源的IP,然后根据来源IP的请求,还需要指定目标端的地址。

3、限制来源地址仅访问本机的某个服务,那么就需要指定服务具体的协议以及端口号。

4、最后指定匹配完这些条件后,执行的动作,也就是ACCEPT。

  • 然后来思考拒绝的条件如何实现:

1、首先明确拒绝其余来源访问本机的某个服务,那么一定是在INPUT链的filter表中添加具体的规则。

2、最后声明拒绝其他的来源地址。

注意:由于不是全部拒绝,还有一个来源地址192.168.20.21是允许访问TCP的80端口的,因此在写入拒绝规则时,不能在使用-I参数添加到表的最顶端,应该通过-A参数添加到表的最后一行,追加进去。

1)实现该需求的防火墙规则如下

1.允许192.168.20.21访问192.168.20.20的80端口
[root@jxl-1 ~]# iptables -t filter -I INPUT -s 192.168.20.21 -d 192.168.20.20 -p tcp --dport 80 -j ACCEPT
2.拒绝其余来源IP访问本机的80端口
[root@jxl-1 ~]# iptables -t filter -A INPUT -p tcp --dport 80 -j DROP

注意第二条拒绝所有的时候一定要使用-A参数追加到最后一行,否则所有的来源都将不可访问。

2)查看设置的防火墙规则

INPUT链中一共有2条规则,第一条规则的动作是允许,允许192.168.20.21访问192.168.20.20的tcp 80端口,第二条规则的动作是拒绝,拒绝全部IP访问本机的80端口。

[root@jxl-1 ~]# iptables -L -n -v --line-number
Chain INPUT (policy ACCEPT 9483 packets, 17M bytes)
num   pkts bytes target     prot opt in     out     source               destination
1        0     0 ACCEPT     tcp  --  *      *       192.168.20.21        192.168.20.20        tcp dpt:80
2        0     0 DROP       tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            tcp dpt:80
Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
num   pkts bytes target     prot opt in     out     source               destination
Chain OUTPUT (policy ACCEPT 9619 packets, 15M bytes)
num   pkts bytes target     prot opt in     out     source               destination

3)测试结果

只有来源地址为192.168.20.21的IP,才能访问到192.168.20.20的TCP 80端口的服务。

基本匹配条件案例二

**需求:**由本机发出的TCP协议的报文都允许,发出的其他协议报文都拒绝。

明确需求后,下面来分析应该如何实现,和案例一类似,分为两种规则,一是允许某一个协议,二是拒绝其余所有的协议。

首先要明确在哪一个链的哪一个表中添加Iptables防火墙规则,看需求中的关键字“由本机发出”,由本机发出都需要经过POSTROUTING和OUTPUT链,这种过滤规则一定会在OUPUT链进行添加,引起POSTROUTING链没有filter表。

明确完再哪一张表和哪一个链添加规则后,就非常容易了。

1)先来添加允许TCP协议报文流出的Iptables防火墙规则。

2)然后来添加拒绝剩余的其他报文,一定要将拒绝的规则添加在允许规则的下面,否则允许的规则将永不生效。

可以先将之前添加的规则清空,以免受到干扰。

[root@jxl-1 ~]# iptables -t filter -F

1)实现该需求的防火墙规则如下

1.允许本机的TCP协议报文流出
[root@jxl-1 ~]# iptables -t filter -I OUTPUT -p tcp -j ACCEPT
2.拒绝本机所有协议报文流出
[root@jxl-1 ~]# iptables -t filter -A OUTPUT -p all -j DROP

2)查看设置的防火墙规则

在OUTPUT链可以看到两条规则,第一条规则允许TCP协议报文流出,第二条规则拒绝所有协议的报文流出。

[root@jxl-1 ~]# iptables -L -n -v --line-number
Chain INPUT (policy ACCEPT 5138 packets, 8863K bytes)
num   pkts bytes target     prot opt in     out     source               destination
Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
num   pkts bytes target     prot opt in     out     source               destination
Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes)
num   pkts bytes target     prot opt in     out     source               destination
1     6703   10M ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0
2        1    76 DROP       all  --  *      *       0.0.0.0/0            0.0.0.0/0

3)测试结果

由于拒绝了除TCP协议以外的所有协议,因此再使用ICMP协议时就产生了拒绝的现象,但是使用TCP协议就没有任何影响。

基本匹配条件案例三

需求: 禁止其他主机从ens192发送来的ping请求。

首先来进行分析,案例三就非常简单了,只有一种条件,那就是禁止其他的主机从本机的ens192网卡发送来的数据报文,从字面意思可以清楚的知道这是一条数据流入的规则。

那么一定是在INPUT链的filter表添加相应的规则策略。

1)实现该需求的防火墙规则如下

[root@jxl-1 ~]# iptables -t filter -I INPUT -i ens192 -p icmp -j DROP

2)查看设置的防火墙规则

在INPUT链中已经添加上了这条规则,凡是来自ens192网卡并且协议是icmp的报文都会被拒绝。

[root@jxl-1 ~]# iptables -L -n -v --line-number
Chain INPUT (policy ACCEPT 2680 packets, 4308K bytes)
num   pkts bytes target     prot opt in     out     source               destination
1        0     0 DROP       icmp --  ens192 *       0.0.0.0/0            0.0.0.0/0
Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
num   pkts bytes target     prot opt in     out     source               destination
Chain OUTPUT (policy ACCEPT 2752 packets, 4004K bytes)
num   pkts bytes target     prot opt in     out     source               destination

3)测试结果

在其他主机ping防火墙主机的ens192网卡,发现不通,但是ens224网卡就通。

拒绝所有协议进入本机的规则配置

iptables -t filter INPUT -j DROP

--dport参数声明多个连续的端口号

--dport 20:22
表示20-22三个端口都可以进行匹配。

以上就是Iptables防火墙基本匹配条件应用详解的详细内容,更多关于Iptables防火墙匹配条件的资料请关注我们其它相关文章!

(0)

相关推荐

  • Iptables防火墙string模块扩展匹配规则

    Iptables防火墙string模块扩展匹配规则 String模块的作用是来匹配请求报文中指定的字符串,经常应用于拦截用户访问某些网站的场景,将防火墙当做路由器使用,例如上班时间不允许用户访问淘宝网站等等场景. String模块的常用参数: --string pattern:指定要匹配的字符串. ! --string pattern:反向匹配. --algo:指定匹配的查询算法,有bm和kmp两种算法. 可以在参数前面加!号表示去反. 案例:当用户请求的数据报文中包含taobao.com,则拒

  • Iptables防火墙四表五链概念及使用技巧详解

    目录 1.链的概念 2.Iptables五种链的概念 3.Iptables数据流向经过的表 4.Iptables防火墙四种表的概念 5.Iptables防火墙表与链之间的优先级概念 6.Iptables防火墙表和链之间的使用技巧 **问题1:** **问题2:** 结论: 7.Iptables防火墙几种动作 1.链的概念 在防火墙中,用户想要成功进入内网环境,就需要发送请求报文,请求报文要和防火墙设置的各种规则进行匹配和判断,最后执行相应的动作(放行或者拒绝),一个防火墙中通常针对不同的来源设置

  • Iptables防火墙connlimit与time模块扩展匹配规则

    目录 Iptables防火墙connlimit模块扩展匹配规则 connlimit模块常用参数: Iptables防火墙time模块扩展匹配规则 time模块的常用参数: Iptables防火墙connlimit模块扩展匹配规则 connlimit模块的作用是限制请求报文对特定服务的并发连接数限制的,例如Telnet服务,默认情况下没有并发连接数的限制,可以允许n个客户端同时连接,如果应用了connlimit模块,可以对并发连接数进行限制. connlimit模块常用参数: --connlimi

  • Iptables防火墙自定义链表实现方式

    目录 1.为什么要自定义链 2.自定义链的基本应用 3.删除自定义的链 1.为什么要自定义链 为什么需要自定义链呢?默认的四表五链不满足基本使用吗?其实并不是,四表五链完全满足使用,但是当我们同一类程序有很多个防火墙规则时,例如都写在INPUT链中,那么当我们要对其中的一条规则进行调整了,就会发现上下有关联性,修改起来不是那么容器,因为这个INPUT链中还有其他的服务规则. 基于这种情况,我们就可以去自定义一张新的链,在这个链中,只定义这一类程序的防火墙规则. 自定义链的规则优先级: 请求首先到

  • Iptables防火墙limit模块扩展匹配规则详解

    目录 Iptables防火墙limit模块扩展匹配规则 @[TOC] 1.限制每分钟接收10个ICMP数据报文 2.允许10个数据报文快速通过,然后限制每分钟接收1个个ICMP数据报文 3.限速案例,限制网络传输的带宽不可以超过500k/s Iptables防火墙limit模块扩展匹配规则 @[TOC] limit模块的作用是针对报文的速率进行限制,限制的单位有秒.分钟.小时.天等,例如一分钟内只接收10个请求报文,多余的报文则会被丢弃. limit模块的常用参数: --limit rate[/

  • Iptables防火墙tcp-flags模块扩展匹配规则详解

    目录 Iptables防火墙tcp-flags模块扩展匹配规则 **案例:** 1)编写具体的防火墙规则 2)查看设置的防火墙规则 3)查看效果 Iptables防火墙tcp-flags模块扩展匹配规则 tcp-flags模块的作用是判断TCP协议数据报文标志位的返回值的,在TCP的三次握手中,第一次握手客户端向服务器发送syn=1的数据报文,第二次握手服务端向客户端发送sync和ack=1的报文,第三次握手客户端向服务端发送ack=1的报文. tcp-flags模块就是来判断发送报文中指定的标

  • Iptables防火墙iprange模块扩展匹配规则详解

    目录 Iptables防火墙iprange模块扩展匹配规则 案例: 1)编写防火墙规则 2)查看添加的规则 3)测试效果 Iptables防火墙iprange模块扩展匹配规则 iprange模块可以同时设置多个IP或者设置IP的某一段连续的范围,通过iprange模块可以对多个来源地址同时设置策略. iprange模块的参数: --src-range:指定源地址范围. --dst-range:指定目标地址范围. ! --src-range:非指定的源地址. ! --dst-range:非指定的目

  • Iptables防火墙基本匹配条件应用详解

    目录 引言 基本匹配条件案例一 **需求:** 1)实现该需求的防火墙规则如下 2)查看设置的防火墙规则 3)测试结果 基本匹配条件案例二 1)实现该需求的防火墙规则如下 2)查看设置的防火墙规则 3)测试结果 基本匹配条件案例三 1)实现该需求的防火墙规则如下 2)查看设置的防火墙规则 3)测试结果 引言 @[TOC] 应用匹配条件时,经常会用到以下几个参数. -p:指定要操作的协议类型,不指定-p参数声明是那种协议,默认是all,也就是所有协议. -s:指定源地址. -d:指定目标地址. -

  • Python基础之条件语句详解

    一.环境介绍 Python版本Python 3.8.8 ( Pycharm版本2021.1.2 二.条件判断介绍 Python条件语句是通过一条或多条语句的执行结果(True或者False)来决定执行的代码块. 语句块是在条件为真(条件语句)时执行或者执行多次(循环语句)的一组语句.在代码前放置空格来缩进语句即可创建语句块. 三.if语句的使用 1.if的第一种使用方法 对于if语句,若条件判定为真,那么后面的语句块就会被执行.若条件判定为假,语句块就会被跳过,不会执行. # 条件判断 # 第一

  • 正则表达式教程之匹配一组字符详解

    本文实例讲述了正则表达式教程之匹配一组字符的方法.分享给大家供大家参考,具体如下: 注:在所有例子中正则表达式匹配结果包含在源文本中的[和]之间,有的例子会使用Java来实现,如果是java本身正则表达式的用法,会在相应的地方说明.所有java例子都在JDK1.6.0_13下测试通过. 一.匹配多个字符中的某一个 在上一篇<正则表达式教程之匹配单个字符详解>中的一个匹配以na或sa开头的文本文件例子中,使用的正则表达式是.a.\.txt.如果还有一个文件是cal.txt,那么也将会被匹配到.如

  • Angular指令之restict匹配模式的详解

    Angular指令之restict匹配模式的详解 <body data-ng-app="myapp"> <runn2></runn2> <div data-runn2></div> <div class="runn2"></div> <!-- directive: runn2 --> <script> var app=angular.module("

  • Python入门_条件控制(详解)

    条件控制其实就是if...else...(如果...条件是成立的,就做...:反之,就做...)的使用,其基本结构是: 具体看下面这个例子: def account_login(): # 定义函数 password = input('请输入密码:') # 输入密码 if password == '12345': # 如果输入密码是12345,则登录成功 print('登录成功') else: print('密码有误,请重新输入') # 否则提示密码有误,请重新输入 account_login()

  • re模块的正则匹配的表达式详解

    一.校验数字的表达式 1.数字 ^[0-9]\*$ 2.n位的数字 ^\d{n}$ 3.至少n位的数字 ^\d{n,}$ 4.m-n位的数字 ^\d{m,n}$ 5.零和非零开头的数字 ^(0|[1-9][0-9]\*)$ 6.非零开头的最多带两位小数的数字 ^([1-9][0-9]\*)+(\.[0-9]{1,2})?$ 7.带1-2位小数的正数或负数 ^(\-)?\d+(\.\d{1,2})$ 8.正数.负数.和小数 ^(\-|\+)?\d+(\.\d+)?$ 9.有两位小数的正实数 ^[0

  • python实现括号匹配的思路详解

    1.用一个栈[python中可以用List]就可以解决,时间和空间复杂度都是O(n) # -*- coding: utf8 -*- # 符号表 SYMBOLS = {'}': '{', ']': '[', ')': '(', '>': '<'} SYMBOLS_L, SYMBOLS_R = SYMBOLS.values(), SYMBOLS.keys() def check(s): arr = [] for c in s: if c in SYMBOLS_L: # 左符号入栈 arr.appe

  • shell模糊匹配与正则详解

    前言: 正则可以实现一些简单的功能,并用在脚本中,如检测ip地址是否符合规范,检测文件名是否符合规范等等. 正则表达式 正则表达式主要是用来描述一个句法规则的模式.其实说的通俗一点,就是利用字符和元字符的组合,对一些符合既定句法的模式进行模糊匹配.它的主要功能是文本查询和字符串操作. 正则表达式的基本元素包括普通字符和元字符,在Linux shell里面,常用的正则表达式元字符集为:S={*  .  ^  $  []  \  \<\>  \{\}  \{n,\}  \{n,m\} },每一个元

  • SpringBoot + WebSocket 实现答题对战匹配机制案例详解

    概要设计 类似竞技问答游戏:用户随机匹配一名对手,双方同时开始答题,直到双方都完成答题,对局结束.基本的逻辑就是这样,如果有其他需求,可以在其基础上进行扩展 明确了这一点,下面介绍开发思路.为每个用户拟定四种在线状态,分别是:待匹配.匹配中.游戏中.游戏结束.下面是流程图,用户的流程是被规则约束的,状态也随流程而变化 对流程再补充如下: 用户进入匹配大厅(具体效果如何由客户端体现),将用户的状态设置为待匹配 用户开始匹配,将用户的状态设置为匹配中,系统搜索其他同样处于匹配中的用户,在这个过程中,

  • Java 括号匹配问题案例详解

    目录 前言 例题 算法思想 算法举例 代码 栈类 括号匹配核心算法 完整代码 运行结果 前言 括号匹配问题算是栈应用中比较经典的问题了,在数据结构的书中还有各种考试中会出现.最近刷题的时候也遇到了,就想写一篇文章整理一下. 例题 题目来自Leetcode中国 给定一个只包括 (,),{,},[,] 的字符串,判断字符串是否有效. 有效字符串需满足: 1.左括号必须用相同类型的右括号闭合. 2.左括号必须以正确的顺序闭合. 注意空字符串可被认为是有效字符串. 示例 1: 输入: "()"

随机推荐