ITPub博客

首页 > 数据库 > 数据库开发技术 > 运维必会技能之iptables---必会知识点

运维必会技能之iptables---必会知识点

原创 数据库开发技术 作者:步步运维步步坑 时间:2024-03-28 10:01:19 0 删除 编辑

Iptables简介

netfilter/iptables(简称为iptables)组成Linux平台下的包过滤防火墙,与大多数的Linux软件一样,这个包过滤防火墙是免费的,它可以代替昂贵的商业防火墙解决方案,完成封包过滤、封包重定向和网络地址转换(NAT)等功能。


iptables基础

规则,作为网络管理员事先设定好的条件,其核心理念是:“当数据包头部信息符合特定条件时,便按照预设方式处理该数据包”。这些规则被存储在内核空间的包过滤表中,它们详尽地定义了数据包的源地址、目标地址、使用的传输协议(例如TCP、UDP或ICMP),以及服务类型(如HTTP、FTP或SMTP)等关键信息。

每当有数据包经过时,iptables会检查这些数据包是否与预先设定的规则相匹配。一旦匹配成功,iptables便会根据规则中定义的操作来处置这些数据包,常见的操作包括允许通过(accept)、拒绝访问(reject)或直接丢弃(drop)等。

因此,配置防火墙的核心任务,便是添加新的规则、修改现有规则或删除不再需要的规则,以确保网络的安全性和流畅性。


iptables和netfilter的关系

这是第一个要说的地方,Iptables和netfilter的关系是一个很容易让人搞不清的问题。很多的知道iptables却不知道 netfilter。

其实iptables只是Linux防火墙的管理工具而已,位于/sbin/iptables。真正实现防火墙功能的是 netfilter,它是Linux内核中实现包过滤的内部结构。

iptables传输数据包的过程

① 当一个数据包进入网卡时,它首先进入PREROUTING链,内核根据数据包目的IP判断是否需要转送出去。

② 如果数据包就是进入本机的,它就会沿着图向下移动,到达INPUT链。数据包到了INPUT链后,任何进程都会收到它。本机上运行的程序可以发送数据包,这些数据包会经过OUTPUT链,然后到达POSTROUTING链输出。

③ 如果数据包是要转发出去的,且内核允许转发,数据包就会如图所示向右移动,经过FORWARD链,然后到达POSTROUTING链输出。



iptables的规则表和链

表(tables)在iptables中扮演着功能划分的角色,它内置了四个主要表:filter表、nat表、mangle表和raw表。这些表各自承担着不同的任务,filter表用于实现包过滤功能,确保只有符合安全策略的数据包能够通过;nat表则负责网络地址转换,允许对数据包的源地址或目的地址进行修改;mangle表用于对数据包进行重构或修改,以满足特定的网络需求;而raw表则用于处理数据跟踪等任务。

链(chains)则是数据包在网络中传播的路径。每条链实际上是一个规则列表,这些规则按照一定的顺序排列。当数据包到达某个链时,iptables会逐条检查这些规则,看数据包是否满足规则的条件。一旦找到匹配的规则,iptables就会按照该规则指定的方法处理数据包。如果数据包不符合链中任何一条规则的条件,iptables则会根据该链预先设定的默认策略来处理数据包。这种逐条检查的方式确保了数据包能够按照预定的规则进行处理,从而实现了网络的安全和可控。


规则表:

filter表

  • 链:INPUT、FORWARD、OUTPUT

  • 作用:负责过滤数据包,确定哪些数据包应被允许通过或拒绝。

  • 内核模块:iptables_filter

  • 描述:该表是iptables中最常用的表之一,它根据数据包的方向(进入、转发、离开)来定义规则,实现防火墙的基本功能。

nat表

  • 链:PREROUTING、POSTROUTING、OUTPUT

  • 作用:用于网络地址转换(NAT),包括IP地址和端口的转换。

  • 内核模块:iptables_nat

  • 描述:该表允许管理员实现网络地址转换功能,比如将内部私有IP地址转换为公共IP地址,以实现NAT或端口转发。

mangle表

  • 链:PREROUTING、POSTROUTING、INPUT、OUTPUT、FORWARD

  • 作用:修改数据包的服务类型、TTL(生存时间)等字段,也可以用于配置路由以实现QoS(服务质量)。

  • 内核模块:iptables_mangle

  • 描述:尽管mangle表提供了丰富的数据包修改功能,但在日常的配置中,它通常不是必需的,因为大多数常见需求可以通过其他表来满足。

raw表

  • 链:OUTPUT、PREROUTING

  • 作用:决定数据包是否应被状态跟踪机制(如连接跟踪)处理。

  • 内核模块:iptables_raw

  • 描述:raw表提供了对数据包状态跟踪的精细控制。在某些特殊场景下,管理员可能需要通过raw表来影响状态跟踪机制的行为。




规则链

INPUT链

  • 当数据包从外部网络进入本地主机时,会应用INPUT链中的策略进行过滤。这条链主要用于决定哪些进入的数据包应被允许进入本地系统。

OUTPUT链

  • 当数据包从本地主机发送至外部网络时,会应用OUTPUT链中的策略进行过滤。这条链帮助确定哪些本地系统发出的数据包可以被发送到外部网络。

FORWARD链

  • 当数据包需要在本地主机上进行转发,即不是本地产生也不是本地接收的数据包时,会应用FORWARD链中的策略。这条链对于实现路由功能或构建防火墙转发策略非常关键。

PREROUTING链

  • (记住!所有的数据包进来的时侯都先由这个链处理)

  • 在数据包进行路由选择之前,PREROUTING链会先对它们进行处理。这意味着,无论数据包最终是进入本地系统、被转发还是离开本地系统,它们都会首先经过PREROUTING链的过滤和可能的修改

POSTROUTING链

  • 在数据包完成路由选择之后,准备离开本地系统之前,POSTROUTING链会对其进行处理。这通常涉及到对数据包进行网络地址转换(NAT)或其他修改,以确保数据包能够正确地到达目的地。




规则表之间的优先顺序

Raw——mangle——nat——filter

Raw、Mangle、NAT和Filter这四个规则表在iptables中各自扮演着不同的角色,它们按照特定的优先顺序处理数据包。这种顺序对于理解数据包的流动路径以及如何应用安全策略至关重要。以下是三种主要数据流向及其处理过程的另一种表述:

第一种情况:入站数据流向

当数据包从外部网络到达防火墙时,其处理流程如下:

  1. PREROUTING处理:数据包首先经过PREROUTING链,在这里可能会进行地址转换(如DNAT)或其他必要的修改。

  2. 路由选择:完成PREROUTING处理后,系统根据数据包的目标地址进行路由选择,判断其应该被发送到哪里。

  3. INPUT链处理:如果数据包的目标是本机(例如,用户访问防火墙主机上的Web服务),则数据包会传递给INPUT链。在这里,iptables会基于预设的规则来决定是否允许数据包通过。

  4. 上层应用处理:一旦数据包通过INPUT链的检查,它会被传递给系统上层的应用程序(如Web服务器),以进行进一步的处理和响应。

第二种情况:转发数据流向

当数据包需要通过防火墙进行转发时(即既不是进入本机也不是从本机发出),它会经过FORWARD链的处理。FORWARD链中的规则决定了是否允许该数据包被转发到其目标地址。

第三种情况:出站数据流向

当防火墙本机需要向外部网络发送数据包时(例如,防火墙主机向公网DNS服务器发起查询),处理流程如下:

  1. OUTPUT链处理:数据包首先经过OUTPUT链,iptables在这里根据规则判断是否允许数据包发出。

  2. 路由选择:通过OUTPUT链检查后,系统会进行路由选择,确定数据包的发送路径。

  3. POSTROUTING处理:最后,数据包会经过POSTROUTING链,可能在这里进行地址转换(如SNAT)或其他必要的修改,然后发往目标地址。




管理和设置iptables规则

语法格式

iptables [-t 表名] 命令选项 [链名] [条件匹配] [-j 目标动作或跳转]

说明:表名、链名用于指定 iptables命令所操作的表和链,命令选项用于指定管理iptables规则的方式(比如:插入、增加、删除、查看等;条件匹配用于指定对符合什么样 条件的数据包进行处理;目标动作或跳转用于指定数据包的处理方式(比如允许通过、拒绝、丢弃、跳转(Jump)给其它链处理。

控制选项

-A 在指定链的末尾添加(append)一条新的规则
-D 删除(delete)指定链中的某一条规则,可以按规则序号和内容删除
-I 在指定链中插入(insert)一条新的规则,默认在第一行添加
-R 修改、替换(replace)指定链中的某一条规则,可以按规则序号和内容替换
-L 列出(list)指定链中所有的规则进行查看
-E 重命名用户定义的链,不改变链本身
-F 清空(flush)
-N 新建(new-chain)一条用户自己定义的规则链
-X 删除指定表中用户自定义的规则链(delete-chain)
-P 设置指定链的默认策略(policy)
-Z 将所有表的所有链的字节和数据包计数器清零
-n 使用数字形式(numeric)显示输出结果
-v 查看规则表详细信息(verbose)的信息
-V 查看版本(version)
-h 获取帮助(help)

处理数据包的四种方式

  • ACCEPT 允许数据包通过

  • DROP 直接丢弃数据包,不给任何回应信息

  • REJECT 拒绝数据包通过,必要时会给数据发送端一个响应的信息。

  • LOG在/var/log/messages文件中记录日志信息,然后将数据包传递给下一条规则

墙规则的保存与恢复

  • iptables-save把规则保存到文件中,再由目录rc.d下的脚本(/etc/rc.d/init.d/iptables)自动加载

    iptables-save > /etc/sysconfig/iptables
    生成保存规则的文件 /etc/sysconfig/iptables,
    或者
    service iptables save
    它能把规则自动保存在/etc/sysconfig/iptables中。
    当计算机启动时,rc.d下的脚本将用命令iptables-restore调用这个文件,从而就自动恢复规则。


删除INPUT链的第一条规则

iptables -D INPUT 1

常用的策略

拒绝进入防火墙的所有ICMP协议数据包

iptables -I INPUT -p icmp -j REJECT

允许防火墙转发除ICMP协议以外的所有数据包

iptables -A FORWARD -p ! icmp -j ACCEPT

说明:使用“!”可以将条件取反。

拒绝转发来自172.16.0.10主机的数据,允许转发来自172.16.0.0/24网段的数据

iptables -A FORWARD -s 172.16.0.10 -j REJECT
iptables -A FORWARD -s 172.16.0.0/24 -j ACCEPT

说明:注意要把拒绝的放在前面不然就不起作用了啊。

丢弃从外网接口(eth0)进入防火墙本机的源地址为私网地址的数据包

iptables -A INPUT -i eth0 -s 172.16.0.0/16 -j DROP
iptables -A INPUT -i eth0 -s 172.16.0.0/12 -j DROP
iptables -A INPUT -i eth0 -s 10.0.0.0/8 -j DROP

封堵网段(172.16.0.0/24),两小时后解封。

iptables -I INPUT -s 172.16.0.0/24 -j DROP
iptables -I FORWARD -s 172.16.0.0/24 -j DROP
at now 2 hours at> iptables -D INPUT 1 at> iptables -D FORWARD 1

[1] Stopped at now 2 hours

说明:此策略借助crond计划任务来完成为最佳方案

只允许管理员从202.13.0.0/16网段使用SSH远程登录防火墙主机。


iptables -A INPUT -p tcp --dport 22 -s 202.13.0.0/16 -j ACCEPT
iptables -A INPUT -p tcp --dport 22 -j DROP
说明:这个用法比较适合对设备进行远程管理时使用,比如位于分公司中的SQL服务器需要被总公
司的管理员管理时。


允许本机开放从TCP端口20-1024提供的应用服务。

iptables -A INPUT -p tcp --dport 20:1024 -j ACCEPT
iptables -A OUTPUT -p tcp --sport 20:1024 -j ACCEPT


允许转发来自172.16.0.0/24局域网段的DNS解析请求数据包。

iptables -A FORWARD -s 172.16.0.0/24 -p udp --dport 53 -j ACCEPT
iptables -A FORWARD -d 172.16.0.0/24 -p udp --sport 53 -j ACCEPT


禁止其他主机ping防火墙主机,但是允许从防火墙上ping其他主机

iptables -I INPUT -p icmp --icmp-type Echo-Request -j DROP
iptables -I INPUT -p icmp --icmp-type Echo-Reply -j ACCEPT
iptables -I INPUT -p icmp --icmp-type destination-Unreachable -j ACCEPT


禁止转发来自MAC地址为00:0C:29:27:55:3F的主机的数据包

iptables -A FORWARD -m mac --mac-source 00:0c:29:27:55:3F -j DROP

说明:iptables中使用“-m 模块关键字”的形式调用显示匹配。咱们这里用“-m mac –mac-source”来表示数据包的源MAC地址。

允许防火墙本机对外开放TCP端口20、21、25、110以及被动模式FTP端口1250-1280

iptables -A INPUT -p tcp -m multiport --dport 20,21,25,110,1250:1280 -j ACCEPT

说明:这里用“-m multiport –dport”来指定目的端口及范围

禁止转发源IP地址为192.168.1.20-192.168.1.99的TCP数据包。

iptables -A FORWARD -p tcp -m iprange --src-range 192.168.1.20-192.168.1.99 -j DROP

说明:此处用“-m –iprange –src-range”指定IP范围。

禁止转发与正常TCP连接无关的非—syn请求数据包。

iptables -A FORWARD -m state --state NEW -p tcp ! --syn -j DROP

说明:“-m state”表示数据包的连接状态,“NEW”表示与任何连接无关的,新的嘛!

拒绝访问防火墙的新数据包,但允许响应连接或与已有连接相关的数据包

iptables -A INPUT -p tcp -m state --state NEW -j DROP
iptables -A INPUT -p tcp -m state --state ESTABLISHED,RELATED -j ACCEPT
说明:“ESTABLISHED”表示已经响应请求或者已经建立连接的数据包,“RELATED”表示与已建立的连
接有相关性的,比如FTP数据连接等。

只开放本机的web服务(80)、FTP(20、21、20450-20480),放行外部主机发住服务器其它端口的应答数据包,将其他入站数据包均予以丢弃处理。

iptables -I INPUT -p tcp -m multiport --dport 20,21,80 -j ACCEPT
iptables -I INPUT -p tcp --dport 20450:20480 -j ACCEPT
iptables -I INPUT -p tcp -m state --state ESTABLISHED -j ACCEPT
iptables -P INPUT DROP

添加博主

微信号|yfq940-

原文作者:步步运维步步坑;如有侵权,请联系管理员删除。

请登录后发表评论 登录
全部评论

注册时间:2022-10-08

  • 博文量
    100
  • 访问量
    51706