找回密码
 立即注册
搜索
查看: 373|回复: 0

如何使用 FirewallD 开启 IP 白名单

[复制链接]

991

主题

92

回帖

5万

积分

管理员

积分
55457
发表于 2022-7-4 16:14:01 | 显示全部楼层 |阅读模式
# l4 D6 _$ P; Y1 U. n3 F/ v
Firewalld 是可用于许多 Linux 发行版的防火墙管理解决方案,它充当 Linux 内核提供的 iptables 数据包过滤系统的前端。0 N: i5 X5 r% f* S1 \( o
在本教程中,介绍如何为服务器设置防火墙,并使用 firewall-cmd 管理工具来管理防火墙添加 IP 白名单。
2 N; h, f& H/ PFirewalld 中的基本概念区域(zone)区域(zone)基本上是一组规则,它们决定了允许哪些流量,具体取决于你对计算机所连接的网络的信任程度。为网络接口分配了一个区域,以指示防火墙应允许的行为。5 `# u, \: A& v! F2 c
Firewalld 一般已经默认内置了 9 个区域(zone),大部分情况下,这些已经足够使用,按从最不信任到最受信任的顺序为:% t0 x$ Z7 {7 F: A( X' t0 j
drop:最低信任级别。所有传入的连接都将被丢弃而不会回复,并且只能进行传出连接。
" B8 h" ^7 [" ^+ \; O. s( C, s: Kblock:与上述类似,但不是简单地删除连接,而是使用 icmp-host-prohibitedor 和 icmp6-adm-prohibited 消息拒绝传入的请求。  s- h' f! s% h" P
public:表示不信任的公共网络。您不信任其他计算机,但可能会视情况允许选择的传入连接。默认情况下,此区域为激活状态。
. y9 J" z' H( }  K" K8 ]3 ^external:如果你使用防火墙作为网关,则为外部网络。将其配置为 NAT 转发,以便你的内部网络保持私有但可访问。
7 u2 ^6 i! j1 ?* |+ p- Zinternal:external 区域的另一侧,用于网关的内部。这些计算机值得信赖,并且可以使用一些其他服务。! ]) |2 \! F, p0 h" b: X* W2 i
dmz:用于 DMZ (DeMilitarized Zone) 中的计算机(将无法访问网络其余部分的隔离计算机),仅允许某些传入连接。- X) Q2 G, x1 ]) S: d; s* }
work:用于工作机。信任网络中的大多数计算机。可能还允许其他一些服务。3 U( Y4 g& E4 s4 H' s$ _
home:家庭环境。通常,这意味着您信任其他大多数计算机,并且将接受其他一些服务。
! R3 v8 V$ e# d: y6 S8 B9 Ztrusted:信任网络中的所有计算机。可用选项中最开放的,应谨慎使用。+ Q, `/ T) V7 ^. e) H& V( j
安装并启用防火墙Firewalld 是在某些 Linux 发行版上默认安装的,但有时候需要手动安装。CentOS 下的安装命令如下:
0 w8 I6 v8 Y5 f" v4 D3 O9 H- p
  1. $ sudo yum install firewalld
复制代码
启用 Firewalld 服务并允许自启动
  1. $ sudo systemctl start firewalld& h7 a8 H# I9 N; h" Y- q' r
  2. $ sudo systemctl enable firewalld
复制代码
确认 Firewalld 服务是否正在运行
  1. $ sudo firewall-cmd --state
复制代码
返回 running 则表示已经运行;not running 则表示没有运行。熟悉当前的防火墙规则输入以下命令,可以看到当前选择哪个区域作为默认区域:
9 {0 k3 l* `+ z# y* k! Y. z& S
  1. $ sudo firewall-cmd --get-default-zone
复制代码
一般情况下会返回 public. q) X. d: [! r8 `
输入以下内容进行确认哪个区域处于激活状态:
# M, u# U# z8 v, _8 J7 E+ R
  1. $ sudo firewall-cmd --get-active-zones
复制代码
一般情况下,在只有一个网卡的情况下会返回:
  1. public
    0 s& x" w: Q% M; k, F9 ^; x
  2.   interfaces: eth0
复制代码
获取可用区域的列表,输入以下命令:
  1. $ sudo firewall-cmd --get-zones
复制代码
返回:
  1. block dmz drop external home internal public trusted work
复制代码
通过指定 –zone 的 –list-all 参数,我们可以看到与区域关联的特定配置:
  1. $ sudo firewall-cmd --zone=home --list-all
复制代码
返回值:
  1. home& y9 A, f6 O9 D
  2.   target: default
    * K/ p( n8 j& s3 r/ p( ^% t' `( {7 P
  3.   icmp-block-inversion: no
    % \' Z+ C3 S5 O& l
  4.   interfaces:
    5 W& ?0 E5 F, o7 S" h+ f! B
  5.   sources: ; z4 o) R  P, J: x
  6.   services: dhcpv6-client mdns samba-client ssh* X" |: [1 |* A. ?( `
  7.   ports: ) T* F- M  k$ o* F+ m  k8 q' `
  8.   protocols: 3 l- n( }, l7 d
  9.   masquerade: no
    . U' F; ?1 Q& s
  10.   forward-ports: & e: }# |: t( Y( B0 K) V
  11.   source-ports:
    # k1 K8 V5 y* Y: |2 B! x( Z5 T
  12.   icmp-blocks: ' l* k. g0 D+ `! a" `
  13.   rich rules:
复制代码
获取可用区域列表的详细信息,输入以下命令:
  1. $ sudo firewall-cmd --list-all-zones
复制代码
  q/ G* K% b1 d- t7 w
使用 Firewalld 配置 IP 白名单如前所述,Firewalld 有内置的区域,可以利用这些区域不同的特性,来简单快捷地配置 IP 白名单。
/ m) I6 F7 s3 n% q4 P7 L( }( e具体做法就是,首先要收集你要允许的 IP 白名单列表,比如 Cloudflare 的所有 IP 范围
: L1 c% z! [( k/ S$ C3 y' `2 m
  1. 103.21.244.0/22
    ( ~/ C- p* t# s9 O+ }# s
  2. 103.22.200.0/22
    # c( J) z. t0 y+ ]5 t3 t8 b, k- ]
  3. 103.31.4.0/22. |5 ]6 }+ |7 i: n1 e4 u6 n
  4. 104.16.0.0/13
    : P: Q5 K# i9 T
  5. 104.24.0.0/14
    7 O/ ^" R2 I: L) Q: Z5 T
  6. 108.162.192.0/189 e6 e, o/ F' n+ v2 }
  7. 131.0.72.0/22$ i+ a( _. ?4 W2 T
  8. 141.101.64.0/18+ Y9 _8 W  L$ O6 d
  9. 162.158.0.0/15
    2 b1 u, b, [7 u, F& f- N
  10. 172.64.0.0/138 |! s" U; W+ W+ ?
  11. 173.245.48.0/20
      F6 O- R. z3 h$ m% Y4 w8 B
  12. 188.114.96.0/20
    ) j! V( G3 f1 A' A/ a4 @  _4 K
  13. 190.93.240.0/20
    ; X/ A9 b9 n9 f' h- E( \! I4 L
  14. 197.234.240.0/22( A6 J; b+ E6 e0 F( t+ E% B
  15. 198.41.128.0/17
复制代码

7 H: k9 c* g" q与此同时,你也要加入你自己的 IP 地址,否则白名单一旦生效,可能会将你阻挡在外而无法连接。5 i6 N; e& E1 n  Z
将这些 IP 列表逐一加入 trusted 区域,使用命令如下:& b1 \& o! `  O0 ?9 b! W  b
  1. $ sudo firewall-cmd --permanent --zone=trusted --add-source=173.245.48.0/20$ R$ W# g) T0 k* K6 t2 l
  2. ……  L% m7 m1 l2 I! g; f9 l2 Y7 A+ ^
  3. $ sudo firewall-cmd --permanent --zone=trusted --add-source=131.0.72.0/22
复制代码
使 trusted 区域设置生效,使用命令如下:
  1. $ sudo firewall-cmd --reload
复制代码
确认 trusted 区域是否设置正确,使用命令如下:
  1. $ sudo firewall-cmd --zone=trusted --list-all
复制代码
返回:
  1. trusted (active). z0 ]$ B' I" F
  2.   target: ACCEPT
    ( w& G! U- Z. p0 `2 y/ e5 W
  3.   icmp-block-inversion: no* v$ k; h: y; o) L
  4.   interfaces:
    5 X- t- A  r* v; Z# @( E( q9 A* A
  5.   sources: 173.245.48.0/20 …… 131.0.72.0/22, R* S7 G# A% {5 T! @
  6.   services:
    ( W4 r" L( k! {  r; D- f
  7.   ports:
    0 D8 L. A: c% k$ X
  8.   protocols:
    6 Q$ t, i# ]! v; U* O+ a
  9.   masquerade: no
    ' u( d: I# @/ S( V
  10.   forward-ports:
    , w, j- i8 b5 s0 j1 b+ L
  11.   source-ports: 0 I5 h+ P0 B" V# k8 u
  12.   icmp-blocks: + f6 j) [+ k% S% d
  13.   rich rules:
复制代码
因为此时已经设置了 trusted 区域,所以还需要切换默认区域从 public 到 drop,以达到无视所有接入连接的目的。使用命令如下:
  1. $ sudo firewall-cmd --set-default-zone=drop
复制代码
再将默认网卡 eth0 分配给 drop 区域,使用命令如下:
  1. $ sudo firewall-cmd --permanent --zone=drop --change-interface=eth0
复制代码
使白名单最终生效,使用命令如下(注意:请再次确认你的所有 IP 都加入了 trusted 区域):
  1. $ sudo firewall-cmd --reload
复制代码
至此,白名单设置正式生效。2 g/ E+ H/ E+ \4 B

, v( W1 G& {5 ~5 q9 N" T
' _$ A+ E, r$ M* S6 G( r7 y0 }) `% Z% w- x  |/ |9 s, e+ t

6 Y( c  L$ j: b' X+ _8 M3 e
9 {& f, t, \) y3 J3 V
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|

GMT+8, 2026-8-5 03:24 PM , Processed in 0.058349 second(s), 22 queries .

Powered by xyh-moon X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表