如何在Debian 10(Buster)上安装和配置防火墙

时间:2020-02-23 14:32:41  来源:igfitidea点击:

在本教程中,我们将研究如何在Debian 10(Buster)上安装和配置防火墙。
Firewalld是Linux防火墙管理工具,支持IPv4,IPv6,以太网网桥和IMSet防火墙设置。

Firewalld充当Linux内核的NetFilter框架前端。
它是Linux发行版Rhel 7+系列的默认防火墙管理软件,但可用于Linux Distrs的Debian系列。

在Debian 10上安装防火墙(Buster)

官方Debian 10 APT存储库中提供了防火墙包。
安装在终端用户或者使用sudo权限的root用户或者用户中的命令时快速触发。

sudo apt update
sudo apt -y install firewalld

这将在Debian 10上安装防火墙,并将服务设置为在启动时启动。
拉包细节:

$apt policy firewalld
firewalld:
  Installed: 0.6.3-5
  Candidate: 0.6.3-5
  Version table:
 *** 0.6.3-5 500
        500 http://deb.debian.org/debian buster/main amd64 Packages
        100 /var/lib/dpkg/status

确认服务处于运行状态。

$sudo firewall-cmd --state
 running
$systemctl status firewalld
● firewalld.service - firewalld - dynamic firewall daemon
   Loaded: loaded (/lib/systemd/system/firewalld.service; enabled; vendor preset
   Active: active (running) since Sun 2019-07-07 06:35:14 EDT; 1min 33s ago
     Docs: man:firewalld(1)
 Main PID: 7955 (firewalld)
    Tasks: 2 (limit: 2319)
   Memory: 24.5M
   CGroup: /system.slice/firewalld.service
           └─7955 /usr/bin/python3 /usr/sbin/firewalld --nofork --nopid

如果启用了UFW,请禁用它以使防火墙默认防火墙

sudo ufw disable

在Debian 10上使用防火墙(Buster)

既然程序包已安装并启动防火服务已启动,让我们看几个关于如何使用它来保护服务器/工作站的例子。

1 - 列出已配置的所有防火墙规则

要列出当前规则,请使用命令:

$sudo firewall-cmd --list-all
public (active)
  target: default
  icmp-block-inversion: no
  interfaces: ens33
  sources: 
  services: dhcpv6-client ssh
  ports: 
  protocols: 
  masquerade: no
  forward-ports: 
  source-ports: 
  icmp-blocks: 
  rich rules:

sshdhcpv6-client启动防火墙服务时默认允许服务。

2 - 可以启用/禁用目录服务

要获得可启用或者禁用服务的完整列表,请使用以下命令。

sudo firewall-cmd --get-services

3 - 启用服务/服务列表

要允许防火墙上的服务,命令语法如下:

$sudo firewall-cmd --add-service="servicename" --permanent

下面的示例将启用HTTP服务。

$sudo firewall-cmd --add-service="http" --permanent
success
$sudo firewall-cmd --reload

有关服务列表,请使用逗号分隔。

$sudo firewall-cmd --add-service={http,https,smtp,imap} --permanent --zone=public
$sudo firewall-cmd --reload

4 - 启用TCP端口

对于启用TCP端口的语法如下:

$sudo firewall-cmd --add-port=port/tcp --permanent
$sudo firewall-cmd --reload

以下是如何启用端口8080和8443.

sudo firewall-cmd --zone=public --add-port=8080/tcp --permanent
sudo firewall-cmd --zone=public --add-port={8080,8443}/tcp --permanent
sudo firewall-cmd --reload

对于UDP端口,用/UDP替换/TCP。

5 - 创建一个新区域

要创建新的防火墙区域,请使用命令:

$sudo firewall-cmd --new-zone=zonename --permanent
E.g
$sudo firewall-cmd --new-zone=private --permanent
$sudo firewall-cmd --reload

6 - 在特定区域启用服务/端口

要在特定区域中启用服务/端口,语法是:

sudo firewall-cmd --zone=<zone> --add-port=<port>/tcp --permanent
sudo firewall-cmd --zone=<zone> --add-port=<port>/udp --permanent
sudo firewall-cmd --zone=<zone> --add-service=<service> --permanent
sudo firewall-cmd --zone=<zone> --add-service={service1,service2,service3} --permanent

7 - 将接口添加到区域

对于具有多个接口的系统,我们可以将接口添加到区域。
e.g后端Web服务器到私有区域,并将应用程序侧向公开区域。

sudo firewall-cmd --get-zone-of-interface=eth1 --permanent
sudo firewall-cmd --zone=<zone> --add-interface=eth1 --permanent

8 - 允许访问特定子网/IP的端口

到服务或者端口的访问可以被限制为特定IP地址或者子网。
利用丰富的规则。

$sudo firewall-cmd --add-rich-rule 'rule family="ipv4" service name="ssh" \
source address="192.168.0.12/32" accept' --permanent
$sudo firewall-cmd --add-rich-rule 'rule family="ipv4" service name="ssh" \
source address="10.1.1.0/24" accept' --permanent

9 - 列出丰富的规则

sudo firewall-cmd --list-rich-rules

10 - 配置端口转发

请参见下面的示例。

# Enable masquerading
$sudo firewall-cmd --add-masquerade --permanent
# Port forward to a different port within same server ( 22 > 2022)
$sudo firewall-cmd --add-forward-port=port=22:proto=tcp:toport=2022 --permanent
# Port forward to same port on a different server (local:22 > 192.168.2.10:22)
$sudo firewall-cmd --add-forward-port=port=22:proto=tcp:toaddr=192.168.2.10 --permanent
# Port forward to different port on a different server (local:7071 > 10.50.142.37:9071)
$sudo firewall-cmd --add-forward-port=port=7071:proto=tcp:toport=9071:toaddr=10.50.142.37 --permanent

11 - 删除端口或者服务

从防火墙删除端口或者服务,替换 --add–-remove在启用服务的每个命令中。