在 CentOS 系统中,通常使用 firewalld 作为默认的防火墙。要让 PHP 脚本与 firewalld 配合,你可以使用 firewall-cmd 命令来动态地管理防火墙规则。以下是一些示例:
firewall-cmd --permanent --zone=public --add-port=80/tcp
firewall-cmd --reload
这将允许所有流量通过 TCP 80 端口(HTTP)。
firewall-cmd --query-port=80/tcp
如果返回 yes,则表示端口已打开。
firewall-cmd --permanent --zone=public --remove-port=80/tcp
firewall-cmd --reload
firewall-cmd --permanent --zone=public --add-rich-rule='rule family="ipv4" source address="192.168.1.100" accept'
firewall-cmd --reload
将 192.168.1.100 替换为要允许访问的 IP 地址。
shell_exec() 或 exec() 函数执行上述命令:<?php
// 允许端口 80
$output = shell_exec('firewall-cmd --permanent --zone=public --add-port=80/tcp');
$output = shell_exec('firewall-cmd --reload');
echo $output;
?>
请注意,使用 shell_exec() 或 exec() 可能会导致安全风险,因为它们允许执行系统命令。确保你了解这些风险,并在执行任何命令之前对输入进行验证和清理。
在生产环境中,建议使用更安全的方法来管理防火墙规则,例如使用专用的配置文件或 API。这可以避免直接从 PHP 脚本执行系统命令,从而降低潜在的安全风险。