Iptables-快速上手

Iptables

  • firewall 防火墙
  • Iptables简述
  • 一、Iptables的四表五链
    • 1.filter表
    • 2.nat表
    • 3.raw表
    • 4. mangle表
    • 5.数据包的流通过程
  • 二、快速上手
    • 1. 查看规则
    • 2. 规则详细
    • 3. 添加规则
    • 4. 自定义链
  • 三、关于iptables和docker
    • 1. 背景
    • 2. 解决方案

firewall 防火墙

  • 从逻辑上讲,可以分为服务器防火墙和主机防火墙。网络防火墙和主机防火墙不存在冲突。
    • 网络防火墙位于网络边界,如路由器或专用硬件设备。用于监控和控制进出网络的数据包,主要职责是在网络层过滤数据包,以保护网络免受攻击。(公司的防火墙就是一种网络防火墙)
    • 主机防火墙安装在单个主机上,如常见的iptables和firewalld。用于保护该主机免受未经授权的网络访问,监控并控制进出主机的数据包,以防止未经授权的访问。
  • 从物理上讲,防火墙可以分为硬件防火墙和软件防火墙。
    • 硬件防火墙:在硬件级别实现部分防火墙功能,一部分功能仍需基于软件实现,性能高,成本高。
    • 软件防火墙:应用软件处理逻辑运行于通用硬件平台之上的防火墙,性能低,成本低。

Linux防火墙体系主要工作在网络层,针对TCP/IP数据包实施过滤和限制,属于包过滤防火墙,并且基于内核编码的实现具有非常稳定的性能和高效率。

Iptables简述

iptables 是 Linux 系统中用于设置、维护和检查网络层数据包过滤规则表的工具。这些规则表定义了哪些数据包应该被允许通过,哪些应该被拒绝或丢弃。

  • 封端口、IP
  • 实现NAT功能
    • 共享网络
    • 端口映射(转发),IP映射

Iptables已被写入到Linux内核中,并且在Dcoker中提供了相当重要的服务。

Iptables相关概念:

  • 表(table):存放链的容器,防火墙最大的概念。
  • 链(chain):存放规则的容器
  • 规则(policy):准许或拒绝规则,定义的是防火墙的通行规则
    在这里插入图片描述
    工作流详解:
  • 防火墙是层层过滤的,实际执行的规则顺序是从上到下,即Rule1到默认规则,不过这条规则是拒绝服务还是允许,都完成一次规则匹配。
  • 规则匹配成功,即明确标识是DROP还是ACCEPT,数据包就不再向下匹配新的规则。
  • 如果规则没有明确表示是阻止还是通过,也就是没有匹配该条规则,则继续向下匹配,直到匹配默认规则得到明确的DROP或ACCEPT。
  • 防火墙默认规则是所有规则都匹配完成才会匹配的。

考虑到匹配规则是从上往下的,因此在设计防火墙规则的适合顺序十分重要。

在只允许一些特定的ip通过防火墙时,把filter-允许某些IP通过的规则放前边,Drop-禁止所有IP的规则放后边。

一、Iptables的四表五链

  • 四表: filter、nat、raw、mangle
  • 五链:
    • INPUT:处理入站数据包
    • OUTPUT:处理出站数据包
    • FORWARD:处理转发数据包
    • POSTROUTING链:在进行路由选择后处理数据包(对数据链进行源地址修改转换)
    • PREROUTING链:在进行路由选择前处理数据包(做目标地址转换)

Tip:此处只介绍最常用的filter和Nat表!

1.filter表

实现防火墙功能,屏蔽或是准许IP端口。

  • iptalbes默认操作表,不指定表制定规则时,操作的是filter表
  • 真正负责主机防火墙功能的表(过滤流入流出主机的数据包)
链名功能
INPUT负责过滤所有目标地址是本机的数据包(是否准许外部数据包进入服务器)
FORWARD负责转发流经主机的数据包,转发作用
OUTPUT负责处理所有源地址是本地的数据包(处理从本机发出的数据包)

2.nat表

实现nat功能,共享网络(内外网服务器上网),端口映射和IP映射。

  • 负责网络地址转换,即来源与目的IP地址的port的转换。
  • 一般用于局域网共享上网或者特殊的端口转换服务相关。

1.用于企业路由(zebra)或网关(iptables),共享上网(POSTROUTING)
2.做内部外部IP地址一对一映射(dmz),硬件防火墙映射IP到内部服务器,ftp服务(PREROUTING)
3.WEB,单个端口的映射,直接映射80端口,这个表定义了3个链,nat功能相当于网络的acl控制。和网络交换机acl类似。

链名功能
OUTPUT负责过滤所有目标地址是本机的数据包(是否准许外部数据包进入服务器)
PREROUTING负责转发流经主机的数据包,转发作用
POSTROUTING负责处理所有源地址是本地的数据包(处理从本机发出的数据包)

3.raw表

raw 表用于处理连接跟踪(connection tracking)的例外情况,即那些不应该被连接跟踪机制处理的流量。raw 表通常用于配置不需要进行连接跟踪的流量,比如某些类型的初始数据包或特定类型的流量,以避免不必要的资源消耗,例如 ICMP 请求,可以将其标记为 raw 类型,以提高处理效率。

链名功能
OUTPUT用于处理从本地系统发出的流量。
PREROUTING用于处理到达接口之前的流量。

4. mangle表

mangle 表用于修改数据包的内容或其元数据,而不直接决定数据包的命运(如接受或丢弃)。mangle 表主要用于数据包的标记、修改 TTL(生存时间)值、修改标志位等操作。它可以用来做一些高级的网络功能,比如负载均衡、QoS(Quality of Service)配置、路由选择等。

链名功能
PREROUTING用于处理到达接口之前的流量。
INPUT用于处理到达本地系统接口的流量。
FORWARD用于处理转发的流量。
OUTPUT用于处理从本地系统发出的流量。
POSTROUTING用于处理离开接口之后的流量。

5.数据包的流通过程

在这里插入图片描述

  • 请求到达服务器前先经过PREROUTING链,进行规则匹配,决定是否访问本机。
  • 如果数据包目标地址不是本机,需要经过FORWARD链进行转发,最后经过POSTROUTING链离开。
  • 如果数据包的目标地址是本机,需要经过INPUT链上制定的规则,符合的才能进入服务系统,不符合的则经过OUTPUT链离开。

二、快速上手

iptables 命令的基本语法如下:

iptables [-t 表名] 命令 [选项] [链名] [条件] [-j 目标]
  • -t 表名:指定要操作的表,默认为 filter 表。iptables 有几个内置表,如 filter、nat、mangle、raw、security 等。
  • 命令:指定要执行的操作,如 -A(追加)、-D(删除)、-L(列出规则)等。
  • 选项:一些命令可能需要额外的选项来指定操作的具体细节。
  • 链名:指定规则所在的链,如 INPUT、OUTPUT、FORWARD 等,或是自定义的链。
  • 条件:用于匹配数据包的条件,如源地址、目的地址、端口号等。
  • -j 目标:指定匹配到的数据包的处理方式,如 ACCEPT(接受)、DROP(丢弃)、REJECT(拒绝)等。

具体命令详细可以使用iptalbes --help查看,此处只列举常用命令。

1. 查看规则

查看所有 iptables 规则:

							iptables -nL
解析: -n 选项告诉iptables不要对地址进行 DNS 解析,而 -L 选项则是列出所有链中的规则。

在这里插入图片描述


查看指定表的规则:

							iptables -t 表名 -nL

在这里插入图片描述

2. 规则详细

根据配置好的指定规则匹配每个流经此处的数据包。如果匹配成功,则由规则后面指定的处理动作进行处理,如果该条规则匹配失败,则数据包流入下一规则进行匹配,直至所有规则匹配失败,最后按照该链的默认规则处理。

  • target : 处理动作,该条规则匹配成功后按照指定动作进行处理。
    • ACCEPT:允许数据包通过
    • DROP:丢弃数据包,不给任何回应信息,客户端会收到Connect time out,连接超时。
    • REJECT:拒绝数据包,给请求端一个响应的信息,客户端会收到unreachable,请求不可达。
    • SNAT:源地址转换,根据指定的条件,将数据包源IP进行更改转发,可以解决内网用户用同一个公网地址上网的问题。
    • MASQUERADE:是SNAT的一种特殊形式,适用于动态的、临时会变的ip。
    • DNAT:目标地址转换,将数据包的目标地址变更,如访问Docker服务时,目标地址会由主机变更到Docker容器。
    • REDIRECT:在本机做端口映射
    • LOG:在/var/log/messages文件中记录日志信息,然后将数据包传递给下一条规则,也就是说除了记录以外不对数据包做任何其他操作,仍然让下一条规则去匹配
  • prot: 通信协议,例如TCP、UDP、ICMP。
  • opt: 选项,通常在建立规则的时候可以指定。
  • source: 源地址,指的是数据包的来源IP。
  • destination: 目标地址,指的是数据包想要发送的目的地。

3. 添加规则

Tip: 规则的匹配是从上到下的,哪个先匹配就执行哪个,后面就算有一模一样的也不会执行,因此在设计规则的时候顺序是十分重要的!!!

添加规则:

					iptables -t 表名 -A 链名 匹配条件 -j 处理动作
例如:
允许源地址192.168.10.152的数据包通过:iptables -t filter -I INPUT -s 192.168.10.152 -j ACCEPT
禁止所有的数据包,不接收任何网络访问:iptables -t filter -I INPUT -j ACCEPT
设置指定链的默认策略:iptables -t nat -P FORWARD ACCEPT 
根据索引删除指定链的规则:iptables -t nat -D FORWARD 1

iptables命令使用iptables开头,以下是一些常用参数:

参数作用
-t [表名]指定要操作的表,默认是filter表
-A [链名]指定要操作的链,append,在该链的末尾添加规则
-I [链名]指定要操作的链,Insert,在该链的首部添加规则
-D [链名]指定要操作的链,delete,根据索引删除规则
-s [源地址]source,设置数据包的源地址要求
-d [目标地址]destination,设置数据包的目标地址要求
-p [通信协议]prot,设置数据包的通信协议要求
- -dport [目标地址端口]destination port,设置目标地址的端口要求
-j [处理动作]jump,设置数据包匹配要求时的处理动作

其他参数可以通过iptables --help 查看哈,太多了就不列举了。

关于设置防火墙策略:

白名单:把指定链的默认策略设置为DROP,只设置允许数据包通过的规则,实现只有匹配规则的数据包才能进行通信,其余通信将被拒绝或是屏蔽。

黑名单:把链的默认策略设置为ACCEPT,只设置禁止数据包通过的规则,实现只有匹配规则的数据包不能够进行通信,其余通信将会允许通过。

Tip:iptables重启的时候默认会清空规则,可以要做好相应的重启策略,对应白名单,通常不建议更改链的默认策略为DROP,一旦规则清空,所有的数据包都不能够通过,包括自己,如果是服务器,那么将会无法进行ssh远程连接。因此可以利用从上到下的匹配规则,白名单可以在最后一条规则设置为拒绝所有数据包。

关于设置一连串的ip地址:

  • –src-range: 取代-s参数,可以设置一串连续的ip,例如 --src-range 192.168.1.127-192.168.1.146
  • –dst-range: 取代-d参数,可以设置一串连续的ip,例如 --dst-range 192.168.1.127-192.168.1.146

4. 自定义链

除了iptables提供的链,我们可以通过自定义链管理更多的规则,值得一提的是自定义链并不能直接使用和删除。需要被默认的链引用才能使用,只有当链中没有规则并且没有被引用时才能进行删除

创建自定义链:						iptables -t filter -N NEW_CHAIN
在默认链中引用自定义链:				iptables -t filter -I INPUT -j NEW_CHAIN
重命名自定义链:						iptables -E NEW_CHAIN RENAME_CHIAN
删除一个符合规则的自定义链:			iptables -X RENAME_CHAIN

三、关于iptables和docker

1. 背景

在实际开发过程中,Docker服务默认使用iptables作为端口、地址转发和映射,并且Docker桥接模式使用的Docker0网卡在iptables中不受常用的filter表下的INPUT链控制,因此做好Docker服务的安全策略十分必要。
在这里插入图片描述

  • 外部网络在访问Docker容器服务时,先通过iptables中的NAT表的PREROUTING链,Docker会在iptables中添加转发规则。因此目标地址为宿主机,端口为映射端口的数据包,会被FORWARD进行转发。
  • 经过NAT的DNAT(目标地址转换)操作后,目标地址以及端口可能发生改变,因此不再经过FILTER表的INPUT链(通常在此处设置规则拦截数据包),而是由FILTER表的FORWARD链处理。
  • 最后会在FILTER表中还会经过Docker创建的自定义链处理,最后发送到对应的容器当中。

2. 解决方案

根据上述的描述,iptables设置在FILTER表的INPUT链中的规则不在能够限制Docker服务的访问,除了对上述背景中提到的相关链进行修改,Docker提供了一条DOCKER-USER的链供用户进行规则设置,因此需要在Filter表中的DOCKER-USER链进行规则设定。

Docker服务在启动的时候会自动在iptables中创建相应的链,并设立规则。

			iptables -I DOCKER-USER -p tcp --dport 80 -j DROPiptables -I DOCKER-USER -s 10.10.181.201 -p tcp --dport 80 -j ACCEPT

上述规则只允许源地址为 10.10.181.201 ,目标端口为80的数据包访问Docker服务,其余目标端口为80,协议类型为TCP的数据包将会被屏蔽。

在实际开发过程中,情况可能更复杂,可以根据iptables中链的转发跳转情况进行设定,可能会存在数据包经过NAT表的转发后目标地址和端口发生改变的情况,因此DOCKER-USER表规则的设置应该视情况而定!!!

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【LLM之Data】SKYSCRIPT-100M论文阅读笔记

研究背景 随着短视频和短剧的兴起,自动化的剧本生成和短剧制作在影视行业中的需求逐渐增加。传统的剧本生成过程需要大量的人工干预,限制了其在规模和效率上的扩展性。当前的大型语言模型(LLM)在剧本生成方面展现出一定潜力&…

K8S的持久化存储

文章目录 一、持久化存储emptyDir实际操作 hostPath建立过程 NFS存储NFS 存储的优点NFS 存储的缺点具体操作 pv和pvcPersistent Volume (PV)使用场景 Persistent Volume Claim (PVC)使用场景 使用 PV 和 PVC 的场景实际操作 StorageClassStorageClass 概述应用场景实际应用 一、…

CLIP微调方法总结

文章目录 前言1️⃣ Tip-Adapter论文和源码原理介绍 2️⃣Cross-modal Adaptation(跨模态适应)论文和源码原理介绍 3️⃣ FD-Align(Feature Discrimination Alignment,特征判别对齐)论文和源码原理介绍 总结 前言 本文…

USB3.2 摘录(11)

系列文章目录 USB3.2 摘录(一) USB3.2 摘录(二) USB3.2 摘录(三) USB3.2 摘录(四) USB3.2 摘录(五) USB3.2 摘录(六) USB3.2 摘录&…

IO进程day01(标准IO、缓存区)

目录 【1】标准IO 1》概念: 2》特点 【2】缓存区 1》全缓存:和文件相关 2》行缓存:和终端有关 3》不缓存:也就是没有缓存区,标准错误。 【1】标准IO 1》概念: 标准IO: 是在C库中定义的一…

C++ | Leetcode C++题解之第355题设计推特

题目&#xff1a; 题解&#xff1a; class Twitter {struct Node {// 哈希表存储关注人的 Idunordered_set<int> followee;// 用链表存储 tweetIdlist<int> tweet;};// getNewsFeed 检索的推文的上限以及 tweetId 的时间戳int recentMax, time;// tweetId 对应发送…

香港站群服务器优势

香港站群服务器因其独特的地理位置和网络连接优势&#xff0c;在SEO优化、网站群管理和网络营销等方面受到广泛关注。其优势主要体现在以下几个方面&#xff0c;rak小编为您整理发布。 地理位置优越 连接亚洲国际市场&#xff1a;香港作为亚太地区的重要经济中心&#xff0c;具…

代码随想录 刷题记录-18 动态规划(2)01背包问题、习题

一、01背包理论基础 例题&#xff1a;46. 携带研究材料 01 背包 有n件物品和一个最多能背重量为w 的背包。第i件物品的重量是weight[i]&#xff0c;得到的价值是value[i] 。每件物品只能用一次&#xff0c;求解将哪些物品装入背包里物品价值总和最大。 暴力解法&#xff1a…

SpringBoot实现Word转PDF/TXT

背景 研发工作中难免会遇到一些奇奇怪怪的需求&#xff0c;就比如最近&#xff0c;客户提了个新需求&#xff1a;上传一个WORD文档&#xff0c;要求通过系统把该文档转换成PDF和TXT。客户的需求是没得商量的&#xff0c;必须实现&#xff01;承载着客户的期望&#xff0c;我开始…

【计算机网络】应用层HTTP协议

我们已经实现过应用层协议&#xff0c;但也要看一看成熟的应用层协议 目录 1 HTTP协议11 URL12 urlencode 和 urldecode13 HTTP 协议请求与响应格式请求格式响应格式 14 界面的基本处理显示基本主页显示图片页面跳转 15 常见header16 状态码161 404举例162 关于3开头的状态码 1…

yd云手机登录算法分析

yd云手机登录算法分析 yd云手机登录算法分析第一步&#xff1a;抓包-登录第二步&#xff1a;定位加密入口第三步&#xff1a;分析加密算法第四步&#xff1a;算法实现 yd云手机登录算法分析 在这篇文章中&#xff0c;我们将详细解析yd云手机的登录算法&#xff0c;涵盖从抓包到…

96.SAP MII功能详解(09)Workbench-Transaction Debugging

目录 1.About Transaction Debugging Use Features Activities 2.How to Debug Start Debugging Create Breakpoint Watch Variables Debugging logs 1.About Transaction Debugging Use You use this function to monitor and manipulate a transaction while it …

微深节能 堆取料机回转俯仰角度检测系统 格雷母线定位系统

微深节能在堆取料机回转俯仰角度检测系统中引入的格雷母线定位系统&#xff0c;是一项重要的技术创新&#xff0c;显著提升了堆取料作业的自动化水平和精确性。以下是对该系统的详细介绍&#xff1a; 一、系统概述 格雷母线定位系统作为高精度、无磨损的非接触式位置检测系统&a…

07 - procfs

---- 整理自 王利涛老师 课程 实验环境&#xff1a;宅学部落 www.zhaixue.cc 文章目录 1. procfs 快速入门2. procfs 文件创建的回调机制3. 在 proc 目录下创建子目录4. 通过 proc 接口修改内核变量5. 通过 proc 接口访问数组6. 序列文件&#xff1a;seq_file 编程接口7. seq_f…

OpenCV绘图函数(1)绘制带箭头的直线函数arrowedLine()的使用

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 绘制一个从第一个点指向第二个点的箭头线段。 cv::arrowedLine 函数在图像中绘制一个从 pt1 到 pt2 的箭头。另见 line 函数。 函数原型 void c…

基于单片机的无线空气质量检测系统设计

本设计以STC89C52单片机为核心&#xff0c;其中包含了温湿度检测模块、光照检测模块、PM2.5检测模块、报警电路、LCD显示屏显示电路、按键输入模块和无线传输模块来完成工作。首先&#xff0c;系统可以通过按键输入模块设置当前的时间和报警值&#xff1b;使用检测模块检测当前…

在Ubuntu 部署 Grafana且监控MySQL数据

一、安装 打开终端按顺序执行以下命令 1.添加 Grafana 的 APT 仓库&#xff1a; sudo apt-get install -y software-properties-common sudo add-apt-repository "deb https://packages.grafana.com/oss/deb stable main" 2.导入Grafana GPG key&#xff1a; wge…

吴光明铸就鱼跃辉煌,科技创新开辟医疗新篇章

在鱼跃集团的发展历程中&#xff0c;创始人吴光明为其树立了最鲜明的品牌标签——创新。吴光明始终坚信&#xff0c;“研发实力代表一个医疗器械企业的核心竞争力”。他很早就认识到&#xff0c;只有从用户需求出发进行创新&#xff0c;才能提升医疗产品的使用体验&#xff0c;…

软件设计原则之接口隔离原则

接口隔离原则&#xff08;Interface Segregation Principle, ISP&#xff09;是面向对象设计中的一个重要原则&#xff0c;它属于SOLID原则之一。这个原则强调客户端&#xff08;即接口的调用者&#xff09;不应该被迫依赖于它们不使用的方法。换句话说&#xff0c;一个类对另一…

SOA通信中间件介绍(一)

一、通信中间件 在软件定义汽车中&#xff0c;应用程序之间的跨进程或跨核通信是一个需要解决的问题。模块化架构为开发人员提供了便利&#xff0c;但也引入了对通信中间件的需求。 在没有使用通信中间件的情况下&#xff0c;开发人员需要自己定义数据的格式、发送方和接收方…