Linux服务器之IPTABLES防火墙
iptables简介
netfilter/iptables(简称为iptables)组成Linux平台下的包过滤防火墙,与大多数的Linux软件一样,这个包过滤防火墙是免费的,它可以代替昂贵的商业防火墙解决方案,完成封包过滤、封包重定向和网络地址转换(NAT)等功能。
iptables基础
规则(rules)其实就是网络管理员预定义的条件,规则一般的定义为“如果数据包头符合这样的条件,就这样处理这个数据包”。规则存储在内核空间的信息包过滤表中,这些规则分别指定了源地址、目的地址、传输协议(如TCP、UDP、ICMP)和服务类型(如HTTP、FTP和SMTP)等。当数据包与规则匹配时,iptables就根据规则所定义的方法来处理这些数据包,如放行(accept)、拒绝(reject)和丢弃(drop)等。配置防火墙的主要工作就是添加、修改和删除这些规则。
iptables和netfilter的关系:
这是第一个要说的地方,Iptables和netfilter的关系是一个很容易让人搞不清的问题。很多的知道iptables却不知道netfilter。其实iptables只是Linux防火墙的管理工具而已,位于/sbin/iptables。真正实现防火墙功能的是netfilter,它是Linux内核中实现包过滤的内部结构。
iptables的组成
四表五链
iptables主要由以下几个部分组成:
表(Table):iptables中的表是一组规则链的集合,用于存储特定类型的规则。常见的表有filter、nat、mangle和raw。
链(Chain):链是一组按顺序排列的规则,用于对数据包进行处理。常见的链有INPUT、OUTPUT、FORWARD、PREROUTING和POSTROUTING。
规则(Rule):规则是iptables中的基本单位,用于定义如何处理数据包。规则包括匹配条件和目标动作,当数据包满足匹配条件时,将执行目标动作。
iptables的规则表和链
表(tables)提供特定的功能,iptables内置了4个表,即filter表、nat表、mangle表和raw表,分别用于实现包过滤,网络地址转换、包重构(修改)和数据跟踪处理。
链(chains)是数据包传播的路径,每一条链其实就是众多规则中的一个检查清单,每一条链中可以有一条或数条规则。当一个数据包到达一个链时,iptables就会从链中第一条规则开始检查,看该数据包是否满足规则所定义的条件。如果满足,系统就会根据该条规则所定义的方法处理该数据包;否则iptables将继续检查下一条规则,如果该数据包不符合链中任一条规则,iptables就会根据该链预先定义的默认策略来处理数据包。
规则表:
1. filter表——三个链:INPUT、FORWARD、OUTPUT
作用:过滤数据包 内核模块:iptables_filter.
2. Nat表——三个链:PREROUTING、POSTROUTING、OUTPUT
作用:用于网络地址转换(IP、端口) 内核模块:iptable_nat
3. Mangle表——五个链:PREROUTING、POSTROUTING、INPUT、OUTPUT、FORWARD
作用:修改数据包的服务类型、TTL、并且可以配置路由实现QOS内核模块:iptable_mangle(别看这个表这么麻烦,咱们设置策略时几乎都不会用到它),
4. Raw表——两个链:OUTPUT、PREROUTING
作用:决定数据包是否被状态跟踪机制处理 内核模块:iptable_raw
- filter表
主要用于对数据包进行过滤,根据具体的规则决定是否放行该数据包(如DROP、ACCEPT、REJECT、LOG)。filter 表对应的内核模块为iptable_filter,包含三个规则链:
INPUT链:INPUT针对那些目的地是本地的包
FORWARD链:FORWARD过滤所有不是本地产生的并且目的地不是本地(即本机只是负责转发)的包
OUTPUT链:OUTPUT是用来过滤所有本地生成的包 - nat表
主要用于修改数据包的IP地址、端口号等信息(网络地址转换,如SNAT、DNAT、MASQUERADE、REDIRECT)。属于一个流的包(因为包
的大小限制导致数据可能会被分成多个数据包)只会经过这个表一次。如果第一个包被允许做NAT或Masqueraded,那么余下的包都会自动地被做相同的操作,也就是说,余下的包不会再通过这个表。表对应的内核模块为 iptable_nat,包含三个链:
PREROUTING链:作用是在包刚刚到达防火墙时改变它的目的地址
OUTPUT链:改变本地产生的包的目的地址
POSTROUTING链:在包就要离开防火墙之前改变其源地址 - mangle表
主要用于修改数据包的TOS(Type Of Service,服务类型)、TTL(Time To Live,生存周期)指以及为数据包设置Mark标记,以实现Qos(Quality Of Service,服务质量)调整以及策略路由等应用,由于需要相应的路由设备支持,因此应用并不广泛。包含五个规则链——PREROUTING,POSTROUTING,INPUT,OUTPUT,FORWARD。
强烈建议你不要在这个表里做任何过滤,不管是DANT,SNAT或者Masquerade。 - raw表
是自1.2.9以后版本的iptables新增的表,主要用于决定数据包是否被状态跟踪机制处理。在匹配数据包时,raw表的规则要优先于其他表。包含两条规则链——OUTPUT、PREROUTING
iptables中数据包和4种被跟踪连接的4种不同状态:
NEW:该包想要开始一个连接(重新连接或将连接重定向)
RELATED:该包是属于某个已经建立的连接所建立的新连接。例如:FTP的数据传输连接就是控制连接所 RELATED出来的连接。--icmp-type 0
( ping 应答) 就是--icmp-type 8
(ping 请求)所RELATED出来的。
ESTABLISHED :只要发送并接到应答,一个数据连接从NEW变为ESTABLISHED,而且该状态会继续匹配这个连接的后续数据包。
INVALID:数据包不能被识别属于哪个连接或没有任何状态比如内存溢出,收到不知属于哪个连接的ICMP错误信息,一般应该DROP这个状态的任何数据。
规则表之间的优先顺序
Raw>>>>mangle>>>>nat>>>>filter
规则链之间的优先顺序(分三种情况):
第一种情况:入站数据流向
从外界到达防火墙的数据包,先被PREROUTING规则链处理(是否修改数据包地址等),之后会进行路由选择(判断该数据包应该发往何处),如果数据包的目标主机是防火墙本机(比如说Internet用户访问防火墙主机中的web服务器的数据包),那么内核将其传给INPUT链进行处理(决定是否允许通过等),通过以后再交给系统上层的应用程序(比如Apache服务器)进行响应。
第二冲情况:转发数据流向
来自外界的数据包到达防火墙后,首先被PREROUTING规则链处理,之后会进行路由选择,如果数据包的目标地址是其它外部地址(比如局域网用户通过网关访问QQ站点的数据包),则内核将其传递给FORWARD链进行处理(是否转发或拦截),然后再交给POSTROUTING规则链(是否修改数据包的地址等)进行处理。
第三种情况:出站数据流向
防火墙本机向外部地址发送的数据包(比如在防火墙主机中测试公网DNS服务器时),首先被OUTPUT规则链处理,之后进行路由选择,然后传递给POSTROUTING规则链(是否修改数据包的地址等)进行处理。
IPTABLES服务管理
1. 首先禁用/停止自带的firewalld服务。
#停止firewalld服务 systemctl stop firewalld #禁用firewalld服务 systemctl mask firewalld #或者禁止开机启动 systemctl disable firewalld
2. 安装iptables iptables-service。
yum install -y iptables yum install iptables-services
3. 开启iptables服务。
#启动 systemctl start iptables #设置开机启动 systemctl enable iptables
4. 如何修改iptables规则。
命令行的方式就不说了。
可以直接vi修改/etc/sysconfig/iptables文件。
然后重启iptables
systemctl restart iptables
总结
iptables是Linux平台下的重要包过滤工具。尽管iptables常被视为防火墙,但更确切地说,它扮演着一个客户端代理的角色。用户通过iptables将安全设定传达至内核空间的netfilter组件,后者才是真正负责安全防护的“防火墙”。iptables工具位于用户空间,简化了对信息包过滤表的规则插入、修改和删除操作。而netfilter组件,作为内核的一部分,包含了一系列信息包过滤表和规则集,用于控制信息包的过滤处理。要安装iptables,只需在终端中输入相应命令即可,同时,通过systemctl restart iptables和service iptables save可以轻松重启和保存iptables的设置。
- 点赞
- 收藏
- 关注作者
评论(0)