Linux 防火墙 Systemctl 常用命令速查

Linux 防火墙 Systemctl 常用命令速查

这篇博客主要记录我日常使用 Linux 防火墙(通常指 firewalld)时,用 systemctl 管理服务的常用命令,以及一些端口操作和 Java 开发相关的命令,方便自己快速查阅。

为什么使用 Systemctl 管理防火墙?

systemctl 是 Linux 中用于管理系统服务的主要工具。我们通常使用它来启动、停止、重启、查看服务状态等等。对于防火墙服务,例如 firewalld,也是如此。使用 systemctl 可以更统一、更方便地管理系统服务,包括防火墙。

常用 Systemctl 命令

以下是一些我常用的 systemctl 命令,用于管理 firewalld 防火墙服务:

1. 启动防火墙

bash 复制代码
sudo systemctl start firewalld
  • 说明: 这条命令会启动 firewalld 服务,使其开始生效。

2. 停止防火墙

arduino 复制代码
      sudo systemctl stop firewalld
  • 说明: 这条命令会停止 firewalld 服务,此时防火墙规则将不再生效。请谨慎使用,在必要情况下才停止防火墙。

3. 重启防火墙

markdown 复制代码
      sudo systemctl restart firewalld
    
  • 说明: 这条命令会先停止 firewalld 服务,然后重新启动它。通常用于在修改防火墙配置后使其生效。

4. 查看防火墙状态

lua 复制代码
      sudo systemctl status firewalld
    
  • 说明: 这条命令会显示 firewalld 服务的当前状态,包括是否正在运行,以及任何相关的错误信息。这是检查防火墙是否正常运行的常用命令。

5. 设置防火墙开机自启

bash 复制代码
      sudo systemctl enable firewalld
    
  • 说明: 这条命令会将 firewalld 服务设置为开机自启动,即每次系统启动时都会自动启动防火墙。

6. 取消防火墙开机自启

bash 复制代码
      sudo systemctl disable firewalld
    
  • 说明: 这条命令会取消 firewalld 服务的开机自启动。

7. 查看防火墙是否开机自启

csharp 复制代码
      systemctl is-enabled firewalld    
  • 说明: 这条命令会检查 firewalld 服务是否设置为开机自启,输出结果可能是 enabled 或 disabled。

端口操作 (firewall-cmd)

以下命令使用 firewall-cmd 来操作端口,这些命令和 Java 开发密切相关:

1. 开放指定端口

css 复制代码
      sudo firewall-cmd --zone=public --add-port=8080/tcp --permanent
      sudo firewall-cmd --zone=public --add-port=8080/udp --permanent    
  • --zone=public: 见文末
  • 说明: 开放 8080 端口的 TCP 和 UDP 流量,--permanent 参数表示永久生效。
  • Java 应用常用端口: 8080 通常是 Tomcat 或其他 Java Web 应用的默认端口。
css 复制代码
      sudo firewall-cmd --zone=public --add-port=22/tcp --permanent    
  • 说明: 开放ssh 服务端口22。
css 复制代码
      sudo firewall-cmd --zone=public --add-port=3306/tcp --permanent    
  • 说明: 开放 mysql 默认端口3306。

2. 查看已开放端口

css 复制代码
      sudo firewall-cmd --zone=public --list-ports    
  • 说明: 列出 public 区域已开放的所有端口。

3. 删除已开放端口

css 复制代码
      sudo firewall-cmd --zone=public --remove-port=8080/tcp --permanent    
  • 说明: 删除 public 区域中开放的 8080/tcp 端口。

4. 使配置生效

css 复制代码
      sudo firewall-cmd --reload
    
  • 说明: 在修改防火墙规则后,使用该命令使更改立即生效。

5. 查看指定端口是否开放

css 复制代码
      sudo firewall-cmd --zone=public --query-port=8080/tcp
    
  • 说明: 查询8080端口的tcp服务是否开放。

6. 批量开放端口

css 复制代码
      sudo firewall-cmd --zone=public --add-port={8080-8085}/tcp --permanent
      sudo firewall-cmd --zone=public --add-port={8080-8085}/udp --permanent
    
  • 说明: 批量开放 8080 到 8085 端口的 TCP 和 UDP 流量。使用大括号 {} 和短横线 - 来表示一个端口范围。

7. 批量删除端口

css 复制代码
      sudo firewall-cmd --zone=public --remove-port={8080-8085}/tcp --permanent
    
  • 说明: 批量删除 8080 到 8085 端口的 TCP 流量。

8. 批量开放多个不连续端口

css 复制代码
      sudo firewall-cmd --zone=public --add-port={8080,8085,9000}/tcp --permanent
    
  • 说明: 批量开放 8080、8085 和 9000 端口的 TCP 流量。使用大括号 {} 和逗号 , 来表示多个不连续端口。

9. 批量删除多个不连续端口

css 复制代码
      sudo firewall-cmd --zone=public --remove-port={8080,8085,9000}/tcp --permanent
    
  • 说明: 批量删除 8080、8085 和 9000 端口的 TCP 流量。

Java 相关端口补充

  • 8080, 8009: Tomcat 默认 HTTP 和 AJP 端口。
  • 80: HTTP 默认端口
  • 443: HTTPS 默认端口
  • 22: SSH 默认端口
  • 3306: MySQL 默认端口
  • 6379: Redis 默认端口
  • 5432: PostgreSQL 默认端口
  • 1099, 9999: JMX 端口
  • 其他根据实际情况开放的端口

其他一些有用的命令 (可选)

  • 查看所有已安装的服务 (包括防火墙):

    ini 复制代码
          systemctl list-units --type=service        
  • 查看所有正在运行的服务:

    css 复制代码
          systemctl list-units --type=service --state=running        

注意事项

  • 请务必使用 sudo 执行上述命令,因为管理系统服务需要管理员权限。
  • 在修改防火墙配置后,通常需要重启防火墙服务以使更改生效 (sudo systemctl restart firewalld) 或者使用 sudo firewall-cmd --reload。
  • 对于 firewalld 防火墙本身的配置,还需要使用 firewall-cmd 等工具。本文主要关注使用 systemctl 管理 firewalld 服务本身,以及使用 firewall-cmd 配置端口。
  • --permanent 参数非常重要,不加此参数配置重启后会失效。
  • 批量操作端口时,注意端口范围和端口列表的格式。

说明 --zone=public

  1. 默认区域:

    • firewalld 有多个区域(zone)的概念,比如 public、trusted、dmz 等。每个区域都有不同的默认规则和信任级别。
    • 当你使用 firewall-cmd 命令时,如果没有明确指定 --zone 参数,firewalld 会使用默认区域 (default zone) 的配置
    • 默认区域通常是 public,但可以通过 firewall-cmd --get-default-zone 命令查看当前系统的默认区域。也可以通过 firewall-cmd --set-default-zone= 命令修改默认区域。
    • 因此,如果你当前系统的默认区域是 public, 那么在 firewall-cmd 操作时省略 --zone=public 也能达到同样的效果,因为默认就是 public。
  2. 不指定 --zone 的后果:

    • 当你不指定 --zone 时,firewall-cmd 将会作用于 当前默认区域
    • 如果你修改了默认区域(比如修改成了dmz),那么所有省略 --zone 的 firewall-cmd 命令都会作用于新的默认区域,而非 public。
    • 这可能会导致潜在的配置问题,例如,你可能以为在 public 区域开放了端口,但实际上是在 dmz 区域开放了,从而产生意想不到的安全风险。
  3. 最佳实践:

    • 为了清晰和避免歧义, 强烈建议 在 firewall-cmd 命令中明确指定 --zone 参数。 即使你想操作的是 public 区域,也最好加上 --zone=public,这样可以确保你的意图明确,且不会因为默认区域的改变而导致配置错误。
    • 特别是在脚本或自动化部署中使用 firewall-cmd 时,更要明确指定 --zone ,防止出现不可控的情况。
  4. 总结:

    • 省略 --zone=public 并非错误,但在当前默认区域是 public 的情况下,才等效于指定 --zone=public 。
    • 为了代码的可读性、可维护性和避免潜在的配置错误, 最好在所有 firewall-cmd 命令中明确指定 --zone 参数。

简单来说:

虽然不指定 --zone=public 有时可以运行,但是它依赖于系统当前默认的防火墙区域配置。为了更明确和避免歧义,强烈建议在所有 firewall-cmd 命令中 明确指定 --zone=public

总结

这些是我常用的 systemctl 命令,用于管理 firewalld 防火墙服务,以及常用的端口操作和 Java 开发相关的端口。希望这篇博客对你有所帮助,可以随时查阅!

相关推荐
yanzhyan1 小时前
【Linux】Linux命令:free
linux·运维·服务器
编程墨客2 小时前
IO进程----进程
linux·服务器·microsoft
可涵不会debug2 小时前
【C++】在线五子棋对战项目网页版
linux·服务器·网络·c++·git
清风-云烟2 小时前
使用redis-cli命令实现redis crud操作
java·linux·数据库·redis·spring·缓存·1024程序员节
孤寂大仙v3 小时前
【Linux】环境变量
linux·运维·服务器
DADIAN_GONG3 小时前
how to use | in Linux? give me an example
linux·运维·服务器
新知图书4 小时前
Linux C\C++编程-文件位置指针与读写文件数据块
linux·c语言·c++
geffen084 小时前
HDBaseT和KVM 和POE是怎么融合在一块的
linux
张3蜂4 小时前
.NET 8 项目 Docker 方式部署到 Linux 系统详细操作步骤
linux·docker·.net