iptables防火墙

将防火墙的管理工具切换为iptables:

systemctl disable firewalld.service --now

yum -y install iptables iptables-services.x86_64

systemctl enable iptables.service --now

plain 复制代码
基本语法
iptables [-t 表名] 管理选项  [链名] [匹配条件] [-j 控制类型]
plain 复制代码
-t 表名		【-t 的意思是table(表)】
raw			关跟踪
mangle	改报文
nat			做转换
filter	滤数据
plain 复制代码
管理选项
-A	在指定链的末尾添加(--append)一条新规则
-D	删除(--delete)指定链中的,某一条新规则,可指定规则序号或具体内容
-R	修改、替换(--replace)指定链中的某一条规则,可指定规则序号或具体内容
-I	在指定链中插入(--insert)一条新的规则,未指定序号时默认作为第一条规则
-L	列出(--list)指定链中的所有规则,未指定链名时,列出表中所有链
-F	清空(--flush)指定链中的所有规则,未指定链名时,清空表中所有链
-P	设置指定链的默认策略(--policy)
-n	使用数字形式(--numeric)显示输出结果,例如:只会显示主机ip不会显示主机名
-v	查看规则列表时显示详情(--verbose)信息
-h	查看命令帮助(--help)信息
--line-number	查看规则列表时,同时显示规则在链中的顺序号
plain 复制代码
链名
PREROUTING  路由前
INPUT				进本机	
FORWARD			要转发
OUTPUT			出本机
POSTROUTING	路由后
plain 复制代码
匹配条件
-s  			源ip/网段			匹配源ip/网段
-d				目的ip/网段		匹配目的ip/网段
-p				协议					匹配协议(tcp/udp/icmp/ip)
--dport		端口					匹配目的端口(需先指定-p)
--sport		端口					匹配源端口(需先指定-p)
-i				网卡名				匹配入站网卡(仅PROROUTING/INPUT/FORWARD)
-o				网卡名				匹配出站网卡(仅FORWARD/OUTPUT/POSTROUTING)
-m(math) 	Mac地址				基于mac地址匹配数据包			
plain 复制代码
-j 控制类型		【-j的意思是jump"跳转动作/控制行为"】(匹配成功后"该怎么办")
ACCEPT		允许数据包通过(放行)
DROP			丢弃数据包(无任何提示,"静默拒绝")
REJECT		拒绝数据包,同时返回错误提示(如icmp端口不可达)
SNAT			源地址转换(内网到公网)
DNAT			目的地址转换(公网到内网)
MASQUERADE	动态SNAT(适配公网IP动态变化,如拨号上网)
LOG				记录数据包日志(/var/log/messages)
RETURN			终止当前链的规则匹配,返回上一级链

操作

plain 复制代码
禁ping
iptables -t filter -I INPUT -p icmp -j REJECT 
plain 复制代码
添加新规则
  向 filter 表的 INPUT 链末尾追加一条规则,允许所有 TCP 协议的入站数据包通过本机
iptables -t filter -A INPUT -p tcp -j ACCEPT
  将 "允许所有 UDP 协议入站数据包" 的规则,插入到filter表INPUT链的最顶端
iptables -I INPUT -p udp -j ACCEPT
  将 "允许所有 ICMP 协议入站数据包" 的规则,精准插入到filter表INPUT链的
第 2 个位置 
iptables -I INPUT 2 -p icmp -j ACCEPT
plain 复制代码
查看规则列表
  列出(List)filter表(默认)中INPUT链的所有规则,
并为每条规则标注序号(line-numbers)
iptables -L INPUT --line-numbers
  以数字格式(numeric)列出filter表中INPUT链的所有规则,
避免 IP / 端口的域名解析
iptables -nL INPUT 
plain 复制代码
删除、清空规则
  删除 filter 表(默认)中 INPUT 链里序号为 3 的规则
iptables -D INPUT 3
  验证删除结果------ 以「数字格式」列出 filter 表中 INPUT 链的所有剩余规则,
确认序号 3 的规则已被移除
iptables -nL INPUT
  清空 filter 表(默认)中 INPUT 链的所有规则(仅清空 INPUT 链)
iptables -F INPUT
  清空 filter 表中所有链(INPUT/FORWARD/OUTPUT)的所有规则
iptables -F
  清空 nat 表中所有链(PREROUTING/POSTROUTING/OUTPUT)的所有规则
iptables -t nat -F
  清空 mangle 表中所有链(5 条链:PREROUTING/INPUT/FORWARD/OUTPUT/POSTROUTING)的
所有规则
iptables -t mangle -F
plain 复制代码
设置默认策略
    为filter表的FORWARD链设置策略为DROP
(所有未匹配到自定义规则的转发数据包都默认丢弃)
iptables -t filter -P FORWARD DROP
    为filter表(默认)的OUTPUT链设置默认策略为ACCEPT(允许),
(本机主动向外发送的所有出站数据包,默认全部放行)
iptables -P OUTPUT ACCEPT

规则的匹配策略

1.通用匹配

通用匹配也称为常规匹配,这种匹配方式可以独立使用,不依赖于其他条件或扩展模块。

常见的通用匹配包括协议匹配、地址匹配、网络接口匹配。

(1).协议匹配
plain 复制代码
将"丢弃所有ICMP协议入站数据包"的规则插入到filter表(默认)INPUT链的
最顶端(序号1),直接禁止所有外部设备对本机的ICMP请求(包括ping,ICMP错误提示)
iptables -I INPUT -p icmp -j DROP 
向filter表FORWARD链末尾追加一条规则,允许所有"非ICMP协议"的转发数据包通过
(仅拒绝ICMP协议的转发流量)
iptables -A FORWARD ! -p icmp -j ACCEPT
(2).地址匹配
plain 复制代码
    向filter表(默认)的FORWARD链末尾追加一条规则:匹配源 IP 为 192.168.147.129 的转发数据包,
执行REJECT动作(拒绝并返回 ICMP 错误提示,区别于 DROP 的静默丢弃)。
iptables -A FORWARD -s 192.168.147.129 -j REJECT 
    向filter表(默认)的FORWARD链末尾追加一条规则:匹配源 IP 属于
192.168.147.0/24 网段 的转发数据包,执行ACCEPT动作(允许放行)。
iptables -A FORWARD -s 192.168.147.0/24 -j ACCEPT
    将规则插入到filter表(默认)的INPUT链首位(序号 1):匹配源 IP 为
192.168.147.129 的入站数据包,执行DROP动作(静默丢弃,无任何反馈)。
iptables -I INPUT -s 192.168.147.129 -j DROP 
    重复向INPUT链首位插入完全相同的规则(插入后原首位规则变为序号 2),最终INPUT链会出现两条内容一致的
"丢弃 192.168.147.129 入站流量" 的规则,效果与单条规则无差异,仅增加冗余。
iptables -I INPUT -s 192.168.147.129 -j DROP 
(3).网络接口匹配

向filter表INPUT链末尾追加规则:匹配从 ens33 网卡进入(-i ens33) 且源 IP 属于10.0.0.0/8 网段(包含10.0.0.1~10.255.255.254) 的入站数据包,执行DROP(静默丢弃,无任何反馈)。

iptables -A INPUT -i ens33 -s 10.0.0.0/8 -j DROP

向filter表INPUT链末尾追加规则:匹配从 ens33 网卡进入 且源 IP 属于 172.16.0.0/16 网段(包含 172.16.0.1~172.16.255.254) 的入站数据包,执行DROP(静默丢弃)。

iptables -A INPUT -i ens33 -s 172.16.0.0/16 -j DROP

向filter表INPUT链末尾追加规则:匹配从 ens33 网卡进入 且源 IP 属于 192.168.0.0/16 网段(包含 192.168.0.1~192.168.255.254) 的入站数据包,执行DROP(静默丢弃)。

iptables -A INPUT -i ens33 -s 192.168.0.0/16 -j DROP

2.隐含匹配

这种匹配方式要求以指定的协议匹配作为前提条件,相当于子条件,因此无法独立使用,其对应的功能由 iptables 在需要时自动(隐含)载入内核。常见的隐含匹配包括端口匹配、TCP 标记匹配、ICMP 类型匹配。

(1).端口匹配

向 filter 表 FORWARD 链末尾追加规则,允许源 IP 为 192.168.147.0/24 网段、UDP 协议且目的端口为 53(DNS 服务端口)的转发数据包通过。

iptables -A FORWARD -s 192.168.147.0/24 -p udp --dport 53 -j ACCEPT

向 filter 表 FORWARD 链末尾追加规则,允许目的 IP 为 192.168.147.0/24 网段、UDP 协议且源端口为 53(DNS 服务器返回流量)的转发数据包通过。

iptables -A FORWARD -d 192.168.147.0/24 -p udp --sport 53 -j ACCEPT

向 filter 表 INPUT 链末尾追加规则,允许 TCP 协议、目的端口为 20 到 21(FTP 服务端口)的入站数据包通过。

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

向 filter 表 INPUT 链末尾追加规则,允许 TCP 协议、目的端口为 24500 到 24600(指定端口段)的入站数据包通过。

iptables -A INPUT -p tcp --dport 24500:24600 -j ACCEPT

(2).ICMP类型匹配

向 filter 表 INPUT 链末尾追加规则,拒绝所有 ICMP 协议中类型为 8(回声请求,即 ping 请求)的入站数据包,实现禁止外部设备 ping 本机的效果。

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

向 filter 表 INPUT 链末尾追加规则,允许所有 ICMP 协议中类型为 0(回声响应,即 ping 回复)的入站数据包。

iptables -A INPUT -p icmp --icmp-type 0 -j ACCEPT

向 filter 表 INPUT 链末尾追加规则,允许所有 ICMP 协议中类型为 3(目标不可达,如主机 / 端口不可达)的入站数据包,保障网络故障诊断时的错误提示能正常接收。

iptables -A INPUT -p icmp --icmp-type 3 -j ACCEPT

向 filter 表 INPUT 链末尾追加规则,丢弃所有未匹配到上述规则的 ICMP 协议入站数据包,仅保留 ping 回复和目标不可达两类 ICMP 流量,其余 ICMP 流量全部静默丢弃。

iptables -A INPUT -p icmp -j DROP

查看 iptables 中 icmp 协议相关匹配选项帮助信息,核心作用是获取 --icmp-type 等 ICMP 专属参数的用法、合法取值及说明,方便配置精准的 ICMP 规则(比如仅禁止 ping 请求、允许故障诊断类 ICMP 消息)。

iptables -p icmp -h

3.显示匹配

(1).多端口匹配

向filter表(默认)的INPUT链末尾追加规则,允许 TCP 协议下,目的端口为 25、80、110、143 这几个端口的入站数据包通过,是批量放行多端口 TCP 流量的高效配置方式。

iptables -A INPUT -p tcp -m multiport --dport 25,80,110,143 -j ACCEPT

(2).IP范围匹配

向filter表(默认)的FORWARD链末尾追加规则,静默丢弃源 IP 在 192.168.4.21 到 192.168.4.28 范围内的所有 TCP 协议转发数据包,禁止该 IP 段的主机通过本机转发 TCP 流量(比如访问外网、跨网段通信)。

iptables -A FORWARD -p tcp -m iprange --src-range 192.168.4.21-192.168.4.28 -j DROP

(3).MAC地址匹配

向filter表(默认)的FORWARD链末尾追加规则,静默丢弃源 MAC 地址为 00:0c:29:c0:55:3f 的所有 TCP 协议转发数据包,禁止该 MAC 地址对应的设备通过本机转发 TCP 流量(如访问外网、跨网段通信)。

iptables -A FORWARD -p tcp -m mac --mac-source 00:0c:29:c0:55:3f -j DROP

(4).状态匹配

向filter表FORWARD链末尾追加规则:针对 TCP 协议的 "新建连接(NEW)" 类转发数据包,若未携带 SYN 标志位(! --syn),则静默丢弃。核心作用是拦截伪造的 TCP 新建连接包(正常 TCP 新建连接必须先发 SYN 包),防范 TCP 协议欺骗攻击,仅允许合法的 TCP 新建连接请求通过转发。

iptables -A FORWARD -m state --state NEW -p tcp ! --syn -j DROP

将规则插入到filter表INPUT链首位:允许 TCP 协议、目的端口为 80(HTTP 服务)的入站数据包通过。multiport模块在此处虽仅匹配单个端口(80),但保留了批量匹配多端口的扩展性,规则优先级最高,确保 80 端口流量优先放行。

iptables -I INPUT -p tcp -m multiport --dport 80 -j ACCEPT

在filter表INPUT链插入规则(紧随 80 端口规则之后):允许 TCP 协议中 "已建立连接(ESTABLISHED)" 状态的入站数据包通过。核心作用是放行本机主动发起的 TCP 连接的回应流量(如本机访问外网后的回包),保障正常的 TCP 通信交互。

iptables -I INPUT -p tcp -m state --state ESTABLISHED -j ACCEPT

将filter表INPUT链的默认策略设置为DROP(静默丢弃)。此时 INPUT 链仅放行 80 端口的新建 TCP 连接、所有已建立 TCP 连接的入站流量,其余未匹配到规则的入站数据包全部被默认丢弃,大幅提升本机入站安全(仅开放必要流量)。

iptables -P INPUT DROP

相关推荐
大树881 小时前
金刚石散热越强,管路越先见顶
大数据·运维·服务器·人工智能·ai
摇滚侠1 小时前
Linux CentOS7 rpm 安装 MySQL 5.7
linux·运维·mysql
霸道流氓气质1 小时前
领域驱动设计(DDD)在 Spring Boot 微服务中的实践指南
运维·spring boot·微服务
bush42 小时前
嵌入式linux学习记录十四、术语
linux·嵌入式
载数而行5202 小时前
Linux 11 动态监控指令top
linux
小宇宙Zz2 小时前
Maven依赖冲突
java·服务器·maven
DaLi Yao2 小时前
【无标题】
人工智能·安全
Inhand陈工3 小时前
基于台达PLC与映翰通IG502的智慧水产养殖精准投喂与远程运维解决方案
运维·人工智能·物联网·阿里云·信息与通信
Alsn863 小时前
等待学习-学习目录:Docker 容器安全攻防
学习·安全·docker
网络研究院3 小时前
2026年网络安全
网络·安全·法律·法规·趋势·发展