Хочу поделится информацией о настройке прозрачного HTTP и HTTPS прокси сервера Squid на FreeBSD. Установка Squid будет происходить из портов, т.к. нам нужно включить некоторые функции при сборке. Как оказалось сложного в этом ничего нет. Нужно всего лишь заменить OpenSSL на LibreSSL. Я всю установку производил на чистую систему FreeBSD 11.0. Поэтому сразу загружаем порты. Так же хочу заметить, что в портах версия SQUID, на момент написания статьи, была 3.5.24, как поведёт себя на других версиях я не знаю.
cd /usr/ports portsnap fetch portsnap extract
Процесс на обычных HDD довольно долгий, стоит подождать пока всё распакуется. Затем нужно установить LibreSSL, для облегчения работы так же поставил mc и wget, я это делал с помощью pkg
pkg install libressl mc wget
После установки делаем подмену OpenSSL
mv /usr/bin/openssl /usr/bin/openssl.old cd /usr/bin ln -s /usr/local/bin/openssl
затем переходим в директорию с портом Squid
cd /usr/ports/www/squid
и вводим
make config
Выставляем параметры так как указаны на скриншоте ниже
Естественно настраивается оно под свои нужды, но нам главное чтобы были выбраны параметры:
ECAP SSL SSL_CRTD TP_PF
Нажимаем ОК и вводим
make install clean
Произойдёт сборка и установка Squid. У меня не вызвало никаких ошибок и т.д. собралось всё сразу.
Пропишем
squid_enable="YES" в файл /etc/rc.conf
Дальше подключаем пакетный фильтр PF, я подгружал модулем, так же можно пересобрать ядро, чтобы PF была встроена в ядро.
kldload pf
Переходим к конфигу SQUID, находится он
/usr/local/etc/squid/squid.conf
И приводим в его в такое состояние:
# # Recommended minimum configuration: # # Example rule allowing access from your local networks. # Adapt to list your (internal) IP networks from where browsing # should be allowed acl localnet src 192.168.1.0/24 # RFC1918 possible internal network acl SSL_ports port 443 acl Safe_ports port 80 # http acl Safe_ports port 21 # ftp acl Safe_ports port 443 # https acl Safe_ports port 70 # gopher acl Safe_ports port 210 # wais acl Safe_ports port 1025-65535 # unregistered ports acl Safe_ports port 280 # http-mgmt acl Safe_ports port 488 # gss-http acl Safe_ports port 591 # filemaker acl Safe_ports port 777 # multiling http acl CONNECT method CONNECT visible_hostname squid.local dns_nameservers 192.168.1.200 # # Recommended minimum Access Permission configuration: # # Deny requests to certain unsafe ports http_access deny !Safe_ports # Deny CONNECT to other than secure SSL ports http_access deny CONNECT !SSL_ports # Only allow cachemgr access from localhost http_access allow localhost manager http_access deny manager # We strongly recommend the following be uncommented to protect innocent # web applications running on the proxy server who think the only # one who can access services on "localhost" is a local user #http_access deny to_localhost # # INSERT YOUR OWN RULE(S) HERE TO ALLOW ACCESS FROM YOUR CLIENTS # # Example rule allowing access from your local networks. # Adapt localnet in the ACL section to list your (internal) IP networks # from where browsing should be allowed http_access allow localnet http_access allow localhost # And finally deny all other access to this proxy http_access deny all # Squid normally listens to port 3128 http_port 3128 intercept options=NO_SSLv3:NO_SSLv2 http_port 3130 options=NO_SSLv3:NO_SSLv2 https_port 3129 intercept ssl-bump connection-auth=off cert=/usr/local/etc/squid/squidCA.pem always_direct allow all sslproxy_cert_error allow all sslproxy_flags DONT_VERIFY_PEER acl blocked ssl::server_name "/usr/local/etc/squid/blocked_https.txt" acl step1 at_step SslBump1 ssl_bump peek step1 ssl_bump terminate blocked ssl_bump splice all sslcrtd_program /usr/local/libexec/squid/ssl_crtd -s /var/log/squid/ssl_db -M 4MB # Uncomment and adjust the following to add a disk cache directory. cache_dir ufs /var/squid/cache 100 16 256 # Leave coredumps in the first cache dir coredump_dir /var/squid/cache # # Add any of your own refresh_pattern entries above these. # refresh_pattern ^ftp: 1440 20% 10080 refresh_pattern ^gopher: 1440 0% 1440 refresh_pattern -i (/cgi-bin/|\?) 0 0% 0 refresh_pattern . 0 20% 4320
Напишу сразу, информацию черпал отсюда, там автор статьи расписал подробнее, что для чего.
Затем создаём файл blocked_https.txt, он нам нужен для блокировки нежелательных HTTPS сайтов. И пишем туда доменные имена в формате:
.site.name .example.com
Точка в начале доменного имени означает и все поддомены.
Дальше нам необходимо создать сертификат
cd /usr/local/etc/squid/ openssl req -new -newkey rsa:1024 -days 365 -nodes -x509 -keyout squidCA.pem -out squidCA.pem
Затем делаем инициализацию кэша.
squid -z
И переходим к настройке PF. Открываем pf.conf
mcedit /etc/pf.conf
и вписываем туда правила
rdr pass inet proto tcp from 192.168.1.0/24 to any port 80 -> 127.0.0.1 port 3128 rdr pass inet proto tcp from 192.168.1.0/24 to any port 443 -> 127.0.0.1 port 3129
pfctl -e pfctl -f /etc/pf.conf
PF open failed: (13) Permission denied kid1| ERROR: NAT/TPROXY lookup failed to locate original IPs
mcedit /etc/devfs.conf
own pf root:squid perm pf 0640
/etc/rc.d/devfs restart
И наконец-то запускаем SQUID:
service squid start
Все довольны и счастливы! Спасибо за внимание 🙂
Привет. А если все тоже настроить только в режиме tproxy, будет работать?
Нужно разделение юзеров между несколькими провайдерами.
Привет. Не пробовал, не скажу, если будет время попробую
После подмены openssl орёт make:
You have security/libressl installed but do not have
DEFAULT_VERSIONS+=ssl=libressl set in your make.conf
Послушаться его или проигнорить?
Чёрт его знает. У меня такого не вылазило
Не игнорить. добавить строку в make.conf
Прошу помощи. Делал все как написано в статье но прокси так и не работает. В качестве фаера ipfw.
При make config
параметр TP_IPFW был выбран?
Да
Здравствуйте Lanc!
Чем закончилось все дело? Завелось?
Добрый день подскажите, а какая разрядность была у вас?Я пытаюсь собрать 11.0 но уже не поддерживается версия 3.5.25 и не завелось, на 11.2. не могу собрать из портов но там 3.5.27 уже.
x64
Добрый день а сможете куда то на файлобменик скинуть образ установочный именно ваш?alex827@ukr.net
Добрый, к сожалению нет, я это делал ради эксперимента, системы той уже нет. Если будет время на след неделе попробую ещё раз
Добрый день, Алексей. Вам удалось решить проблему?
Добрый день, а не сможете хотя б завтра попробовать,пожалуста я просто делал когда то, это было http, и не прозрачный а сейчас мне позарез нужно такое поднять на еще и прозрачный, и в компании хочу развернуть и у клиента как раз был случай торговли корпоративной информацией, и мне нужно все концы утечек по максимуму отсекать.
Коллега, удалось решить проблему? Или подсказать чего?
Я уже даже позабыл про эту штуку… Ща устанавливаю свежую FreeBSD, буду пробовать по новой. Посмотрим что выйдет. Потом отпишу
Вроде всё по инструкции делал:
Squid Cache: Version 4.5
12.0-RELEASE FreeBSD
Конфиг немного пришлось изменить (в части https_port 3129) выглядит так:
https_port 3129 intercept ssl-bump cert=/usr/local/etc/squid/squidCA.pem cafile=/usr/local/etc/squid/squidCA.pem key=/usr/local/etc/squid/squidCA.pem generate-host-certificates=on dynamic_cert_mem_cache_size=4MB sslflags=NO_SESSION_REUSE
В таком виде конфиг успешно парсится, squid запускается но через пару сек падает с сообщением:
Squid Parent: squid-1 process 1669 exited with status 1
Squid Parent: squid-1 process 1669 will not be restarted for 3600 seconds due to repeated, frequent failures
Exiting due to repeated, frequent failures
Хз в чём дело 🙁
Пытался я сам повторить, нифига оно не работает уже. Нужны те же версии что и были первоначально. Копать глубже не стал, нету времени уже с этим разбираться
А ограничения скорости для HTTPS можно каким-то образом сделать? А то у меня даже в непрозрачном режиме ограничивается скорость только по HTTP.