Linux - iptables防火墙

目录

一、iptables概述

二、规则表与规则链结构(四表五链)

1.简述

2.四表(规则表)

3.五链(规则链)

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

四、iptables命令行配置方法

1.命令格式

2.基本匹配条件

3.隐含匹配

3.1.端口匹配

[3.2 TCP标志位匹配](#3.2 TCP标志位匹配)

[3.2 ICMP类型匹配](#3.2 ICMP类型匹配)

[3.3 显示匹配](#3.3 显示匹配)

[3.3.1 多端口匹配:](#3.3.1 多端口匹配:)

[3.3.2 IP范围匹配:](#3.3.2 IP范围匹配:)

[3.3.3 mac地址匹配](#3.3.3 mac地址匹配)

[3.3.4 状态匹配](#3.3.4 状态匹配)

五、SNAT与DNAT

1.SNAT

2.DNAT


一、iptables概述

iptables防火墙是Linux系统防火墙的一种,实际上由两个组件netfilter和iptables组成。

netfilters与iptables的关系:

netfilter:属于"内核态"的防火墙功能体系。是内核的一部分,由一些数据包过滤表组成,这些表包含内核用来控制数据包过滤处理的规则集。

iptables:属于"用户态"的防火墙管理体系。是一种用来管理Linux防火墙的命令程序,它使插入、修改和删除数据包过滤表中的规则变得容易,通常位于/sbin/iptables文件下。

netfilter/iptables后期简称为iptables。iptables是基于内核的防护墙,其中内置了raw、mangle、nat、filter四个规则表。表中所有规则配置后,立即生效,不需要重启服务。

二、规则表与规则链结构(四表五链)

1.简述

规则表(四表)的作用:容纳各种规则链。

规则链(五链)的作用:容纳各种防火墙规则。

总结:表中有链,链中有规则。

2.四表(规则表)

raw表:确定是否对该数据包进行状态跟踪。包含两个规则链 - OUTPUT、PREROUTING。

mangle表:修改数据包内容,用于流量整形,给数据包设置标记。包含五个规则链 - INPUT、OUTPUT、FORWARD、PREROUING、POSTROUTING。

nat表:负责网络地址转换,用来的修改数据包中的源、目标IP地址或端口。包含三个规则链 - OUTPUT、PREROUTING、POSTROUTING。

filter表:负责过滤数据包,确定是否放行该数据包(过滤)。包含三个规则链,INPUT、FORWARD、OUTPUT。

数据包到达防火墙时,数据表之间的优先顺序:
raw -> mangle -> nat -> filter

3.五链(规则链)

INPUT:处理入站数据包,匹配目标IP为本机的数据包。

OUTPUT:处理出战数据包,匹配从本机发出的数据包。

FORWARD:处理转发数据包,匹配流经本机的数据包。

PREROUTING:在进行路由选择前处理数据包,用来修改目的地址,用来做DNET。相当于把内网服务器的IP和端口映射到路由器的外网IP和端口上。

POSTROUTIING:在进行路由选择后处理数据包,用来修改源地址,用来做SNAT。相当于内网通过路由器NAT转换功能实现内网主机通过一个公网IP地址上网。

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

入站数据:PREROUTING -> INPUT -> 本机的应用程序

出站数据:本机的应用程序 -> OUTPUT -> POSTROUTING

转发数据:PREROUTING -> FORWARD -> POSTROUTING

四、iptables命令行配置方法

1.命令格式

iptables -t "表名" "管理选项" "链名" "匹配条件" -j "控制类型"

  • 不指定表名时,默认指filter表
  • 不指定链名时,默认值表内所有链
常用选项 解释
-A --apend 在指定表的末尾追加新规则
-I --insert 在指定链的开头插入一条新规则,不指定序号时默认在开头插入新规则
-R --replace 修改、替换指定链中某一条的规则,可指定序号或具体内容
-P --policy 设置指定链的默认策略
-D --delete 删除指定链中的某一条规则
-F --flush 清空指定链中的所有规则,若为指定链名,则清空表中所有链
-L --list 列出指定链中的所有规则,若为指定链名,则列出表中所有链
-n --numeric 使用数字形式输出结果,如显示IP地址而不是主机名
-v 显示详细信息,包括每条规则的匹配包数量和匹配字节数
--line-numbers 查看规则时,显示序号
[常用管理选项]
常用控制类型 解释
ACCEPT 允许数据包通过
DROP 直接丢弃数据包,不给出任何回应信息
REJECT 拒绝数据包通过,会给数据发送端一个响应信息
SNAT 修改数据包的源地址
DNAT 修改数据包的目的地址
REDIRECT 重定向改变目的端口,将接受的包转发至本机的不同端口
MASQUERADE 伪装成一个非固定公网IP地址
LOG 在/var/log/messages文件中记录日志信息,然后将数据包传递给下一条规则
[常用的控制类型]

2.基本匹配条件

基本匹配条件 解释
-p 指定协议
-s 指定源地址
-d 指定目的地址
-i 指定入站网卡
-o 指定出站网卡

3.隐含匹配

需以特定的协议匹配作为前提。

3.1.端口匹配

匹配条件 解释
--sport 源端口
--dport 目的端口

例:

iptables -A INPUT -p tcp --dport 20:21 -j ACCEPT

ps:--sport 和 --dport 必须配合-p "协议类型"使用

3.2 TCP标志位匹配

标志位 解释
SYN 同步位
ACK 确认位
FIN 结束位
RST 重置位
URG 紧急位
PSH 推送位

例:

iptables -I INPUT -p tcp --dport 22 --tcp-flags SYN,ACK,FIN,RST,URG,PSH SYN -j REJECT

拒绝来自22端口的SYN之外的tcp包(只接收SYN包)

3.2 ICMP类型匹配

类型 代码 解释
Echo-Reques 8 请求
Echo-Reply 0 回显
Destination-Unreachable 3 目标不可达

例:

iptables -A INPUT -p icmp --icmp-type 8 -j -DROP

#禁止其他主机ping本机

3.3 显示匹配

要求以"-m 扩展模块"的形式明确指出类型,包括多端口、MAC地址、IP范围、数据包状态等条件。

3.3.1 多端口匹配:

-m multiport --sport 源端口列表

-m multiport --dport 目的端口列表

例:

iptables -A INPUT -p tcp -m multiport --dport 80,22,21 -j ACCEPT

3.3.2 IP范围匹配:

-m iprange --src-range 源ip范围

-m iprange --dst-range 目的ip范围

例:

iptables -A FORWARD -p udp -m iprange --src-range 192.168.80.100-19.2169.80.200

3.3.3 mac地址匹配

-m mace --mace-source "mac地址"

3.3.4 状态匹配

-m state --state "连接状态"

常见的状态连接 解释
NEW 与任何连接无关的,还没开始连接
ESTABLISHED 响应请求或者已建立连接的,连接态
RELATED 与已有连接有相关性的,衍生态,一般与ESTABLISHED 配合使用
INVALID 无效的封包,例如数据破损的封包状态

例:

iptables -A INPUT -p tcp -m state --state ESTABLISHED,RELATED -j ACCEPT

五、SNAT与DNAT

均需网关开启IP路由转发:

临时打开 echo 1 > /proc/sys/net/ipv4/ip_forward 或 sysctl -w net.ipv4.ip_forward=1

永久打开:

复制代码
vim /etc/sysctl.conf

....
net.ipv4.ip_forward=1    #将此行写入配置文件


sysctl -p    #载入配置

1.SNAT

SNAT用于在网络中修改数据包的源地址。

SNAT转换前提条件:

  • 局域网各主机已正确设置IP地址、子网掩码、默认网关地址
  • Linux网关开启IP路由转发

iptables -t nat -A POSTROUTING -s 192.168.80.0/24 -o ens36 -j SNAT --to-source 12.0.0.1-12.0.0.10

2.DNAT

DNAT用于在网络中修改数据包的目的地址,通常是为了保护内网服务器的安全。

DNAT转换前提条件:

  • 局域网的服务器能够访问Internet
  • 网关的外网地址有正确的DNS解析记录
  • Linux网关开启IP路由转发

iptables -t nat -A PREROUTING -i ens33 -d 12.0.0.1 -p tcp --dport 80 -j DNAT --to-destination 192.168.80.11

相关推荐
面朝大海,春不暖,花不开9 分钟前
Java网络编程:TCP/UDP套接字通信详解
java·网络·tcp/ip
ChicagoTypewriter15 分钟前
计算机网络中的常用表项梳理
网络·计算机网络·智能路由器
IC 见路不走1 小时前
LeetCode 第91题:解码方法
linux·运维·服务器
翻滚吧键盘1 小时前
查看linux中steam游戏的兼容性
linux·运维·游戏
小能喵1 小时前
Kali Linux Wifi 伪造热点
linux·安全·kali·kali linux
汀沿河2 小时前
8.1 prefix Tunning与Prompt Tunning模型微调方法
linux·运维·服务器·人工智能
zly35002 小时前
centos7 ping127.0.0.1不通
linux·运维·服务器
小哥山水之间3 小时前
基于dropbear实现嵌入式系统ssh服务端与客户端完整交互
linux
power 雀儿3 小时前
集群聊天服务器---MySQL数据库的建立
服务器·数据库·mysql
ldj20203 小时前
2025 Centos 安装PostgreSQL
linux·postgresql·centos