18 iptables
参考博客:https://www.cnblogs.com/whych/p/9147900.html
1 概述
Linux防火墙通常包含两部分,分别为iptables和netfilter。iptables是管理防火墙的命令行工具,处于用户空间。netfilter执行报文过滤,处于内核空间。
路由:及路由表不直接参与数据包的传输,而是生成一个指向表。这个指向表仅包含路由算法选择的数据传输优先路径
PREROUTING: 在进行路由判断之前所要进行的规则
INPUT:处理入站的数据包
OUTPUT:处理出站的数据包
FORWARD:处理转发的数据包
POSTROUTING: 在进行路由判断之后所要进行的规则
2 iptables中的表
iptables将规则写入,内核netfilter执行报文过滤规则。
filter、nat、mangle、raw、security
filter(过滤表)
报文过滤,包含3个内置规则链
INPUT输入链,处理目标地址为本机IP地址的报文
OUTPUT输出链,处理本机地址产生的报文
FORWARD转发链,处理经过本机路由的报文nat(网络地址转换表)
nat修改数据包中的源、目标IP地址或端口。
它也有3个内置的规则链
PREROUTING:修改到来的报文,只用来做网络地址转换
OUTPUT:用来修改本机产生的并且在路由处理之前的报文
POSTROUTING:用于修改准备出去的报文mangle(修改表)
进行报文修改。有5个内置规则链
PREROUTING、INPUT、OUTPUT、FORWARD、POSTROUTINGraw(原始表)
配置连接跟踪相关的内容,在ip_conntrack之前调用。提供两个内置规则链。
PREROUTING、OUTPUTsecurity(用于安全Linux的防火墙规则)
3 处理目标
规则的处理目标可以是用户定义的自定义链名,也可以是系统内置的四种处理方式
ACCEPT(接收)表示让这个报文通过DROP(丢弃)表示这个报文丢弃QUEUE(入队)表示把这个报文传递到用户空间的队列中RETURN(返回)表示停止这条规则的匹配。返回到调用这个规则的上一条规则链的规则处执行REJECT(拒绝)REJECT和DROP一样丢弃报文,但是REJECT的不同之处在与同时还向发送者返回一个ICMP错误消息
禁止访问80端口
iptables -A IPNUT -p tcp --dport 80 -j REJECT
DROP与REJECT的区别
DROP不会回包,暴露信息少REJECT每一条信息都会回一条ICMP不可到达的报文。当有大量访问和攻击时,会导致占用所有带宽,有用的报文不可用(DOS)
DNAT(目的网络地址转换)
目的网络地址转换的,就是重写报文的目的IP。
这个处理目标仅用在nat表中的PREROUTING和OUTPUT链。
将访问路由器的80端口的流量重定向到192.168.6.100
iptables -t nat -A PREROUTING -p tcp --dport 80 -j DNAT --to-destination 192.168.6.100
这样Web服务器就可以搭建在局域网的主机(192.168.6.100)上对外提供服务。对外仅有路由器的IP保留给用户。
SNAT(源网络地址转换)
网络地址转换。重写报文的源IP。
这个处理目标仅用在nat表的POSTROUTING和INPUT链。
iptables -t nat -A POSTROUTING -s 192.168.6.0/24 -o eth0 -j SNAT --to-source 10.0.2.15
MASQUERADE(伪装)
MASQUERADE作用和SNAT是一样的。两者的区别是MASQUERADE是不需要指定源地址的。
MASQUERADE只用于nat表的POSTROUTING链LOG(开启内核记录)
为匹配的报文开启内核记录。Linux会通过printk函数打印一些匹配包的信息,然后通过syslog记录在日志中。
有一下几个选项可以设置
--log-level : 日志级别
--log-prefix : prefix在记录log信息前加上特定前缀;最多14个字母
--log-tcp-sequence : 记录TCP序列号
--log-tcp-options : 记录TCP报文头部的选项
--log-ip-options : 记录IP报文头部的选项
REDIIECT(修改目的IP到机器自身)
只适用与nat表的PREROUTING和OUTPUT链
修改报文的目的IP地址来发送报文到机器自身(本地生成的报文被设置为地址127.0.0.1)--to-ports []
指定使用的目的端口或端口范围。只适用于指定TCP和UDP
4 报文处理流程
iptable有5个表,每个表中又有几个不同的链,不同的表中有相同名称的规则链。但这些规则链处理的任务是不同的。报文按照预定的流程来顺序进入到各个规则链中,报文处理流程如下图。进入顺序是raw->mangle->filter->nat


- 首先网卡从网络上收到
IP报文 - 报文进入
raw表的PREROUTING链。此时在报文连接跟着生效之前对报文进行处理。 - 报文进入到连接跟踪处理
- 报文进入到
mangle表的PREROUTING链。这里是报文进入网关之后,路由之前修改报文的地方 - 报文进入到
nat表的PREROUTING。在这里我们做目的地址转换(DNET)。这里不能用于报文过滤,因为每一个连接数据流仅第一个报文进入到这里。 - 进行路由决策,因为前面的
mangle和nat表可能修改了报文的IP地址信息。如果目的地址为网关,则直接进入到INPUT链中,如果和本机地址不同,则进入路由转发。跳到步骤9 - 报文进入到
mangle表的INPUT链。这里是报文进入网关时修改报文的地方。在这里不做报文过滤。 - 报文进入到
filter表的INPUT链,这里是对收到报文做过滤的地方,然后将报文转到应用程序。 - 对于转发进入到
mangle表的FORWARD链。这里对报文进行修改 - 报文进入到
filter表中的FORWARD链。对转发报文进行过滤。 - 报文进入到
mangle表的POSTROUTING链。这条链可能被两种报文遍历,一种是转发报文,另外就是本机产生的报文 - 报文进入到
nat表的POSTROUTING链。在这里我们做源地址转换(SNAT)这里不能用于报文过滤,因为每一个数据流仅有第一个报文进入到这里 - 经由网卡发送
5 报文规则匹配
MAC地址过滤
MAC地址过滤只对源MAC地址有效
丢弃指定MAC的报文
iptables -I INPUT -m mac --mac-source 28:D2:44:15:D5:A4 -j DROP
IP层过滤
IP层匹配常用的有协议,源IP和目的IP
-p用于匹配IP层报文协议。常见有TCP、UDP、IGMP、ICMP。也可以是一个数字,数字代表的协议在文件/etc/protocols描述。数字零表示所有协议。
禁止UDP 5060报文
iptables -A FORWARD -p UDP --m udp dport 5060 -j DROP
-s和-d用于匹配IP报文的源IP和目的IP
禁止192.168.1.0网段访问本机
iptables -A INPUT -s 192.168.1.0/24 -j DROP
6 管理防火墙规则
iptables [-t table] {-A|-C|-D} chain rule-specification rule-specification = [matches...] [target] match = -m matchname [per-match-options] target = -j targetname [per-target-options]
A将防火墙规则添加到规则链的末尾D删除指定规则链中的规则。
可以指定规则号来删除,也可以通过规则匹配来删除I插入到规则链中的指定位置。如果不指定插入位置则插入规则链的第一个位置L查看防火墙规则。如果没有指定规则链,则显示所有规则链R修改、替换.指定链中的某一条规则,可以按规则序号和内容替换E重命名用户定义的链,不改变链本身F清空防火墙规则。如果没有指定规则链,则清空所有链。
通常在进行防火墙配置之前需要将以前的规则全部删除
清空filter表中的INPUT链规则
iptables -t filter -F INPUT
N新建一条用户自己定义的规则链X删除指定表中用户自定义的规则链
X删除规则链
D删除规则链中的规则
F清空P设置指定链的默认策略。如果一个报文没有被任何规则匹配,那么默认策略就会命中,执行默认策略
输入链为默认拒绝
iptables -P INPUT DROP
Z将所有表的所有链的字节和数据包计数器清零n使用数字形式显示输出结果v查看规则表详细信息的信息V查看版本h获取帮助
对于iptables命令如果没有指定防火墙表就默认使用filter表,所以查看网络地址转换规则使用iptables -t nat -L
对于复杂规则,我们通常会创建自定义规则链来进行匹配,并把自定义规则链加入到已有的规则链中。
iptables -N UDP_FILTER
7 其他工具
iptables-save和iptables-restore处理大规则集。把规则存入一个与标准脚本代码只有细微差别的特殊格式文件中,或者从中恢复规则。
iptables-save
导出iptables规则到标准输出(屏幕)中。我们使用shell重定向到文件中。内容格式和iptables类似但稍有不同。iptables-restore
用于加载导出的防火墙规则,使用标准输入的内容导入,一般都是通过shell从重定向的文件中读取规则后向内核导入。

浙公网安备 33010602011771号