【Linux】iptables的应用

iptables

防火墙

防火墙是一种网络安全系统,它位于内部网络与外部网络(如互联网)之间,通过实施预定义的安全策略来控制网络间的通信。防火墙的主要目标是保护内部网络资源免受未经授权的访问、攻击或潜在威胁,同时允许合法的通信流量顺畅流动。以下是防火墙概念的关键要点:

  1. 网络边界保护
    防火墙作为内部网络与外部网络之间的逻辑或物理屏障,隔离两个不同信任级别的网络环境,限制未经授权的外部实体对内部网络资源(如服务器、工作站、应用程序等)的直接访问。

  2. 访问控制
    防火墙基于预先设定的安全规则(策略)对进出网络的数据包进行检查。这些规则通常基于多种属性,如源和目的IP地址、端口号、协议类型、数据包的内容(深度包检测,DPI)、连接状态(如新建、已建立、相关联的状态包)等。防火墙据此允许或拒绝数据包的传输,确保只有符合安全策略的流量才能通过。

  3. 安全策略实施
    防火墙有助于集中管理和实施企业的网络安全政策。管理员可以根据组织的安全需求定义详细的访问控制列表(ACL),这些列表规定了哪些服务、用户或设备可以进行网络交互,以及在何种条件下进行交互。防火墙通过强制执行这些策略来强化网络的整体安全态势。

  4. 攻击防范与入侵检测
    防火墙具备一定的抗攻击能力,能够识别并阻断常见的网络攻击,如端口扫描、DoS/DDoS攻击、恶意软件传播等。一些防火墙还集成了入侵检测系统(IDS)或入侵防御系统(IPS)功能,能够实时监测并响应潜在的攻击行为。

  5. 日志记录与审计
    防火墙记录通过其接口的所有网络活动,生成详细的日志信息。这些日志可用于安全审计、故障排查、合规性检查以及威胁分析。通过对日志数据的分析,管理员可以发现异常行为、识别潜在安全漏洞,并对安全策略进行调整。

  6. 网络地址转换(NAT)与虚拟专用网(VPN)支持
    许多防火墙还具备NAT功能,通过隐藏内部网络的实际IP地址、使用单一的公共IP地址对外通信,增强网络匿名性和安全性。此外,防火墙常常集成VPN服务,提供加密的远程访问通道,使远程用户或分支机构能够安全地接入内部网络。

  7. 多形态部署
    防火墙可以以多种形式存在,包括硬件防火墙(专用设备)、软件防火墙(运行在通用操作系统上的软件)、云防火墙(云服务商提供的服务)、以及分布式防火墙(如主机防火墙,保护单个主机)等。根据组织规模、网络架构和安全需求,可以选择合适的防火墙类型或组合使用。

总的来说,防火墙是现代网络安全体系中的核心组件之一,通过实施严格的访问控制、提供安全服务以及监控网络活动,确保网络资源的安全性和数据通信的保密性、完整性和可用性。

iptables简介

iptables是Linux内核提供的一种强大的防火墙工具,用于对进出系统的网络数据包进行过滤、转换和跟踪。它工作在网络层(IPv4/v6)和传输层(TCP/UDP),通过规则链(chains)和规则(rules)的组合来实现复杂的网络访问控制策略。

iptables架构

iptables由以下四部分组成:

  1. 四表(Tables):iptables包含多个表,每个表负责不同的功能。常用表包括:

    • filter 表:用于过滤数据包,决定是否接受、丢弃或转发。
    • nat 表:用于网络地址转换(NAT),如源地址转换(SNAT)、目的地址转换(DNAT)。
    • mangle 表:用于修改数据包的特定标志位或TTL值,通常用于QoS或路由标记。
    • raw 表:用于处理数据包的“原始”状态,避免触发某些连接跟踪机制。

    优先级:

    当数据包抵达防火墙时,将依次应用raw、mangle、nat和filter表中对应链内的规则(如果有)如下图所示

    img

  2. 五链(Chains)

    1. PREROUTING链:数据包到达防火墙(网络接口)后,在进行路由决策前处理。
    2. INPUT链:数据包目的地为防火墙本机,且已通过路由决策,准备交付给本地进程前处理。
    3. FORWARD链:数据包目的地不是防火墙本机,需要通过防火墙转发至其他网络时处理。
    4. OUTPUT链:数据包由防火墙本机进程产生,即将离开防火墙前往网络接口时处理。
    5. POSTROUTING链:数据包已经通过路由决策,即将离开防火墙网络接口前处理。

在这里插入图片描述

数据包匹配流程

  1. 数据包到达防火墙:数据包从外部网络到达防火墙的某个网络接口。
  2. PREROUTING链
    • raw表:首先检查raw表中的规则。如果匹配到规则,可能会影响数据包的连接跟踪状态(如使用-j NOTRACK标记)。
    • mangle表(可选):如果mangle表中有针对PREROUTING链的规则,数据包会在这里接受元数据的修改。
    • nat表:进行DNAT(目标地址转换)操作。如果数据包的目的地址是防火墙内某一服务的公网映射地址,此时会将其目标地址改为内部实际地址。
  3. 路由决策:完成PREROUTING链处理后,内核进行路由选择,确定数据包的下一跳或目标接口。
  4. 根据数据包目的地的不同,进入相应链
    • INPUT链:如果数据包的目标是防火墙本机,进入INPUT链。
      • mangle表(可选):可能再次进行元数据修改。
      • filter表:执行入站安全策略,根据规则决定是否允许数据包到达本地进程。
    • FORWARD链:如果数据包需要通过防火墙转发至其他网络,进入FORWARD链。
      • mangle表(可选):可能进行QoS标记、策略路由等操作。
      • filter表:执行转发安全策略,决定是否允许数据包转发。
      • nat表(可选):在某些情况下,可能会进行SNAT(源地址转换)或DNAT操作。
    • OUTPUT链:如果数据包由防火墙本机进程产生,即将发送至外部网络,进入OUTPUT链。
      • mangle表(可选):可能进行元数据修改。
      • nat表:进行SNAT操作,如源地址伪装,将源地址从私有IP改为公网IP。
      • filter表:执行出站安全策略,决定是否允许数据包离开本机。
  5. POSTROUTING链
    • mangle表(可选):最后一次机会进行元数据修改。
    • nat表:进行最终的SNAT(如果在FORWARD链中未处理)或MASQUERADE(动态SNAT)操作。
  6. 数据包转发或丢弃:经过上述链的处理后,数据包根据规则匹配结果进行相应操作:
    • 允许通过:数据包被转发至下一跳或目标网络接口。
    • 拒绝:数据包被丢弃,防火墙可能发送ICMP错误消息(如端口不可达、禁止等)通知发送方。
    • 其他操作:如重定向、LOG记录等。

iptables的使用

在CentOS 7系统中使用iptables,需要了解其基本命令结构、规则管理、服务管理以及如何配置持久化规则。以下是在CentOS 7中使用iptables的步骤和注意事项:

1. 确认系统防火墙状态

由于CentOS 7默认使用的是firewalld作为防火墙管理工具,若要使用iptables,首先需要确认firewalld的状态并决定是否停用它:

systemctl status firewalld

如果firewalld正在运行,可以停止并禁用它以避免与iptables冲突:

systemctl stop firewalld.service
systemctl disable firewalld.service

2. 安装iptables及其服务支持

确保iptables和iptables-services包已安装:

yum install iptables-services

3. 管理iptables服务

启动iptables服务:
systemctl start iptables.service
设置iptables服务开机启动:
systemctl enable iptables.service

4. 配置iptables规则

iptables规则通过命令行直接操作,也可以编辑配置文件 /etc/sysconfig/iptables 来定制。规则的基本结构如下:

iptables [-t <表名>] [-A|I|D|R] <链名> [-i <入口设备>] [-o <出口设备>] [-p <协议>] [-s <源地址>] [-d <目标地址>] [-m <模块>] [--<模块参数>] [-j <目标动作>]
  • -t:指定要操作的表(filter、nat、mangle、raw)。

  • -A-I-D-R:分别表示追加、插入、删除、替换规则。

  • <链名>:如INPUT、OUTPUT、FORWARD、PREROUTING、POSTROUTING等。

  • -i-o:指定数据包进入或离开的网络接口。

  • -p:指定协议(如tcp、udp、icmp)。

  • -s-d:指定源IP地址和目标IP地址。

  • -m:加载额外的匹配模块,并指定其参数。

  • --<模块参数>:匹配模块的具体参数,如端口范围、标志位等。

    • –sport 指定源端口号
    • –dport 指定目的端口号
  • -j:指定规则匹配时采取的动作(如ACCEPT、DROP、REJECT、LOG、REDIRECT等)。

  • –line-numbers:查看规则时,显示规则的序号

    ps:iptables命令可以配合多种匹配模块(通过-m选项指定)来实现更精细的规则制定。以下是一些常用的iptables模块及其参数:

    1. state模块

    用于匹配基于连接状态的数据包。常用参数包括:

    • --state [NEW, ESTABLISHED, RELATED, INVALID]: 匹配具有指定连接状态的数据包。

      • NEW: 初始连接请求(如TCP SYN包)。
      • ESTABLISHED: 已经建立的连接。
      • RELATED: 与现有连接相关的数据包(如FTP数据连接)。
      • INVALID: 不符合已知连接状态的数据包。

    2. string模块

    用于匹配数据包载荷中的特定字符串。常用参数:

    • --algo [bm|kmp]: 指定匹配算法(Boyer-Moore或Knuth-Morris-Pratt)。
    • --string "pattern": 要匹配的字符串。
    • --hex-string "hex_pattern": 要匹配的十六进制字符串。
    • --fromoffset [offset]: 从载荷的指定偏移处开始匹配。
    • --tooffset [offset]: 在载荷的指定偏移处结束匹配。

    3. conntrack模块

    扩展了对连接跟踪信息的匹配。常用参数:

    • --ctstate [STATE_LIST]: 匹配具有指定连接跟踪状态的数据包,类似于state模块。
    • --ctproto [PROTO]: 匹配指定协议的连接跟踪信息。
    • --ctorigsrc [ADDRESS]: 匹配原始源地址。
    • --ctorigdst [ADDRESS]: 匹配原始目标地址。
    • --ctreplsrc [ADDRESS]: 匹配回复源地址。
    • --ctrepldst [ADDRESS]: 匹配回复目标地址。
    • --ctorigsrcport [PORT]: 匹配原始源端口。
    • --ctorigdstport [PORT]: 匹配原始目标端口。
    • --ctreplsrcport [PORT]: 匹配回复源端口。
    • --ctrepldstport [PORT]: 匹配回复目标端口。

    4. limit模块

    用于限制匹配数据包的速率。常用参数:

    • --limit [rate/second]: 指定每秒允许通过的最大匹配数据包数量。
    • --limit-burst [number]: 设置初始突发包数,超出此数量后才开始限速。
    • --limit-mask [mask]: 用于多IP地址限速时的掩码。

    5. multiport模块

    用于匹配多个端口。常用参数:

    • --sports [port[,port]...]: 匹配源端口列表。
    • --dports [port[,port]...]: 匹配目标端口列表。

    6. tcp模块

    针对TCP协议的特定参数。常用参数:

    • --syn: 匹配TCP SYN包。
    • --ack: 匹配TCP ACK包。
    • --fin: 匹配TCP FIN包。
    • --rst: 匹配TCP RST包。
    • --tcp-flags [mask] [match]: 匹配特定TCP标志位。

    7. udp模块

    针对UDP协议的特定参数。虽然UDP协议相对简单,但使用udp模块可以确保只针对UDP数据包进行操作。

    8. icmp模块

    针对ICMP协议的特定参数。常用参数:

    • --icmp-type [type/code]: 匹配指定类型的ICMP消息。

    9. mac模块

    匹配数据包的源MAC地址。常用参数:

    • --mac-source [MAC_ADDRESS]: 匹配具有指定源MAC地址的数据包。

    10. connbytes模块

    根据连接的总字节数进行匹配。常用参数:

    • --connbytes [mode:]value: 按照指定模式和数值进行匹配。
      • mode: 可以是packetsbytesavgpkt
      • value: 要匹配的数值。

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

增加(Add)规则

使用iptables -A(或iptables -I)命令在指定链的末尾(或指定位置)添加一条新的规则。以下是一个示例:

# 允许来自特定IP(192.168.1.100)的TCP流量访问本机的SSH服务(端口22)
iptables -A INPUT -s 192.168.1.100 -p tcp --dport 22  -j ACCEPT 
# 或者在链的开头插入规则(使用-I指定位置,如第1位)
iptables -I INPUT 1 -s 192.168.1.100 -p tcp --dport 22  -j ACCEPT
删除(Delete)规则

使用iptables -D命令根据规则描述删除已存在的规则。通常需要尽可能精确地复制待删除规则的全部参数:

# 删除允许特定IP访问SSH服务的规则
iptables -D INPUT -s 192.168.1.100 -p tcp --dport 22  -j ACCEPT
删除指定序号的iptables规则:
  1. 查看现有规则及其序号: 使用以下命令列出您希望操作的链(如 INPUTOUTPUTFORWARD)上的所有规则,并显示它们对应的序号:

    1iptables -L [chain] --line-numbers
    

    例如,要查看 INPUT 链的规则及其序号:

    Bash

    1iptables -L INPUT --line-numbers
    
  2. 删除指定序号的规则: 根据上一步得到的规则列表,确定要删除的规则的序号(例如,假设是序号为 X 的规则)。使用以下命令删除该规则:

    Bash

    iptables -D [chain] [rule-number]
    

    以删除 INPUT 链上的第 X 条规则为例:

    Bash

    iptables -D INPUT X
    

    这样,指定序号的规则就会从指定的链中被删除。

注意

  • 删除规则前务必确认您正在操作正确的序号,避免误删其他重要规则。

  • 如果您在操作 nat 表或特定的自定义链,请记得加上 -t [table] 参数。例如,删除 nat 表中 PREROUTING 链的第 X 条规则:

    iptables -t nat -D PREROUTING X
    
修改(Change)规则

iptables本身并不直接支持修改已存在的规则。要更改一条规则,通常需要先删除旧规则,再添加新规则。例如,要将上面允许特定IP访问SSH服务的规则更改为允许另一个IP(192.168.1.101)访问:

# 删除旧规则
iptables -D INPUT -s 192.168.1.100 -p tcp --dport 22  -j ACCEPT
# 添加新规则
iptables -A INPUT -s 192.168.1.101 -p tcp --dport 22  -j 

5. 保存和应用规则

直接在命令行设置的iptables规则不会在系统重启后保留。要使其持久化,需要将当前规则保存到配置文件中:

service iptables save

或者:

iptables-save > /etc/sysconfig/iptables

6. 查看和清理规则

查看当前规则:
iptables -L [-t <表名>] [-v] [-n]
  • -v:显示详细信息。
  • -n:使用数字形式而非域名解析IP地址。
清除所有规则:
iptables -F [-t <表名>]

7. 配置iptables日志记录

要启用iptables的日志记录功能,通常需要配置syslog服务(如rsyslog)并修改iptables规则以使用LOG目标动作。具体步骤包括:

  • /etc/rsyslog.conf或其他相关配置文件中添加规则,指定iptables日志的存储位置和格式。
  • 在iptables规则中使用-j LOG指定记录日志,可能还需要配合使用-m limit模块限制日志速率。

8. 关闭SELinux

如果遇到与SELinux相关的访问限制问题,可以考虑暂时关闭SELinux以排除干扰。编辑/etc/selinux/config,将SELINUX=enforcing改为SELINUX=disabled,然后重启系统。但请注意,这会降低系统的整体安全级别,建议在熟悉SELinux后配置适当的布尔值或策略以与iptables协同工作。

9. 升级iptables

确保iptables及相关组件保持最新,可以通过yum update iptables*命令进行更新。

总结

在CentOS 7中使用iptables,需要先确认firewalld状态并决定是否停用,接着安装iptables服务支持包,启动并设置其开机启动。然后,通过iptables命令配置所需的安全规则,保存规则以实现持久化,并能查看和清理规则。如有需要,可以配置日志记录功能和管理SELinux设置。记得定期更新iptables以获取安全修复和新特性。


在这里插入图片描述

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

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

相关文章

数据结构学习--环形链表

环形链表 我们在判断一个链表是否是环形的&#xff0c;即首尾相连&#xff0c;我们可以以使用快慢指针&#xff0c;如果快指针能再次追上慢指针&#xff0c;就说明该链表是环形的&#xff0c;这边可以举个操场跑步的例子&#xff0c;当操场是环形的&#xff0c;跑的快的&#…

开放式耳机哪个牌子好?热门开放式耳机合集,买前必看!

随着人们对运动健康的重视&#xff0c;越来越多的运动爱好者开始关注如何在运动中享受音乐。开放式蓝牙耳机凭借其独特的设计&#xff0c;成为了户外运动的理想选择。它不仅让你在运动时能够清晰听到周围环境的声音&#xff0c;保持警觉&#xff0c;还能让你在需要时与他人轻松…

Compose Canvas

文章目录 Compose Canvas概述Canvas属性drawPoints 绘制点drawPoints属性使用 drawLine 绘制线drawLine属性使用 drawRect 绘制矩形drawRect属性使用 drawRoundRect 绘制圆角矩形drawRoundRect属性使用 drawCircle 绘制圆drawCircle属性使用 drawOval 绘制椭圆drawOval属性使用…

《王者荣耀》Hello Kitty 小兵皮肤完整设置指南

王者荣耀与三丽鸥的联动活动上线了 Hello Kitty 小兵皮肤&#xff0c;让我们的峡谷小兵们也能穿上漂亮的衣服啦&#xff01;这款皮肤极具卡哇伊风格&#xff0c;引起了许多玩家的关注。许多小伙伴都想知道如何使用这款 Hello Kitty 小兵皮肤&#xff0c;今天小编将为大家整理出…

5.前后端分离

目录 一、前后端分离上传文件 1.在yml中设置port和localhost 2.如何使用postman测试上传文件的接口 二、如何导出excel文件 ​编辑1.在pom.xml中导包 2.在实体类中给每个字段添加注解&#xff0c;导出表格时&#xff0c;列名将会改为对应的中文 3.controller中方法的具体…

英语新概念2-回译法-lesson10

托尼斯蒂尔进来的时候我正在吃饭&#xff0c;托尼很多年前在一家律师事务所工作&#xff0c;但是他现在在银行工作。他有一份不错的薪资&#xff0c;但是他总是问他的朋友们借钱并且从不归还。托尼看到我然后走过来和我坐在同一张桌子。他从来没有问我借过钱。当他在吃饭的时候…

【OpenGL高级】罗德里格斯公式:绕任意轴旋转

相关主题&#xff1a; OpenGL 矩阵、四元数到矩阵、角度到轴、观察到轴 目录 一、说明二、罗德里格斯公式的推导2.1 空间点旋转问题2.2 对旋转问题的分析 三、罗德里格斯旋转公式矩阵表示&#xff1a;四、最小C代码五、结论 一、说明 解决三维坐标下的刚体旋转问题&#xff0…

【Linux】服务器时区 [ CST | UTC | GMT | RTC ]

目录 1. 硬件时间&#xff08;Real_TIME Clock [RTC time]&#xff09; 1.1 硬件时间简介 1.2 如何使用硬件时间 2. 系统时间&#xff08;UTC时间&#xff09;&#xff08;Universal time&#xff09; 2.1 系统时间简介 2.2 UTC时间 3. 本地时间&#xff08;Local time&…

深入理解大语言模型微调技术

一、概念解析 1、什么是微调&#xff08;Fine-tuning&#xff09;&#xff1f; 大模型微调&#xff0c;也称为Fine-tuning&#xff0c;是指在已经预训练好的大型语言模型基础上&#xff08;一般称为“基座模型”&#xff09;&#xff0c;使用特定的数据集进行进一步的训练&am…

DeepWalk论文精读

介绍 图神经网络的开山之作 DeepWalk&#xff1a;一种用于学习网络中顶点的潜在表示的新方法&#xff0c;使用随机行走中获得的局部信息&#xff0c;通过将序列视为句子&#xff0c;节点视为单词 通过随机游走可以采样出一个序列&#xff0c;序列好比一句话&#xff0c;节点…

记录一个hive中因没启yarn导致的spark引擎跑insert语句的报错

【背景说明】 刚在hive中配置了Spark引擎&#xff0c;在进行Hive on Spark测试时报错&#xff0c; 报错截图如下&#xff1a; [atguiguhadoop102 conf]$ hive which: no hbase in (/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/opt/module/jdk1.8.0_212/bin:/opt/mod…

【LAMMPS学习】八、基础知识(3.5)计算弹性常数

8. 基础知识 此部分描述了如何使用 LAMMPS 为用户和开发人员执行各种任务。术语表页面还列出了 MD 术语&#xff0c;以及相应 LAMMPS 手册页的链接。 LAMMPS 源代码分发的 examples 目录中包含的示例输入脚本以及示例脚本页面上突出显示的示例输入脚本还展示了如何设置和运行各…

【云计算】云数据中心网络(三):NAT 网关

《云网络》系列&#xff0c;共包含以下文章&#xff1a; 云网络是未来的网络基础设施云网络产品体系概述云数据中心网络&#xff08;一&#xff09;&#xff1a;VPC云数据中心网络&#xff08;二&#xff09;&#xff1a;弹性公网 IP云数据中心网络&#xff08;三&#xff09;…

【C语言】每日一题,快速提升(8)!

&#x1f525;博客主页&#x1f525;&#xff1a;【 坊钰_CSDN博客 】 欢迎各位点赞&#x1f44d;评论✍收藏⭐ 题目&#xff1a;金字塔图案 输入&#xff1a; 4输出&#xff1a; * * * * * * * * * * 代码&#xff1a; //对于有行有列的图形采用双循环&#xff0c;i控制行…

[管理者与领导者-177] :人际网络-4-坐车的礼仪

目录 一、坐私车的基本礼仪 二、跟领导乘车&#xff0c;你坐对了吗&#xff1f;要注意什么&#xff1f; 2.1 乘车座次礼仪规则&#xff1a; 2.2 双排5座汽车礼仪的应用 2.2.1 司机驾车 2.2.2 领导驾车 2.3 三排7座商务车 一、坐私车的基本礼仪 坐私人车辆时&#xff0c…

Windows如何安装JDK

JDK和JRE简介 JDK&#xff1a;Java Development ToolKit java开发工具包&#xff0c;包含JRE针对java程序开发者 JRE&#xff1a;Java Runtime Environment java程序的运行环境针对java使用者来说 下载JDK&#xff0c;进入官网下载 Oracle官网 双击下载好之后的exe文件&#…

我为什么想成为一名程序员

#为什么你选择成为一名程序员# 目录 原因&#xff1a; 后续选择&#xff1a; 结尾&#xff1a; 原因&#xff1a; 本人是一个00后&#xff0c;出生在农村当时经济相对来说比较落后&#xff0c;村里面基本上都没几个人有手机。当时有些小伙伴他们拿着自己大人的手机在那里玩…

科普馆VR技术展现安全场景,构建安全教育新标杆!

随着VR技术的快速发展&#xff0c;其所衍生出的互动装置&#xff0c;悄无声息地渗透进了我们生活的每个角落&#xff0c;就连那严谨而重要的安全教育领域&#xff0c;也没能逃出这神奇魔法的“魔爪”&#xff0c;这种VR互动设备简直就是安全知识传递的小能手&#xff0c;那么&a…

MinIO自定义权限控制浅研

转载说明&#xff1a;如果您喜欢这篇文章并打算转载它&#xff0c;请私信作者取得授权。感谢您喜爱本文&#xff0c;请文明转载&#xff0c;谢谢。 MinIO搭建好之后&#xff0c;出于不同场景的需要&#xff0c;有时候需要对不同的用户和Bucket做一些针对性的权限控制。 MinIO的…

PCDN与边缘计算的集成解决方案

PCDN与边缘计算的集成解决方案 在数字化时代&#xff0c;内容的快速、安全地传递至用户变得至关重要。无论是媒体、教育还是其他领域&#xff0c;所有这些行业都需要强大的技术支持以保证信息的实时更新和安全传输。PCDN&#xff08;Peer Content Delivery Network&#xff0c…