Linux iptables详解

前言:事情是这样的。最近部门在进行故障演练,攻方同学利用iptables制造了一个故障。演练最终肯定是取得了理想的效果,即业务同学在规定时间内定位了问题并恢复了业务(ps:你懂得)。

对我个人来讲一直知道iptables的存在,但是说起来使用还真有些陌生,为此专门做个记录。

1、iptables介绍

1.0、iptables基本介绍 

        iptables是Linux防火墙系统的重要组成部分,其主要功能是实现对网络数据包进出设备及转发的控制。iptables是Linux中比较底层的网络服务,它控制了Linux系统中的网络操作.centos中的firewalld和ubuntu中的ufw都是在iptables之上构建的,当然他们简化了iptables的操作。因此学习了解iptables对我么了解firewalld和ufw的工作机制都很有帮助。ps:firewalld和ufw不仅仅是对iptables进行封装这么简单,还有ipv6等功能。

        iptables是集成在Linux内核中的包过滤防火墙系统。使用iptables可以添加、删除具体的过滤规则,iptables默认维护着4个表(table)和5个链(chain),所有防火墙策略规则都被分别写入这些表与链中。如下图所示为数据包到达linux主机网卡后,内核处理数据包的大致流程。

如上图数据流向为:

  1. 一个数据包进入网卡时它首先进入PREROUTING链,内核根据数据包目的IP判断是否需要转发出去。
  2. 如果数据包就是进入本机的它会沿着上图向上移动到达INPUT链。数据包到了INPUT链后任何进程都可以接收到它。
  3. 如果数据包是要转发出去的(且内核允许转发),数据包就会如上图享有移动经过FORWARD链,然后到达POSTROUTING链输出。
  4. 对于本机运行程序发送的数据包。其首先会经过OUTPUT链,然后到达POSTROUTING链输出。 

1.1、什么是规则(rule)?

        规则就是管理员对数据包预定义的条件,简单来说就是当数据包满足某种条件就执行指定的动作。对于网络协议这里的条件显然就是"五元组"那些东西:例如数据包源地址、源端口、协议类型、目的地址、目的端口。动作:可以是放行(accept)、拒绝(reject)、丢弃(drop)等。ps:后面会详细介绍。

        iptables基本语法格式如下:

iptables [-t table] COMMAND [chain] CRETIRIA -j ACTION

各参数含义如下(各取值后面会有介绍):

  • -t:指定需要维护的防火墙规则表(filter/nat/mangle/raw等),不指定默认filter。
  • COMMAND:子命令,定义对规则的管理。
  • chain:指明链表。
  • CRETIRIA:匹配参数。
  • ACTION:触发什么动作(ACCEPT/DROP/等)。

       下面提供一个iptables命令规则,便于直观理解。

iptables -t filter -A INPUT -i eth0 -p tcp -s 192.23.2.0/24 -m multiport --dports 443,80 -j ACCEPT

#-t:操作filter表
#-A:在表末追加规则;-I为表首插入规则、-D为删除规则
#INPUT:链名称;该规则在那条链上生效
#-j:数据包处理动作;比如接受、拒绝等

命令解释:允许经过本机网卡eth0,访问协议是TCP,源地址是192.23.2.0/24段的数据包访问本地端口80和443的服务。

1.2、什么是表?

        表主要是用来存放具体的防火墙规则的。我们可以对规则进行分类,不同的功能存入不同的表。分类如下:

  • filter表:主要用于过滤流入和流出的数据包,根据具体的规则决定是否放行该数据包;
  • nat表:主要用于修改数据包的源地址和目的地址、端口号等信息(实现网络地址转换,如SNAT、DNAT、MASQUERADE、REDIRECT);
  • raw表:主要决定数据包是否被状态跟踪机制处理;
  • mangle表:主要用于超姐报文修改数据包的IP头信息;
  • security表:最不常用的表,用在SELinux上;用于强制访问控制(MAC)网络规则,由Linux安全模块(SELinux)实现其中nat表和filter表最常用。

1.3、什么是链(chains)?

        "链"是指内核中控制网络定义的几个规则链。链是数据包传播的路径,每一天链其实就是众多规则中的一个检查清单,每一天链中可以有一条或多条规则。其实就是一条链路链接在一起的规则。 由上图我们知道有如下五个数据链:

  • INPUT(入站数据过滤):路由判断后确定数据包流入本机,此时应用这里的规则;
  • OUTPUT(出站数据过滤):本机应用向外发出数据包时,应用这里的规则;
  • FORWARD(转发数据过滤):路由判断之后确定数据包要转发给其他主机,应用此规则;注:linux主机需要开启ip_forward功能才支持转发,在/etc/sysctl.conf文件中配置参数net.ipv4.ip_forward=1
  • PREROUTING(路由前过滤):数据包到达防火墙时,进行路由判断之前指定的规则;
  • POSTROUTING(路由后过滤):在数据包离开防火墙时候进行路由判断之后执行的规则。规则按照从上到下的顺序进行匹配,当一个数据包与某个规则匹配成功后就会按照规则的动作处理,即后续的规则不再会被考虑。

如下梳理几个典型场景数据链路情况:

(1)外部主机发送数据包给防火墙主机:数据会经过PREROUTING链与INPUT链。

(2)防火墙本机发送数据包到外部主机:数据会经过OUTPUT链与POSTROUTING链;

(3)防火墙备机作为路由负责转发数据:数据经过PREROUTING链、FORWARD链以及POSTROUTING链。

2、iptables的语法规则

2.1、iptables基本语法格式

(1)语法格式 

iptables [-t table] COMMAND [chain] CRETIRIA -j ACTION

各参数含义如下:

  • -t:指定需要维护的防火墙规则表(filter/nat/mangle/raw等),不指定默认filter。
  • COMMAND:子命令,定义对规则的管理。
  • chain:指明链表。
  • CRETIRIA:匹配参数。
  • ACTION:触发什么动作(ACCEPT/DROP/等)。

(2)规则表(-t)

用于指定命令应用于哪个iptables内置表。注:不指定默认filter表。

(3)命令(COMMAND)

命令介绍
-A --append <链名> 列表最后追加规则
-I --insert <链名>指定位置插入规则
-R --replace <链名>替换规则列表中的某条规则
-D --delete <链名>从规则列表中删除1条规则
-L --list <链名>查看iptables规则列表
-v --verbose <链名>与-L他命令一起使用显示更多更详细的信息
-F --flush <链名>删除表中所有规则
-Z --zero <链名>将表中数据包计数器和流量计数器归零
-X --delete-chain <链名>删除自定义链
-P --policy <链名>定义默认策略

(4)chain

参见上述链的介绍

(5)标准criteria(其实就是匹配条件)

参 数(!表示取反)    功 能
[!]-p     匹配协议(--proto)
[!]-s     匹配源地址(--source源地址或子网)
[!]-d     匹配目标地址
[!]-i     匹配入站网卡接口(--in-interface 网络接口名)
[!]-o     匹配出站网卡接口(--out-interface 网络接口名)
[!]--sport  匹配源端口(源端口号)
[!]--dport  匹配目标端口(目标端口号)
[!]--src-range  匹配源地址范围
[!]--dst-range  匹配目标地址范围
[!]--limit  四配数据表速率
[!]--mac-source  匹配源MAC地址
[!]--sports  匹配源端口
[!]--dports  匹配目标端口
[!]--stste  匹配状态(INVALID、ESTABLISHED、NEW、RELATED)
[!]--string  匹配应用层字串

(6)触发动作(其实就是行为)

触发动作   功 能
ACCEPT  允许数据包通过
DROP  丢弃数据包
REJECT  拒绝数据包通过
LOG  将数据包信息记录 syslog 曰志
DNAT  目标地址转换
SNAT  源地址转换
MASQUERADE  地址欺骗
REDIRECT  重定向

对常用的几个动作进行下说明:

(1)REJECT:拦阻该数据包,并返回数据包通知对方。可以返回的数据包有几个选择:ICMP port-unreachable、ICMP echo-reply 或是tcp-reset(这个数据包包会要求对方关闭联机),进行完此处理动作后,将不再比对其它规则,直接中断过滤程序。 

iptables -A  INPUT -p TCP --dport 22 -j REJECT --reject-with ICMP echo-reply

(2)DROP:丢弃数据包不予处理,进行完此处理动作后将不在比对其他规则直接终端过滤程序。

(3)REDIRECT:将数据包重新导向另一个端口(PNAT)。进行完此处理动作以后,将会继续比对其他规则。ps:这个功能可以用于实现 透明代理 或用来保护web服务器。

iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT--to-ports 8081

 

2.2、看个具体的例子

下面提供一个iptables命令规则,便于直观理解。

iptables -t filter -A INPUT -i eth0 -p tcp -s 192.23.2.0/24 -m multiport --dports 443,80 -j ACCEPT

#-t:操作filter表
#-A:在表末追加规则;-I为表首插入规则、-D为删除规则
#INPUT:链名称;该规则在那条链上生效
#-j:数据包处理动作;比如接受、拒绝等

命令解释:允许经过本机网卡eth0,访问协议是TCP,源地址是192.23.2.0/24段的数据包访问本地端口80和443的服务。

3、iptables常用指令

3.1、查看规则

iptables -nvL   #查看默认的filter表
iptables -nvL -t nat  #指定查看nat表
iptables -nvL --line-number  #显示规则行号(可用于指定行号删除规则)

各参数含义如下:

-L表示查看当前表的所有规则,默认查看的是filter表;如果要查看nat表需追加"-t nat"指定;

-n表示不对IP进行反查,加上这个参数显式速度会更快;

-v表示输出详细信息,包含通过改规则的数据包数据量、总字节数以及相应的网络接口;

iptables -nL --line-number

如下图所示圆框部分即为规则号、方框部分即为一条具体的规则。

注:可以看到这个规则作用filter表的INPUT链,对于来源是9.137.22.127的数据包直接drop。

3.2、添加规则

添加规则有两个命令,分别是-A添加到规则的末尾) 和 -I 插入指定位置(如果没有指定的话就默认插入到规则的首部)。

//丢弃来自特定IP的所有数据包。
//filter表的INPUT链插入一条规则。规则为:来源是9.137.22.127/192.168.1.5的请求全部丢弃。
iptables -A INPUT -s 9.137.22.127 -j DROP
iptables -A INPUT -s 192.168.1.5 -j DROP


//丢弃某个端口的所有tcp数据包
//filter表的INPUT链超如一条规则。规则为:来自22端口的任何TCP数据包都直接丢弃。
iptables -A INPUT -p tcp --dport 22 -j DROP

//屏蔽出站ip
iptables -A OUTPUT -d 192.168.1.0/24 -j DROP
iptables -A OUTPUT -o eth1 -d 192.168.1.0/24 -j DROP


//允许tcp协议目标端口22的数据包进入
iptables -A INPUT -p tcp --dport=22 -j ACCEPT

//允许tcp协议来源ip是1.2.3.4的数据包的进入
iptables -A INPUT -p tcp -s 1.2.3.4 -j ACCEPT

查看规则如下:

3.3、修改规则

修改规则时候需要使用 -R 参数。

//修改上述规则号为1的规则,修改成"s 9.137.22.127 -j ACCEPT"
iptables -R INPUT 1 -s 9.137.22.127 -j ACCEPT

#修改上述规则好为6的规则,修改成"-s 1.3.4.2 -j DROP"
iptables -R INPUT 5 -p tcp -s 1.3.4.2 --dport=9380 -j DROP

执行两条指令后,查看iptables效果如下。

3.4、删除规则

修改规则有两种方法,但都必须使用-D参数。

#指定规则号及规则删除(太麻烦)



#仅指定规则号删除
iptables -D INPUT 5
iptables -D INPUT 4

删除后再次查看规则,如下就只剩下三个规则了:

iptables -nvL --line-number

3.5、启动/停止/重启防火墙

service iptables start
service iptables stop
service iptables restart

//保存防火墙规则
service iptables save

4、验证效果

4.1、限制某个IP不能访问

初始状态。工具机 9.137.22.127上执行脚本访问mongo_proxy服务所在的机器(30.169.0.179)。

如下图,显然可以正常访问到数据:

接下来在mongo_proxy所在机器上限制来自ip 9.137.22.127的访问,即添加如下规则:

iptables -A INPUT -s 9.137.22.127 -j DROP

 然后就访问不通了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/709911.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

winform 应用程序 添加 wpf控件后影响窗体DPI改变

第一步&#xff1a;添加 应用程序清单文件 app.manifest 第二步&#xff1a;把这段配置 注释放开&#xff0c;第一个配置true 改成false

厂里资讯之总体架构介绍以及环境搭建

本项目是本人根据黑马程序员的微服务项目黑马头条进行包装改造&#xff0c;作为实习简历上面的项目&#xff0c;为了进一步熟悉深挖这个项目&#xff0c;写了这一系列的博客来加深自己对项目的理解。 概述 项目背景 本项目主要着手于使用户获取学校最新最热的资讯&#xff0c…

HTC-Net

表1 复现结果–Dice&#xff1a;0.8995476149550329&#xff0c;mIOU&#xff1a;0.8395136164423699&#xff0c;Recall&#xff1a;0.8688330349167194&#xff0c;F1-score&#xff1a;0.8573282647143806&#xff0c;PA&#xff1a;0.9356796542306741 与原文结果差不多 表…

OpenCV练习(1)签名修复

1.目的 在学校的学习过程中&#xff0c;需要递交许多材料&#xff0c;且每份材料上都需要对应负责人签名&#xff0c;有时候找别人要签名&#xff0c;然后自己粘贴的话&#xff0c;会出现签名模糊&#xff0c;背景不是纯白透明。为此以word中的“颜色校正”功能为参照&#xf…

图片怎么在线转换格式?电脑快速改图片格式的技巧

图片怎么把格式在线转换&#xff1f;在使用图片的时候不同平台会需要添加不同的图片格式&#xff0c;当图片格式不对时就需要使用图片格式转换器来修改当前图片的格式之后才可以正常使用。那么怎么操作能够简单快捷的修改当前图片的格式呢&#xff1f; 图片转格式可以使用网上…

java:spring【AnnotationMetadata】的简单使用例子

# 项目代码资源&#xff1a; 可能还在审核中&#xff0c;请等待。。。 https://download.csdn.net/download/chenhz2284/89435385 # 项目代码 【pom.xml】 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-start…

R 文件优化插件:Binary XML file in layout Error inflating class

场景一&#xff1a;构造函数缺失 问题 自定义布局&#xff08;FlagmentLayout&#xff09;加载自定义属性失败&#xff0c;导致广告显示异常&#xff0c;甚至是闪退&#xff5e; InflateException 在 Android 中我们遇到的通常发生在自定义 View 创建中&#xff0c;动态加载…

家用RJ45水晶头可以用在工业互联网中?

工业互联网作为智能制造的核心组成部分&#xff0c;已经在工业领域快速发展。在建立连接不同设备和系统的复杂网络中&#xff0c;网络设备和连接器的选择变得至关重要。其中&#xff0c;普遍使用的RJ45水晶头和网线在家庭和小型商业网络中被广泛采用&#xff0c;但是否适用于工…

记录一下PHP使用微信小程序支付

记录一下PHP使用微信小程序支付V3版本经历 官方文档&#xff1a;https://pay.weixin.qq.com/wiki/doc/apiv3/open/pay/chapter2_8_0.shtml 请详细查看文档中小程序支付接入前准备&#xff08;https://pay.weixin.qq.com/wiki/doc/apiv3/open/pay/chapter2_8_1.shtml&#xff…

电脑怎么录制游戏视频?轻松捕捉每一帧精彩

随着游戏产业的蓬勃发展&#xff0c;越来越多的玩家不仅满足于在游戏世界中的探索与冒险&#xff0c;更希望将自己的游戏精彩瞬间记录下来&#xff0c;分享给更多的朋友。可是电脑怎么录制游戏视频呢&#xff1f;本文旨在为广大游戏爱好者提供一份详细的电脑游戏视频录制攻略&a…

GraphQL(9):Spring Boot集成Graphql简单实例

1 安装插件 我这边使用的是IDEA&#xff0c;需要先按照Graphql插件&#xff0c;步骤如下&#xff1a; &#xff08;1&#xff09;打开插件管理 在IDEA中&#xff0c;打开主菜单&#xff0c;选择 "File" -> "Settings" (或者使用快捷键 Ctrl Alt S …

2024黄河流域比赛的复现

目录 WEB [GKCTF 2021]easynode unser 知识点 WEB 根据此题先复现[GKCTF 2021]easynode这个题&#xff0c;这两个题类似 [GKCTF 2021]easynode 1.打开页面发现是登录页面&#xff0c;找到源文件里面的代码&#xff0c;分析如何进行登录&#xff0c;发现经过safeQuery()函…

外网访问公司内网服务器?

【天联】组网天联可以解决不同地区电脑与电脑、设备与设备、电脑与设备之间的信息远程通信问题。在全国各主要节点部署加速服务器&#xff0c;实现在低带宽、跨运营商的网络环境下高速访问&#xff1b;这为公司内网服务器提供了一个可行的外网访问解决方案。 在现代办公环境中…

Unet心电信号分割方法(Pytorch)

心血管疾病是一种常见病&#xff0c;严重影响人们的健康及日常生活。 近年来随着人们生活习惯的不断变化&#xff0c;心血管疾病对人们影响愈加明显&#xff0c;发病率呈现出逐年攀升的趋势&#xff0c;心血管疾病是中国城乡居民死亡的首要原因。心电图ECG已被广泛用于研究心跳…

PHP CGI Windows平台远程代码执行漏洞(CVE-2024-4577)复现

PHP语言在设计时忽略了Windows对字符编码转换的 Best-Fit 特性&#xff0c;导致未授权的攻击者可以通过特定字符串绕过 CVE-2012-1823 补丁&#xff0c;执行任意PHP代码&#xff0c;导致服务器失陷。 1.漏洞级别 高危 2.漏洞搜索 fofa: app"XAMPP"3.影响范围 P…

RTOS笔记--资源管理

资源管理 资源管理&#xff0c;其实就是前面介绍过的通知方式中的队列信号量互斥量等是如何访问临界资源的&#xff0c;如何做到完全互斥。 在之前举过一个例子&#xff1a;当我们使用全局变量来进行互斥操作时&#xff0c;有可能在改写全局变量时被切换使得不再互斥&#xff0…

使用thymeleaf直接渲染字符串

目录 一、依赖 二、示例代码 一、依赖 <--JAVA 8--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-thymeleaf</artifactId><version>2.7.18</version></dependency><-…

如何确保数据跨域交换安全、合规、可追溯性?

数据跨域交换是指在不同的组织、系统或网络之间进行数据的传输和共享。随着数字经济的发展&#xff0c;数据跨域交换在促进数据流通和创新融合方面发挥着重要作用。然而&#xff0c;这一过程也面临着诸多挑战和风险&#xff0c;例如数据安全、合规性、完整性以及责任不清晰等问…

C#操作MySQL从入门到精通(17)——使用联结

前言: 我们在查询数据的过程中有时候查询的数据不是来自一个表而是来自多个表,本文使用的测试数据如下: 本文使用了两个表student_info、address_info student_info的数据如下: address_info的数据如下: 1、内联结 所谓内联结就是求交集,两个表都有的数据才是有效数…

SSH密钥认证:实现远程服务器免密登录的两种方法|Linux scp命令详解:高效实现文件与目录的远程传输

简介&#xff1a; 服务器之间经常需要有一些跨服务器的操作&#xff0c;此时就需要我们在一台服务器上登录到另外一台服务器&#xff0c;若是人为操作时我们都可以每次输入密码进行远程登录&#xff0c;但要是程序需要跨服务器时&#xff0c;每次输入密码就不现实了&#xff0c…