首页 > 数据库 > 数据库开发技术 > 运维必会技能之iptables---必会知识点
netfilter/iptables(简称为iptables)组成Linux平台下的包过滤防火墙,与大多数的Linux软件一样,这个包过滤防火墙是免费的,它可以代替昂贵的商业防火墙解决方案,完成封包过滤、封包重定向和网络地址转换(NAT)等功能。
规则,作为网络管理员事先设定好的条件,其核心理念是:“当数据包头部信息符合特定条件时,便按照预设方式处理该数据包”。这些规则被存储在内核空间的包过滤表中,它们详尽地定义了数据包的源地址、目标地址、使用的传输协议(例如TCP、UDP或ICMP),以及服务类型(如HTTP、FTP或SMTP)等关键信息。
每当有数据包经过时,iptables会检查这些数据包是否与预先设定的规则相匹配。一旦匹配成功,iptables便会根据规则中定义的操作来处置这些数据包,常见的操作包括允许通过(accept)、拒绝访问(reject)或直接丢弃(drop)等。
因此,配置防火墙的核心任务,便是添加新的规则、修改现有规则或删除不再需要的规则,以确保网络的安全性和流畅性。
这是第一个要说的地方,Iptables和netfilter的关系是一个很容易让人搞不清的问题。很多的知道iptables却不知道 netfilter。
其实iptables只是Linux防火墙的管理工具而已,位于/sbin/iptables。真正实现防火墙功能的是 netfilter,它是Linux内核中实现包过滤的内部结构。
iptables传输数据包的过程
① 当一个数据包进入网卡时,它首先进入PREROUTING链,内核根据数据包目的IP判断是否需要转送出去。
② 如果数据包就是进入本机的,它就会沿着图向下移动,到达INPUT链。数据包到了INPUT链后,任何进程都会收到它。本机上运行的程序可以发送数据包,这些数据包会经过OUTPUT链,然后到达POSTROUTING链输出。
③ 如果数据包是要转发出去的,且内核允许转发,数据包就会如图所示向右移动,经过FORWARD链,然后到达POSTROUTING链输出。

表(tables)在iptables中扮演着功能划分的角色,它内置了四个主要表:filter表、nat表、mangle表和raw表。这些表各自承担着不同的任务,filter表用于实现包过滤功能,确保只有符合安全策略的数据包能够通过;nat表则负责网络地址转换,允许对数据包的源地址或目的地址进行修改;mangle表用于对数据包进行重构或修改,以满足特定的网络需求;而raw表则用于处理数据跟踪等任务。
链(chains)则是数据包在网络中传播的路径。每条链实际上是一个规则列表,这些规则按照一定的顺序排列。当数据包到达某个链时,iptables会逐条检查这些规则,看数据包是否满足规则的条件。一旦找到匹配的规则,iptables就会按照该规则指定的方法处理数据包。如果数据包不符合链中任何一条规则的条件,iptables则会根据该链预先设定的默认策略来处理数据包。这种逐条检查的方式确保了数据包能够按照预定的规则进行处理,从而实现了网络的安全和可控。

规则表:
链:INPUT、FORWARD、OUTPUT
作用:负责过滤数据包,确定哪些数据包应被允许通过或拒绝。
内核模块:iptables_filter
描述:该表是iptables中最常用的表之一,它根据数据包的方向(进入、转发、离开)来定义规则,实现防火墙的基本功能。
链:PREROUTING、POSTROUTING、OUTPUT
作用:用于网络地址转换(NAT),包括IP地址和端口的转换。
内核模块:iptables_nat
描述:该表允许管理员实现网络地址转换功能,比如将内部私有IP地址转换为公共IP地址,以实现NAT或端口转发。
链:PREROUTING、POSTROUTING、INPUT、OUTPUT、FORWARD
作用:修改数据包的服务类型、TTL(生存时间)等字段,也可以用于配置路由以实现QoS(服务质量)。
内核模块:iptables_mangle
描述:尽管mangle表提供了丰富的数据包修改功能,但在日常的配置中,它通常不是必需的,因为大多数常见需求可以通过其他表来满足。
链:OUTPUT、PREROUTING
作用:决定数据包是否应被状态跟踪机制(如连接跟踪)处理。
内核模块:iptables_raw
描述:raw表提供了对数据包状态跟踪的精细控制。在某些特殊场景下,管理员可能需要通过raw表来影响状态跟踪机制的行为。
当数据包从外部网络进入本地主机时,会应用INPUT链中的策略进行过滤。这条链主要用于决定哪些进入的数据包应被允许进入本地系统。
当数据包从本地主机发送至外部网络时,会应用OUTPUT链中的策略进行过滤。这条链帮助确定哪些本地系统发出的数据包可以被发送到外部网络。
当数据包需要在本地主机上进行转发,即不是本地产生也不是本地接收的数据包时,会应用FORWARD链中的策略。这条链对于实现路由功能或构建防火墙转发策略非常关键。
(记住!所有的数据包进来的时侯都先由这个链处理)
在数据包进行路由选择之前,PREROUTING链会先对它们进行处理。这意味着,无论数据包最终是进入本地系统、被转发还是离开本地系统,它们都会首先经过PREROUTING链的过滤和可能的修改
在数据包完成路由选择之后,准备离开本地系统之前,POSTROUTING链会对其进行处理。这通常涉及到对数据包进行网络地址转换(NAT)或其他修改,以确保数据包能够正确地到达目的地。
Raw——mangle——nat——filter
Raw、Mangle、NAT和Filter这四个规则表在iptables中各自扮演着不同的角色,它们按照特定的优先顺序处理数据包。这种顺序对于理解数据包的流动路径以及如何应用安全策略至关重要。以下是三种主要数据流向及其处理过程的另一种表述:
当数据包从外部网络到达防火墙时,其处理流程如下:
PREROUTING处理:数据包首先经过PREROUTING链,在这里可能会进行地址转换(如DNAT)或其他必要的修改。
路由选择:完成PREROUTING处理后,系统根据数据包的目标地址进行路由选择,判断其应该被发送到哪里。
INPUT链处理:如果数据包的目标是本机(例如,用户访问防火墙主机上的Web服务),则数据包会传递给INPUT链。在这里,iptables会基于预设的规则来决定是否允许数据包通过。
上层应用处理:一旦数据包通过INPUT链的检查,它会被传递给系统上层的应用程序(如Web服务器),以进行进一步的处理和响应。
当数据包需要通过防火墙进行转发时(即既不是进入本机也不是从本机发出),它会经过FORWARD链的处理。FORWARD链中的规则决定了是否允许该数据包被转发到其目标地址。
当防火墙本机需要向外部网络发送数据包时(例如,防火墙主机向公网DNS服务器发起查询),处理流程如下:
OUTPUT链处理:数据包首先经过OUTPUT链,iptables在这里根据规则判断是否允许数据包发出。
路由选择:通过OUTPUT链检查后,系统会进行路由选择,确定数据包的发送路径。
POSTROUTING处理:最后,数据包会经过POSTROUTING链,可能在这里进行地址转换(如SNAT)或其他必要的修改,然后发往目标地址。
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调用这个文件,从而就自动恢复规则。
iptables -D INPUT 1
iptables -I INPUT -p icmp -j REJECT
iptables -A FORWARD -p ! icmp -j ACCEPT
说明:使用“!”可以将条件取反。
iptables -A FORWARD -s 172.16.0.10 -j REJECT
iptables -A FORWARD -s 172.16.0.0/24 -j ACCEPT
说明:注意要把拒绝的放在前面不然就不起作用了啊。
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
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计划任务来完成为最佳方案
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服务器需要被总公司的管理员管理时。
iptables -A INPUT -p tcp --dport 20:1024 -j ACCEPT
iptables -A OUTPUT -p tcp --sport 20:1024 -j ACCEPT
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
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
iptables -A FORWARD -m mac --mac-source 00:0c:29:27:55:3F -j DROP
说明:iptables中使用“-m 模块关键字”的形式调用显示匹配。咱们这里用“-m mac –mac-source”来表示数据包的源MAC地址。
iptables -A INPUT -p tcp -m multiport --dport 20,21,25,110,1250:1280 -j ACCEPT
说明:这里用“-m multiport –dport”来指定目的端口及范围
iptables -A FORWARD -p tcp -m iprange --src-range 192.168.1.20-192.168.1.99 -j DROP
说明:此处用“-m –iprange –src-range”指定IP范围。
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数据连接等。
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-
原文作者:步步运维步步坑;如有侵权,请联系管理员删除。