Iptables

一,iptables的原理:

当主机收到一个数据包后,数据包先在内核空间中处理,若发现目的地址是自身,则传到用户空间中交给对应的应用程序处理,若发现目的不是自身,则会将包丢弃或进行转发

iptables实现防火墙功能的原理是:在数据包经过内核的过程中有五处关键地方,分别是PREROUTING、INPUT、OUTPUT、FORWARD、POSTROUTING,称为钩子函数,iptables这款用户空间的软件可以在这5处地方写规则,对经过的数据包进行处理,规则一般的定义为“如果数据包头符合这样的条件,就这样处理数据包”。

二,iptables的四表五连:

iptables的结构:iptables -> Tables -> Chains -> Rules. 简单地讲,tables由chains组成,而chains又由rules组成。

iptables中定义有表,分别表示提供的功能,有filter表(实现包过滤)、nat表(实现网络地址转换)、mangle表(实现包修改)、raw表(实现数据跟踪),这些表具有一定的优先级:raw–>mangle–>nat–>filter

iptables中定义有5条链,说白了就是上面说的5个钩子函数,因为每个钩子函数中可以定义多条规则,每当数据包到达一个钩子函数时,iptables就会从钩子函数中第一条规则开始检查,看该数据包是否满足规则所定义的条件。如果满足,系统就会根据该条规则所定义的方法处理该数据包;否则iptables将继续检查下一条规则,如果该数据包不符合钩子函数中任一条规则,iptables就会根据该函数预先定义的默认策略来处理数据包
1. Filter表
Filter表示iptables的默认表,因此如果你没有自定义表,那么就默认使用filter表,它具有以下三种内建链:

INPUT链 – 处理来自外部的数据。
OUTPUT链 – 处理向外发送的数据。
FORWARD链 – 将数据转发到本机的其他网卡设备上。

2. NAT表
NAT表有三种内建链:

PREROUTING链 – 处理刚到达本机并在路由转发前的数据包。它会转换数据包中的目标IP地址(destination ip address),通常用于DNAT(destination NAT)。
POSTROUTING链 – 处理即将离开本机的数据包。它会转换数据包中的源IP地址(source ip address),通常用于SNAT(source NAT)。
OUTPUT链 – 处理本机产生的数据包。

3. Mangle表
Mangle表用于指定如何处理数据包。它能改变TCP头中的QoS位。Mangle表具有5个内建链:
PREROUTING OUTPUT FORWARD INPUT POSTROUTING
4. Raw表
Raw表用于处理异常,它具有2个内建链: PREROUTING chain OUTPUT chain

下图十分清晰的表明数据包的流向。由于四表中我们常用的就只有filter和nat:
这里写图片描述

三,iptables规则的书写:

理解iptables规则的关键:

Rules包括一个条件和一个目标(target)
如果满足条件,就执行目标(target)中的规则或者特定值。
如果不满足条件,就判断下一条Rules。

目标值(Target Values)
下面是你可以在target里指定的特殊值:

ACCEPT – 允许防火墙接收数据包
DROP – 防火墙丢弃包
QUEUE – 防火墙将数据包移交到用户空间
RETURN – 防火墙停止执行当前链中的后续Rules,并返回到调用链(the calling chain)中。
SNAT - 源地址转换
DNAT-目的地址转换
REDIRECT-目标端口转换
MARK-将数据包打上标记

四,iptables常用命令和参数:
以下选项指明了将要被执行的操作. 以下选项只能单独在命令行中被指明使用,除非其他被指出的情况。
-A, –append chain rule-specification
在选定的链后添加一个或者多个规则

-C, –check chain rule-specification
检测一条规则是否匹配此链中指定的规则,或者说检测匹配规则是否存在

-D, –delete chain rule-specification
-D, –delete chain rulenum
删除一个或者多个从链中指定的规则,可以使用规则号码或者匹配的规则信息

-I, –insert chain [rulenum] rule-specification
向选定的链中以给定序号向对应位置插入一条或者多条规则。

-R, –replace chain rulenum rule-specification
替换选定链中的一条规则

-L, –list [chain]
列出链中的所有规则,如果没有指定链,则所有的链中的规则都将被显示
用法:iptables -t nat -n -L
用法:iptables -L -v

-S, –list-rules [chain]
显示所与选中链中的规则,如果未选中具体的链,则所有链的规则将以iptables-save形式打印出来

-F, –flush [chain]
刷新选中的链或者所有的链(如果未指定具体的链)。此操作等于删除了所有的规则

-Z, –zero [chain [rulenum]]
将所有链中的数据包归零,或者清零给定的链,或者指定链中的具体规则

-N, –new-chain chain
用给定的名称创建一条用户自定的链

-X, –delete-chain [chain]
删除用户自定的链. 要删除的链必须不存在其他参考.

-P, –policy chain target
对于给定的目标设置链的策略

-E, –rename-chain old-chain new-chain
用给定的链名称重命名一条旧的链

-h 帮助. 给出(当前最简)语法描述.

参数陈列
以下参数明组成了一条规则的设置(例如添加、删除、插入、替换、附加等命令).

-4, –ipv4
此选项对iptables和iptables-restore无效.

-6, –ipv6
如果一条规则使用了-6参数插入iptables-restore此操作将会被默默忽略,其他的用法会报错

[!] -p, –protocol protocol
检测规则或者数据包的传输协议.

[!] -s, –source address[/mask][,…]
指明源,地址可以是网路名称,主机名,网络地址 (with /mask), 或者普通ip

[!] -d, –destination address[/mask][,…]
指明目的

-m, –match match
指明一条匹配的规则进行使用

-j, –jump target
指明规则的目标(下一跳)

-g, –goto chain
指明进程应该在用户指定的链中继续执行

[!] -i, –in-interface name
数据包要通过或者接收的接口名称(只有进入INPUT, FORWARD and PREROUTING
链的数据包需要指明)

[!] -o, –out-interface name
指明数据包将要被送往的接口名称

-c, –set-counters packets bytes
此参数可以使管理员初始化数据包和字节计数(在 INSERT, APPEND, REPLACE操作中).

更多选项参数
以下为附加的参数选项以及用法讲解

-v, –verbose
显示操作的详细输出信息

-w, –wait [秒]
等待xtables锁,阻止一个程序的多实例同时运行,并且一段时间试图去获得执行锁。默认的,如果不能获取执行锁,程序将会退出。此参数将会使进程等待,一直到获得执行锁

-n, –numeric
数字化输出,ip地址和端口号将会以数字格式显示出来。默认的,此程序会尝试列出主机名称或者网络名称或者服务名称

-x, –exact
数字详述.显示具体的数据包值以及字节数,而不是大约的K’s(multiples of 1000) M’s (multiples of 1000K)G’s (multiples of 1000M),此参数只与-L参数相关

也可以根据防火墙的连接状态来设置策略:

五,实验:
iptables -A INPUT -m state –state NEW -i lo -j ACCEPT #设置状态为NEW但是经过本地回环接口的连接允许

iptable -A INPUT -m state –state NEW -p tcp –dport 22 -j ACCEPT #设置经过22端口的新状态允许连接

iptables -A INPUT -m state –state ESTABLISHED,RELATED -j ACCEPT #设置ESTABLISHED和RELATED状态的可以连接

实验:关于源地址转换和目的地址转换:
环境:实验主机配置双网卡,eth0(172.25.254.93),eth1(172.25.92.93),eth1相当于路由器,可以实现内网和外网之间通信的桥梁。
测试主机配置ip为(172.25.92.1),相当于内网主机,配置网关为(172.25.92.93)

源地址转换:
[root@93 ~]# sysctl -p | grep ip_forward
net.ipv4.ip_forward = 1
要保证此项值为1,如果为0,则不能实现路由转发
在/etc/sysctl.conf重添加即可
这里写图片描述
[root@93 ~]# iptables -t nat -A POSTROUTING -o eth0 -j SNAT –to-source 172.25.254.93 #在93主机上添加策略:从本机上路由的数据包的源地址转变为172.25.254.93

测试,在172.25.92.1主机上:
这里写图片描述
从图中可以看见,虽然是测试主机(172.25.92.1)使用ssh连接的172.25.254.92,但是在92主机上显示的却是172.25.254.93主机连接的,这就是因为路由策略的原因。

目的地址转换:
[root@93 ~]# iptables -t nat -A PREROUTING -i eth0 -d 172.25.254.93 -j DNAT –to-dest 172.25.92.1 #将访问目的是172.25.254.93的连接转向172.25.92.1

测试:在172.25.254.92主机上:
这里写图片描述
可以看出虽然在92主机上使用ssh连接的是172.25.254.93,但是却将目的地转向172.25.92.1,这种结果就是因为路由的原因。

目录 译者序.................................................................................................................................................................................4 关于作者.............................................................................................................................................................................5 如何阅读.............................................................................................................................................................................5 必备知识.............................................................................................................................................................................6 本文约定.............................................................................................................................................................................6 Chapter1.序言.....................................................................................................................................................................6 1.1.为什么要写这个指南......................................................................................................................................... 6 1.2.指南是如何写的................................................................................................................................................. 7 1.3.文中出现的术语................................................................................................................................................. 7 Chapter2.准备阶段.............................................................................................................................................................8 2.1.哪里能取得iptables............................................................................................................................................8 2.2.内核配置............................................................................................................................................................. 8 2.3.编译与安装....................................................................................................................................................... 11 2.3.1.编译....................................................................................................................................................... 11 2.3.2.在RedHat7.1 上安装.............................................................................................................................12 Chapter3.表和链...............................................................................................................................................................14 3.1.概述................................................................................................................................................................... 14 3.2.mangle 表.......................................................................................................................................................... 17 3.3.nat 表................................................................................................................................................................. 18 3.4.Filter 表..............................................................................................................................................................19 Chapter4.状态机制...........................................................................................................................................................19 4.1.概述................................................................................................................................................................... 19 4.2.conntrack 记录.................................................................................................................................................. 20 4.3.数据包在用户空间的状态............................................................................................................................... 21 4.4.TCP 连接...........................................................................................................................................................22 4.5.UDP 连接.......................................................................................................................................................... 25 4.6.ICMP 连接........................................................................................................................................................ 26 4.7.缺省的连接操作............................................................................................................................................... 28 4.8.复杂协议和连接跟踪....................................................................................................................................... 29 Chapter5.规则的保存与恢复...........................................................................................................................................30 5.1.速度................................................................................................................................................................... 30 5.2.restore 的不足之处........................................................................................................................................... 31 5.3.iptables-save...................................................................................................................................................... 31 5.4.iptables-restore...................................................................................................................................................34 Chapter6.规则是如何练成的...........................................................................................................................................34 6.1.基础................................................................................................................................................................... 35 6.2.Tables.................................................................................................................................................................35 6.3.Commands......................................................................................................................................................... 36 6.4.Matches..............................................................................................................................................................39 6.4.1.通用匹配...............................................................................................................................................39 6.4.2.隐含匹配...............................................................................................................................................41 6.4.3.显式匹配...............................................................................................................................................44 6.4.4.针对非正常包的匹配............................................................................................................................49 6.5.Targets/Jumps.................................................................................................................................................... 49 6.5.1.ACCEPTtarget...................................................................................................................................... 50 6.5.2.DNATtarget........................................................................................................................................... 50 6.5.3.DROPtarget........................................................................................................................................... 53 6.5.4.LOGtarget..............................................................................................................................................54 6.5.5.MARKtarget..........................................................................................................................................55 6.5.6.MASQUERADEtarget.......................................................................................................................... 55 6.5.7.MIRRORtarget...................................................................................................................................... 56 6.5.8.QUEUEtarget........................................................................................................................................ 57 6.5.9.REDIRECTtarget.................................................................................................................................. 57 6.5.10.REJECTtarget......................................................................................................................................57 6.5.11.RETURNtarget.................................................................................................................................... 58 6.5.12.SNATtarget..........................................................................................................................................58 6.5.13.TOStarget............................................................................................................................................ 59 6.5.14.TTLtarget............................................................................................................................................ 60 6.5.15.ULOGtarget.........................................................................................................................................61 Chapter7.防火墙配置实例rc.firewall............................................................................................................................. 62 7.1.关于rc.firewall..................................................................................................................................................62 7.2.rc.firewall 详解..................................................................................................................................................63 7.2.1.参数配置...............................................................................................................................................63 7.2.2.外部模块的装载...................................................................................................................................63 7.2.3.proc 的设置...........................................................................................................................................65 7.2.4.规则位置的优化...................................................................................................................................65 7.2.5.缺省策略的设置...................................................................................................................................68 7.2.6.自定义链的设置...................................................................................................................................68 7.2.7.INPUT 链.............................................................................................................................................. 72 7.2.8.FORWARD 链.......................................................................................................................................73 7.2.9.OUTPUT 链.......................................................................................................................................... 74 7.2.10.PREROUTING 链...............................................................................................................................74 7.2.11.POSTROUTING 链............................................................................................................................. 74 Chapter8.例子简介...........................................................................................................................................................75 8.1.rc.firewall.txt 脚本的结构................................................................................................................................ 75 8.1.1.脚本结构...............................................................................................................................................75 8.2.rc.firewall.txt..................................................................................................................................................... 79 8.3.rc.DMZ.firewall.txt............................................................................................................................................80 8.4.rc.DHCP.firewall.txt.......................................................................................................................................... 81 8.5.rc.UTIN.firewall.txt...........................................................................................................................................84 8.6.rc.test-iptables.txt...............................................................................................................................................85 8.7.rc.flush-iptables.txt............................................................................................................................................ 85 8.8.Limit-match.txt.................................................................................................................................................. 86 8.9.Pid-owner.txt......................................................................................................................................................86 8.10.Sid-owner.txt....................................................................................................................................................86 8.11.Ttl-inc.txt......................................................................................................................................................... 86 8.12.Iptables-saveruleset......................................................................................................................................... 87 附录A.常用命令详解......................................................................................................................................................87 A.1.查看当前规则集的命令.................................................................................................................................. 87 A.2.修正和清空iptables 的命令.............................................................................................................................88 附录B.常见问题与解答..................................................................................................................................................88 B.1.模块装载问题...................................................................................................................................................88 B.2.未设置SYN 的NEW 状态包.......................................................................................................................... 90 B.3.NEW 状态的SYN/ACK 包..............................................................................................................................91 B.4.使用私有IP 地址的ISP.................................................................................................................................. 91 B.5.放行DHCP 数据..............................................................................................................................................92 B.6.关于mIRCDCC 的问题...................................................................................................................................92 附录C.ICMP 类型........................................................................................................................................................... 93 附录D.其他资源和链接..................................................................................................................................................94 附录E.鸣谢...................................................................................................................................................................... 96 附录F.History...................................................................................................................................................................97 附录G.GNUFreeDocumentationLicense.......................................................................................................................100 附录H.GNUGeneralPublicLicense................................................................................................................................107 附录I.示例脚本的代码................................................................................................................................................. 114 I.1.rc.firewall 脚本代码........................................................................................................................................ 114 I.2.rc.DMZ.firewall 脚本代码............................................................................................................................... 124 I.3.rc.UTIN.firewall 脚本代码...............................................................................................................................135 I.4.rc.DHCP.firewall 脚本代码.............................................................................................................................. 145 I.5.rc.flush-iptables 脚本代码............................................................................................................................... 155 I.6.rc.test-iptables 脚本代码................................................................................................................................. 157
### 关于 iptables 配置与使用指南 #### iptables 基础概念 iptables 是用于配置 Linux 内核内置的 IP 数据包过滤规则集的命令行实用程序[^1]。此工具允许管理员定义如何处理网络流量,从而增强系统的安全性。 #### 使用场景 在实际应用中,iptables 可被用来阻止未授权访问、限制特定类型的流量或者仅允许来自可信源的数据进入系统。对于服务器管理和网络安全防护来说非常重要[^2]。 #### 初步准备 为了操作 iptables ,通常需要获得超级用户权限(即 root 用户)。这是因为修改防火墙设置涉及到对操作系统底层功能的操作,这可能会影响整个系统的正常运行[^3]。 #### 创建自定义链表 可以创建新的链以便更好地组织管理不同的规则集合。例如要建立名为 `CUSTOM_CHAIN` 的新链,则执行如下命令: ```bash sudo iptables -N CUSTOM_CHAIN ``` #### 添加规则至现有链 向默认 INPUT 或 OUTPUT 等标准链添加规则时,可以通过 `-A` 参数指定位置并设定匹配条件以及相应的动作。比如拒绝所有外部尝试连接本地 SSH 服务端口 (假设为 22) 的请求可这样写入规则: ```bash sudo iptables -A INPUT -p tcp --dport 22 -j DROP ``` #### 查看当前规则列表 查看已有的规则可以帮助理解现有的策略,并确保所做的更改按预期工作。显示所有链中的规则可以用下面这条指令完成: ```bash sudo iptables -L ``` #### 清除已有规则 如果想要重置所有的规则回到初始状态,在测试阶段或是遇到错误配置的情况下非常有用。清除所有规则的方法如下所示: ```bash sudo iptables -F ``` #### 持久化保存规则 由于重启之后内存里的规则会丢失,因此有必要将它们永久存储下来。不同发行版有不同的方式实现这一点;对于基于 Debian/Ubuntu 的系统而言,可以安装 `iptables-persistent` 来达到目的。 ```bash sudo apt-get install iptables-persistent ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值