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

如何使用 FirewallD 开启 IP 白名单

[复制链接]

986

主题

92

回帖

5万

积分

管理员

积分
55255
发表于 2022-7-4 16:14:01 | 显示全部楼层 |阅读模式

, N$ L6 w0 j: A* p( w$ b
Firewalld 是可用于许多 Linux 发行版的防火墙管理解决方案,它充当 Linux 内核提供的 iptables 数据包过滤系统的前端。; h' V9 ^& f4 l: [8 p' B
在本教程中,介绍如何为服务器设置防火墙,并使用 firewall-cmd 管理工具来管理防火墙添加 IP 白名单。
5 v9 T0 d( O; N" SFirewalld 中的基本概念区域(zone)区域(zone)基本上是一组规则,它们决定了允许哪些流量,具体取决于你对计算机所连接的网络的信任程度。为网络接口分配了一个区域,以指示防火墙应允许的行为。! F! ^) R: y0 E" [; j
Firewalld 一般已经默认内置了 9 个区域(zone),大部分情况下,这些已经足够使用,按从最不信任到最受信任的顺序为:
  _" a1 v9 S+ z* K$ [0 P* f7 gdrop:最低信任级别。所有传入的连接都将被丢弃而不会回复,并且只能进行传出连接。) V# m' |! c: j6 y
block:与上述类似,但不是简单地删除连接,而是使用 icmp-host-prohibitedor 和 icmp6-adm-prohibited 消息拒绝传入的请求。0 q4 S' q& k7 D7 s: u& `/ {3 T/ w
public:表示不信任的公共网络。您不信任其他计算机,但可能会视情况允许选择的传入连接。默认情况下,此区域为激活状态。
+ ^8 j+ P8 N9 d" @external:如果你使用防火墙作为网关,则为外部网络。将其配置为 NAT 转发,以便你的内部网络保持私有但可访问。
# A# b0 G- r' v+ qinternal:external 区域的另一侧,用于网关的内部。这些计算机值得信赖,并且可以使用一些其他服务。
$ i3 w5 ?% ?5 O  g" K0 T! idmz:用于 DMZ (DeMilitarized Zone) 中的计算机(将无法访问网络其余部分的隔离计算机),仅允许某些传入连接。
+ c( w- C3 S9 R! e8 e, R* |work:用于工作机。信任网络中的大多数计算机。可能还允许其他一些服务。, g9 }, N* R, C/ r
home:家庭环境。通常,这意味着您信任其他大多数计算机,并且将接受其他一些服务。
4 q0 v5 J/ ^# b; H, r# itrusted:信任网络中的所有计算机。可用选项中最开放的,应谨慎使用。
8 f" O% u7 u$ I  b" B" {' y. H( ~安装并启用防火墙Firewalld 是在某些 Linux 发行版上默认安装的,但有时候需要手动安装。CentOS 下的安装命令如下:
& p8 D; Y& j' q: n
  1. $ sudo yum install firewalld
复制代码
启用 Firewalld 服务并允许自启动
  1. $ sudo systemctl start firewalld2 X. t7 [; x4 x: ]
  2. $ sudo systemctl enable firewalld
复制代码
确认 Firewalld 服务是否正在运行
  1. $ sudo firewall-cmd --state
复制代码
返回 running 则表示已经运行;not running 则表示没有运行。熟悉当前的防火墙规则输入以下命令,可以看到当前选择哪个区域作为默认区域:1 K, s; r/ m& n# }6 s9 h% D% y
  1. $ sudo firewall-cmd --get-default-zone
复制代码
一般情况下会返回 public: i" J2 g2 ~8 ]6 E" X
输入以下内容进行确认哪个区域处于激活状态:& Z6 a/ Y2 |  ^: \/ x
  1. $ sudo firewall-cmd --get-active-zones
复制代码
一般情况下,在只有一个网卡的情况下会返回:
  1. public
    $ U( w! c/ l2 H( M6 _* V; D
  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& ]- C' A% e6 x
  2.   target: default& z/ D1 {7 Z" v' p* A
  3.   icmp-block-inversion: no" ~& N& J& A" h- T1 }4 G! @! \
  4.   interfaces: & L. {9 ^9 W8 D: O2 A  }
  5.   sources: % \* v6 ]' @% P$ E
  6.   services: dhcpv6-client mdns samba-client ssh0 _' D8 n) b; N4 {
  7.   ports: . k# j" q( p+ o8 ]6 L) ~6 }
  8.   protocols:   D& f* z" O' Y$ X. k6 F
  9.   masquerade: no
    6 `! i: E8 s4 F! R
  10.   forward-ports:
    : N% f6 u$ r8 U; ~: V; [0 w
  11.   source-ports:
    + U6 |# {- l. m2 ^, {5 S2 ?. Q' `
  12.   icmp-blocks:
    - v6 e% i9 N( O  `7 S$ b5 z$ o6 l
  13.   rich rules:
复制代码
获取可用区域列表的详细信息,输入以下命令:
  1. $ sudo firewall-cmd --list-all-zones
复制代码
2 c/ [2 ^3 k( y8 Z
使用 Firewalld 配置 IP 白名单如前所述,Firewalld 有内置的区域,可以利用这些区域不同的特性,来简单快捷地配置 IP 白名单。
( R% u/ g' E# m+ L具体做法就是,首先要收集你要允许的 IP 白名单列表,比如 Cloudflare 的所有 IP 范围
+ X  k1 F0 G+ L" [4 k7 s* ^3 {
  1. 103.21.244.0/223 W! K* r& v$ T1 F
  2. 103.22.200.0/229 j- A4 R3 W7 h* Z- S
  3. 103.31.4.0/22' @+ s/ }- A7 v! s5 j' x0 s/ h5 ~
  4. 104.16.0.0/13
    ( C( f) L. i* d9 C; S
  5. 104.24.0.0/14$ F: t1 j$ f( Y7 j3 Q
  6. 108.162.192.0/18: i; O# z1 R# j. v/ b& q4 w; l( r
  7. 131.0.72.0/22. d5 D, v! v, C( B' h0 ?
  8. 141.101.64.0/18& m" |8 m. f* y2 r3 |) m: ]
  9. 162.158.0.0/15
    4 i8 u6 b0 U8 j4 x2 g
  10. 172.64.0.0/13
    8 \+ S$ c# f1 }) H4 u& ^% p
  11. 173.245.48.0/20& j- h, h$ T2 d6 z' o/ S% u$ u
  12. 188.114.96.0/20
    5 b" z' K+ k8 w& G) H. v5 }3 }3 {
  13. 190.93.240.0/20! U; b& E2 J0 R' L6 W% h4 B8 m
  14. 197.234.240.0/22
      {% y9 a8 [9 c6 [& F/ _  H
  15. 198.41.128.0/17
复制代码

9 o; p' V/ N  P& g  n与此同时,你也要加入你自己的 IP 地址,否则白名单一旦生效,可能会将你阻挡在外而无法连接。
. O8 @1 ?- P, u将这些 IP 列表逐一加入 trusted 区域,使用命令如下:
) \% Z0 d) E- R  p" g4 n
  1. $ sudo firewall-cmd --permanent --zone=trusted --add-source=173.245.48.0/20- e2 d% a4 o9 m' K* \' w/ ?  `
  2. ……* `5 f% ]2 k7 d& x
  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)9 \5 G$ s& k! ~% n- H
  2.   target: ACCEPT0 K, m& o" Y6 B4 ~$ W$ }0 |
  3.   icmp-block-inversion: no- W3 U% y* a: N- a  g
  4.   interfaces:
    : D! b1 J. ]* `6 t7 @% R1 M
  5.   sources: 173.245.48.0/20 …… 131.0.72.0/22
    ) V7 k* J+ [; {  ?4 E, z# v
  6.   services: - X. W+ m( [) L) L0 B4 a
  7.   ports:
    * `0 ~% l4 s4 E4 [" l- p1 `
  8.   protocols:
    - G3 r" @1 B3 U9 z! M
  9.   masquerade: no  y+ f# m$ F9 C- K' R' h, K  P
  10.   forward-ports:
    8 I8 K4 H. Z7 y7 Y( S, J8 {
  11.   source-ports:
    & }0 l- G% |0 E
  12.   icmp-blocks: , s* ?9 k; g  G- ]1 r
  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
复制代码
至此,白名单设置正式生效。
; O* c. c5 P: L' o* h, t0 X1 I1 \! v9 n2 K+ V. g" y0 x# v, c

# y. _. Q2 B7 N+ f- K& p, r# ?; _4 T0 t; D& n  z$ p
5 M% @2 \/ l& R: j% ?
- I3 Y1 U, e6 c, _! {" R
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|

GMT+8, 2026-3-22 03:28 AM , Processed in 0.083029 second(s), 23 queries .

Powered by xyh-moon X3.5

© 2001-2025 Discuz! Team.

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