Linux系统安全防火墙(iptables)配置策略
<div id="navCategory"><h5 class="catalogue">目录</h5><ul class="first_class_ul"><li>概念</li><li>防火墙的主要功能和特点:</li><li>防火墙分类</li><li>其他概念<ul class="second_class_ul"><li>通信五要素:</li><li>通信四要素</li><li>用户态和内核态</li></ul></li><li>四个表五个链<ul class="second_class_ul"></ul></li><li>数据包过滤的匹配流程<ul class="second_class_ul"><li>三种报文流向:</li><li>规则内的匹配顺序:</li></ul></li><li>iptables<ul class="second_class_ul"><li>iptables命令的格式和相关选项</li><li>iptables语法格式</li><li>管理选项</li><li>匹配条件</li><li>数据包的控制类型</li><li>使用实例</li><li>开机不自启 并且立即关闭</li><li>开机自启 并且 立即开启</li></ul></li><li>策略备份与还原<ul class="second_class_ul"><li><strong>备份iptables设置</strong></li><li><strong>一键导入,设置为当前防火墙设置</strong></li><li><strong>修改iptables的默认设置</strong></li><li><strong>直接把配置导入配置文件</strong> :</li></ul></li><li><strong>自定义链</strong><ul class="second_class_ul"><li>创建自定义链:</li><li>向自定义链添加规则,例如:</li></ul></li></ul></div><p class="maodian"></p><h2>概念</h2><p style="text-align:center"><img alt="概念" src="https://zhuji.jb51.net/uploads/allimg/20251107/1-25110GJ95MX.png" /></p>
<p>防火墙(Firewall)是一种网络安全设备或软件,用于保护计算机网络免受未经授权的访问、恶意攻击和恶意软件的侵害。它充当了网络和互联网与内部网络之间的关卡,对流量进行过滤和监控,以确保网络安全和保护敏感数据。</p>
<p>防火墙可以部署在不同的层级,包括网络层、数据链路层和应用层,以提供不同级别的保护。有硬件防火墙和软件防火墙两种类型,它们可以独立运行或组合使用,以实现全面的网络安全。</p>
<p>综而言之,防火墙是网络安全的关键组成部分,有助于保护网络和系统免受恶意攻击、未经授权的访问和数据泄露。在建立防火墙策略时,必须根据网络需求和威胁模型来定义规则,以确保网络的安全性和可用性。</p>
<p>除此以外,还有防水墙,ensp:不透明的工作方式,就是你干什么都知道,但你自己不知道。</p>
<p class="maodian"></p><h2>防火墙的主要功能和特点:</h2>
<p><strong>包过滤:</strong> 防火墙通过检查网络数据包的源地址、目标地址、端口号和协议等信息,根据预定义的规则来决定是否允许或拒绝这些数据包通过。这种方式可以防止未经授权的访问。</p>
<p><strong>状态跟踪:</strong> 某些防火墙能够跟踪连接的状态,允许有关已建立的连接的数据包通过,从而实现应用层协议的连接。这有助于支持网络应用程序的正常通信。</p>
<p><strong>代理服务:</strong> 防火墙可以充当代理服务器,对外部请求进行代理,以隐藏内部网络的细节和提供额外的安全性。</p>
<p><strong>应用层检测:</strong> 高级防火墙可以检查数据包中的内容,以识别特定应用程序或恶意软件,从而提供更精细的控制和安全。</p>
<p><strong>虚拟专用网络(VPN)支持:</strong> 防火墙通常支持建立虚拟专用网络,以加密和安全地连接远程站点或用户。</p>
<p><strong>日志记录和报警:</strong> 防火墙可以记录网络活动并生成报告,以帮助管理员监控和分析网络流量,识别潜在的威胁。</p>
<p><strong>更新和规则管理:</strong> 防火墙的规则和过滤策略可以进行定期更新,以应对新的威胁和安全漏洞。</p>
<p class="maodian"></p><h2>防火墙分类</h2>
<p><strong>按部署位置分类:</strong></p>
<p>边界防火墙(Perimeter Firewall):位于内部网络和外部网络之间的边界,用于过滤进入和离开内部网络的流量,通常用于保护整个内部网络。</p>
<p>个人防火墙(Personal Firewall):通常安装在个人计算机上,用于保护个人计算机免受恶意软件和网络攻击的侵害。</p>
<p>混合防火墙(Hybrid Firewall):结合了边界防火墙和个人防火墙的特性,可在组织和个人层面提供安全性。</p>
<p><strong>按技术分类:</strong></p>
<p>包过滤型防火墙(Packet Filtering Firewall):基于数据包的源地址、目标地址、端口号和协议等信息来过滤流量。iptables就是包过滤防火墙</p>
<p>应用代理型防火墙(Application Proxy Firewall):代理服务器充当客户端和服务器之间的中介,检查和控制应用层数据,提供更精细的应用层安全。</p>
<p>复合型防火墙(Next-Generation Firewall):结合了包过滤和应用代理功能,具备更全面的安全性和应用层检测能力。</p>
<p><strong>按硬件或软件分类:</strong></p>
<p>软件防火墙(Software Firewall):运行在一台服务器或计算机上的软件,通常用于保护单个设备或主机。</p>
<p>硬件防火墙(Hardware Firewall):独立的硬件设备,通常位于网络的入口点,用于保护整个网络。</p>
<p><strong>按防火墙结构分类:</strong></p>
<p>单一主机防火墙(Host-based Firewall):部署在单个主机上,用于保护该主机免受攻击。</p>
<p>路由器集成式防火墙(Router-Integrated Firewall):防火墙功能集成在路由器中,用于保护整个网络。</p>
<p>分布式防火墙(Distributed Firewall):多个防火墙设备协同工作,以提供更大规模的网络保护。</p>
<p><strong>按性能分类:</strong></p>
<p>百兆级防火墙(100Mbps Firewall):能够处理百兆位速度的网络流量。</p>
<p>千兆级防火墙(1Gbps Firewall):能够处理千兆位速度的网络流量。</p>
<p><strong>按使用方法分类:</strong></p>
<p>网络层防火墙(Network Layer Firewall):操作在网络层,通常用于过滤IP数据包。</p>
<p>物理层防火墙(Physical Layer Firewall):操作在物理数据链路层,用于控制网络物理连接。</p>
<p>链路层防火墙(Link Layer Firewall):操作在数据链路层,通常用于控制访问局域网内的网络设备。</p>
<p class="maodian"></p><h2>其他概念</h2>
<p class="maodian"></p><h3>通信五要素:</h3>
<p>源ip和目的ip</p>
<p>源端口和目的端口</p>
<p>协议(tcp/udp)</p>
<p class="maodian"></p><h3>通信四要素</h3>
<p>源ip和目的ip</p>
<p>源端口和目的端口</p>
<p class="maodian"></p><h3>用户态和内核态</h3>
<p style="text-align:center"><img alt="用户态和内核态" src="https://zhuji.jb51.net/uploads/allimg/20251107/1-25110GJ95Y94.png" /></p>
<p><strong>用户态防火墙:面向使用对象,就是使用工具,配置策略</strong></p>
<p><strong>位置:</strong> 用户态防火墙是运行在操作系统的用户空间(User Space)的防火墙。它是一个独立的应用程序,不直接访问操作系统内核。</p>
<p><strong>特点:</strong> 用户态防火墙通常是第三方应用程序,它们使用操作系统提供的网络套接字 API 来监控和控制网络流量。它们提供了更灵活的配置选项,允许用户根据需要定义规则和策略。</p>
<p><strong>优点:</strong> 用户态防火墙具有更高的可配置性,可以支持高级的应用层规则和应用程序特定的策略。它们通常更容易管理和调整,适用于特定网络应用的定制需求。</p>
<p><strong>缺点:</strong> 用户态防火墙的性能通常较低,因为它们需要将网络数据包从内核空间复制到用户空间,然后再进行处理。这可能会导致性能瓶颈。</p>
<p><strong>内核态防火墙:代码层(开发)</strong></p>
<p><strong>位置:</strong> 内核态防火墙是运行在操作系统内核空间(Kernel Space)的防火墙。它直接与操作系统内核交互,可以更有效地控制网络流量。</p>
<p><strong>特点:</strong> 内核态防火墙通常是操作系统的一部分,它们能够在数据包到达操作系统时立即处理,无需复制到用户空间。</p>
<p><strong>优点:</strong> 内核态防火墙具有较高的性能,因为它们可以在操作系统内核中直接操作。它们适用于需要快速和高效的网络流量处理的情况,如防止网络攻击和快速数据包过滤。</p>
<p><strong>缺点:</strong> 内核态防火墙通常具有较少的可配置性,因为它们可能受限于内核模块的特定规则。定制化程度较低,难以满足某些高级网络需求。</p>
<p>iptables就属于用户态防火墙,配置规则生效后,立即生效,无需重启。centos7之前,iptables是默认配置,现在默认是firewalld。centos7之后要使用iptables要把firewalld关闭</p>
<p style="text-align:center"><img alt="用户态和内核态_图2" src="https://zhuji.jb51.net/uploads/allimg/20251107/1-25110GJ95QJ.png" /></p>
<p class="maodian"></p><h2>四个表五个链</h2>
<p style="text-align:center"><img alt="四个表五个链" src="https://zhuji.jb51.net/uploads/allimg/20251107/1-25110GJ959428.png" /></p>
<p style="text-align:center"><img alt="四个表五个链_图2" src="https://zhuji.jb51.net/uploads/allimg/20251107/1-25110GK000A9.png" /></p>
<p>在 Linux 上,iptables<br />防火墙系统通常使用四个主要表来控制网络数据包的过滤和处理。这四个表分别是:filter、mangle、nat<br />和 raw。每个表有不同的目的和功能,用于管理不同层次的数据包处理。</p>
<p>四个表 <strong>raw 表:</strong> 关闭启用的连接跟踪机制,加快封包穿越防火墙速度</p>
<p>用途:<code>raw</code> 表用于配置原始数据包处理,通常用于在数据包进入连接跟踪系统之前进行特殊处理,如连接跟踪追踪。</p>
<p>链:<code>raw</code> 表包括两个主要链:<code>PREROUTING</code>(数据包到达路由前处理)和 <code>OUTPUT</code>(出站数据包处理)。</p>
<p><strong>mangle 表:</strong> 修改数据标记位规则表</p>
<p>用途:<code>mangle</code> 表主要用于数据包的修改和特殊处理,如修改数据包头部信息、更改数据包的 TOS(Type of Service)字段等。</p>
<p>链:<code>mangle</code> 表包括一系列链,如 <code>PREROUTING</code>(数据包到达路由前处理)、<code>INPUT</code>(进入系统前处理)、<code>FORWARD</code>(转发前处理)等。</p>
<p><strong>nat 表:</strong> network address translation 地址转换规则表</p>
<p>用途:<code>nat</code>(Network Address Translation)表用于进行网络地址转换,允许内部网络中的多个设备共享单一公共 IP 地址,以及实现端口映射和端口转发等功能。</p>
<p>链:<code>nat</code> 表包括三个主要链:<code>PREROUTING</code>(数据包到达路由前处理,用于端口映射和 DNAT)、<code>POSTROUTING</code>(数据包离开路由后处理,用于源地址转换和 SNAT)、<code>OUTPUT</code>(出站数据包处理,通常用于本地流量的 NAT)。</p>
<p><strong>filter 表:</strong> 过滤规则表,根据预定义的规则过滤符合条件的数据包,默认表</p>
<p>用途:<code>filter</code> 表是最常用的表,用于控制数据包的过滤和策略路由。</p>
<p>链:<code>filter</code> 表包括三个主要链:<code>INPUT</code>(用于处理进入系统的数据包)、<code>FORWARD</code>(用于处理转发的数据包)和 <code>OUTPUT</code>(用于处理离开系统的数据包)。</p>
<p>这四个表共同构成了 iptables<br />防火墙的核心,允许管理员通过配置规则和链来控制数据包的流向、处理和修改。这种细粒度的控制有助于实施网络安全策略和网络地址转换等功能。管理员可以使用不同链和规则来自定义防火墙行为,以满足网络环境的需求。</p>
<p>五条链</p>
<p>PREROUTING链:处理数据包进入本机之前的规则。</p>
<p>INPUT链:处理数据包进入本机的规则。</p>
<p>FORWARD链:处理数据包转发到其他主机的规则。</p>
<p>OUTPUT链:处理本机发出的数据包的规则,一般不做处理。</p>
<p>POSTROUTING链:处理数据包离开本机之后的规则。</p>
<p>四表五链<br />规则表的作用:容纳各种规则链<br />规则链的作用:容纳各种防火墙规则<br />总结:表里有链,链里有规则</p>
<p class="maodian"></p><h2>数据包过滤的匹配流程</h2>
<p style="text-align:center"><img alt="数据包过滤的匹配流程" src="https://zhuji.jb51.net/uploads/allimg/20251107/1-25110GK0002B.png" /></p>
<p>当一个数据包进入网卡时,数据包首先进入PREROUTING链,内核根据数据包目的IP判断是否需要转送出去。</p>
<p>如果数据包是进入本机的,数据包就会沿着图向下移动,到达INPUT链。 数据包到达INPUT链后, 任何进程都会收到它。本机上运行的程序可以发送数据包, 这些数据包经过OUTPUT链,然后到达</p>
<p>如果数据包是要转发出去的,且内核允许转发,数据包就会向右移动, 经过FORWARD链,然后到达POSTROUTING链输出</p>
<p class="maodian"></p><h3>三种报文流向:</h3>
<p>流入本机:PREROUTING --> INPUT–>用户空间进程 httpd服务-目的转换-httpd 流出本机:用户空间进程 -->OUTPUT–><br />POSTROUTING httpd服务-out-源地址 转发:PREROUTING --> FORWARD --> POSTROUTING<br />-----FOR------</p>
<p class="maodian"></p><h3>规则内的匹配顺序:</h3>
<p>自上向下按顺序依次进行检查,找到相匹配的规则即停止(LOG策略例外,表示记录相关日志)<br />若在该链内找不到相匹配的规则,则按该链的默认策略处理(未修改的状况下,默认策略为允许)</p>
<p class="maodian"></p><h2>iptables</h2>
<p class="maodian"></p><h3>iptables命令的格式和相关选项</h3>
<p style="text-align:center"><img alt="iptables命令的格式和相关选项" src="https://zhuji.jb51.net/uploads/allimg/20251107/1-25110GK001648.png" /></p>
<p class="maodian"></p><h3>iptables语法格式</h3>
<p>iptables 命令的基本语法格式如下:</p>
<p># iptables [-t table] COMMAND CRETIRIA -j ACTION</p>
<p>各参数的含义为:</p>
<p> -t:指定需要维护的防火墙规则表 filter、nat、mangle或raw。在不使用 -t 时则默认使用 filter 表。<br /> COMMAND:子命令,定义对规则的管理。<br /> chain:指明链表。<br /> CRETIRIA:匹配参数。<br /> ACTION:触发动作。</p>
<p>iptables 命令常用的选项及各自的功能如表 2 所示<br />选 项 功 能<br />-A 添加防火墙规则<br />-D 删除防火墙规则<br />-I 插入防火墙规则<br />-F 清空防火墙规则<br />-L 列出添加防火墙规则<br />-R 替换防火墙规则<br />-Z 清空防火墙数据表统计信息<br />-P 设置链默认规则</p>
<p>iptables 命令常用匹配参数及各自的功能如表 3 所示。<br />参 数 功 能<br />[!]-p 匹配协议,! 表示取反<br />[!]-s 匹配源地址<br />[!]-d 匹配目标地址<br />[!]-i 匹配入站网卡接口<br />[!]-o 匹配出站网卡接口<br />[!]--sport 匹配源端口<br />[!]--dport 匹配目标端口<br />[!]--src-range 匹配源地址范围<br />[!]--dst-range 匹配目标地址范围<br />[!]--limit 四配数据表速率<br />[!]--mac-source 匹配源MAC地址<br />[!]--sports 匹配源端口<br />[!]--dports 匹配目标端口<br />[!]--stste 匹配状态(INVALID、ESTABLISHED、NEW、RELATED)<br />[!]--string 匹配应用层字串</p>
<p>iptables 命令触发动作及各自的功能如表 4 所示。<br />触发动作 功 能<br />ACCEPT 允许数据包通过<br />DROP 丢弃数据包<br />REJECT 拒绝数据包通过<br />LOG 将数据包信息记录 syslog 曰志<br />DNAT 目标地址转换<br />SNAT 源地址转换<br />MASQUERADE 地址欺骗<br />REDIRECT 重定向</p>
<p>内核会按照顺序依次检查 iptables 防火墙规则,如果发现有匹配的规则目录,则立刻执行相关动作,停止继续向下查找规则目录;如果所有的防火墙规则都未能匹配成功,则按照默认策略处理。使用 -A 选项添加防火墙规则会将该规则追加到整个链的最后,而使用 -I 选项添加的防火墙规则则会默认插入到链中作为第一条规则。</p>
<p>注意,在 Linux CentOS 系统中,iptables 是默认安装的,如果系统中没有 iptables 工具,可以先进行安装。<br /> </p>
<p class="maodian"></p><h3>管理选项</h3>
<p>匹配规则:从上到下按照顺序依次检查,找到匹配的规则立刻停止匹配。找到匹配规则,会按照链的默认规则进行执行。如果不指定表名,默认就是filter</p>
<p><code>-A</code>:向指定的链(如INPUT、OUTPUT、FORWARD)的末尾追加一条规则。</p>
<p><code>iptables -A INPUT (操作)</code></p>
<p><code>-I</code>:在指定链的指定位置插入一条规则,根据编号来进行插入,不指定序号,直接插入当前链中的第一条(不推荐)。</p>
<p><code>iptables -I INPUT (操作)</code></p>
<p><code>-P</code>:设置指定链的默认策略(如ACCEPT、DROP)。</p>
<p><code>iptables -P OUTPUT ACCEPT (操作)</code></p>
<p><code>-D</code>:从指定的链中删除一条规则。</p>
<p><code>iptables -t nat -D INPUT 2 (操作)</code></p>
<p><code>-R</code>:替换指定链中的一条规则。</p>
<p><code>iptables -t nat -R INPUT (操作)</code></p>
<p><code>-L</code>:列出指定链中的所有规则。</p>
<p><code>iptables -t nat -L (查看)</code></p>
<p><code>-n</code>:所有字段以数字形式展示</p>
<p><code>iptables -L -n,iptables -nL,iptables -vnL (查看)</code></p>
<p><code>-v</code>:显示详细信息</p>
<p>常跟-L一起使用 (查看)</p>
<p><code>-F</code>:清除指定链中的所有规则。</p>
<p><code>iptables -F</code></p>
<p><code>-N</code>:创建一个新的自定义链。</p>
<p><code>iptables -N</code></p>
<p><code>-X</code>:删除一个自定义链。</p>
<p><code>iptables -X</code></p>
<p><code>-Z</code>:将所有链中的数据包计数器归零。</p>
<p><code>iptables -Z</code></p>
<p><code>-S</code>:看链的所有规则或者某个链的规则/某个具体规则后面跟编号</p>
<p class="maodian"></p><h3>匹配条件</h3>
<p>匹配条件是用来确定是否应用某个规则的依据。</p>
<p><code>-p</code>:指定传输层协议(如TCP、UDP、ICMP)。</p>
<p><code>-s</code>:指定源IP地址或地址范围。</p>
<p><code>-d</code>:指定目标IP地址或地址范围。</p>
<p><code>-i</code>:指定进入网络接口。</p>
<p><code>-o</code>:指定离开网络接口。</p>
<p><code>--sport</code>:指定源端口号或端口范围。</p>
<p><code>--dport</code>:指定目标端口号或端口范围。</p>
<p><code>--protocol</code>:指定协议(与 <code>-p</code> 类似)。</p>
<p><code>-m state</code>:根据连接状态匹配规则(如ESTABLISHED、RELATED)。</p>
<div class="dxycode"><pre class="brush:plain;">1. `-m multiport`:匹配多个端口。
2. `-m mac`:根据MAC地址匹配规则。
3. `-m comment`:为规则添加注释。
</pre></div>
<p class="maodian"></p><h3>数据包的控制类型</h3>
<p>ACCPET:允许数据包通过</p>
<p>DROP:直接丢弃数据包,没有任何回应信息</p>
<p>REJECT:拒绝数据包通过,会给一个响应信息</p>
<p>SNAT:修改数据包的源地址</p>
<p>DNAT:修改数据包的目的地址</p>
<p class="maodian"></p><h3>使用实例</h3>
<p>实验准备</p>
<p>CentOS7默认使用firewalld防火墙,没有安装iptables,若想使用iptables防火墙。必须先关闭firewalld防火墙,<br />再安装iptables</p>
<p>bash systemctl stop firewalld.service</p>
<p>setenforce 0</p>
<p>systemctl disable --now firewalld.service</p>
<p class="maodian"></p><h3>开机不自启 并且立即关闭</h3>
<p>systemctl enable --now firewalld.service</p>
<p class="maodian"></p><h3>开机自启 并且 立即开启</h3>
<p>yum -y install iptables iptables-services systemctl start iptables.service<br />systemctl enable iptables.service</p>
<p>查看</p>
<p>粗略查看默认规则:</p>
<p>#iptables -L</p>
<p>数字化的形式查看规则: #iptables -nL</p>
<p>注意:当-nL同时使用时,n一定要在L 的前面,否则会报错,使用-vnL时也是如此,L要在最后面</p>
<p>指定表查看:</p>
<p>#iptables -t filter -vnL</p>
<p>查看指定表中的指定链</p>
<p>#iptables -t filter -vnL INPUT #不指定表,默认就是filter</p>
<p>pkts:对应规则匹配到的报文的个数。</p>
<p>bytes:对应匹配到的报文包的大小总和。</p>
<p>target:规则对应的target,往往表示规则对应的”动作”,即规则匹配成功后需要采取的措施。</p>
<p>prot:表示规则对应的协议,是否只针对某些协议应用此规则。</p>
<p>opt:表示规则对应的选项。</p>
<p>in:表示数据包由哪个接口(网卡)流入,我们可以设置通过哪块网卡流入的报文需要匹配当前规则。</p>
<p>out:表示数据包由哪个接口(网卡)流出,我们可以设置通过哪块网卡流出的报文需要匹配当前规则。</p>
<p>source:表示规则对应的源头地址,可以是一个IP,也可以是一个网段。</p>
<p>destination:表示规则对应的目标地址。可以是一个IP,也可以是一个网段。</p>
<p style="text-align:center"><img alt="开机自启 并且 立即开启" src="https://zhuji.jb51.net/uploads/allimg/20251107/1-25110GK001G8.png" /></p>
<p>列出当前防火墙规则,并显示每条规则的行号、详细信息、以数值格式显示的 IP 地址和端口号</p>
<p>iptables: 这是用于配置Linux内核防火墙规则的命令。</p>
<p><code>-vnL</code>: 这是一组参数,具体含义如下:</p>
<p><code>-v</code>: 用于显示更详细的信息,包括数据包计数和字节计数。</p>
<p><code>-n</code>: 用于显示数值格式的 IP 地址和端口号,而不是解析为主机名和服务名称。</p>
<p><code>-L</code>: 用于列出防火墙规则。</p>
<p><code>--line-numbers</code>: 这个参数用于显示规则的行号(line numbers),以便更容易识别和引用特定规则。</p>
<p>这个命令的作用是列出当前防火墙规则,并显示每条规则的行号、详细信息、以数值格式显示的 IP 地址和端口号。</p>
<p>添加规则</p>
<p>添加新的防火墙规则时,使用管理选项“-A”、“-I”,前者用来追加规则,后者用来插入规则。</p>
<p>禁止所有主机ping本机和允许(如果先允许,那么就不会禁止。匹配到了就不在匹配后面的规则)</p>
<p style="text-align:center"><img alt="开机自启 并且 立即开启_图2" src="https://zhuji.jb51.net/uploads/allimg/20251107/1-25110GK001464.png" /></p>
<div class="dxycode"><pre class="brush:plain;">* iptables: 这是用于配置Linux防火墙规则的命令。
* `-t filter`: 这部分指定了使用名为 "filter" 的表(table)。iptables支持不同的表,用于管理不同类型的规则。 "filter" 表用于过滤数据包。
* `-A INPUT`: 这部分表示要将规则附加(Append)到 INPUT 链中。"INPUT" 链用于处理进入系统的数据包。
* `-p icmp`: 这部分指定了要匹配的协议类型,这里是 ICMP 协议。ICMP(Internet Control Message Protocol)是用于网络通信和诊断的协议,包括 ping 请求和响应。
* `-j ACCEPT`: 这部分表示如果数据包匹配了上述条件(ICMP协议),则将其接受(ACCEPT)。这意味着允许 ICMP 数据包通过防火墙,允许系统响应 ping 请求和其他 ICMP 请求。
</pre></div>
<p>因此,这个命令的作用是将一个规则添加到 “filter” 表的 “INPUT” 链中,以允许所有的 ICMP 数据包通过防火墙。</p>
<p>指定序号插入</p>
<p>插入到第一条:iptables -t filter -I INPUT 1 -p icmp -j ACCEPT</p>
<p><code>iptables</code>: 这是用于配置Linux防火墙规则的命令。 <code>-t filter</code>: 这部分指定了使用名为 “filter” 的表(table)。 “filter” 表用于过滤数据包。 <code>-I INPUT 1</code>: 这部分表示要在 “INPUT” 链的位置 1(即第一个规则位置)插入(Insert)规则。之前的命令使用的是 -A INPUT,将规则附加到 INPUT 链的末尾,而这个命令将规则插入到 INPUT 链的开头。 <code>-p icmp:</code> 这部分指定了要匹配的协议类型,这里是 ICMP 协议。 <code>-j ACCEPT</code>: 这部分表示如果数据包匹配了上述条件(ICMP协议),则将其接受(ACCEPT),即允许 ICMP 数据包通过防火墙。</p>
<p>因此,这个命令的作用是将一个规则插入到 “filter” 表的 “INPUT” 链的第一个位置,以允许所有的 ICMP 数据包通过防火墙。</p>
<p>禁止任何主机tcp</p>
<p style="text-align:center"><img alt="开机自启 并且 立即开启_图3" src="https://zhuji.jb51.net/uploads/allimg/20251107/1-25110GK0024R.png" /></p>
<p>拒绝来自特定源IP地址 <code>192.168.41.13</code>,目标端口为 <code>80</code> 的 TCP 数据包。</p>
<p style="text-align:center"><img alt="开机自启 并且 立即开启_图4" src="https://zhuji.jb51.net/uploads/allimg/20251107/1-25110GK002223.png" /></p>
<p><code>iptables -t filter -I INPUT 1 -s 192.168.41.13 -p tcp --dport 80 -j REJECT</code></p>
<div class="dxycode"><pre class="brush:plain;">* `-t filter`: `-t` 参数指定了要操作的表(table),在这里是 `filter` 表。`filter` 表用于数据包过滤,允许或者拒绝数据包通过防火墙。
* `-I INPUT 1`: `-I` 参数表示要在特定链(chain)中插入一条规则。`INPUT` 链是指数据包进入本地系统的网络数据包处理链。`1` 表示将规则插入到链的第一个位置。
* `-s 192.168.41.13`: `-s` 参数用于指定源 IP 地址,这个规则将仅适用于源IP地址为 `192.168.41.13` 的数据包。
* `-p tcp`: `-p` 参数指定匹配的协议类型,这里是 TCP 协议。
* `--dport 80`: `--dport` 参数指定目标端口号为 `80`,这意味着这个规则将匹配目标端口号为 `80` 的 TCP 数据包。
* `-j REJECT`: `-j` 参数用于指定如果规则匹配成功,应该执行的动作。在这个规则中,当匹配成功时,动作是拒绝(REJECT)匹配的数据包。这将导致系统向发送方发送拒绝连接的消息。
</pre></div>
<p>拒绝多态主机,用<code>,</code>连接ip</p>
<p><code>iptables -t filter -A INPUT -s 192.168.41.11,192.168.41.13 -p icmp -j REJECT</code></p>
<p>拒绝单台主机,其他主机可以连接</p>
<p><code>iptables -t filter -A INPUT -s 192.168.41.11 -p icmp -j REJECT</code></p>
<p style="text-align:center"><img alt="开机自启 并且 立即开启_图5" src="https://zhuji.jb51.net/uploads/allimg/20251107/1-25110GK003J2.png" /></p>
<p>拒绝主机发出数据包</p>
<p><code>iptables -t filter -A OUTPUT -s 192.168.41.10 -p icmp -j REJECT</code></p>
<p style="text-align:center"><img alt="开机自启 并且 立即开启_图6" src="https://zhuji.jb51.net/uploads/allimg/20251107/1-25110GK004443.png" /></p>
<p>删除规则</p>
<p>根据序号删除内容 <code>iptables -D INPUT 1</code> #删除指定的INPUT链中的第一条规则</p>
<p>从 <code>INPUT</code> 链中删除第二条规则</p>
<p><code>iptables -D INPUT 2</code></p>
<p>iptables: 这是用于配置Linux内核防火墙规则的命令。 -D INPUT 2: -D 参数表示删除规则,INPUT<br />是规则所在的链(chain),2 是要删除的规则的位置或规则编号。在这个例子中,它指示删除 INPUT 链中的第二条规则。 这个命令的作用是从 INPUT<br />链中删除第二条规则。防火墙规则是按顺序执行的,所以删除一条规则后,后续规则的编号会向前移动。</p>
<p>按照内容匹配删除</p>
<p>内容匹配删除(有两个相同的则作用为去重) 如果有两个重复的规则,则删除序号较小的 # iptables -D INPUT -p icmp -j REJECT #删除序号小的</p>
<p>演示删除序号较小的 # iptables -t filter -A INPUT -p icmp -j REJECT</p>
<p># iptables -t filter -A INPUT -p icmp -j ACCEPT</p>
<p># iptables -t filter -A INPUT -p icmp -j REJECT</p>
<p># iptables -nL INPUT --line-number</p>
<p>Chain INPUT (policy ACCEPT)</p>
<p>num target prot opt source destination</p>
<p>1 REJECT icmp – 0.0.0.0/0 0.0.0.0/0 reject-with icmp-port-unreachable</p>
<p>2 ACCEPT icmp – 0.0.0.0/0 0.0.0.0/0</p>
<p># iptables -D INPUT -p icmp -j REJECT #第二次就时删除指定。 # iptables -nL INPUT --line-numbers</p>
<p>Chain INPUT (policy ACCEPT)</p>
<p>num target prot opt source destination</p>
<p>1 ACCEPT icmp – 0.0.0.0/0 0.0.0.0/0</p>
<p>注意:按照内容匹配删除规则,只能每次删除内容相同序号较小的规则。</p>
<p>直到删除最后一条时,才能将该规则全部清除 。</p>
<p>一定要报保证该匹配的内容存在,且完全匹配规则才能删除,不然报错。</p>
<p>修改规则</p>
<div class="dxycode"><pre class="brush:plain;">-R 直接修改。
为了保险起见,我们可以尝试着先添加一条新的规则,
确保新规则不会带来任何不利的影响再删除旧的规则(也能达到替换的效果)
# iptables -t filter -A INPUT -p icmp -j ACCEPT
# iptables -nL INPUT --line-number#查看规则
Chain INPUT (policy ACCEPT)
numtarget prot opt source destination
1 ACCEPT icmp --0.0.0.0/0 0.0.0.0/0
# iptables -R INPUT 1 -p icmp -j REJECT #替换
# iptables -nL INPUT --line-number#ACCEPT替换成了REJECT
Chain INPUT (policy ACCEPT)
numtarget prot opt source destination
1 REJECT icmp --0.0.0.0/0 0.0.0.0/0 reject-with icmp-port-unreachable
</pre></div>
<p>设置默认策略</p>
<p>指定当没有与已有规则匹配的情况下,如何处理进入系统的数据包</p>
<p><code>iptables -P INPUT DROP</code></p>
<p>这个命令的效果是,如果没有特定规则匹配一个进入系统的数据包,那么该数据包将被拒绝,从而增强了系统的安全性。</p>
<div class="dxycode"><pre class="brush:plain;">* `-P INPUT` 意味着这个策略将应用于 "INPUT" 链,用于处理进入系统的数据包。
* `DROP` 意味着默认情况下,所有不匹配已有规则的进入数据包将被丢弃(DROP),即拒绝通过防火墙。
</pre></div>
<p>设置一条允许,相当于白名单</p>
<p><code>iptables -t filter -A INPUT -p ICMP -j ACCEPT</code></p>
<p>1.-F 仅仅是清空链中的规则,并不影响 -P 设置的规则,默认规则需要手动进行修改 2.-P 设置了DROP后,使用 -F 一定要小心!</p>
<p>#防止把允许远程连接的相关规则清除后导致无法远程连接主机,此情况如果没有保存规则可重启主机解决</p>
<p>此时的解决方案有三种:</p>
<p>第一种:我的防火墙设置只是临时设置,并为保存,重启服务器即可</p>
<p>第二种:操作服务器,重启iptables服务</p>
<p>第三种:进入机房操作该服务器(将设置恢复,重新修改规则)炸!</p>
<p>在生产中都是默认DROP</p>
<p>通用匹配</p>
<p>网络协议、IP地址、网络接口等条件。</p>
<p>协议匹配: -p协议名 地址匹配: -s 源地址、-d目的地址 #可以是IP、网段、域名、空(任何地址) 接口匹配: -i入站网卡、-o出站网卡 感叹号”!”表示取反 网络协议:</p>
<p># iptables -A INPUT ! -p icmp -j ACCEPT #除了icmp以外,所有的协议都可以进入</p>
<p>#这是假的取反。定义的默认策略还在执行ACCEPT,只有该变默认策略,才能生效</p>
<p>#iptables -P INPUT DROP #这时候才能取反</p>
<p>其他的服务不受影响,这个时候,把策略清空,所有的协议都将被DROP</p>
<p>#iptables -F</p>
<p>只能进虚拟机重启</p>
<p>IP地址:</p>
<p># iptables -A INPUT -s 192.168.41.13 -j DROP #禁止22的数据进入</p>
<p>IP范围匹配</p>
<p>-m iprange --src-range 源IP范围</p>
<p>-m iprange --dst-range 目的IP范围</p>
<p># iptables -A INPUT -p icmp -m iprange --src-range 192.168.233.20-192.168.233.30 -j REJECT</p>
<p>禁止网段内的ip地址ping主机</p>
<p>网络接口:</p>
<p># iptables -I INPUT 1 -i ens33 -s 192.168.41.0/24 -j DROP #禁止指定的网络设备名称ens33的所有网段</p>
<p>使整个网段不能用指定的端口</p>
<p># iptables -t filter -A INPUT -s 192.168.41.0/24 -p tcp --dport 80 -j REJECT #禁止整个网段访问80端口</p>
<p>端口匹配:</p>
<p># iptables -A INPUT -p tcp --dport 22:80 -j REJECT #禁止整个网段访问22和80端口</p>
<p>这里写发要注意,小的数字写在前面,大的写在后面</p>
<p>多端口匹配</p>
<p>要求以“-m 扩展模块”的形式明确指出类型,包括多端口、MAC地址、IP范围、数据包状态等条件</p>
<p>-m multiport --sport 源端口列表</p>
<p>-m multiport --dport 目的端口列表</p>
<p># iptables -A INPUT -p tcp -m multiport --dport 80,22,21,20,53 -j REJECT 多端口匹配,一次性禁止多个tcp网络协议的端口匹配规则</p>
<p># iptables -A INPUT -p udp -m multiport --dport 53,54,55 -j<br />ACCEP 多端口匹配,一次性放通多个udp网络协议的端口匹配规则</p>
<p>MAC匹配</p>
<p>-m mac --mac-source MAC地址</p>
<p># iptables -A INPUT -m mac --mac-source 00:0c:29:f7:24:38 -j DROP</p>
<p>隐藏扩展模块</p>
<p>iptables在使用-p 指定协议时,若指明特定协议后就无须再使用-m指明扩展模块的扩展机制。 例如若已经指明是 -p tcp协议则使用–dport及–sport等tcp模块内容时即可省略-m tcp。</p>
<p class="maodian"></p><h2>策略备份与还原</h2>
<p style="text-align:center"><img alt="策略备份与还原" src="https://zhuji.jb51.net/uploads/allimg/20251107/1-25110GK004A1.png" /></p>
<p style="text-align:center"><img alt="策略备份与还原_图2" src="https://zhuji.jb51.net/uploads/allimg/20251107/1-25110GK004221.png" /></p>
<p>yum -y install iptables iptables-services</p>
<p>systemctl start iptables.service</p>
<p>systemctl enable iptables.service</p>
<p>我们对iptables命令行中的设置,都是临时设置,只要遇到服务器关机,或者服务重启时,</p>
<p>所有的设置都会清空且还原为原本的设置。</p>
<p>为此,我们可以对已经测试完毕符合我们需求的防火墙设置进行备份,在必要时,可以一键还原</p>
<p class="maodian"></p><h3><strong>备份iptables设置</strong></h3>
<p>格式:iptables-save >/指定的文件</p>
<p># iptables-save >/opt/iptables.bak</p>
<p class="maodian"></p><h3><strong>一键导入,设置为当前防火墙设置</strong></h3>
<p>#iptables-restore </opt/iptables.bak</p>
<p class="maodian"></p><h3><strong>修改iptables的默认设置</strong></h3>
<p>iptables的默认配置文件存在于 cat /etc/sysconfig/iptables</p>
<p class="maodian"></p><h3><strong>直接把配置导入配置文件</strong> :</h3>
<p>cat /opt/iptables.bak >/etc/sysconfig/iptables</p>
<p>立即生效了,实验环境下,了解就可以了。不要尝试</p>
<p># systemctl restart iptables #重启之后生效的就是配置文件中的内容,操作需谨慎,</p>
<p><strong>注意拍快照,方便还原</strong></p>
<p class="maodian"></p><h2><strong>自定义链</strong></h2>
<p class="maodian"></p><h3>创建自定义链:</h3>
<div class="dxycode"><pre class="brush:plain;">iptables -N MYCHAIN
</pre></div>
<p class="maodian"></p><h3>向自定义链添加规则,例如:</h3>
<div class="dxycode"><pre class="brush:plain;">iptables -A MYCHAIN -s 192.168.1.0/24 -j DROP
</pre></div>
<p>这条规则将禁止192.168.1.0/24网段的访问,丢弃源地址的流量。</p>
<p style="text-align:center"><img alt="向自定义链添加规则,例如:" src="https://zhuji.jb51.net/uploads/allimg/20251107/1-25110GK006496.png" /></p>
<p>可以使用类似的命令来添加更多规则到自定义链中,根据需求进行配置。如果想要删除自定义链,确保满足以下条件:</p>
<p>自定义链没有被任何默认链引用,即自定义链的引用计数为0。</p>
<p>自定义链中没有任何规则,即自定义链为空。</p>
<p>可以使用<code>-x</code>选项来删除自定义链,例如:</p>
<div class="dxycode"><pre class="brush:plain;">iptables -X MYCHAIN
</pre></div>
<p>示例</p>
<p>自定义链使用</p>
<p>自定义链添加:iptables -N custom(链名) 创建链</p>
<p>自定义链改名:iptables -E custom(原来名称) ky29(新名称) 自定义链改名</p>
<p>创建自定义链规则:iptables -t filter -I ky29 -p icmp -j REJECT 创建自定义规则,</p>
<p>iptables的链中添加一条对应到自定义链中才能生效</p>
<p>iptabales创建对应链规则然后跳转自定义链web:iptables -t filter -I INPUT -p icmp -j custom</p>
<p>删除自定义规则链:先删除iptables INPUT链中的对应关系,然后删除自定义链中的规则。 iptables -D INPUT 1</p>
<p>iptables -D ky27 1</p>
<p>然后再用 iptables -X ky27 删除这个链</p>
<p>以上就是Linux安全防火墙(iptables)配置策略的详细内容,更多相关资料请阅读琼殿技术社区其它文章!</p>
頁:
[1]