找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 173|回复: 0

如何使用 FirewallD 开启 IP 白名单

[复制链接]

983

主题

83

回帖

5万

积分

管理员

积分
53122
发表于 2022-7-4 16:14:01 | 显示全部楼层 |阅读模式
$ @' w" t8 ~0 l- q- Y
Firewalld 是可用于许多 Linux 发行版的防火墙管理解决方案,它充当 Linux 内核提供的 iptables 数据包过滤系统的前端。( |- D4 |* J6 u# s7 H# Y' o
在本教程中,介绍如何为服务器设置防火墙,并使用 firewall-cmd 管理工具来管理防火墙添加 IP 白名单。" ~4 V' |8 A6 f+ A
Firewalld 中的基本概念区域(zone)区域(zone)基本上是一组规则,它们决定了允许哪些流量,具体取决于你对计算机所连接的网络的信任程度。为网络接口分配了一个区域,以指示防火墙应允许的行为。) X6 {6 N, [& S: V- \
Firewalld 一般已经默认内置了 9 个区域(zone),大部分情况下,这些已经足够使用,按从最不信任到最受信任的顺序为:
2 a* I) s1 a: \6 p% _drop:最低信任级别。所有传入的连接都将被丢弃而不会回复,并且只能进行传出连接。, t/ n* d0 A( n, `( U4 m
block:与上述类似,但不是简单地删除连接,而是使用 icmp-host-prohibitedor 和 icmp6-adm-prohibited 消息拒绝传入的请求。
+ p4 R) Q0 N) s' q' ]6 H5 cpublic:表示不信任的公共网络。您不信任其他计算机,但可能会视情况允许选择的传入连接。默认情况下,此区域为激活状态。! q8 `. E/ m; ?' m: [  t) m& q
external:如果你使用防火墙作为网关,则为外部网络。将其配置为 NAT 转发,以便你的内部网络保持私有但可访问。3 i* p- P3 K* j6 j, s. P
internal:external 区域的另一侧,用于网关的内部。这些计算机值得信赖,并且可以使用一些其他服务。
  U- X$ ?3 @& m* k) ?% B* x% N9 Jdmz:用于 DMZ (DeMilitarized Zone) 中的计算机(将无法访问网络其余部分的隔离计算机),仅允许某些传入连接。
' B* H3 Z9 }( c! g& }work:用于工作机。信任网络中的大多数计算机。可能还允许其他一些服务。1 O6 L: M  Z6 I" W+ }
home:家庭环境。通常,这意味着您信任其他大多数计算机,并且将接受其他一些服务。
2 u! L# L& j1 y; ^' T- |* ~trusted:信任网络中的所有计算机。可用选项中最开放的,应谨慎使用。
# |* j( x4 t$ \( @安装并启用防火墙Firewalld 是在某些 Linux 发行版上默认安装的,但有时候需要手动安装。CentOS 下的安装命令如下:
; g$ |: W" L# t  c' a( M( n) Y
  1. $ sudo yum install firewalld
复制代码
启用 Firewalld 服务并允许自启动
  1. $ sudo systemctl start firewalld
    : Z! `5 g; [! t1 d3 u
  2. $ sudo systemctl enable firewalld
复制代码
确认 Firewalld 服务是否正在运行
  1. $ sudo firewall-cmd --state
复制代码
返回 running 则表示已经运行;not running 则表示没有运行。熟悉当前的防火墙规则输入以下命令,可以看到当前选择哪个区域作为默认区域:  j  i. Q" J! N
  1. $ sudo firewall-cmd --get-default-zone
复制代码
一般情况下会返回 public; a3 V2 y6 s! V- S9 r1 I. t, X
输入以下内容进行确认哪个区域处于激活状态:; p! m* A+ U2 J
  1. $ sudo firewall-cmd --get-active-zones
复制代码
一般情况下,在只有一个网卡的情况下会返回:
  1. public
    % Q3 Z" |; K" U4 b
  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
    & i1 z9 |0 U$ P$ P) A
  2.   target: default: s  i0 i3 ^# t7 F
  3.   icmp-block-inversion: no
    * D  Q$ K, A; |" A: J
  4.   interfaces: # C: p# ?/ P. z+ ~# w
  5.   sources: 7 M) ~1 O. c, R! Z8 y
  6.   services: dhcpv6-client mdns samba-client ssh5 @; D- W- G& X5 l8 `* Z
  7.   ports: $ e) X, [$ @- k4 \7 c& }: S
  8.   protocols: ( Z/ n! k- |, R  Y
  9.   masquerade: no" L- ?3 ~. m* x* j: e* w" d4 [
  10.   forward-ports: 1 R! L2 u+ Q! ]4 r0 I3 p
  11.   source-ports: 5 }8 o1 Z- }8 \6 b% ]7 U1 }
  12.   icmp-blocks: ; e: ?, z: d9 q$ J2 }  v
  13.   rich rules:
复制代码
获取可用区域列表的详细信息,输入以下命令:
  1. $ sudo firewall-cmd --list-all-zones
复制代码

% W; e8 t4 y7 V) h使用 Firewalld 配置 IP 白名单如前所述,Firewalld 有内置的区域,可以利用这些区域不同的特性,来简单快捷地配置 IP 白名单。& B( T- e: D8 S% v. M
具体做法就是,首先要收集你要允许的 IP 白名单列表,比如 Cloudflare 的所有 IP 范围
: `) {' j$ J7 \' y6 Q5 w0 g
  1. 103.21.244.0/22
    . X- {7 @+ j5 L0 {% _& l
  2. 103.22.200.0/22
    * o0 Y. ]3 x, P8 h' y& s8 n
  3. 103.31.4.0/22" y' }9 ~: K1 m0 A1 G
  4. 104.16.0.0/137 M: \, q- u# ~& l( i( K
  5. 104.24.0.0/14
    ) i7 W& l1 {  e
  6. 108.162.192.0/18, v! M: ?  {, o+ B: Z8 z2 \
  7. 131.0.72.0/22
    , U( P0 N7 }2 v4 V6 d
  8. 141.101.64.0/18$ |" g: Q) i6 V. K6 v2 m  F: U6 j! T2 n
  9. 162.158.0.0/15
    2 h) `/ \/ n, b- q, ?! n7 o8 Y
  10. 172.64.0.0/13
    8 g8 U  W, R  m2 I' _' d& h. k
  11. 173.245.48.0/20
    1 k" u1 K5 c% K( K# Z3 g3 ?6 y
  12. 188.114.96.0/20
    . ^2 u2 g$ y) g: \% Z9 g' P& [% q6 n
  13. 190.93.240.0/20
    # ~1 k" [- r( V* @% W
  14. 197.234.240.0/22# L" q+ o* U" Y: K6 Z
  15. 198.41.128.0/17
复制代码
  W( O5 J8 q% ~
与此同时,你也要加入你自己的 IP 地址,否则白名单一旦生效,可能会将你阻挡在外而无法连接。. E; P$ t) t% f% w
将这些 IP 列表逐一加入 trusted 区域,使用命令如下:
2 }6 {. I) _9 F3 i! Y; h' W
  1. $ sudo firewall-cmd --permanent --zone=trusted --add-source=173.245.48.0/20( A8 l1 G" |( D1 ?
  2. ……
    / @" R! _/ [) ]0 y
  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)2 Y" H" W+ r; Y) r* X6 n- a, p
  2.   target: ACCEPT
    7 z4 a/ z5 H% x3 @5 e
  3.   icmp-block-inversion: no
    , Z2 p( F! d' E$ d
  4.   interfaces: + N1 f3 U  Q4 }  [# k
  5.   sources: 173.245.48.0/20 …… 131.0.72.0/22
    * o! ~' G! G8 o7 l! J# m
  6.   services: ' V6 \6 W7 X& p1 L& |( \
  7.   ports:
    ; v$ e3 s" A8 R
  8.   protocols: 0 ^$ P- _- o4 J8 J* Y) X" e, f
  9.   masquerade: no7 N% n2 g- V) A; O9 R" I8 T% Q8 F5 {
  10.   forward-ports: + E* @: G* ?" [0 l6 M
  11.   source-ports:
    0 j' A9 L8 Z, ^- U/ m: e7 Z
  12.   icmp-blocks: 8 k0 w4 h( N) \
  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
复制代码
至此,白名单设置正式生效。
& F! j4 A, l3 C( s6 {8 ?" u! i( h) n  U& i1 B' |
, T4 g$ g, y# i) ?$ [/ \: j
% ]6 c, b/ `3 C" L

7 V1 B' N, ]4 S% d
5 O" q3 R0 T8 ?! Y8 \& y; |
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|返回首页

GMT+8, 2024-12-23 21:19 , Processed in 0.128451 second(s), 25 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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