找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 172|回复: 0

如何使用 FirewallD 开启 IP 白名单

[复制链接]

983

主题

83

回帖

5万

积分

管理员

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

. ^' x; ]* v/ [+ d" K3 t' t2 T4 U
Firewalld 是可用于许多 Linux 发行版的防火墙管理解决方案,它充当 Linux 内核提供的 iptables 数据包过滤系统的前端。6 k: m2 m( u3 [. y( [
在本教程中,介绍如何为服务器设置防火墙,并使用 firewall-cmd 管理工具来管理防火墙添加 IP 白名单。5 i! O; Y: z0 t8 ^
Firewalld 中的基本概念区域(zone)区域(zone)基本上是一组规则,它们决定了允许哪些流量,具体取决于你对计算机所连接的网络的信任程度。为网络接口分配了一个区域,以指示防火墙应允许的行为。
; x: K: N  z, `4 R% V) k0 TFirewalld 一般已经默认内置了 9 个区域(zone),大部分情况下,这些已经足够使用,按从最不信任到最受信任的顺序为:
# ?# J) ]; M% sdrop:最低信任级别。所有传入的连接都将被丢弃而不会回复,并且只能进行传出连接。
$ V1 w% u: Q( H. T7 T9 Y: J: I2 Rblock:与上述类似,但不是简单地删除连接,而是使用 icmp-host-prohibitedor 和 icmp6-adm-prohibited 消息拒绝传入的请求。
1 U: c3 \5 g* U. f$ Hpublic:表示不信任的公共网络。您不信任其他计算机,但可能会视情况允许选择的传入连接。默认情况下,此区域为激活状态。( \. s, v  k# e# |* X  o# `
external:如果你使用防火墙作为网关,则为外部网络。将其配置为 NAT 转发,以便你的内部网络保持私有但可访问。
% S6 M# _% t9 O7 l. ^8 M3 Z8 Kinternal:external 区域的另一侧,用于网关的内部。这些计算机值得信赖,并且可以使用一些其他服务。+ D5 |8 h# T) n8 g, n% r8 ^
dmz:用于 DMZ (DeMilitarized Zone) 中的计算机(将无法访问网络其余部分的隔离计算机),仅允许某些传入连接。
7 [  x# _3 d8 h/ }4 A7 hwork:用于工作机。信任网络中的大多数计算机。可能还允许其他一些服务。" U) m- N1 p7 [
home:家庭环境。通常,这意味着您信任其他大多数计算机,并且将接受其他一些服务。6 r  l+ L. W& i- e2 b2 p* b& m
trusted:信任网络中的所有计算机。可用选项中最开放的,应谨慎使用。$ G( H+ `3 J4 A) r
安装并启用防火墙Firewalld 是在某些 Linux 发行版上默认安装的,但有时候需要手动安装。CentOS 下的安装命令如下:
7 y2 k3 F: ~6 G" M: @3 X  E
  1. $ sudo yum install firewalld
复制代码
启用 Firewalld 服务并允许自启动
  1. $ sudo systemctl start firewalld5 G+ S3 b5 B9 D4 N4 t2 @; u' p
  2. $ sudo systemctl enable firewalld
复制代码
确认 Firewalld 服务是否正在运行
  1. $ sudo firewall-cmd --state
复制代码
返回 running 则表示已经运行;not running 则表示没有运行。熟悉当前的防火墙规则输入以下命令,可以看到当前选择哪个区域作为默认区域:
, I* T1 t; e2 ~2 m" E5 I# ?1 z
  1. $ sudo firewall-cmd --get-default-zone
复制代码
一般情况下会返回 public
. S( g9 |  j% ^& W8 s输入以下内容进行确认哪个区域处于激活状态:& E6 i) }" ]! Z" L1 J( ?
  1. $ sudo firewall-cmd --get-active-zones
复制代码
一般情况下,在只有一个网卡的情况下会返回:
  1. public
    3 u" v" v$ P; a
  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: O7 p% Y0 n, L+ [$ C% V, Z
  2.   target: default
    % g- c0 {( T' S2 p% D
  3.   icmp-block-inversion: no
    + ~0 L& P# \0 A6 _* }/ c
  4.   interfaces:
    " l8 }. p2 K1 s! X5 v
  5.   sources: ' S; p( p/ N  P2 U7 M
  6.   services: dhcpv6-client mdns samba-client ssh0 @9 M# x0 F; F! h0 z1 u' f
  7.   ports: # H" W( S. @- Z0 W( |: ?% @! {
  8.   protocols: 3 q; M. @2 X8 c4 u
  9.   masquerade: no, G1 R* v- x1 n$ V5 ~- X
  10.   forward-ports: . `5 h/ T$ |& I% I# J
  11.   source-ports: & a8 {) B: t- r1 d# ~
  12.   icmp-blocks: & P# h$ y+ _5 {0 z: R
  13.   rich rules:
复制代码
获取可用区域列表的详细信息,输入以下命令:
  1. $ sudo firewall-cmd --list-all-zones
复制代码
: z4 d8 i2 Q! l1 E7 q
使用 Firewalld 配置 IP 白名单如前所述,Firewalld 有内置的区域,可以利用这些区域不同的特性,来简单快捷地配置 IP 白名单。
1 h; i* r- I, a) G. l具体做法就是,首先要收集你要允许的 IP 白名单列表,比如 Cloudflare 的所有 IP 范围# A6 d+ r6 i; \2 Y; `6 P' J3 ]! z
  1. 103.21.244.0/227 }) ]- S3 h( K8 j
  2. 103.22.200.0/22
    $ [' W7 F1 U- h4 E1 v% w
  3. 103.31.4.0/22
    7 a* S/ |7 l& m+ B+ b& l3 `' }
  4. 104.16.0.0/13; f9 b. Y; Q' ?) j; U4 }+ J5 f
  5. 104.24.0.0/14$ @$ u8 j( n* z3 b7 h
  6. 108.162.192.0/18* O. s3 b9 E; ]# j* Q  l4 Y5 ?5 S
  7. 131.0.72.0/22
    5 ?. Z! ~$ H" h* G
  8. 141.101.64.0/189 Y. Y+ W6 ~/ @; x
  9. 162.158.0.0/154 ?* h8 `4 ?( L& {
  10. 172.64.0.0/13; A  _8 H0 N7 ~# O
  11. 173.245.48.0/20
    8 R: d% K- }% J& }& X2 l
  12. 188.114.96.0/20, C& H* y5 u6 J, S# \
  13. 190.93.240.0/20
    ( A5 l! P& k, |) p$ l! G$ ~
  14. 197.234.240.0/22- N' v- b) V4 n( W! E+ |3 `
  15. 198.41.128.0/17
复制代码

$ y; {$ F4 ?0 J与此同时,你也要加入你自己的 IP 地址,否则白名单一旦生效,可能会将你阻挡在外而无法连接。* @, r4 V3 ~2 q4 `3 }6 _
将这些 IP 列表逐一加入 trusted 区域,使用命令如下:
- C  [# y3 e' N
  1. $ sudo firewall-cmd --permanent --zone=trusted --add-source=173.245.48.0/20
    * p  a* j! N4 Q: a
  2. ……" i' J" c6 f2 N3 A" y% j+ |: 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)
    8 {& _- ?6 e& m
  2.   target: ACCEPT% Y, C$ y* H8 O/ k: P' t3 f& \- y5 i
  3.   icmp-block-inversion: no
    1 Z! E6 H- K7 {$ S
  4.   interfaces:
    % @9 ?2 Q) P6 q$ O
  5.   sources: 173.245.48.0/20 …… 131.0.72.0/22
    4 }/ G  H( e! K$ b9 f( K
  6.   services: 9 C7 S/ S: W7 [+ `! \4 }4 r
  7.   ports:
    8 m! z9 g8 r. |. {& E- [
  8.   protocols:
    2 f/ T) G3 |! Y
  9.   masquerade: no
    $ Q0 Q. P2 @( g! o. m0 s
  10.   forward-ports:
    ( y) F2 x- d; q! w- k5 k
  11.   source-ports: " H  D- g" t- k# w9 b+ H
  12.   icmp-blocks: 2 W8 M3 V1 \. W; `
  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
复制代码
至此,白名单设置正式生效。! D8 w3 z- B; |  j; Z
* h- B5 k1 _$ X9 {0 J  p

+ i7 x  n# L9 L- E6 d- d3 }% Y  ^) g2 p# P  V9 e
" ], l+ C* l( g/ j. x! Z7 U6 e
! x6 @! v5 b' `( ?! C
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2024-12-23 20:23 , Processed in 0.104705 second(s), 26 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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