iptables(一)链、表的简介和表的基本 *** 作

iptables(一)链、表的简介和表的基本 *** 作,第1张

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


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/yw/9028490.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-24
下一篇2023-04-24

发表评论

登录后才能评论

评论列表(0条)

    保存