Имеется некий сервис крутящийся на локальном серваке, за шлюзом, висящий на 443 порту тамошнего апача. Возникла необходимость периодически выдавать кому-либо доступы на него извне. Ну правила фаервола-то на шлюзе настроить не проблемно, беда в том, что сервис закрытый и открывать доступ всем тоже не айс. Конечно, админка сервиса требует http-авторизации в AD, но как быть с неадминкой? от локалки-то ее не спрячешь. Можно открывать доступ только для определенных IP, но тогда как быть с динамическими IP? Это можно было бы решить переездом на apache 2.4, но ввиду особенностей сервиса такой апдейт оказался нереален. После кучи раздумий и проб с разными сторонними штуковинами пришло весьма неожиданное решение - настроитьв качестве фронтэнда к апачу squid...
В атаку!
Итак, ставим squid (у меня OracleLinux, так что ставим из CentALT версию 3.2), и настраиваем:
Код: Выделить всё
visible_hostname office.local
https_port 444 accel cert=/etc/pki/tls/certs/server.crt key=/etc/pki/tls/private/server.key defaultsite=office.local vhost # Слушаем порт 444, на него потом будем заворачивать фаерволлом запросы извне на 443 порт
cache_peer office.local parent 443 0 no-query originserver ssl sslflags=NO_DEFAULT_CA sslflags=DONT_VERIFY_PEER login=PASS name=officesrv # Рассказываем сквиду куда и как слать запросы (не проверяем сертификат сервера на том конце, иначе не пройдем, делимся с апачем логином и паролем юзера)
auth_param basic program /usr/lib/squid/basic_ldap_auth -P -v 3 -b cn=Users,dc=ad,dc=local -D "administrator@ad.local" -w rooter -f sAMAccountName=%s -h ad.local # Авторизация в ActiveDirectory
auth_param basic children 5
auth_param basic realm Varnish Cache Admin
auth_param basic credentialsttl 1 minute
acl git proxy_auth REQUIRED # Авторизация обязательна
acl officesite dstdomain office.local
acl officeip dst 192.168.0.2
acl SSL_ports port 443
acl Safe_ports port 443
acl purge method PURGE
acl CONNECT method CONNECT
acl HTTPS proto HTTPS
cache_peer_access officesrv allow HTTPS officesite
cache_peer_access officesrv deny all
cache deny officesite # Контент бэкенда сильно динамичен, поэтому кэшировать нам его не нужно
# Кому верить в случае если сертификат бэкенда не прошел проверку
sslproxy_cert_error allow officesite
sslproxy_cert_error allow localhost
sslproxy_cert_error allow officeip
sslproxy_cert_error deny all
http_access allow git
http_access allow officesite
http_reply_access allow git
http_access allow purge localhost
http_access allow localhost
http_access allow manager localhost
http_access deny manager
http_access deny purge
http_access deny CONNECT !SSL_ports
http_access deny !Safe_ports
http_access deny all
forwarded_for on
redirect_rewrites_host_header off
buffered_logs on
cache_effective_user squid
cache_effective_group squid
coredump_dir /var/spool/squid
logformat combined %>a %ui %un [%tl] "%rm %ru HTTP/%rv" %>Hs %<st "%{Referer}>h" "%{User-Agent}>h" %Ss:%Sh
access_log /var/log/squid/access.log combined
cache_log /var/log/squid/cache.log
logfile_rotate 10