firewall-cmd --zone=$zone --query-port=$1/tcp >> "${logfile}"
这个命令是在使用`firewalld`服务时的一个常见命令,`firewalld`是一个动态防火墙管理工具,用于在Linux系统中控制网络流量。下面是命令的详细解释:
- `firewall-cmd`: 这是`firewalld`的命令行界面,用于执行防火墙规则的修改和查询。
- `--zone=$zone`: 这个选项指定了防火墙规则应该应用到的区域(zone)。区域可以有不同的规则,例如,`public`、`work`、`home`等,每个区域都可以设置不同的防火墙策略。
- `--query-port=$1/tcp`: 这个选项用来查询指定端口(这里使用`$1`作为端口号,`$1`是一个变量,表示命令行的第一个参数)的TCP端口是否被允许通过防火墙。`tcp`表示传输层协议类型为TCP。
- `>> "${logfile}"`: 这部分是命令的输出重定向。`>>`表示将命令的输出追加到指定的文件中,而不是直接打印到终端。`${logfile}`是一个变量,表示日志文件的路径。
整个命令的作用是查询指定区域中指定TCP端口的开放状态,并将查询结果追加到日志文件中。
### 举例说明:
假设我们有一个区域叫做`external`,我们想要查询端口`8080`是否在这个区域中被允许。同时,我们想要将查询结果追加到`/var/log/firewall-query.log`文件中。我们可以这样写命令:
zone=external
port=8080
logfile=/var/log/firewall-query.log
firewall-cmd --zone=$zone --query-port=$port/tcp >> "$logfile"
在这个例子中:
- `$zone`变量被设置为`external`,表示我们正在查询`external`区域的规则。
- `$port`变量被设置为`8080`,表示我们正在查询端口8080的规则。
- `$logfile`变量被设置为`/var/log/firewall-query.log`,表示查询结果将被追加到这个日志文件中。
执行这个命令后,如果端口8080在`external`区域中被允许,日志文件将包含类似于`--query-port=8080/tcp yes`的行,表示端口8080是开放的。如果端口被拒绝,则会显示`no`。