Назад | Перейти на главную страницу

Нужна помощь squid / firewalld на CentOS 7 в качестве прозрачного прокси dns, ftp, http, https

Я установил squid v3.3.8 на CentOS 7, который имеет два следующих интерфейса:

внутренний

interface: ens32    

внешний

interface: ens33    >   masquerade is enabled here

Первым делом я включил пересылку IPv4:
sysctl -w net.ipv4.ip_forward = 1

Я хочу иметь возможность поместить IP-адрес ens32 в свой браузер с портом 3128 и иметь доступ к Интернету, будь то ftp, http или https. Честно говоря, мне нужно разрешить все типы трафика позже, но заблокировать некоторые веб-сайты, потому что некоторым приложениям, которые я использую, нужен трафик TCP / UDP на разных портах.

Я добавил правило firewalld:

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

Я могу telnet ens32 IP на порт 3128!

Как неудачное начало, я оставил squid.conf как есть, но добавил "перехват" после http_port 3128, чтобы направить трафик с 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.

Я также не знаю, как правильно создать необходимые правила firewalld, чтобы пересылать запросы, полученные на ens32, на ens33. Все учебники, которые я читал, использовали iptables, что мне действительно нужно, так это firewalld. Я новичок в мире Linux, никогда раньше не изучал iptables.

Сначала мне нужно заставить работать http-запросы, а затем я продолжаю делать все остальное.

заранее спасибо

Будем надеяться, что кто-то найдет этот ответ полезным, так как я нигде не нашел этих вещей в Интернете!

Я получил сообщение об ошибке "Доступ запрещен", потому что, когда я впервые заявил в своем вопросе, что у меня

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, где шлюз этого маршрута настроен на фактический шлюз подсети, к которой принадлежит IP-адрес интерфейса LAN.

Что касается сертификата, я сделал следующее:

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

Это должно ответить на мой вопрос и все мои комментарии выше ..