
PREROUTING链——对数据包作路由选择前应用此链中的规则(所有的数据包进来的时侯都先由这个链处理)
INPUT链——进来的数据包应用此规则链中的策略
OUTPUT链——外出的数据包应用此规则链中的策略
FORWARD链——转发数据包时应用此规则链中的策略
POSTROUTING链——对数据包作路由选择后应用此链中的规则(所有的数据包出来的时侯都先由这个链处理)
filter表——用于存放所有与防火墙相关 *** 作的默认表。通常用于过滤数据包。
nat表——用于网络地址转换
mangle表——用于处理数据包
raw表——用于配置数据包,raw 中的数据包不会被系统跟踪。
PREROUTING: raw ->mangle ->nat
INPUT: mangle ->filter
FORWARD: mangle ->filter
OUTPUT: raw ->mangle ->nat ->filter
POSTROUTING: mangle ->nat
raw 表:PREROUTING,OUTPUT
mangle表:PREROUTING,INPUT,FORWARD,OUTPUT,POSTROUTING
nat 表:PREROUTING,OUTPUT,POSTROUTING
filter 表:INPUT,FORWARD,OUTPUT
ACCEPT: 允许数据包通过
DROP:直接丢弃数据包,不给任何回应信息
REJECT:拒绝数据包通过,需要时会给数据发送端一个相应信息
SNAT:原地址转换,解决内网用户用同一个公网地址上网的问题
MASQUERADE:是 SNAT 的一种特殊形式,适用于动态的、临时会变的 ip 上
DNAT:目标地址转换
REDIRECT:在本机做端口映射
LOG:在/var/log/messages 文件中记录日志信息。然后将数据包传递给下一条规则。也就是只记录不做任何 *** 作。
示例:
比如,我想要将主动连接22号端口的报文的相关信息都记录到日志中,并且把这类记录命名为"want-in-from-port-22",则可以使用如下命令
如果公网IP是动态获取的,不是固定的,则可以使用MASQUERADE进行动态的SNAT *** 作。
查看表中规则 iptables -t table_name -L [chain_name]
示例:
上面示例可以看到有哪些链是支持过滤的
在不指定表时默认查询 filter 表 iptables -L [chain_name] (注意大小写)
示例:
示例:
这个时候在192.168.55.132这个主机上 ping 测试机是不通的。此时在表的首部在添加一个允许的 *** 作
这个时候在192.168.55.132这个主机上 ping 测试机发现可以 ping 通
所以规则的顺序很重要
示例:
示例:
关于链默认规则说明
不能省略 -s 如果省略效果如下
source 变为0.0.0.0/0 表示所有网段都被 ACCEPT
示例
默认情况下添加的规则都是临时的,当重启 iptables 或者重启系统时规则将丢失
示例:
Linux防火墙是由Netfilter组件提供的,Netfilter工作在内核空间,集成在linux内核中Netfilter采用模块化设计,具有良好的可扩充性,提供扩展各种网络服务的结构化底层框架。Netfilter与IP协议栈是无缝契合,并允许对数据报进行过滤、地址转换、处理等 *** 作
一、Linux防火墙基础
Linux 的防火墙体系主要工作在网络层,针对 TCP/IP 数据包实施过滤和限制,属于典型的包过滤防火墙(或称为网络层防火墙)。
体现在对包内的 IP 地址、端口等信息的处理上
Linux 系统的防火墙基于内核编码实现,具有非常稳定的性能和极高的效率,也因此获得广泛的应用
防火墙区域(zone)
过滤规则集合:zone
一个zone一套过滤规则,数据包经过某个zone进出站,不同zone规则不同,fierwalld将网卡对应到不同zone,默认9个区域(CentOS系统默认区域为public),有优先级,高优先级可以到优先级,低优先级到优先级需做规则过滤
区域
public(公共)
dmz(非军事区):内外网之间的一层网络区域,主要管理内网到外网的安全限制/访问规则
trusted(信任)
1.防火墙工具介绍
netfilter/iptables:IP信息包过滤系统,它实际上由两个组件 netfilter_和 iptables组成。主要工作在网络层,针对IP数据包,体现在对包内的IP地址、端口等信息的处理。
1.iptables
iptables是一种用来管理Linux防火墙的命令程序,它使插入、修改和删除数据包过滤表中的规则变得容易,通常位于/sbin/iptables目录,属于“用户态”(User. Space,又称为用户空间) 的防火墙管理体系。
iptables是基于内核的防火墙,其中内置了raw、mangle、 nat和filter四个规则表。表中所有规则配置后,立即生效,不需要重启服务。
核心意义:控制不同网络之间的数据包/流量数据的访问规则/约束
2.netfilter
netfilter是内核的一部分,由一些数据包过滤表组成,不以程序文或文件的形式存在,这些表包含内核用来控制数据包过滤处理的规则集,属于“内核态”(Kernel Space,又称为内核空间)的防火墙功能体系。
2.iptables的四表五链
iptables的作用是为包过滤机制的实现提供规则(或称为策略),通过各种不同的规则,告诉 netfilter 对来自某些源、前往某些目的或具有某些协议特征的数据包应该如何处理
iptables采用了表和链的分层结构,所以它会对请求的数据包的包头数据进行分析,根据我们预先设定的规则进行匹配来决定是否可以进入主机。
其中,每个规则表相当于内核空间的一个容器,根据规则集的不同用途划分为默认的四个表,在每个表容器内又包括不同的规则链,根据处理数据包的不同时机划分为五种链
表为处理动作( *** 作指令)
链为具体位置
1.规则表
表的作用:容纳各种规则链
表的划分依据:防火墙规则的作用相似
1.4个规则表
raw表:确定是否对该数据包进行状态跟踪
mangle表:为数据包设置标记
nat表:修改数据包中的源、目标IP地址或端口
filter表(默认表):确认是否放行该数据包(过滤)(核心)
2.规则链
**规则的作用:**对数据包进行过滤或处理
**链的作用:**容纳各种防火墙规则
**链的分类依据:**处理数据包的不同时机
1.5种规则链
INPUT: 处理入站数据包,匹配目标IP为本机的数据包
OUTPUT: 处理出站数据包,一般不在此链上做配置
FORWARD: 处理转发数据包,匹配流经本机的数据包
PREROUTING链: 在进行路由选择前处理数据包,用来修改目的地址,用来做DNAT。相当于把内网服务器的IP和端口映射到路由器的外网IP和端口上
POSTROUTING链: 在进行路由选择后处理数据包,用来修改源地址,用来做SNAT。相当于内网通过路由器NAT转换功能实现内网主机通过一个公网IP地址上网
3.默认表、链的结构示意图
在这里插入图片描述
在iptables 的四个规则表中,mangle 表 和raw表的应用相对较少
在iptables 的五个规则链中,一般用input比较多(限制进入),output用的比较少,forward一般用在代理服务器上
4.数据包过滤的匹配流程
1.规则表之间的顺序
raw ---->mangle ---->nat ---->filter
2.规则链之间的顺序
入站:PREROUTING->INPUT
来自外界的数据包到达防火墙后,首先被 PEROUTING 链处理(是否修改数据包地址等),然后进行路由选择(判断该数据包应该发往何处);如果数据包的目标地址是防火墙本机,那么内核将其传递给 INPUT 链进行处理(决定是否允许通过),通过后再交给系统上层的应用程序进行相应 *** 作
出站:OUTPUT->POSTROUTING
防火墙本机向外部地址发送数据包,首先被 OUTPUT 链处理,然后进行路由选择,再交给 POSTROUTING 链进行处理(是否修改数据包的地址等)
转发:PREROUTING->FORWARD->POSTROUTING
来自外界的数据包到达防火墙后,首先被 PREOUTING 链处理,然后再进行路由选择;如果数据包的目标地址是其他外部地址,则内核将其传递给 FORWARD 链进行处理(允许转发、拦截或丢弃),最后交给 POSTROUTING 链进行处理(是否修改数据包的地址等)
3.规则链内的匹配顺序
按顺序一次检查,匹配即停止(LOG策略例外)
若找不倒相匹配的规则,则按该链的默认策略处理
在这里插入图片描述
Linux系统内核内建了netfilter防火墙机制。Netfilter(数据包过滤机制),所谓的数据包过滤,就是分析进入主机的网络数据包,将数据包的头部数据提取出来进行分析,以决该连接为放行或阻挡的机制。Netfilter提供了iptables这个程序来作为防火墙数据包过滤的命令。Netfilter是内建的,效率非常高。我们可以通过iptables命令来设置netfilter的过滤机制。
iptables里有3张表:
>Filter(过滤器),进入Linux本机的数据包有关,是默认的表。
>NAT(地址转换),与Linux本机无关,主要与Linux主机后的局域网内计算机相关。
>Mangle(破坏者),这个表格主要是与特殊的数据包的路由标志有关(通常不用涉及到这个表的修改,对这个表的修改破坏性很大,慎改之)。
每张表里都还有多条链:
Filter:INPUT, OUTPUT, FORWARD
NAT:PREROUTING, POSTROUTING, OUTPUT
Mangle:PREROUTING, OUTPUT, INPUT, FORWARD
iptables命令的使用
基本格式:iptables [-t table] -CMD chain CRETIRIA -j ACTION
-t table:3张表中的其中一种filter, nat, mangle,如果没有指定,默认是filter。
CMD: *** 作命令。查看、添加、替换、删除等。
chain:链。指定是对表中的哪条链进行 *** 作,如filter表中的INPUT链。
CRETIRIA:匹配模式。对要过滤的数据包进行描述
ACTION: *** 作。接受、拒绝、丢弃等。
查看
格式:iptables [-t table] -L [-nv]
修改
添加
格式:iptables [-t table] -A chain CRETIRIA -j ACTION
将新规则加入到表table(默认filter)的chain链的最后位置
插入
格式:iptables [-t table] -I chain pos CRETIRIA -j ACTION
将新规则插入到table表(默认filter)chain链的pos位置。原来之后的规则都往后推一位。pos的有效范围为:1 ~ num+1
替换
格式:iptables [-t table] -R chain pos CRETIRIA -j ACTION
用新规则替换table表(默认filter)chain链的pos位置的规则。pos的有效范围为:1 ~ num
删除
格式:iptables [-t table] -D chain pos
删除table表(默认filter)chain链的pos位置的规则。pos的有效范围为:1 ~ num
包匹配(CRETIRIA)
上面没有介绍CRETIRIA的规则,在这小节里详细介绍。包匹配就是用于描述需要过滤的数据包包头特殊的字段。
指定网口:
-i :数据包所进入的那个网络接口,例如 eth0、lo等,需与INPUT链配合
-o: 数据包所传出的那么网络接口,需与OUTPUT链配合
指定协议:
-p:tcp, udp, icmp或all
指定IP网络:
-s:来源网络。可以是IP或网络
IP: 192.168.0.100
网络: 192.168.0.0/24 或 192.168.0.0/255.255.255.0 均可
可以在前加 ! 表示取反
-d:目标网格。同 -s
指定端口:
--sport:指定来源端口。可以是单个端口,还可以是连续的端口,例如:1024:65535。
--dport:指定目标端口。同--sport
注意:要指定了tcp或udp协议才会有效。
指定MAC地址:
-m mac --mac-source aa:bb:cc:dd:ee:ff
指定状态:
-m state --state STATUS
STATUS可以是:
>INVALID,无效包
>ESTABLISHED,已经连接成功的连接状态
>NEW,想要新立连接的数据包
>RELATED,这个数据包与主机发送出去的数据包有关,(最常用)
例如:只要已建立连接或与已发出请求相关的数据包就予以通过,不合法数据包就丢弃
-m state --state RELATED,ESTABLISHED
ICMP数据比对
ping *** 作发送的是ICMP包,如果不想被ping到,就可以拒绝。
--icmp-type TYPE
TYPE如下:
8 echo-request(请求)
0 echo-reply(响应)
注意:需要与 -p icmp 配合使用。
*** 作(ACTION)
DROP,丢弃
ACCEPT,接受
REJECT,拒绝
LOG,跟踪记录,将访问记录写入 /var/log/messages
保存配置
将新设置的规则保存到文件
格式:iptables-save [-t table]
将当前的配置保存到 /etc/sysconfig/iptables
其它
格式:iptables [-t table] [-FXZ]
-F :请除所有的已制订的规则
-X :除掉所有用户“自定义”的chain
-Z :将所有的统计值清0
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)