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 开发相关的端口。希望这篇博客对你有所帮助,可以随时查阅!

相关推荐
Raners_3 分钟前
【Linux】文件权限以及特殊权限(SUID、SGID)
linux·安全
egoist20236 分钟前
【Linux仓库】进程优先级及进程调度【进程·肆】
linux·运维·服务器·进程切换·进程调度·进程优先级·大o1调度
2301_1472583691 小时前
7月2日作业
java·linux·服务器
xuanzdhc6 小时前
Linux 基础IO
linux·运维·服务器
愚润求学6 小时前
【Linux】网络基础
linux·运维·网络
bantinghy6 小时前
Linux进程单例模式运行
linux·服务器·单例模式
小和尚同志7 小时前
29.4k!使用 1Panel 来管理你的服务器吧
linux·运维
帽儿山的枪手7 小时前
为什么Linux需要3种NAT地址转换?一探究竟
linux·网络协议·安全
shadon1789 天前
回答 如何通过inode client的SSLVPN登录之后,访问需要通过域名才能打开的服务
linux
小米里的大麦9 天前
014 Linux 2.6内核进程调度队列(了解)
linux·运维·驱动开发