0

0

Linux防火墙规则如何编写_深度讲解提升系统稳定性【教程】

舞姬之光

舞姬之光

发布时间:2025-12-23 22:19:17

|

291人浏览过

|

来源于php中文网

原创

Linux防火墙核心在于理解流量流向与最小权限原则,iptables按表→链→规则三级组织,filter表处理本机进出流量,规则顺序决定匹配结果,firewalld是其封装层,需注意Docker兼容性及持久化配置。

linux防火墙规则如何编写_深度讲解提升系统稳定性【教程】

Linux防火墙规则的核心是明确“允许什么、拒绝什么”,关键不在堆砌命令,而在理解流量流向、服务依赖和最小权限原则。用错一条规则可能让SSH断连、服务不可达,甚至掩盖真实攻击行为。

iptables规则编写:先理清链与表的分工

iptables不是“一条命令配完事”的工具。它按表(table)→链(chain)→规则(rule)三级组织:

  • filter表:处理进出本机的包,默认链有INPUT(进)、OUTPUT(出)、FORWARD(转发);日常防护90%工作在这里
  • nat表:仅在做端口映射、SNAT/DNAT时用,比如公网IP映射内网Web服务,普通服务器不建议随意动
  • 规则顺序决定成败:iptables自上而下匹配,一旦命中即执行动作(ACCEPT/DROP/REJECT),后续规则不再检查。所以“允许SSH”必须写在“默认DROP”之前

实用规则模板:从安全基线开始写

不要一上来就封IP或限速。先建立稳定可用的基础策略:

  • 保留本地回环通信:iptables -A INPUT -i lo -j ACCEPT
  • 放行已建立连接(保障响应包能回来):iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
  • 只开必要端口,如SSH(建议改非22端口):iptables -A INPUT -p tcp --dport 2222 -j ACCEPT
  • 最后拒绝所有其他入站:iptables -P INPUT DROP(注意:-P是设置默认策略,不是加规则!别和-A混用)

⚠️ 操作前务必加一条“临时放行”规则并设超时,防锁死:iptables -I INPUT 1 -p tcp --dport 2222 -j ACCEPT && sleep 300 && iptables -D INPUT 1

firewalld更适配现代发行版?别盲目切换

CentOS 7+/RHEL 8+ 默认用firewalld,它本质是iptables的封装层,不是替代品。优势在于动态重载、区域(zone)概念清晰、支持服务名(如http、ssh)而非硬记端口:

聚蜂消防BeesFPD
聚蜂消防BeesFPD

关注消防领域的智慧云平台

下载
  • 查当前活跃区域:firewall-cmd --get-active-zones
  • 永久开放HTTPS:firewall-cmd --permanent --add-service=https
  • 重载生效:firewall-cmd --reload(不中断现有连接)
  • 慎用--remove-all-services——可能一键关掉数据库、监控等依赖端口

若用Docker/Kubernetes,注意firewalld默认与docker0桥接冲突,需配置firewall-cmd --permanent --zone=docker --add-interface=docker0或关闭firewalld改用iptables直接管理。

验证与排错:别信“写了就生效”

规则写完必须验证,常见陷阱:

  • iptables -L -n -v看计数器:若某规则packets为0,说明流量根本没走到那里(可能是前面规则截获,或源IP/协议不匹配)
  • 模拟测试:从另一台机器用telnet 服务器IP 端口curl -v http://IP:端口,比看日志更快定位拦截点
  • 记录被拒连接(用于分析攻击):iptables -A INPUT -j LOG --log-prefix "IPTABLES-DROP: ",再配合dmesg/var/log/messages查看
  • 规则持久化别忘:iptables需iptables-save > /etc/sysconfig/iptables(CentOS)或netfilter-persistent save(Debian),firewalld默认自动保存

基本上就这些。规则不在多,在准;防护不在严,在稳。每次变更只动一处、验证一项,系统稳定性自然提升。

相关专题

更多
curl_exec
curl_exec

curl_exec函数是PHP cURL函数列表中的一种,它的功能是执行一个cURL会话。给大家总结了一下php curl_exec函数的一些用法实例,这个函数应该在初始化一个cURL会话并且全部的选项都被设置后被调用。他的返回值成功时返回TRUE, 或者在失败时返回FALSE。

425

2023.06.14

linux常见下载安装工具
linux常见下载安装工具

linux常见下载安装工具有APT、YUM、DNF、Snapcraft、Flatpak、AppImage、Wget、Curl等。想了解更多linux常见下载安装工具相关内容,可以阅读本专题下面的文章。

174

2023.10.30

堆和栈的区别
堆和栈的区别

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

388

2023.07.18

堆和栈区别
堆和栈区别

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

571

2023.08.10

go中interface用法
go中interface用法

本专题整合了go语言中int相关内容,阅读专题下面的文章了解更多详细内容。

76

2025.09.10

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

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

180

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

Golang gRPC 服务开发与Protobuf实战
Golang gRPC 服务开发与Protobuf实战

本专题系统讲解 Golang 在 gRPC 服务开发中的完整实践,涵盖 Protobuf 定义与代码生成、gRPC 服务端与客户端实现、流式 RPC(Unary/Server/Client/Bidirectional)、错误处理、拦截器、中间件以及与 HTTP/REST 的对接方案。通过实际案例,帮助学习者掌握 使用 Go 构建高性能、强类型、可扩展的 RPC 服务体系,适用于微服务与内部系统通信场景。

4

2026.01.15

热门下载

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

精品课程

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

共48课时 | 7.2万人学习

Git 教程
Git 教程

共21课时 | 2.7万人学习

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

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