【Linux】iptables的应用

news2024/10/7 2:28:00

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.coloradmin.cn/o/1620411.html

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

相关文章

经风靡全球的 PHP 为何逐渐失去优势?

TIOBE 编程语言人气指数发布更新&#xff0c;并提出“PHP 的魔力是否正在消散&#xff1f;”的灵魂拷问。今年 4 月&#xff0c;PHP 在 TIOBE 编程语言指数榜上仅位列第 17&#xff0c;“成为其有史以来的最低排位”。 暴露 PHP 人气急剧下滑的还不只是 TIOBE 榜单。在年度 Sta…

到底什么是爬虫

1. 引言 在数据驱动的世界里&#xff0c;网络爬虫&#xff08;Web Crawling&#xff09;技术扮演着获取和处理网上数据的关键角色。无论是为了数据分析、机器学习项目的数据集构建还是简单地监测网页变化&#xff0c;学习如何创建一个基本的网页爬虫可以大大提升你的工作效率和…

JAVASE基础语法(异常、常用类)

一、异常 1.1 什么是异常 异常就是指不正常。是指代码在运行过程中可能发生错误&#xff0c;导致程序无法正常运行。 package com.atguigu.exception;public class TestException {public static void main(String[] args) {int[] arr {1,2,3,4,5};System.out.println(&quo…

【c++】探究C++中的list:精彩的接口与仿真实现解密

&#x1f525;个人主页&#xff1a;Quitecoder &#x1f525;专栏&#xff1a;c笔记仓 朋友们大家好&#xff0c;本篇文章来到list有关部分&#xff0c;这一部分函数与前面的类似&#xff0c;我们简单讲解&#xff0c;重难点在模拟实现时的迭代器有关实现 目录 1.List介绍2.接…

CSS3新增特性(二)

四、2D 转换 • 属性名&#xff1a;transform &#xff08;可用于制作2D转换&#xff0c;也可用于制作3D转转换&#xff1b;2D转换是平面上的转换&#xff0c;3D转换是在三维立体空间的转换&#xff09; • 作用&#xff1a;对元素进行水平或垂直方向的移动、缩放、旋转、拉长…

你们项目日志是如何处理的???

ELK日志采集系统 1.什么是ELK ELK 是一套流行的数据搜索、分析和可视化解决方案&#xff0c;由三个开源项目组成&#xff0c;每个项目的首字母合起来形成了“ELK”这一术语&#xff1a; Elasticsearch (ES): Elasticsearch 是一个基于 Apache Lucene 构建的分布式、实时搜索与…

【Python性能优化】list、array与set

list、array与set 详述测试代码 详述 本文对比 list 与 set 在插入和取值时的性能差异&#xff0c;以提供一条什么时候该选择什么数据类型的建议。先上结果&#xff1a; array 与 list 的不同&#xff1a; 内存方面 array 是 C array 的包装&#xff0c;它直接存储数据&#xf…

Vu3+QuaggaJs实现web页面识别条形码

一、什么是QuaggaJs QuaggaJS是一个基于JavaScript的开源图像识别库&#xff0c;可用于识别条形码。 QuaggaJs的作用主要体现在以下几个方面&#xff1a; 实时图像处理与识别&#xff1a;QuaggaJs是一款基于JavaScript的开源库&#xff0c;它允许在Web浏览器中实现实时的图像…

授权协议OAuth 2.0之通过OIDC实现SSO

写在前面 本文来一起看下OIDC&#xff08;openid connect&#xff09;相关内容。 1&#xff1a;什么是OIDC OIDC的全称是openid connect&#xff0c;和OAuth2.0一样&#xff0c;也是属于协议和规范的范畴。OAuth2.0是一种授权协议&#xff0c;即规定了what you can do的内容…

kafka部分partition的leader=-1修复方案整理

kafka部分partition的leader-1修复方案整理 1. 背景说明2. 修复测试2.1 创建正常的topic并验证生产和消费2.2 停止kafka模拟leader-12.3 修复parition2.4 修复完成验证生产消费是否恢复 3. 疑问和思考3.1 kafka在进行数据消费时&#xff0c;如果有partition的leader-1&#xff…

MySQL基础之多表操作(多表查询,事务,索引)

目录 一、多表关系1.1 一对多1.2 外键约束1.3 一对一1.4 多对多 二、多表查询2.1 测试数据准备2.2 笛卡尔积2.3 内连接2.4 外连接2.5 子查询1.标量子查询2.列子查询3.行子查询4.表子查询 三、事务3.1 问题场景引入3.2 概念3.3 事务操作3.4 事务的四大特性ACID 四、索引4.1 概念…

人工智能高速发展 苹果能否赶上AI热潮

近年来&#xff0c;人工智能高速发展&#xff0c;科技大佬们竞相布局人工智能赛道。苹果虽然“晚”了一步&#xff0c;但也在不断追赶这股热潮。随着AI技术不断发展&#xff0c;这项技术已经成为手机发展的新风向标&#xff0c;甚至2024年被视为AI手机元年。 众多手机厂商铆足了…

vue做导入导出excel文档

系统中经常会遇到要实现批量导入/导出数据的功能&#xff0c;导入就需要先下载一个模板&#xff0c;然后在模板文件中填写内容&#xff0c;最后导入模板&#xff0c;导出就可能是下载一个excel文件。 1、导出 新建一个export.js文件如下&#xff1a; import {MessageBox,Mes…

【Xilinx】时序约束学习 TIMING-2: 基准时钟源管脚无效

在错误的管脚 <pin_name> 上创建了基准时钟 <clock_name>。建议仅在适当的时钟根&#xff08;不含时序弧的输入端口或原语输出管脚&#xff09; 上创建基准时钟。 描述 基准时钟必须在时钟树的源时钟上定义。例如&#xff0c; 源时钟可能是设计的输入端口。如果在…

4.20.1 深度神经网络提高放射科医生在乳腺癌筛查中的表现

新颖的两阶段神经网络&#xff0c;用于将全局和局部信息与适当的训练过程结合起来。这使我们能够使用非常高容量的块级网络从像素级标签中学习&#xff0c;同时网络也可以从宏观乳房级标签中学习。模型可以生成可解释的热图&#xff0c;指示可疑发现的位置。即使在拥有大量图像…

Neo4j数据库(二)

目录 WHERE子句 简单WHERE子句语法 复杂WHERE子句语法 DELETE删除 删除节点 DELETE节点子句语法 REMOVE删除 删除节点/关系的属性 REMOVE属性子句语法 SET子句 SET子句语法 WHERE子句 像SQL一样&#xff0c;Neo4j CQL在CQL MATCH命令中提供了WHERE子句来过滤MATCH查询…

VMware-Linux切换桥接模式上网教程(超详细)

这里写目录标题 1. 虚拟机关机2. VMware 虚拟网络配置2.1 检查是否存在 VMnet02.2 修改桥接模式2.3 修改Linux虚拟机网络适配器 3. Linux 系统配置3.1 修改系统网卡配置3.1.1 配置项含义解释3.1.2 查看物理机网络信息3.3.3 修改配置 3.2 重启服务 4. 测试网络连接情况5. 注意事…

Oracle Analytics BIEE 操作方法(四)仪表盘导出“区域”不换行也不合并居中的方法

1 分析 取消所有区域内列格式里面的换行 2 仪表盘 点击“工具” 打印和导出选项 设置固定列宽&#xff08;范围是&#xff1a;0-300&#xff09;

图片像素高效处理,轻松将图片像素进行按比例缩小50%并保存在指定位置,让您的图像更精致!

图像与我们的日常生活紧密相连&#xff0c;从社交媒体分享到专业摄影作品展示&#xff0c;高质量的图片像素处理显得至关重要。然而&#xff0c;面对海量的图片数据和高分辨率的图像处理需求&#xff0c;如何高效、简便地进行像素调整成为了众多用户关注的焦点。 第一步&#…

怎么通过PHP语言实现远程控制门锁

怎么通过PHP语言实现远程控制门锁呢&#xff1f; 本文描述了使用PHP语言调用HTTP接口&#xff0c;实现控制门锁&#xff0c;通过智能出门开关&#xff0c;配合普通的电插锁、电磁锁&#xff0c;来实现门禁控制。 可选用产品&#xff1a;可根据实际场景需求&#xff0c;选择对应…