iptables基础知识及使用规范

本文详细介绍Linux下iptables防火墙的基础知识、使用规范及方法。涵盖iptables与Netfilter的关系、数据包处理流程、规则表和链的概念,以及iptables命令与配置文件的具体使用方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、iptables基础知识

1.首先说一下linux防火墙体系: 

Linux防火墙体系主要工作在网络层,针对TCP/IP数据包实施过滤和限制,属于典型的包过滤防火墙(也称网络层防火墙);

Linux防火墙体系基于内核编码实现,具有非常稳定的性能和高效率,因此被广泛的应用。

2.关于Netfilter和iptables

  • Netfilter:指的是Linux内核中实现包过滤防火墙的内部结构,不以程序或文件的形式存在,属于“内核态”(KernelSpace,又称内核空间)的防火墙功能体系,真正实现防火墙功能;

  • Iptables:指的是用来管理Linux防火墙的命令程序,通常位于/sbin/iptables,属于“用户态”(UserSpace,又称用户空间)的防火墙管理体系;

  • iptable与netfilter之间的关系:iptables为包过滤机制的实现提供规则(或策略),通过各种不同的规则,告诉netfilter对来自某些源、前往某些目的或具有某些协议特征的数据包应该如何处理。

简言之,作为用户,我们只能通过设置iptables来管理防火墙。

3. 数据包经过iptables的基本流程(基于网络层)

主要是网络层,针对IP数据包;体现在对包内的IP地址、端口等信息的处理上,如下图:

二、iptables使用规范及方法

1.规则概念
  规则(rules)其实就是网络管理员预定义的条件,规则一般的定义为“如果数据包头符合这样的条件,就这样处理这个数据包”。规则存储在内核空间的信息 包过滤表中,这些规则分别指定了源地址、目的地址、传输协议(如TCP、UDP、ICMP)和服务类型(如HTTP、FTP和SMTP)等。
  当数据包与规则匹配时,iptables就根据规则所定义的方法来处理这些数据包,如放行(accept),拒绝(reject)和丢弃(drop)等。配置防火墙的主要工作是添加,修改和删除等规则。
其中:

  • 匹配(match):符合指定的条件,比如指定的 IP 地址和端口。
  • 丢弃(drop):当一个包到达时,简单地丢弃,不做其它任何处理。
  • 接受(accept):和丢弃相反,接受这个包,让这个包通过。
  • 拒绝(reject):和丢弃相似,但它还会向发送这个包的源主机发送错误消息。这个错误消息可以指定,也可以自动产生。
  • 目标(target):指定的动作,说明如何处理一个包,比如:丢弃,接受,或拒绝。
  • 跳转(jump):和目标类似,不过它指定的不是一个具体的动作,而是另一个链,表示要跳转到那个链上。
  • 规则(rule):一个或多个匹配及其对应的目标。 

2.iptables的规则表和链

iptables采用“表”和“链”的分层结构,在Linux中现在是四张表五个链。

表(tables):容纳各种规则链,iptables内置了4个表:

表名作用
filter包过滤
nat网络地址转换
mangle包重构(修改)
raw数据跟踪处理


链(chains):容纳各种防火墙规则。iptables包括5种规则链:

链名作用
INPUT处理入站数据包
OUTPUT处理出站数据包
FORWARD处理转发数据包
POSTROUTING在进行路由选择后处理数据包(对数据链进行源地址修改转换)
PREROUTING在进行路由选择前处理数据包(做目标地址转换)

INPUT、OUTPUT链主要用在“主机型防火墙”中,即主要针对服务器本机进行保护的防火墙;而FORWARD、PREROUTING、POSTROUTING链多用在“网络型防火墙”中。

链是数据包传播的路径,每一条链其实就是众多规则中的一个检查清单,每一条链中可以有一条或数条规则。当一个数据包到达一个链时,iptables就会从链中第一条规则开始检查,看该数据包是否满足规则所定义的条件。如果满足,系统就会根据 该条规则所定义的方法处理该数据包;否则iptables将继续检查下一条规则,如果该数据包不符合链中任一条规则,iptables就会根据该链预先定 义的默认策略来处理数据包。

看下图理解一下表和链是什么关系:

表之间的顺序:raw——>mangle——>nat——>filter

链之间的顺序:

  • 入站:prerouting——>input

  • 出站:output——>postrouting

  • 转发:prerouting——>forward——>postrouting

 一个网络请求在iptables的处理流程图如下:

 

3.关于iptables具体使用方法

  iptables一般有2种配置方式,下面分别介绍: 

1)使用执行iptables命令的方法设置防火墙,步骤如下:

(1)执行iptables命令

(2)保存iptables规则

#生成保存规则的文件/etc/sysconfig/iptables
iptables-save > /etc/sysconfig/iptables

也可以用:

#把规则自动保存在/etc/sysconfig/iptables中
service iptables save


当计算机启动时,rc.d下的脚本将用命令iptables-restore调用这个配置文件,从而就自动恢复了规则。

(3)重启iptables服务

service iptables restart

有的文章中说建议始终都修改配置文件,因为使用自动保存功能会把配置顺序打乱。 博主没有验证是否存在这个问题。但从使用感受上来说,直接修改配置文件更加直观,不容易错,因此习惯于采用修改配置文件的方法来设置防火墙。

iptables命令语法:

语法构成: iptables [ -t 表名] 选项 [链名] [条件] [ -j 控制类型]

注意事项:

  • 不指定表名时,默认指filter表

  • 不指定链名时,默认指表内的所有链

  • 除非设置链的默认策略,否则必须指定匹配条件

  • 选项、链名、控制类型使用大写字母,其余均为小写

数据包的常见控制类型:

  • ACCEPT:允许通过

  • DROP:直接丢弃,不给出任何回应

  • REJECT:拒绝通过,必要时会给出提示

  • LOG:在/var/log/messages文件中记录日志信息,然后传给下一条规则继续匹配(匹配即停止对LOG操作不起作用,因为LOG只是一种辅助动作,并没有真正的处理数据包)

常用选项释义:

条件选项释义:

日常运维中最常用的是白名单规则、黑名单规则和NAT转发规则: 

 示例部分

(1)黑名单规则例子

iptables -t filter -I INPUT -p icmp -j REJECT 

 说明:在filter表(-t filter)的INPUT链开头插入(-I)一条拒绝(-jREJECT)发给本机的使用ICMP协议的数据包(-p icmp)。因ping是使用icmp协议,因此这时若对这台机器执行ping操作,则会出现如下效果:

-A INPUT -s 103.45.101.247 -j DROP

 说明:拒绝103.45.101.247服务器访问本机  

iptables -I INPUT -p icmp --icmp-type echo-request -j DROP
iptables -I INPUT -p icmp --icmp-type echo-reply -j ACCEPT
iptables -I INPUT -p icmp --icmp-type destination-Unreachable -j ACCEPT

##或者执行禁ping命令:echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all

 说明:允许本机 ping 别的主机;但不开放别的主机 ping 本机

(2)白名单规则例子

iptables -A INPUT -s 192.168.1.0/24 -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT

 说明:开通本机的22端口,允许192.168.1.0网段的服务器访问(-t filter表配置可以省略,默认就是这种表的配置)

iptables -A INPUT -p tcp --dport 80 -j ACCEPT

 说明:开放80端口给tcp请求,未限制源IP

iptables -A INPUT -s 202.13.0.0/16 -p tcp -m tcp -m state --state NEW --dport 22  -j ACCEPT

 说明: 只允许管理员从202.13.0.0/16网段使用SSH远程登录防火墙主机

iptables -A INPUT -p tcp --dport 80 -m limit --limit 25/minute --limit-burst 100 -j ACCEPT

 说明:

-m limit: 启用limit扩展,限制速度。
--limit 25/minute: 允许最多每分钟25个连接
--limit-burst 100: 当达到100个连接后,才启用上述25/minute限制

(3)NAT转发规则例子

iptables -t nat -A PREROUTING -p tcp --dport 729 -j REDIRECT --to-ports 80

 说明:将729端口的请求转发到80端口
 

2)使用修改配置文件的方法设置防火墙: 

配置文件路径:/etc/sysconfig/iptables 

修改配置文件步骤如下:

(1)第一次配置时默认是没有这个文件的,可以随便执行一条iptables命令并保存,会自动生成该文件。

iptables -A INPUT -s 123.456.789.0 -j DROP
service iptables save

(2)正式修改该配置文件添加规则

vim /etc/sysconfig/iptables

 (3)重启iptables服务

service iptables restart

注意事项:

  • 基本语法其实跟执行iptables命令相似,只是文件中去掉了"iptables"字符串
  • 不同的表规则需要添加到相应的区域,比如下图中*filter后的均为对于filter表的规则

 下面看一个具体的配置文件例子:

#头两行是注释说明
# Firewall configuration written by system-config-securitylevel
# Manual customization of this file is not recommended.
#使用filter表
*filter
#下面四条内容定义了内建的INPUT、FORWARD、ACCEPT链,还创建了一个被称为RH-Firewall-1-INPUT 的新链
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
:RH-Firewall-1-INPUT - [0:0]
#将所有流入的数据写入到日志文件中
-A INPUT -j LOG --log-level crit
#下面这条规则将添加到INPUT链上,所有发往INPUT链上的数据包将跳转到RH-Firewall-1 //链上。
-A INPUT -j RH-Firewall-1-INPUT
#下面这条规则将添加到FORWARD链上,所有发往INPUT链上的数据包将跳转到RH-Firewall-1 //链上。
-A FORWARD -j RH-Firewall-1-INPUT
#下面这条规则将被添加到RH-Firewall-1-input链。它可以匹配所有的数据包,其中流入接口(-i)//是一个环路接口(lo)。
#匹配这条规则的数据包将全部通过(ACCEPT),不会再使用别的规则来和它们进行比较
-A RH-Firewall-1-INPUT -i lo -j ACCEPT
#下面这条规则是拒绝所以的icmp包-p 后是协议如:icmp、tcp、udp。端口是在-p后面--sport源端口,--dport目的端口。-j 指定数据包发送的
#目的地址如:ACCEPT、DROP、QUEUE等等
-A RH-Firewall-1-INPUT -p icmp --icmp-type any -j DROP
-A RH-Firewall-1-INPUT -p 5 0 -j ACCEPT
-A RH-Firewall-1-INPUT -p 51 -j ACCEPT
-A RH-Firewall-1-INPUT -p udp --dport 5353 -d 224.0.0.251 -j ACCEPT
-A RH-Firewall-1-INPUT -p udp -m udp --dport 631 -j ACCEPT
-A RH-Firewall-1-INPUT -p tcp -m tcp --dport 631 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
#-m state --state ESTABLISHED,RELATED这个条件表示所有处于ESTABLISHED或者
RELATED状态的包,策略都是接受的。
# -m state --state NEW 这个条件是当connection的状态为初始连接(NEW)时候的策略。
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 21 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 2049 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m udp -p udp --dport 137 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m udp -p udp --dport 138 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 139 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 445 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 23 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j DROP -s 222.221.7.84
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 443 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 25 -j ACCEPT
-A RH-Firewall-1-INPUT -j REJECT --reject-with icmp-host-prohibited
COMMIT

三、参考文档 

参考文档如下,感谢大佬的无私分享!

点击前往——》iptables规则用法小结    (用法及例子介绍的很详细)

点击前往——》iptables—包过滤(网络层)防火墙  (侧重底层原理)

点击前往——》Linux防火墙iptables基本配置  (快速上手)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值