标签:iptables -- 18 报文 规则 nat IP
参考博客: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、POSTROUTING
raw
(原始表)
配置连接跟踪相关的内容,在ip_conntrack
之前调用。提供两个内置规则链。
PREROUTING、OUTPUT
security
(用于安全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
从重定向的文件中读取规则后向内核导入。
标签:iptables,--,18,报文,规则,nat,IP 来源: https://www.cnblogs.com/burnk/p/15843299.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。