【Linux】iptables之防火墙概述及规则匹配+实例1

在这里插入图片描述


在这里插入图片描述



一、防火墙的基础概念

1、防火墙的概念与应用

  网络中的防火墙,是一种将内部网络和外部网络分开的方法,是一种隔离技术。防火墙在内网与外网通信时进行访问控制,依据所设置的规则对数据包作出判断,最大限度地阻止网络中的黑客破坏企业网络,从而加强企业网络安全。

2、包过滤的工作层次

  主要是网络层,针对IP数据包,体现对包内的IP地址、端口等信息的处理上。

二、iptables的四表五链

表中存放的是链,链中存放的是规则

四表:优先级:filter<nat<mangle<raw

raw表 确定是否对该数据包进行状态跟踪;有限级最高,设置raw是一般是为了不在iptables做数据包的链接跟踪处理,提高性能
mangle表 为数据包设置标记;负责对数据包进行修改和追踪
NAT表 修改数据包中的源、目标IP地址或端口;负责地址转发
filter表 确定是否被放行该数据包(过滤);负责包过滤(默认)

链表结构关系图:

在这里插入图片描述

五链:

小写
INPUT 处理入站数据包 input
OUTPUT 处理出站数据包 output
FORWARD 处理转发数据包 forward
PREROUTING 在进行路由选择前处理数据包 prerouting
POSTROUTING 在进行路由选择后处理数据包 postrouting

规则链之间的顺序:

入站: PREROUTING→INPUT                  路由选择前→入站
出站:OUTPUT→POSTROUTING               出站→路由选择后
转发:PREROUTING→FORWARD→POSTROUTING  路由选择前→转发→路由选择后

不管是路由入站还是转发,都要选择路由选择前
不管是路由出站还是转发,都要选择路由选择后

三、iptables命令

1、语法结构

iptables [-t 表名] 选项&参数 [链名][匹配条件][-j 动作控制类型]

注意事项:
  不指定表名时,默认指filter表
  不指定链名时,默认指表内的所有链
  除非设置链的默认策略,否则必须指定匹配条件
  选项、链名、控制类型使用大写字母,其余均为小写

数据包的常见控制类型/动作类型:-j

类型 解析
ACCEPT 允许通过
DROP 直接丢弃,不给出任何回应
REJECT 拒绝通过,必要时会给出提示
LOG 记录日志信息,然后传给下一条规则继续匹配

2、iptables的选项参数及实例

选项及参数:

选项&参数 解析
-t 指定表,默认filter
-A 追加一条规则 -A 链名 [序号] 匹配条件 -j 动作
-I 插入一条规则 -I 链名 [序号] 匹配条件 -j 动作;默认第一行(也可以自己指定序号)
-R 修改规则 -R 链名 序号 匹配条件 -j 动作
-D 删除指定规则 -D 链名 序号
-P 设置默认规则 -P 链名 动作(ACCEPT,DROP,REJECT,LOG)
-p 指定协议 TCP,UDP,ICMP;–sport 指定源端口 ;–dport 指定目标端口
-L 查看防火墙规则,后可以指定链
-F 清空防火墙规则;也可以指定清空某一个表的所有规则
-v 以更详细的方式显示规则信息
-n 以数字形式显示;要和-L配合看
–line-numbers或–line 显示规则编号;要和-L配合看
-s 指定源地址
-d 指定目标地址
-i 指定网卡
-m 指定模块,没有指定模块,默认使用与-p选项同名的模块

实例:

1、-t:指定查看raw表

iptables -t raw -L

2、-A \-s\-j:追加一条规则,使192.168.2.2禁止访问

iptables -A INPUT -s 192.168.2.2 -j REJECT

3、-I\-s\-j:插入一条规则,允许访问192.168.2.2

iptables -I INPUT -s 192.168.2.2 -j ACCEPT

4、-R\-s\-j:第一条规则,修改为丢弃192.168.2.2;将第二条prot的udp改为icmp并且开放

iptables -R INPUT 1 -s 192.168.2.2 -j DROP

iptables -R INPUT 2 -p icmp -j ACCEPT

5、-D:删除一条指定的规则

iptables -D INPUT 3

6、-L:查看防火墙规则,后可以指定链

#查看所有防火墙规则
iptables -L 

#指定链:查看入站防火墙规则
iptables -L INPUT

7、-F:清空防火墙规则 ;也可以指定清空某一个表的所有规则

iptables -F

iptables -t nat -F

8、-n:以数字形式显示;要和-L配合看

iptables -L -n

9、-v:已更详细的方式查看规则信息

iptables -L -n -v

10、–line-numbers或–line:显示规则编号;要和-L配合看

iptables -L --line-numbers

iptables -L --line

四、iptables规则的匹配类型


1、通用匹配
  可直接使用,不依赖与其他条件或扩展
  包括网络协议、IP地址、网络接口等条件

2、隐含匹配
  要求以特定的协议匹配作为前提
  包含端口、TCP标记、ICMP类型等条件

3、显式匹配
  要求以“-m扩展模块”的形式明确指出类型
  包括多端口、MAC地址、IP范围、数据包状态等条件

常用管理选项汇总表:

在这里插入图片描述



在这里插入图片描述


1、通用匹配

常见的通用匹配条件:
  协议匹配:-p 协议名
  地址匹配:-s 源地址、-d 目的地址
  接口匹配:-i 入站网卡、-o 出站网卡

1.1、协议匹配

协议匹配:-p 协议名

允许所有的TCP协议进入

iptables -A INPUT -p tcp -j ACCEPT

在这里插入图片描述

除了icmp协议其他协议都丢弃

iptables -I FORWARD ! -p icmp -j DROP

在这里插入图片描述

1.2、地址匹配

地址匹配:-s 源地址、-d 目的地址

允许访问ip地址192.168.2.2

iptables -I INPUT -s 192.168.2.2 -j ACCEPT

在这里插入图片描述

丢弃192.168.1.0/24网段的ip

iptables -I INPUT -s 192.168.1.0/24 -j DROP

在这里插入图片描述

访问地址将地址转发到目标地址“192.168.2.22”并且开放

iptables -A FORWARD -d 192.168.2.22 -j ACCEPT

在这里插入图片描述

1.3、接口匹配

接口匹配:-i 入站网卡、-o 出站网卡

将eth1的网卡在入站时丢弃

iptables -I INPUT -i eth1 -j DROP

在这里插入图片描述

将eth1的网卡在出站时丢弃

iptables -I OUTPUT -o eth1 -j DROP

在这里插入图片描述

2、隐含匹配

常见的隐含匹配条件:
  端口匹配:-p来指定,–sport 源端口、–dport目的端口
  TCP匹配:–tcp-flags 检查范围 被设置的标记
  ICMP匹配:–icmp-type ICMP类型

2.1、端口匹配

端口匹配:-p来指定,–sport 源端口、–dport目的端口

将源网段设置为udp协议且目标端口为53,并开启地址转发
将目标网段设置为udp协议且源端口为53,并开启地址转发

iptables -A FORWARD -s 192.16.2.2/24 -p udp --dport 53 -j ACCEPT

iptables -A FORWARD -d 192.16.2.2/24 -p udp --sport 53 -j ACCEPT

在这里插入图片描述

将源网段“192.16.2.0/24”设置为tcp协议且目标端口为53,并开启地址转发
将目标网段“192.16.2.0/24”设置为tcp协议且源端口为53,并开启地址转发

iptables -A FORWARD -s 192.16.2.0/24 -p tcp --dport 53 -j ACCEPT

iptables -A FORWARD -d 192.16.2.0/24 -p tcp --sport 53 -j ACCEPT

在这里插入图片描述

开放TCP协议且目标端口为22,允许进入
开放TCP协议且目标端口为20-21,允许进入

iptables -A INPUT -p tcp --dport 22 -j ACCEPT

iptables -A INPUT -p tcp --dport 20:21 -j ACCEPT

在这里插入图片描述

2.2、TCP匹配

TCP匹配:–tcp-flags 检查范围 被设置的标记

指定eth1网卡,port设置为tcp协议,检查范围为SYN、RST、ACK,监测到的都丢弃

指定eth1网卡,port设置为tcp协议,除了检查范围中的SYN、RST、ACK,其他都可以进入

iptables -I INPUT -i eth1 -p tcp --tcp-flags SYN,RST,ACK SYN -j DROP

iptables -I INPUT -i eth1 -p tcp ! --tcp-flags SYN,ACK SYN -j ACCEPT

在这里插入图片描述

2.3、ICMP匹配

ICMP匹配:–icmp-type ICMP类型

常见的 icmp 类型
  8  Echo request——回显请求(Ping 请求)
  0  Echo Reply——回显应答(Ping 应答)
  3  错误回显

在这里插入图片描述

在这里插入图片描述


在这里插入图片描述

获取帮助:iptables -p icmp -h

3、显式匹配

常见的显式匹配条件:
  多端口匹配:-m multiport --sports | --dports 端口列表
  IP范围匹配:-m iprange --src-range IP范围
  MAC地址匹配:-m mac --mac-source MAC地址
  状态匹配:-m state --state 连接状态

3.1、多端口匹配

多端口匹配:-m multiport --sports | --dports 端口列表

允许22、25、80、110、143端口进入并开启tcp协议

iptables -I INPUT -p tcp -m multiport --dport 22,25,80,110,143 -j ACCEPT

在这里插入图片描述

3.2、IP范围匹配

IP范围匹配:-m iprange --src-range IP范围

允许192.168.1.100-192.168.1.110这个范围的ip进入并设置tcp协议

iptables -A FORWARD -p tcp -m iprange --src-range 192.168.1.100-192.168.1.110 -j ACCEPT

在这里插入图片描述

3.3、MAC地址匹配

MAC地址匹配:-m mac --mac-source MAC地址

只要mac地址是00:0c:29:c2:83:32的都丢弃

iptables -A FORWARD -m mac --mac-source 00:0c:29:c2:83:32 -j DROP

在这里插入图片描述

3.4、状态匹配

状态匹配:-m state --state 连接状态

常见的连接状态:
  NEW:新连接,与任何连接无关
  ESTABLISHED:响应请求或已建立连接的
  RELATED:与已连接有相关性的,如 FTP 数据连接

在这里插入图片描述

相关文章

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


linux常用进程通信方式包括管道(pipe)、有名管道(FIFO)、信号(signal)、消息队列、共享内存、信号量、套接字(socket)。管道用于具有亲缘关系的进程间通信,有名管道的每个管道具有名字,使没有亲缘关系的进程间也可以通信。信号是比较复杂的通信方式,用于通知接受进程有某种事件发生,除
Linux性能观测工具按类别可分为系统级别和进程级别,系统级别对整个系统的性能做统计,而进程级别则具体到进程,为每个进程维护统计信息。&#xD;&#xA;&#xD;&#xA;按实现原理分,可分为基于计数器和跟踪以及剖析。含义如下:&#xD;&#xA;&#xD;&#xA;计数器:内核维护的统计数据,通常为无符号整型,用于对发生的事件计数,比如,网络包接收计数器,磁
本文详细介绍了curl命令基础和高级用法,包括跳过https的证书验证,详细追踪整个交互过程,可用于调用网络后端接口,诊断http和https网络服务故障。
本文包含作者工作中常用到的一些命令,用于诊断网络、磁盘占满、fd泄漏等问题。命令包括ping、fping、tcpdump、lsof、netstat、/proc/$pid/fd、du、grep、traceroute、dig。
linux的平均负载表示运行态和就绪态及不可中断状态(正在io)的进程数目,用uptime查看到负载很高,既有可能是CPU利用率高,也可能是大量在等待io的进程导致,用mpstat查看每个CPU的使用情况,查看CPU的使用率或者CPU花在等待io的时间,接着用pidstat定位具体的进程
CPU上下文频繁切换会导致系统性能下降,切换分为进程切换、线程切换及中断切换,进程切换的开销较大,除了需要保存寄存器和程序计数器中的值还需保存全局变量、栈等到内存中,以便下次运行恢复,而同一进程中的线程切换开销会小很多,只需更新寄存器和线程独有的栈,共享资源如打开的文件、全局变量等无需切换,当硬件中
1.top命令 作用:该命令可以按CPU使用.内存使用和执行时间对任务进行排序,常用来监控系统中占用CPU或内存较高的程序及CPU和内存的负载。 默认视图: 当想看系统负载时,可观察汇总的%CPU中的us用户进程和sy系统进程是否占用CPU很高,相加接近100%就说明占用很高了,有些程序可能得不到及
文章浏览阅读1.8k次,点赞63次,收藏54次。Linux下的目录权限!!!粘滞位!!!超详解!!!
文章浏览阅读1.6k次,点赞44次,收藏38次。关于Qt的安装、Windows、Linux、MacBook_mack book 安装qt
本文介绍了使用shell脚本编写一个 Hello
文章浏览阅读1.5k次,点赞37次,收藏43次。【Linux】初识Linux——了解操作系统的发展历史以及初次体验Linux编程环境
文章浏览阅读3k次,点赞34次,收藏156次。Linux超详细笔记,个人学习时很认真的记录的,觉得好的麻烦点个赞。
文章浏览阅读6.8k次,点赞109次,收藏114次。【Linux】 OpenSSH_9.3p1 升级到 OpenSSH_9.5p1(亲测无问题,建议收藏)_openssh_9.5p1
文章浏览阅读3.5k次,点赞93次,收藏78次。初识Linux中的线程,理解线程的各种概念,理解进程地址空间中的页表转换,介绍pthread线程库并理解线程库!
文章浏览阅读863次。出现此问题为Linux文件权限问题,解决方案为回到引擎目录执行命令。输入用户密码后运行./UnrealEditor。_increasing per-process limit of core file size to infinity.
文章浏览阅读2.9k次。使用文本编辑器:打开CSV文件,并使用文本编辑器(如Notepad++、Sublime Text、Visual Studio Code等)来查看文件的字符编码格式。通常在编辑器的底部状态栏或设置中可以找到当前编码的显示。请注意,上述方法并非绝对准确,特别是当文件没有明确的编码标识时。因此,如果你发现CSV文件在不同的工具或方法中显示不同的编码格式,可能需要进行进一步的分析和判断,或者尝试使用不同的编码转换方法。该命令将输出文件的MIME类型和编码信息。使用命令行工具:在命令行中,你可以使用。_shell读取csv文件逐行处理
本文介绍了如何在Linux系统中升级gcc版本,以便更好地支持C++11及以上版本的新特性。通过升级gcc,可以提升编译器的功能和性能,获得更好的开发体验。详细的步骤和方法请参考原文链接。
文章浏览阅读4.4k次,点赞6次,收藏19次。Mosquitto是一个开源的MQTT消息代理服务器。MQTT是一个轻量级的、基于发布/订阅模式的消息传输协议。 mosquitto的安装使用比较简单,可以方便的来进行一些测试。_linux mosquitto
文章浏览阅读7.2k次,点赞2次,收藏12次。Linux中,用于根目录下有一个.ssh目录,保存了ssh相关的key和一些记录文件。_~/.ssh/
文章浏览阅读4.5k次,点赞5次,收藏18次。首先需要安装 snmp ,使用下面的命令进行安装安装完毕之后,使用下面的命令查看是否安装成功当命令行显示如图即为安装成功。_snmp工具