在 CentOS 8 上使用 FirewallD 设置防火墙
简介
一个 Linux 防火墙可用于保护您的工作站或服务器免受不需要的流量干扰。您可以设置规则来阻止或允许流量通过。CentOS 8 带有一个动态的、可定制的基于主机的防火墙和一个 D-Bus 接口。您可以添加、删除或更新防火墙的规则,而无需重新启动防火墙守护程序或服务。firewall-cmd 充当着 nftables 的前端。在 CentOS 8 中,nftables 取代了 iptables 作为默认的 Linux 网络包过滤框架。本页展示了如何为您的 CentOS 8 设置防火墙,和如何在 firewall-cmd 工具的帮助下进行管理。
FirewallD 的基本概念
firewalld 简化了网络流量管理的概念。当谈到 CentOS 8 上的 firewalld 时,我们有以下两个主要的概念。
- 区域
Firewalld 区域(Zone)只不过是预定义的规则集。您可以通过运行以下 ls 命令查看所有区域:
$ ls -l /usr/lib/firewalld/zones/
使用 cat 命令查看 public 区域:
$ cat /usr/lib/firewalld/zones/public.xml
了解预定义区域
- block:所有传入的网络连接都被拒绝。只可以从系统内部发起网络连接。
- dmz:经典的非军事区 (DMZ) 区域,提供对 LAN 的有限访问,并且只允许指定的传入端口。
- drop:丢弃所有传入的网络连接,只允许传出的网络连接。
- external:对于路由器类型的连接很有用。您还需要 LAN 和 WAN 接口才能使伪装 NAT 正常工作。
- home:适用于您信任其他计算机的 LAN 中的家用计算机,例如笔记本电脑和台式机。仅允许指定的 TCP/IP 端口。
- internal:用于内部网络,当您非常信任 LAN 上的其他服务器或计算机时适用。
- public:您不信任网络上的任何其他计算机和服务器。您只允许所需的端口和服务。对于托管在您所在地的云服务器或服务器,请始终使用公共区域。
- trusted:接受所有网络连接。我不建议将此区域用于连接到 WAN 的专用服务器或虚拟机。
- work:用于您比较信任的同事和其他服务器的工作场所。
运行以下命令以查看 CentOS 8 上的所有区域:
$ firewall-cmd --get-zones
如何找出您的默认区域
可以将网络接口和源分配给区域。这些区域中的一员可被设置为默认区域。以下命令可以让您的默认区域运行:
$ firewall-cmd --get-default-zone
要查看您的网络接口名称,请运行 ip 命令或 nmcli 命令:
$ ip link show
$ nmcli device status
当向 NetworkManager 添加新的接口连接(例如 eth0 或 ens3)时,它们将被附加到默认区域。通过运行以下命令进行验证:
$ firewall-cmd --get-active-zones
服务
服务不过是本地端口、协议、源端口、目标端口和防火墙帮助模块的列表。举些例子:
- 端口:443、25 或 110
- 服务:SSH、HTTP
- 协议:ICMP
如何查看与公共(public)区域相关的防火墙规则或服务
运行
$ sudo firewall-cmd --list-all
或者
$ sudo firewall-cmd --list-all --zone=public
上面的命令表明我的默认区域是 public,并且我允许传入 SSH 连接(端口 22)、dhcpv6-client 和 CentOS 8/RHEL 8 上的 cockpit 服务端口。所有其他流量默认被丢弃。如果我在 CentOS 8 上配置 Apache 或 Nginx,则我需要使用 firewall-cmd 打开 80/443 端口。假设您不想要 cockpit 或 dhcpv6-client 等不必要的服务,您可以通过修改规则来删除它们。例如,删除服务 dhcpv6-client 和 cockpit:
$ sudo firewall-cmd --remove-service=cockpit --permanent
$ sudo firewall-cmd --remove-service=dhcpv6-client --permanent
$ sudo firewall-cmd --reload
$ sudo firewall-cmd --list-services
如何查看当前区域允许的服务
$ sudo firewall-cmd --list-services
或者
$ sudo firewall-cmd --list-services --zone=public
$ sudo firewall-cmd --list-services --zone=home
或使用 bash 的 for 循环,如下所示:
## or just use 'sudo firewall-cmd --list-all-zones' ##
for z in $(firewall-cmd --get-zones)
do
echo "Services allowed in $z zone: $(sudo firewall-cmd --list-services --zone=$z)"
done
如何在 CentOS 8 上启动、停止、重启 firewalld 服务
到目前为止,您已经了解了 firewalld 区域、服务以及如何查看默认值。是时候在 CentOS 8 Linux 机器上激活和配置我们的防火墙了。
启动并启用 firewalld
$ sudo systemctl start firewalld
$ sudo systemctl enable firewalld
停止并禁用 firewalld
$ sudo systemctl stop firewalld
$ sudo systemctl disable firewalld
检查 firewalld 状态
$ sudo firewall-cmd --state
更改规则时重新加载 firewalld 配置的命令
$ sudo firewall-cmd --reload
获取 firewalld 服务的状态
$ sudo systemctl status firewalld
了解运行时和永久性防火墙规则集
运行时更改 firewalld 的配置是临时的。当您重新启动 CetnOS 8 服务器时,这些配置就消失了。例如,以下命令将临时为 Nginx/Apache Web 服务器打开 80/443(https)TCP 端口 :
$ sudo firewall-cmd --zone=public --add-service=http
$ sudo firewall-cmd --zone=public --add-service=https
当您重新启动 Linux 机器或重新启动防火墙服务本身时,上述规则不会保留。
如何将规则添加到永久的规则集中,并重新加载 firewalld
让我们永久添加规则(HTTPS/443 和 HTTP/80)并重新加载 firewalld:
$ sudo firewall-cmd --zone=public --add-service=http --permanent
$ sudo firewall-cmd --zone=public --add-service=https --permanent
$ sudo firewall-cmd --reload
验证
$ sudo firewall-cmd --list-services
$ sudo firewall-cmd --list-services --permanent
如何查找 firewalld 支持的服务列表
在您的系统上,语法如下:
$ sudo firewall-cmd --get-services
$ sudo firewall-cmd --get-services | grep mysql
$ ls -l /usr/lib/firewalld/services/
$ cat /usr/lib/firewalld/services/ssh.xml
Firewalld 规则集示例
让我们看看默认区域的一些常见的 firewalld 示例。
如何将服务添加到您的区域
添加 dns 服务(TCP/UDP 53 端口):
sudo firewall-cmd --zone=public --add-service=dns --permanent
如何从您的区域中移除(删除)服务
删除 vnc 服务器服务(TCP 端口范围 5900-5903):
sudo firewall-cmd --zone=public --remove-service=vnc-server --permanent
如何允许/打开 TCP/UDP 端口/协议
打开 TCP 端口 9009 :
sudo firewall-cmd --zone=public --add-port=9009/tcp --permanent
要查看添加的端口,请运行:
$ sudo firewall-cmd --zone=internal --list-ports
如何拒绝/阻止 TCP/UDP 端口/协议
打开 TCP 端口 23:
sudo firewall-cmd --zone=public --remove-port=23/tcp --permanent
如何编写端口转发 firewalld 规则
在同一台服务器上将 443 TCP 端口转发到 8080:
$ sudo firewall-cmd --zone=public --add-forward-port=port=80:proto=tcp:toport=8080 --permanent
要删除上述的端口转发,请运行
$ sudo firewall-cmd --zone=public --remove-forward-port=port=80:proto=tcp:toport=8080
如果您需要将流量(端口 443)转发到托管在 192.168.2.42 的 lxd 服务器/容器的 443 端口,请开启伪装:
$ sudo firewall-cmd --zone=public --add-masquerade
$ sudo firewall-cmd --zone=public --add-forward-port=port=443:proto=tcp:toport=443:toaddr=192.168.2.42 --permanent
要删除上述伪装规则,请运行
$ sudo firewall-cmd --zone=public --remove-masquerade
$ firewall-cmd --zone=public --remove-forward-port=port=443:proto=tcp:toport=443:toaddr=192.168.2.42 --permanent
像往常一样使用以下命令列出规则:
$ firewall-cmd --zone=public --list-all --permanent
Rich 规则示例
假设您只想允许从 10.8.0.8 IP 地址访问 SSH 端口 22,请运行:
sudo firewall-cmd --permanent --zone=public --add-rich-rule 'rule family="ipv4" source address="10.8.0.8" port port=22 protocol=tcp accept'
要验证新规则,请运行:
$ sudo firewall-cmd --list-rich-rules --permanent
在以下示例中,允许 192.168.1.0/24 子网访问 tcp 端口 11211:
sudo firewall-cmd --permanent --zone=public --add-rich-rule='
rule family="ipv4"
source address="192.168.1.0/24"
port protocol="tcp" port="11211" accept'
再次验证它:
$ sudo firewall-cmd --list-rich-rules --permanent
输出示例:
rule family="ipv4" source address="10.8.0.8" port port="22" protocol="tcp" accept
rule family="ipv4" source address="192.168.1.0/24" port port="11211" protocol="tcp" accept
您可以按照如下所示删除 rich 规则:
$ sudo firewall-cmd --remove-rich-rule 'rule family="ipv4" source address="10.8.0.8" port port=22 protocol=tcp accept' --permanent
$ sudo firewall-cmd --remove-rich-rule 'rule family="ipv4" source address="192.168.1.0/24" port port="11211" protocol="tcp" accept' --permanent
结论
您已经了解了 firewalld 的基本概念和 CentOS 8 服务器的一些常见示例。有关更多信息,请参阅的官方(https://firewalld.org/documentation/)firewalld 文档。
链接:https://www.cyberciti.biz/faq/how-to-set-up-a-firewall-using-firewalld-on-centos-8
在 CentOS 8 上使用 FirewallD 设置防火墙的更多相关文章
- 转载:如何在Ubuntu 18.04上使用UFW设置防火墙
https://blog.csdn.net/u013068789/article/details/82051943 介绍 UFW或Uncomplicated Firewall是iptables一个接口 ...
- 如何在CentOS 7上使用vsftpd设置ftp服务器
一.前言介绍 FTP(文件传输协议)是一种标准的客户机-服务器网络协议,允许用户在远程网络之间传输文件. 有几个开源的FTP服务器可用于Linux.最受欢迎和广泛使用的是pureftpd.proftp ...
- sql server导出数据,本地数据库远程连接不上,怎样设置防火墙(自用)
控制面板——>系统安全——>windows防火墙——>高级设置 新建入站规则: 将一下两个应用 允许入站: D:\Program Files (x86)\Microsoft SQL ...
- Linux学习笔记之CentOS 7系统使用firewalld管理防火墙端口
0x00 firewalld的基本使用 # 启动: systemctl start firewalld # 查看状态: systemctl status firewalld # 停止: systemc ...
- (9)centos下防火墙firewalld设置
学习apache安装的时候需要打开80端口,由于centos 7版本以后默认使用firewalld后,网上关于iptables的设置方法已经不管用了,想着反正iptable也不会用,索性直接搬官方文档 ...
- CentOS 7 打开关闭FirewallD防火墙端口命令
CentOS 7 使用firewalld代替了原来的iptables,使用方法如下: >>>关闭防火墙 systemctl stop firewalld.service ...
- CentOS Linux上搭建PPPoE服务器及拨号设置
CentOS Linux上搭建PPPoE服务器及拨号设置 搭建PPPoE,成功了的话,就觉得超级简单,在CentOS Linux更是5步左右就能搞定. 1.安装pppoe,安装完成后,会有pppoe- ...
- centos 7.6修改ssh端口,设置防火墙规则
一.修改ssh端口 1 使用 root 用户进入 /etc/ssh目录 2 备份ssh配置文件 cp sshd_config sshd_config-bak 3 使用 vim 打开 sshd_conf ...
- CentOS 7上的主机名设置和基本网络管理
主机名 CentOS 6 查看. # hostname 设置. # hostname NEW_NAME 设置完成后,xshell的会话中不会显示NEW_NAME,可通过重新登录会话来显示.不过实际上我 ...
随机推荐
- Kafka ETL 之后,我们将如何定义新一代实时数据集成解决方案?
上一个十年,以 Hadoop 为代表的大数据技术发展如火如荼,各种数据平台.数据湖.数据中台等产品和解决方案层出不穷,这些方案最常用的场景包括统一汇聚企业数据,并对这些离线数据进行分析洞察,来达到辅助 ...
- Spring-03
1. AOP相关概念 1.1 AOP概念&作用 AOP(Aspect Oriented Programming)是一种思想,面向切面编程 作用:在不修改源码的前提下,在程序运行过程中对方法进行 ...
- Operating System_via牛客网
题目 链接:https://ac.nowcoder.com/acm/contest/28537/F 来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 131072K,其他语 ...
- Linux(Centos7) 实例搭建 FTP 服务
本文以 CentOS 7.2 64位系统为例,使用 vsftpd 作为 FTP 服务端,FileZilla 作为客户端.指导您如何在 Linux 云服务器上搭建 FTP 服务. 操作步骤 安装 vsf ...
- 日期字符串转为java.sql.Date
日期字符串转为java.sql.Date类型 问题引出:在将一个日期字符串通过sql语句,插入到数据表的日期字段(字段类型是DATE),时遇到一个问题,如何将一个日期字符串转成java.sql.Dat ...
- ES6中class方法及super关键字
ES6 class中的一些问题 记录下class中的原型,实例,super之间的关系 //父类 class Dad { constructor(x, y) { this.x = 5; this.y = ...
- 「APIO2010」巡逻 题解
来源 LCA 个人评价:lca求路径,让我发现了自己不会算树的直径(但是本人似乎没有用lca求) 1 题面 「APIO2010」巡逻 大意:有一个有n个节点的树,每条边权为1,一每天要从1号点开始,遍 ...
- 并发异步编程之争:协程(asyncio)到底需不需要加锁?(线程/协程安全/挂起/主动切换)Python3
原文转载自「刘悦的技术博客」https://v3u.cn/a_id_208 协程与线程向来焦孟不离,但事实上是,线程更被我们所熟知,在Python编程领域,单核同时间内只能有一个线程运行,这并不是什么 ...
- VSCode Easy Less扩展 out 配置字段
"less.compile": { "out": "..\\css\\" // 切记文件目录查找为 '\\' or '//' 此处我的设置会 ...
- java学习第一天.day04
顺序结构 代码里没有流程控制,程序是按照书写的格式从上而下一行一行执行的, 一条语句执行完之后继续执行下一条语句,中间没有判断和跳转,直到程序的结束. 选择结构 选择结构也被称为分支结构.代码根据逻辑 ...