返回列表

腾讯云个人实名号批发 使用 Firewalld 配置复杂白名单

腾讯云国际 / 2026-05-15 01:52:34

下载.png

一、Firewalld:现代Linux防火墙的“智能管家”

说起Linux防火墙,很多人第一反应是iptables。但Firewalld可是后起之秀,它用“区域”概念把网络划分成不同安全等级,动态管理规则,不用重启就能生效。想象一下,你的服务器就像个高档小区,Firewalld是智能保安系统,根据来访者的“身份”(比如内网IP、外网IP)自动分配不同权限——内网员工能随便进,外网访客只能在特定区域活动。这种灵活设计,让复杂白名单配置变得像点外卖一样简单。

二、白名单配置的核心逻辑:先堵后疏

配置Firewalld的白名单,关键要记住“先堵后疏”原则。就像小区保安先锁死所有大门,再给信任的人发钥匙。默认策略设为拒绝所有流量,再逐个放行需要的IP或服务。这样即使配置失误,也不会让危险分子趁虚而入。不过要注意,操作前一定要确保自己有物理访问权限或备用连接方式——否则一不小心把自己锁在门外,那就只能对着服务器干瞪眼了。

2.1 区域(Zone):防火墙的“分区管理”

Firewalld把网络分成不同区域,比如public(公共区域)、trusted(信任区域)、home(家庭区域)等。每个区域有独立的规则集。比如公司服务器通常用public区域,对外网开放部分端口;内部服务器用trusted区域,允许内网所有流量。设置时,先确定当前区域:firewall-cmd --get-default-zone。如果没改过,默认是public。想把某个IP段放进trusted区域?直接firewall-cmd --zone=trusted --add-source=192.168.1.0/24 --permanent,再reload。瞬间,这个网段的流量就“自动信任”了,省去一个个加规则的麻烦。

2.2 服务与端口:白名单的“通行证”

服务和端口是白名单的核心“通行证”。比如开放HTTP服务,直接firewall-cmd --add-service=http --permanent。但复杂场景下,可能需要限制服务来源。比如只允许10.0.0.0/24网段访问SSH,其他区域禁止。这时用富规则:firewall-cmd --add-rich-rule='rule family="ipv4" source address="10.0.0.0/24" service name="ssh" accept' --permanent。是不是比iptables简洁多了?而且service name可以直接用预定义的服务名(通过firewall-cmd --get-services查看),比如http、https、ssh,不用记端口号。

三、复杂白名单的实战配置

单纯放行几个IP或服务太简单了。真正的“复杂”白名单,需要组合多种条件。下面用几个实际案例,教你如何玩转高级规则。

3.1 单IP白名单:精准控制

假设运维小王的电脑IP是203.0.113.5,他需要随时管理服务器。但其他IP一概不放行。规则如下:

firewall-cmd --zone=public --add-rich-rule='rule family="ipv4" source address="203.0.113.5" accept' --permanent
firewall-cmd --reload

注意,这条规则会放行该IP的所有端口。如果你只想允许SSH访问,可以改成service name="ssh"。但别忘了——如果小王同时需要访问Web服务,还得再加一条HTTP规则。这种“精准到毫厘”的控制,比全开放更安全。

3.2 多IP段白名单:批量授权

公司有三个办公地点,IP段分别是192.168.1.0/24、10.0.0.0/24、172.16.0.0/16。要一次性放行这三个网段,可以这样:

firewall-cmd --zone=public --add-source=192.168.1.0/24 --permanent
firewall-cmd --zone=public --add-source=10.0.0.0/24 --permanent
firewall-cmd --zone=public --add-source=172.16.0.0/16 --permanent
firewall-cmd --reload

或者用富规则更精确地控制服务:

firewall-cmd --add-rich-rule='rule family="ipv4" source address="192.168.1.0/24" port port="80" protocol="tcp" accept' --permanent

这样,只有这三个网段能访问80端口,其他统统拒之门外。再也不用担心半夜被黑客扫到开放端口了!

3.3 服务级白名单:细粒度控制

有些服务需要更精细的限制。比如数据库只允许内网应用服务器访问。假设数据库端口3306,只允许192.168.1.100这台应用服务器访问:

firewall-cmd --add-rich-rule='rule family="ipv4" source address="192.168.1.100" port port="3306" protocol="tcp" accept' --permanent

如果还想拒绝其他IP的访问,记得先设默认策略为拒绝:firewall-cmd --set-default-zone=public(通常public默认是拒绝所有),然后显式放行。注意,拒绝规则不需要单独设置,因为默认就是拒绝,只要不放行就自动拒绝了。

3.4 时间敏感规则:动态白名单

腾讯云个人实名号批发 Firewalld还能按时间设置规则!比如允许外网访问管理后台,但仅限工作日9点到18点:

firewall-cmd --add-rich-rule='rule family="ipv4" source address="0.0.0.0/0" port port="8443" protocol="tcp" time start="09:00:00" end="18:00:00" days="mon,tue,wed,thu,fri" accept' --permanent

这条规则简直像“智能门禁”:非工作时间,连看一眼管理界面的资格都没有!而且days参数支持英文缩写,mon-fri是周一到周五。如果想节假日也开放,可以改成days="mon,tue,wed,thu,fri,sat,sun"。但记住,时间规则依赖服务器时钟,务必确保NTP同步,否则时间不对,规则就失效了。

四、验证与调试:别让防火墙“背锅”

配置完千万别以为万事大吉。先用firewall-cmd --list-all查看当前规则,确认是否生效。比如:

# 查看public区域的所有规则
firewall-cmd --zone=public --list-all

如果发现规则没生效,可能是没reload。或者规则顺序问题——Firewalld按顺序匹配规则,先匹配到的规则优先。比如你先拒绝了某个IP,又放行,但拒绝规则在前,就永远拒绝了。这时候可以用--remove-rich-rule删除旧规则,重新添加顺序。

更狠的调试方法:开两个终端,一个做修改,一个测试连接。如果SSH断了,立刻在另一个终端修复。如果没备用连接,建议用--timeout参数临时加规则,比如:

firewall-cmd --add-rich-rule='rule family="ipv4" source address="203.0.113.5" accept' --timeout=300

这样规则只生效5分钟,过期自动失效。相当于给自己留了个“后悔药”,即使配置错误也能快速恢复。

五、踩坑指南:白名单配置的那些“坑”

新手常犯的错误,我帮你踩过一次了,现在总结几个血泪教训:

  • 腾讯云个人实名号批发 坑1:忘记 --permanent:配置了但没加--permanent,重启后全白搭。就像把钥匙忘在门口,第二天回来发现门锁不上了。
  • 坑2:区域搞错:把规则加到wrong_zone,结果实际流量走的是public区域。用firewall-cmd --get-active-zones确认当前活动区域。
  • 坑3:默认策略没设:如果没设置default zone为拒绝,直接add规则可能反而开放更多。建议先firewall-cmd --set-default-zone=public,然后public区域默认drop,再放行需要的。
  • 坑4:端口协议搞混:TCP和UDP不区分,比如DNS要同时开放TCP和UDP的53端口。规则里写protocol="tcp"但实际需要udp,那就白搭了。

六、总结:让防火墙成为你的“安全卫士”

Firewalld的复杂白名单配置,本质上是用“最小权限原则”保护系统。每个规则都像一道防线,既要严密,又要灵活。记住:

  • 先定义区域,再根据区域放行服务或IP
  • 用富规则实现多条件组合(IP+端口+时间)
  • 测试时留后门,避免把自己锁在外面
  • 定期审查规则,删除不用的白名单

当你把防火墙配置得像瑞士手表一样精准,黑客们只能对着你的服务器“望门兴叹”。毕竟,最好的防御不是铜墙铁壁,而是让攻击者根本找不到入口——而这,正是复杂白名单的终极魅力。

Telegram售前客服
客服ID
@cloudcup
联系
Telegram售后客服
客服ID
@yanhuacloud
联系