0

0

Linux防火墙iptables解析_Linux手动设置流量规则讲解

舞姬之光

舞姬之光

发布时间:2025-12-21 14:19:33

|

587人浏览过

|

来源于php中文网

原创

iptables 是 Linux 中基于 netfilter 的底层包过滤工具,通过 INPUT、OUTPUT、FORWARD 链按序匹配规则,支持端口、IP、状态等条件,规则需手动保存才能持久化,顺序与状态处理是关键。

linux防火墙iptables解析_linux手动设置流量规则讲解

iptables 是 Linux 系统中最经典、最底层的包过滤防火墙工具,它直接与内核的 netfilter 框架交互,用于定义网络数据包的处理规则。虽然现在有 nftables 作为替代方案,但大量生产环境和脚本仍在使用 iptables,掌握其原理和常用操作非常实用。

iptables 的基本结构和工作逻辑

iptables 不是一个服务,而是一个用户态命令行工具,用来配置内核中的规则链(chains)。数据包在经过网络时,会按顺序经过若干预定义的链(如 INPUT、OUTPUT、FORWARD),每条链上可挂载多条规则(rules),规则按顺序逐条匹配,一旦匹配成功就执行对应动作(如 ACCEPT、DROP、REJECT),后续规则不再检查。

主要内置链:

  • INPUT:处理目标地址是本机的数据包(进来的流量)
  • OUTPUT:处理从本机发出的数据包(出去的流量)
  • FORWARD:处理经本机转发的数据包(非本机收发,仅中转)

每条规则由“匹配条件”+“目标动作”组成。常见匹配条件包括源/目的 IP、端口、协议(TCP/UDP/ICMP)、状态(NEW/ESTABLISHED/RELATED)等。

常用规则设置与实际示例

添加规则前建议先查看当前策略和规则:

  • iptables -L -n -v:列出所有规则(-n 禁用 DNS 反查,-v 显示详细统计)
  • iptables -S:以规则语法形式显示所有规则,适合备份或脚本参考

典型操作示例:

  • 允许本机访问 22 端口(SSH 入站):iptables -A INPUT -p tcp --dport 22 -j ACCEPT
  • 拒绝来自某 IP 的所有连接:iptables -A INPUT -s 192.168.1.100 -j DROP
  • 只允许已建立或相关的连接通过(配合前面的 ACCEPT 规则使用):iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
  • 默认拒绝所有 INPUT 流量(常放在最后):iptables -P INPUT DROP

注意:-A 表示追加到链尾,-I 表示插入到链首(如 -I INPUT 1);规则顺序很重要,靠前的规则优先匹配。

Pixelfox AI
Pixelfox AI

多功能AI图像编辑工具

下载

保存与持久化规则

iptables 规则默认只存在于内存中,系统重启后丢失。要让规则开机生效,需手动保存并配置自动加载:

  • Debian/Ubuntu 系统:iptables-save > /etc/iptables/rules.v4,再确保 iptables-persistent 包已安装并启用
  • RHEL/CentOS 7 及以前:service iptables save(规则存入 /etc/sysconfig/iptables)
  • RHEL/CentOS 8+ 默认使用 nftables,若仍用 iptables,可通过 iptables-save > /etc/sysconfig/iptables 并启用 iptables-services

不保存直接重启,所有自定义规则都会失效——这点极易被忽略。

调试与排错要点

规则不生效?常见原因包括:

  • 规则顺序错误(如 DROP 放在 ACCEPT 前面)
  • 协议或端口写错(比如用 -p udp 但匹配了 tcp 端口)
  • 未考虑连接状态(缺少 ESTABLISHED 规则导致响应包被拦)
  • FORWARD 链未配置(做网关或 Docker 主机时容易漏)
  • SELinux 或其他安全模块干扰(较少见,但需排查)

调试技巧:

  • tcpdumpwireshark 抓包确认数据是否到达本机
  • iptables -L -n -v 查看对应规则的匹配包计数是否增长
  • 临时清空规则测试:iptables -F(慎用!建议先保存)

基本上就这些。iptables 规则不复杂,但细节决定成败,关键是理解链、顺序、状态和持久化四个核心点。

相关专题

更多
堆和栈的区别
堆和栈的区别

堆和栈的区别:1、内存分配方式不同;2、大小不同;3、数据访问方式不同;4、数据的生命周期。本专题为大家提供堆和栈的区别的相关的文章、下载、课程内容,供大家免费下载体验。

390

2023.07.18

堆和栈区别
堆和栈区别

堆(Heap)和栈(Stack)是计算机中两种常见的内存分配机制。它们在内存管理的方式、分配方式以及使用场景上有很大的区别。本文将详细介绍堆和栈的特点、区别以及各自的使用场景。php中文网给大家带来了相关的教程以及文章欢迎大家前来学习阅读。

572

2023.08.10

点击input框没有光标怎么办
点击input框没有光标怎么办

点击input框没有光标的解决办法:1、确认输入框焦点;2、清除浏览器缓存;3、更新浏览器;4、使用JavaScript;5、检查硬件设备;6、检查输入框属性;7、调试JavaScript代码;8、检查页面其他元素;9、考虑浏览器兼容性。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

181

2023.11.24

k8s和docker区别
k8s和docker区别

k8s和docker区别有抽象层次不同、管理范围不同、功能不同、应用程序生命周期管理不同、缩放能力不同、高可用性等等区别。本专题为大家提供k8s和docker区别相关的各种文章、以及下载和课程。

249

2023.07.24

docker进入容器的方法有哪些
docker进入容器的方法有哪些

docker进入容器的方法:1. Docker exec;2. Docker attach;3. Docker run --interactive --tty;4. Docker ps -a;5. 使用 Docker Compose。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

494

2024.04.08

docker容器无法访问外部网络怎么办
docker容器无法访问外部网络怎么办

docker 容器无法访问外部网络的原因和解决方法:配置 nat 端口映射以将容器端口映射到主机端口。根据主机兼容性选择正确的网络驱动(如 host 或 overlay)。允许容器端口通过主机的防火墙。配置容器的正确 dns 服务器。选择正确的容器网络模式。排除主机网络问题,如防火墙或连接问题。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

399

2024.04.08

docker镜像有什么用
docker镜像有什么用

docker 镜像是预构建的软件组件,用途广泛,包括:应用程序部署:简化部署,提高移植性。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

436

2024.04.08

tcp和udp的区别
tcp和udp的区别

TCP和UDP的区别,在连接性、可靠性、速度和效率、数据报大小以及适用场景等方面。本专题为大家提供tcp和udp的区别的相关的文章、下载、课程内容,供大家免费下载体验。

119

2023.07.25

高德地图升级方法汇总
高德地图升级方法汇总

本专题整合了高德地图升级相关教程,阅读专题下面的文章了解更多详细内容。

40

2026.01.16

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
PostgreSQL 教程
PostgreSQL 教程

共48课时 | 7.3万人学习

Git 教程
Git 教程

共21课时 | 2.7万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号