Pfsense Squid 外部 ACL 带有 php 脚本

Pfsense Squid 外部 ACL 带有 php 脚本

我想使用 PHP 脚本在 pfSense 安装中允许或拒绝 Squid 代理请求,因此我对外部 ACL 使用以下配置:

external_acl_type mysqlAuth %SRC /usr/local/bin/php -f /var/scripts/mysqlacl.php
acl extGrant external mysqlAuth
http_access allow extGrant

我的 Mysql 脚本如下所示:

<?php
file_put_contents("/var/scripts/out.txt",date("Y/m/d H:i:s")."Started\r\n",FILE_APPEND);

$STDIN=fopen("php://stdin", "r");
$STDOUT=fopen("php://stdout", "w"));


while (!feof($STDIN)) {
        $line = trim(fgets($STDIN));
        file_put_contents("/var/scripts/out.txt",date("Y/m/d H:i:s")." ".$line,FILE_APPEND);
        fwrite($STDOUT, "OK\n");
        //break;
}
?>

如果我从命令行运行此脚本,一切都会正常进行,对于每一行输入,我都会得到一个“OK”输出行。

问题是,当 Squid 运行时我收到此错误(来自 system.log 的日志):

squid[43190]: Squid 父级:(squid-1) 进程 56700 已启动

(squid-1):mysqlAuth 助手崩溃得太快,需要帮助!

squid[43190]: Squid 父进程: (squid-1) 进程 56700 以状态 1 退出

squid[43190]: Squid 父进程: (squid-1) 进程 56700 由于反复频繁出现故障,将无法重新启动

这是 cache.log:

kid1| ipcCreate: /usr/local/bin/php: (2) 没有此文件或目录

但这个文件肯定存在,为了确保这不是由于文件访问错误造成的,我尝试将 shell 设置为“代理”用户,并以代理用户身份登录(su proxy),然后从 shell 调用/usr/local/bin/php -f /var/scripts/mysqlacl.php它,它就起作用了!

这是我的 php 版本:

PHP 5.5.22 (cgi-fcgi)(构建于:2015 年 2 月 26 日 18:00:22)版权所有 (c) 1997-2015 The PHP Group Zend Engine v2.5.0,版权所有 (c) 1998-2015 Zend Technologies with Suhosin v0.9.37.1,版权所有 (c) 2007-2014,由 SektionEins GmbH 提供

这会是什么呢?

答案1

这是我在 pfSense 中使用 PHP 脚本作为 squid 外部 acl 的答案:

ln -s /usr/local/bin/php /usr/pbi/squid-amd64/local/bin/php
ln -s /usr/local/lib/php /usr/pbi/squid-amd64/local/lib/php
ln -s /usr/local/etc/php.ini /usr/pbi/squid-amd64/local/etc/php.ini

相关内容