Linux系统中iptables防火墙

目录

前言

一、iptables与netfilter的关系

二、iptables的表、链结构

(一)规则表

(二)规则链

三、数据包过滤的匹配流程

四、编写防火墙规则

(一)iptables的安装

(二)基本语法与数据包控制类型

(三)基本操作

(四)匹配条件

五、总结


前言

在网络安全愈发重要的今天,Linux系统凭借其稳定性和强大的功能,在服务器领域广泛应用。iptables作为Linux系统中一款关键的防火墙工具,能有效保护服务器免受恶意攻击。

一、iptables与netfilter的关系

在许多安全技术资料中,netfilter和iptables常被提及,却也容易让人混淆。netfilter是Linux内核中实现包过滤防火墙的内部结构,它运行在内核空间,并不以程序或文件的形式存在,属于"内核态"的防火墙功能体系。而iptables则是用来管理Linux防火墙的命令程序,通常位于/sbin/iptables目录下,属于"用户态"的防火墙管理体系 。简单来说,netfilter负责实际的数据包过滤工作,iptables则是用户用来配置和管理netfilter的工具,正确认识它们之间的关系,对理解Linux防火墙的工作方式至关重要。

二、iptables的表、链结构

(一)规则表

iptables通过四个不同的规则表来管理防火墙规则,每个表都有其特定的功能,且由独立的内核模块实现。

  1. filter表:主要用于数据包的过滤,根据设定的规则决定如何处理数据包。其对应的内核模块为iptable_filter,包含INPUT、FORWARD、OUTPUT三个链。例如,当我们想禁止特定IP访问服务器时,就可以在filter表的INPUT链中添加规则。
  2. nat表:即网络地址转换表,主要用于修改数据包的IP地址、端口号等信息,实现网络地址转换功能。对应的内核模块是iptable_nat,包含PREROUTING、POSTROUTING、OUTPUT三个链。在搭建网络地址转换网关时,就会用到nat表的相关功能。
  3. mangle表:用于修改数据包的TOS(服务类型)、TTL(生存周期),或者为数据包设置Mark标记,以实现流量整形、策略路由等高级应用。其内核模块为iptable_mangle,包含PREROUTING、POSTROUTING、INPUT、OUTPUT、FORWARD五个链。不过,mangle表在日常应用中相对较少。
  4. raw表:这是iptables 1.2.9以后版本新增的表,主要用于决定是否对数据包进行状态跟踪。对应的内核模块是iptable_raw,包含OUTPUT、PREROUTING两个链,应用场景也相对有限。在本博客中,我们主要关注filter表和nat表的应用。

(二)规则链

iptables默认划分了五种不同的规则链,根据防火墙规则介入数据包处理的时机不同而区分。

  1. INPUT链:当收到访问防火墙本机地址的数据包(入站)时,会应用此链中的规则。比如,我们可以在INPUT链中设置规则,禁止某些恶意IP访问服务器。
  2. OUTPUT链:当防火墙本机向外发送数据包(出站)时,此链中的规则会被应用。例如,限制服务器对外访问特定的网站。
  3. FORWARD链:当接收到需要通过防火墙中转发送给其他地址的数据包(转发)时,会用到该链中的规则。在作为网络网关时,FORWARD链的规则设置就显得尤为重要。
  4. PREROUTING链:在对数据包做路由选择之前,应用此链中的规则。比如,可以在这个链中对数据包的目的地址进行修改。
  5. POSTROUTING链:在对数据包做路由选择之后,应用此链中的规则。常用于修改数据包的源地址。其中,INPUT、OUTPUT链主要用于"主机型防火墙",保护服务器本机;FORWARD、PREROUTING、POSTROUTING链则多用于"网络型防火墙",如网关服务器。

三、数据包过滤的匹配流程

数据包在iptables防火墙中的过滤匹配流程是一个涉及规则表、规则链以及各链内规则的有序处理过程,具体如下:

  1. 确定规则表处理顺序:iptables有filter、nat、mangle和raw四个默认规则表。当数据包到达防火墙时,并非所有表都会被处理,而是按照一定顺序筛选。通常,raw表优先处理,因为它主要用于决定是否对数据包进行状态跟踪,若在raw表中标记了不进行状态跟踪,后续相关操作会受影响。接着处理mangle表,它可修改数据包的TOS、TTL等字段。然后是nat表,用于网络地址转换。最后处理filter表,进行数据包的过滤操作。不过,实际处理中并非每个数据包都需经过所有表,例如某些只在本地处理、不涉及网络地址转换的数据包,可能不会经过nat表。
  2. 依据数据包流向选择规则链:在选定的规则表内,根据数据包的流向和处理阶段确定使用的规则链。
  • 入站数据包:访问防火墙本机地址的入站数据包,会进入INPUT链。比如外部主机尝试访问本地Web服务器,其数据包进入INPUT链接受规则检查。
  • 出站数据包:防火墙本机向外发送的数据包,进入OUTPUT链。像本地用户通过浏览器访问外部网站时,数据包从OUTPUT链流出。
  • 转发数据包:需要通过防火墙中转发送给其他地址的数据包,进入FORWARD链。当企业内部网络通过防火墙访问外部网络时,转发的数据包会经过FORWARD链。
  • 路由前处理:在对数据包做路由选择之前,会先进入PREROUTING链。此链可用于修改数据包的目的地址,例如实现目的地址转换。
  • 路由后处理:数据包完成路由选择之后,进入POSTROUTING链。常用于修改数据包的源地址,比如在NAT场景中改变数据包的源IP地址。
  1. 规则链内部规则匹配:数据包进入相应规则链后,链内规则按顺序依次匹配。遵循"匹配即停止"原则(LOG日志操作规则除外) 。比如在INPUT链中有多条规则,第一条规则检查数据包源IP地址,第二条检查目的端口。若某数据包源IP地址符合第一条规则的拒绝条件,立即按该规则处理,不再检查后续规则。若整个链中都未找到匹配规则,则按该链的默认策略处理,默认策略一般为ACCEPT或DROP。若INPUT链默认策略是DROP,数据包找不到匹配规则时就会被丢弃。
  2. 特殊情况处理:在匹配过程中,LOG规则比较特殊。它用于在/var/log/messages文件中记录日志信息,记录后数据包继续传递给下一条规则进行匹配,不会因LOG规则匹配而停止。比如在排查网络问题时,使用LOG规则记录特定数据包信息,以便分析网络流量情况。
  3. 流程图示:

四、编写防火墙规则

在使用iptables防火墙之前,需要先关闭firewalld防火墙,避免产生冲突。可以使用以下命令关闭并禁用firewalld:

复制代码
[root@localhost ~]# systemctl stop firewalld.service
[root@localhost ~]# systemctl disable firewalld.service

(一)iptables的安装

如果系统中未安装iptables,可以使用以下命令进行安装(以Open Euler 24.03操作系统为例):

复制代码
[root@localhost ~]# yum -y install iptables iptables-services

安装完成后,启动iptables防火墙并设置开机启动:

复制代码
[root@localhost ~]# systemctl start iptables.service
[root@localhost ~]# systemctl enable iptables.service

(二)基本语法与数据包控制类型

iptables命令的基本语法格式为:

复制代码
iptables [-t表名]管理选项[链名][匹配条件][-j控制类型]

其中,表名和链名指定操作的对象,未指定表名时默认使用filter表;管理选项用于指定操作方式,如插入、增加、删除、查看等;匹配条件用来筛选数据包;控制类型决定数据包的处理方式,常见的有:

  • ACCEPT:允许数据包通过。
  • DROP:直接丢弃数据包,不给出任何回应信息。
  • REJECT:拒绝数据包通过,必要时会给数据发送端一个响应信息。
  • LOG:在/var/log/messages文件中记录日志信息,然后将数据包传递给下一条规则。

例如,要在filter表的INPUT链中插入一条规则,拒绝发给本机的使用ICMP协议的数据包,可以执行以下命令:

复制代码
[root@localhost ~]# iptables -t filter -I INPUT -p icmp -j REJECT

执行此操作后,其他主机将无法ping通本机。

(三)基本操作

  1. 添加规则:使用"-A"追加规则,"-I"插入规则。例如,在filter表INPUT链末尾添加允许TCP协议数据包通过的规则:

    [root@localhost ~]# iptables -t filter -A INPUT -p tcp -j ACCEPT

使用"-I"时可指定顺序号,未指定则默认作为第一条。如添加两条规则:

复制代码
[root@localhost ~]# iptables -I INPUT -p udp -j ACCEPT
[root@localhost ~]# iptables -I INPUT 2 -p icmp -j ACCEPT
  1. 查看规则:使用"-L"查看规则列表,结合"--line-numbers"可显示规则序号。查看filter表INPUT链所有规则及序号:

    [root@localhost ~]# iptables -L INPUT --line-numbers

以数字形式显示地址和端口信息可加快命令执行速度:

复制代码
[root@localhost ~]# iptables -n -L INPUT
  1. 删除、清空规则:使用"-D"删除一条规则,例如删除filter表INPUT链中的第三条规则:

    [root@localhost ~]# iptables -D INPUT 3

使用"-F"清空所有规则:

复制代码
[root@localhost ~]# iptables -F

(四)匹配条件

  1. 基本匹配:可以根据源地址、目标地址、协议等进行匹配。例如,拒绝转发源地址为192.168.1.11的数据包:

    [root@localhost ~]# iptables -A FORWARD -s 192.168.1.11 -j REJECT

  2. 隐含匹配

  • 端口匹配:针对TCP或UDP协议,使用"--sport源端口"或"--dport目标端口"。允许为网段192.168.4.0/24转发DNS查询数据包:

    [root@localhost ~]# iptables -A FORWARD -s 192.168.4.0/24 -p udp --dport 53 -j ACCEPT
    [root@localhost ~]# iptables -A FORWARD -d 192.168.4.0/24 -p udp --sport 53 -j ACCEPT

  • ICMP类型匹配:针对ICMP协议,使用"--icmp-type ICMP类型"。禁止其他主机ping本机,但允许本机ping其他主机:

    [root@localhost ~]# iptables -A INPUT -p icmp --icmp-type 8 -j DROP
    [root@localhost ~]# iptables -A INPUT -p icmp --icmp-type 0 -j ACCEPT
    [root@localhost ~]# iptables -A INPUT -p icmp --icmp-type 3 -j ACCEPT
    [root@localhost ~]# iptables -A INPUT -p icmp -j DROP

  1. 显式匹配
  • 多端口匹配:使用"-m multiport --dports端口列表"或"-m multiport --sports端口列表"。允许本机开放25、80、110、143端口提供电子邮件服务:

    [root@localhost ~]# iptables -A INPUT -p tcp -m multiport --dport 25,80,110,143 -j ACCEPT

  • IP范围匹配:使用"-m iprange --src-range IP范围"或"-m iprange --dst-range IP范围"。禁止转发源IP地址在192.168.4.21 - 192.168.4.28之间的TCP数据包:

    [root@localhost ~]# iptables -A FORWARD -p tcp -m iprange --src-range192.168.4.21-192.168.4.28 -j DROP

  • MAC地址匹配:使用"-m mac --mac-source MAC地址"。根据MAC地址封锁主机访问本机:

    [root@localhost ~]# iptables -A INPUT -m mac --mac-source 00:0c:29:c0:55:3f -j DROP

  • 状态匹配:使用"-m state --state连接状态"。禁止转发与正常TCP连接无关的非--syn请求数据包:

    [root@localhost ~]# iptables -A FORWARD -m state --state NEW -p tcp! --syn -j DROP

五、总结

通过对iptables防火墙的深入学习,我们了解了它与netfilter的关系,掌握了iptables的表、链结构和数据包过滤匹配流程,还学会了如何编写和管理防火墙规则。在实际应用中,我们可以根据不同的网络环境和安全需求,灵活配置iptables规则,为Linux系统构建一道坚固的网络安全防线。

相关推荐
漫谈网络8 天前
DDoS防御与流量优化
linux·网络·iptables·ddos·netfilter·syn攻击·流量审计
QT.qtqtqtqtqt11 天前
网络安全防护技术
安全·网络安全·防火墙·vpn·入侵检测·网闸
半路_出家ren19 天前
网络安全设备介绍:防火墙、堡垒机、入侵检测、入侵防御
安全·网络安全·负载均衡·堡垒机·防火墙·网络安全设备·上网行为管理
漫谈网络25 天前
网络命名空间之iptables规则解析
linux·网络·iptables·网络命名空间·netns
竹之却1 个月前
CentOS 7 防火墙配置相关指令 + 防火墙开放端口
linux·centos·防火墙·centos 7 防火墙配置
行思理1 个月前
svn 通过127.0.01能访问 但通过公网IP不能访问,这是什么原因?
linux·svn·防火墙
忘忧人生2 个月前
项目设置内网 IP 访问实现方案
nginx·部署·防火墙·内网访问
Ops菜鸟(Xu JieHao)2 个月前
Linux firewalld开启日志审计功能(2)
linux·运维·shell·脚本·日志·防火墙·firewalld
Ops菜鸟(Xu JieHao)2 个月前
Linux 安全防护firewalld防火墙管理(1)
linux·服务器·安全·centos·防火墙·firewalld·系统运维