需要帮助 CentOS 7 上的 squid/firewalld 作为 dns、ftp、http、https 透明代理

需要帮助 CentOS 7 上的 squid/firewalld 作为 dns、ftp、http、https 透明代理

我在 CentOS 7 上安装了 squid v3.3.8,它有两个界面如下:

内部的

interface: ens32    

外部的

interface: ens33    >   masquerade is enabled here

首先,我启用了 IPv4 转发:
sysctl -w net.ipv4.ip_forward=1

我希望能够将 ens32 IP 地址放入带有端口 3128 的浏览器中,并能够访问互联网,无论是 ftp、http 还是 https。说实话,我需要稍后允许所有流量类型,但会阻止某些网站,因为我使用的某些应用程序需要不同端口上的 tcp/udp 流量。

我添加了防火墙规则:

firewall-cmd --permanent --zone=internal --add-service=squid

我可以通过端口 3128 远程登录 ens32 IP!

一开始不太走运,我保留了 squid.conf,但在 http_port 3128 后添加了“intercept”,以强制流量从 ens32 到 ens33。当我尝试从浏览器访问互联网时,总是会出现以下情况:

The following error was encountered while trying to retrieve the URL: http://www.whatever.com

    Access Denied.

Access control configuration prevents your request from being allowed at this time. Please contact your service provider if you feel this is incorrect.

Your cache administrator is root.

我也不知道如何正确创建必要的防火墙规则,以便将 ens32 上收到的请求转发到 ens33。我读过的所有教程都是使用 iptables,我真正想使用的是防火墙。我对整个 linux 世界都很陌生,以前从未研究过 iptables。

我首先需要使 http 请求工作,然后继续其余部分。

提前致谢

答案1

希望有人觉得这个答案有用,因为我在网上没有找到这些东西!

我收到“访问被拒绝”错误,因为当我第一次在问题中说明我有

http_port 3128 intercept

这意味着这个 squid 端口专用于拦截流量而不是转发流量,因此firewalld 需要将流量从端口 3128 转发到另一个端口,例如端口 3126:

firewall-cmd --permanent --zone=internal --add-forward-port=port=80:proto=tcp:toport=3126:toaddr=LAN_INTERFACE_IP
firewall-cmd --reload

启用 squid 处理流量并将其转发到端口 3126,同时监听端口 3128。当然,我必须按如下方式打开端口 3126:

firewall-cmd --permanent --zone=internal --add-port=3126/tcp

然后我可以这样做鱿鱼:

http_port  3126 intercept
http_port  3128 ssl-bump generate-host-certificates=on dynamic_cert_mem_cache_size=4MB cert=/etc/squid/ssl_cert/myca.pem

请注意,端口 3128 未处于拦截模式。因此,当 Firewalld 将 http 流量转发到端口 3126 时,squid 会监听端口 3128,而 ipv4 转发会将未知流量(这是我们最初想要的)转发到 WAN 接口,即 ens33。

为了能够从不同的子网访问服务器,只需在 LAN 接口上添加一条静态路由,该路由的网关设置为 LAN 接口 IP 所属子网的实际网关。

关于证书的事情,我做了以下事情:

mkdir /etc/squid/ssl_cert/
cd /etc/squid/ssl_cert
openssl req -new -newkey rsa:1024 -days 1365 -nodes -x509 -keyout myca.pem -out myca.pem
openssl x509 -in myca.pem -outform DER -out myca.der
chown -R squid:squid /etc/squid/ssl_cert/

最后,SELinux 被启用了,我通过这种方式解决了,讽刺的是,我在 SELinux 的错误日志中找到了解决方案:

grep ssl_crtd /var/log/audit/audit.log | audit2allow -M ssl_crtd_pol
semodule -i ssl_crtd_pol

这应该可以回答我的问题和上面的所有评论。

相关内容