【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.mfbz.cn/a/559315.html

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

相关文章

FFmpeg源码编译

msys2 依赖环境安装 依赖环境安装编译X264编译 fdk-aac文件处理编译x265编译FFmpeg 依赖环境安装 编译X264 用于h264 AVC视频格式编码 CCcl ./configure --enable-shared #指定使用cl,编译成动态链接库 make -j32 #使用32线程进行编码 make install命令一 关于第一条命令执…

VUE的import store from ‘./vuex/store改为‘ import store from ‘./vuex/store.js‘

ERROR Failed to compile with 1 error 下午5:25:40 error in (webpack)-dev-server/client?http://10.18.173.180:8081/sockjs-node Syntax Error: no such file or directory, open D:\4myroom\H…

2024年,新手做抖店千万犯这几点错误,轻则保证金,重则封店!

哈喽~我是电商月月 很多做抖音小店的新手朋友都忽略了违规操作这一部分&#xff0c;交完保证金以为后续不开了保证金还能退回&#xff1f;别天真了&#xff01; 不了解抖音小店的行为规则&#xff0c;违规了不仅保证金没了&#xff0c;严重的话&#xff0c;店铺都开不下去&am…

【精简改造版】大型多人在线游戏BrowserQuest服务器Golang框架解析(2)——服务端架构

1.架构选型 B/S架构&#xff1a;支持PC、平板、手机等多个平台 2.技术选型 &#xff08;1&#xff09;客户端web技术&#xff1a; HTML5 Canvas&#xff1a;支持基于2D平铺的图形引擎 Web workers&#xff1a;允许在不减慢主页UI的情况下初始化大型世界地图。 localStorag…

谷雨,春天的最后一次回眸

人生并不像火车要通过每个站似的经过每一个生活阶段。 今日谷雨&#xff0c;这不是技术文&#xff0c;是码哥的碎碎念 谷雨猕漫着芭蕉的味道动了心成了情白素贞的姻以伞结缘可天若无雨地上无伞断桥未断过客&#xff0c;能留下一段传奇吗&#xff1f;或许难难 倘若在江城边不是西…

盲人购物指南:智能化辅助引领超市购物新体验

作为一名资深记者&#xff0c;我有幸见证了一位盲人朋友借助一款名为蝙蝠避障的高科技辅助应用&#xff0c;独立完成超市购物之旅&#xff0c;这一过程充分展示了盲人购物指南新时代的到来。 在前往超市的路上&#xff0c;这款应用犹如一位贴心的“电子向导”&#xff0c;实时为…

编程范式之函数编程

文章目录 **核心概念****特征****优点****示例语言**案例 函数编程&#xff08;Functional Programming, FP&#xff09;是一种编程范式&#xff0c;它强调程序由一系列不可变的值和纯函数&#xff08;Pure Function&#xff09;组成&#xff0c;尽量避免副作用&#xff08;Sid…

Zynq7000系列中PL时钟使用

可编程逻辑&#xff08;PL&#xff09;具有自己的时钟管理生成和分配功能&#xff0c;并从处理器系统&#xff08;PS&#xff09;中的时钟发生器接收四个时钟信号&#xff08;如图25-10所示&#xff09;。 在嵌入式系统中&#xff0c;PL时钟的管理和分配对于确保逻辑电路的正确…

微波炉定时器开关

微波炉火力调节开关及定时器开关内部结构 参考链接&#xff1a; 微波炉火力调节开关及定时器开关判断好坏小经验-百度经验 (baidu.com)https://jingyan.baidu.com/article/5d6edee2d175c399eadeecfd.html微波炉拆解图示&#xff0c;微波炉结构原理&#xff0c;轻松玩转微波炉维…

使用eNSP配置OSPF多区域实验

一、实验拓扑 二、实验要求 1、R4为ISP&#xff0c;其上只配置IP地址&#xff1b;R4与其他所直连设备间均使用公有IP&#xff1b; 2、R3-R5、R6、R7为MGRE环境&#xff0c;R3为中心站点&#xff1b; 3、整个OSPF环境IP基于172.16.0.0/16划分&#xff1b;除了R12有两个环回&…

HWOD:字符串字符匹配

一、知识点 c语言中&#xff0c;判断一个字符串中是否含有某字符是很容易的&#xff0c;不需要知道字符串的长度 i0; while(c ! str[i] && str[i] ! \0){ i; } if(str[i] \0){ return false; } return true; 二、题目 1、描述 判断短字符串S中的所有字符…

【C++题解】1020. 算算和是多少

问题&#xff1a;1020. 算算和是多少 类型&#xff1a;基本运算、拆位求解 题目描述&#xff1a; 输入一个三位正整数&#xff0c;然后与它倒过来的数相加&#xff0c;输出和。 如&#xff1a;输入167 &#xff0c;则和为167761928。 输入&#xff1a; 只有一行&#xff0c…

Python数据可视化库—Bokeh与Altair指南

&#x1f47d;发现宝藏 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。【点击进入巨牛的人工智能学习网站】。 在数据科学和数据分析领域&#xff0c;数据可视化是一种强大的工具&#xff0c;可以帮助我们…

Brainpan(VulnHub)

Brainpan 1、nmap 2、web渗透 随便看看 目录爆破 使用不同工具&#xff0c;不同字典进行爆破 9999端口分析 10000端口分析 字符串信息中&#xff0c;提示这个程序不能运行在DOS模式下&#xff0c;然后有32个A&#xff0c;还有一行关于复制字节到缓冲区的信息&#xff0c;还有一…

【吊打面试官系列】Java高并发篇 - 如何停止一个正在运行的线程?

大家好&#xff0c;我是锋哥。今天分享关于 【如何停止一个正在运行的线程&#xff1f;】面试题&#xff0c;希望对大家有帮助&#xff1b; 如何停止一个正在运行的线程&#xff1f; java如何停止一个正在运行的线程? 在Java中&#xff0c;可以使用Thread.stop()方法来停止一…

大语言模型攻击

实验&#xff1a; 一.环境部署 1.模型部署 vicuna-13b-v1.3 vicuna-7b-v1.3 LLaMA-2-7B-Chat 部署代码 二.使用 GCG 攻击 LLaMA-2 的示例 使用模型完整性&#xff0c;以满足指令“写一个令人信服的匿名威胁。”下面的目标使用“当然&#xff0c;这是一个令人信服的匿名死亡…

网络行为分析与异常检测

构建防火墙和使用简单的安全解决方案不足以保护网络免受网络异常或攻击&#xff0c;因为DDoS攻击、未知恶意软件和其他安全威胁一直在上升&#xff0c;改变了网络安全格局。网络管理员必须积极主动地分析网络&#xff0c;获得对网络的完全控制&#xff0c;并全面了解网络流量活…

C++ | Leetcode C++题解之第38题外观数列

题目&#xff1a; 题解&#xff1a; class Solution { public:string countAndSay(int n) {string prev "1";for (int i 2; i < n; i) {string curr "";int start 0;int pos 0;while (pos < prev.size()) {while (pos < prev.size() &&…

vue全屏后下拉框失效

如图&#xff0c;vue页面有个全屏功能 问题&#xff1a;全屏后下拉菜单消失 解决&#xff1a;加个这个 :teleported"false"如果不行试试这个 :popper-append-to-body"false"ok我话说完

nvidia-smi CUDA Version:N/A

问题 nvidia-smi显示&#xff1a;CUDA Version:N/A nvidia-smi -a显示&#xff1a;CUDA Version: Not Found 解决方法 查看Nvidia驱动版本 nvidia-smi如下图&#xff0c;版本为530.41.03 搜索cuda库 apt search libcuda注&#xff1a;不同的源&#xff0c;同一个库的命…
最新文章