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

相关推荐
山上三树2 小时前
main()函数带参数的用法
linux·c语言
凌波粒2 小时前
Linux-Ubuntu系统环境搭建
linux·运维·ubuntu
鸠摩智首席音效师2 小时前
如何在 Linux 中使用 uptime 命令 ?
linux·运维·服务器
HalvmånEver2 小时前
Linux:匿名管道(进程间通信二)
linux·运维·服务器
lengjingzju3 小时前
一网打尽Linux IPC(一):进程间通信完全指南——总体介绍
linux·服务器·c语言
阿豪学编程3 小时前
【Linux】进程信号深度解析
linux·运维·服务器
_Orch1d3 小时前
详解SSL/TLS协议握手协议、记录层协议与警报协议
网络·计算机网络·安全·密码学·ssl·身份认证·对称加密
10000hours3 小时前
【Vim】vim常用命令:查找&编辑&可视区块
linux·编辑器·vim
chenyuhao20244 小时前
Linux网络编程:HTTP协议
linux·服务器·网络·c++·后端·http·https