SQUID с поддержкой HTTPS на ODROID-C1 Debian Jessie minimal

Конфигурирование прокси-сервера (Установка, настройка SQUID)
Ответить
Аватара пользователя
Роман Торопов
Администратор
Сообщения: 134
Зарегистрирован: 24 мар 2008, 10:49
Откуда: г. Пермь
Контактная информация:

SQUID с поддержкой HTTPS на ODROID-C1 Debian Jessie minimal

Сообщение Роман Торопов » 29 янв 2017, 07:23

Скачиваем образ OC, устанавливаем, входим
Default Login: root
Default Password: odroid

Код: Выделить всё

# apt-get update && apt-get upgrade && apt-get dist-upgrade
Идем по-порядку, (оригинальный текст).
1)
а) Для начала, подготовимся к сборке пакетов:

Код: Выделить всё

apt-get install git fakeroot checkinstall build-essential devscripts patch mc
apt-cache policy squid3
apt-get build-dep squid3
apt-get build-dep libecap2
apt-get install libssl-dev libgnutls28-dev
б) Далее скачаем Libressl:

Код: Выделить всё

cd /usr/local/src
wget http://ftp.openbsd.org/pub/OpenBSD/LibreSSL/libressl-2.1.6.tar.gz
tar -xzvf libressl-2.1.6.tar.gz
cd libressl-2.1.6
в) теперь собираем:

Код: Выделить всё

./configure
make
checkinstall --pkgname libressl --pkgversion 2.1.6
2) Теперь можно установить Libressl:

Код: Выделить всё

dpkg -i libressl_2.1.6-1_armhf.deb
ldconfig
б) После установки необходимо настроить использование LibreSSL по-умолчанию:

Код: Выделить всё

mv /usr/bin/openssl /usr/bin/openssl-1
update-alternatives --install /usr/bin/openssl openssl /usr/bin/openssl-1 10
update-alternatives --install /usr/bin/openssl openssl /usr/local/bin/openssl 50
update-alternatives --config openssl
в) Проверим, получилось ли поставить Libressl:

Код: Выделить всё

openssl version
>>   LibreSSL 2.1.6
Если выхлоп консоли похожий, то все получилось. Идем дальше.

Аватара пользователя
Роман Торопов
Администратор
Сообщения: 134
Зарегистрирован: 24 мар 2008, 10:49
Откуда: г. Пермь
Контактная информация:

Re: SQUID на ODROID-C1 Debian Jessie minimal

Сообщение Роман Торопов » 29 янв 2017, 07:30

3) На очереди Libecap.
а) Необходимо отредактировать sources.list, включив туда исходники из ветки testing (это необходимо, так как нам нужно компилировать новый libecap, который в свою очередь необходим для сборки Squid):

Код: Выделить всё

deb-src http://ftp.de.debian.org/debian/ testing main contrib non-free
Обновим кеш пакетов:

Код: Выделить всё

apt-get update
А теперь скачаем из Testing нужные исходники:

Код: Выделить всё

apt-get source libecap3/testing
Далее соберем libecap:

Код: Выделить всё

cd libecap-1.0.1/
dpkg-buildpackage -us -uc -nc -d
либо скачиваем готовые пакеты тут:
libecap3_1.0.1-3.2_armhf.deb
libecap3-dev_1.0.1-3.2_armhf.deb

б) Удалим старье, и установим новье:

Код: Выделить всё

apt-get purge libecap2
dpkg -i libecap3_1.0.1-3.2_armhf.deb
dpkg -i libecap3-dev_1.0.1-3.2_armhf.deb
Если система заматерилась на неудовлетворенные зависимости, сделаем:

Код: Выделить всё

apt-get -f install

Аватара пользователя
Роман Торопов
Администратор
Сообщения: 134
Зарегистрирован: 24 мар 2008, 10:49
Откуда: г. Пермь
Контактная информация:

Re: SQUID на ODROID-C1 Debian Jessie minimal

Сообщение Роман Торопов » 29 янв 2017, 09:10

4) Подобрались к компиляции самого Squid'a.
а) Качаем последний самый работающий снэпшот Squid'a:

Код: Выделить всё

wget http://www.squid-cache.org/Versions/v3/3.5/squid-3.5.8.tar.gz
Распакуем:

Код: Выделить всё

tar -xf squid-3.5.8.tar.gz
cd squid-3.5.8
б) Качаем патч для bio.cc, и патчим:

Код: Выделить всё

wget -O bug-4330-put_cipher_by_char-t1.patch http://bugs.squid-cache.org/attachment.cgi?id=3216
patch -p0 -i bug-4330-put_cipher_by_char-t1.patch
»  patching file src/ssl/bio.cc
5) А этот этап один из самых ответственных. Необходимо сконфигурировать Squid с нужными опциями. В предыдущей статье использовался файл debian/rules, но компилировать Squid в этой инструкции мы будем с помощью make, и создавать пакеты будем с помощью checkinstall. Поэтому опций будет побольше. И вот какие:

Код: Выделить всё

./configure --prefix=/usr \
--includedir=${prefix}/include \
--mandir=${prefix}/share/man \
--infodir=${prefix}/share/info \
--sysconfdir=/etc \
--localstatedir=/var \
--libexecdir=${prefix}/lib/squid \
--srcdir=. \
--disable-maintainer-mode \
--disable-dependency-tracking \
--disable-silent-rules \
--datadir=/usr/share/squid \
--sysconfdir=/etc/squid \
--mandir=/usr/share/man \
--enable-inline \
--disable-arch-native \
--enable-async-io=8 \
--enable-storeio=ufs,aufs,diskd,rock \
--enable-removal-policies=lru,heap \
--enable-delay-pools \
--enable-cache-digests \
--enable-icap-client \
--enable-follow-x-forwarded-for \
--enable-url-rewrite-helpers=fake \
--enable-eui \
--enable-esi \
--enable-icmp \
--enable-zph-qos \
--enable-ecap \
--disable-translation \
--with-swapdir=/var/spool/squid \
--with-logdir=/var/log/squid \
--with-pidfile=/var/run/squid.pid \
--with-filedescriptors=65536 \
--with-large-files \
--with-default-user=proxy \
--enable-ssl \
--enable-ssl-crtd \
--with-openssl \
--enable-linux-netfilter \
'CFLAGS=-g -O2 -fPIE -fstack-protector-strong -Wformat -Werror=format-security -Wall' \
'LDFLAGS=-fPIE -pie -Wl,-z,relro -Wl,-z,now' \
'CPPFLAGS=-D_FORTIFY_SOURCE=2' \
'CXXFLAGS=-g -O2 -fPIE -fstack-protector-strong -Wformat -Werror=format-security'
Будьте предельно внимательны. Нас больше интересуют, три опции: --enable-ssl, --enable-ssl-crtd, --with-openssl.
Остальные опции можете изменять в соответствие с вашими предпочтениями
(если хотите их менять, обязательно прочитайте документацию по конфигурированию).

Аватара пользователя
Роман Торопов
Администратор
Сообщения: 134
Зарегистрирован: 24 мар 2008, 10:49
Откуда: г. Пермь
Контактная информация:

Re: SQUID на ODROID-C1 Debian Jessie minimal

Сообщение Роман Торопов » 29 янв 2017, 09:15

6) Теперь мы добрались до компилирования.
а) Запаситесь терпением и компилируем (компиляция идёт более часа). б) Неоднозначный этап. Необходимо создать директории /usr/share/squid/ и /usr/share/squid/icons, иначе следующий этап не выполнится из-за отсутствия этих папок (почему checkinstall их сам не создает, я не разбирался, к сожалению):

Код: Выделить всё

mkdir -p  /usr/share/squid/icons

в) А теперь создаем установочные пакеты:

Код: Выделить всё

checkinstall --pkgname squid --pkgversion 3.5.8
7) Мы подходим к финалу. Устанавливаем Squid:

Код: Выделить всё

dpkg -i squid_3.5.8-1_armhf.deb
Создадим нужный сервис systemd:

Код: Выделить всё

touch /etc/systemd/system/squid.service
nano /etc/systemd/system/squid.service
Со следующим содержимым:

Код: Выделить всё

## Copyright (C) 1996-2015 The Squid Software Foundation and contributors
##
## Squid software is distributed under GPLv2+ license and includes
## contributions from numerous individuals and organizations.
## Please see the COPYING and CONTRIBUTORS files for details.
##

[Unit]
Description=Squid Web Proxy Server
After=network.target

[Service]
Type=simple
ExecStart=/usr/sbin/squid -sYC -N
ExecReload=/bin/kill -HUP $MAINPID
KillMode=process

[Install]
WantedBy=multi-user.target
Включим созданный сервис

Код: Выделить всё

systemctl enable squid

Аватара пользователя
Роман Торопов
Администратор
Сообщения: 134
Зарегистрирован: 24 мар 2008, 10:49
Откуда: г. Пермь
Контактная информация:

Re: SQUID на ODROID-C1 Debian Jessie minimal

Сообщение Роман Торопов » 29 янв 2017, 09:19

9) Да, вы правы, это еще не все. Так как мы компилировали полностью оригинальные исходники (за исключением патча на bio.cc), конфигурационные файлы у нас установились вида squid.conf.default, mime.conf.default и т.п. Конечно же, Squid о них и не слышал. Переименуем их в Squid'очитаемый вид:

Код: Выделить всё

cp /etc/squid/squid.conf.default /etc/squid/squid.conf
cp /etc/squid/mime.conf.default /etc/squid/mime.conf
cp /etc/squid/cachemgr.conf.default /etc/squid/cachemgr.conf
cp /etc/squid/errorpage.css.default /etc/squid/errorpage.css
10) И это еще не все=) Необходимо вручную создать папку для логов Squid'a и назначить ей соответствующие права:

Код: Выделить всё

mkdir /var/log/squid
chown proxy /var/log/squid
11) И вот он — финальный этап. Запуск Squid'a и проверка статуса сервиса!

Код: Выделить всё

systemctl start squid

systemctl status -l squid
● squid.service - Squid Web Proxy Server
   Loaded: loaded (/etc/systemd/system/squid.service; enabled)
   Active: active (running) since Пт 2015-12-04 23:32:04 YEKT; 2min 41s ago
 Main PID: 590 (squid)
   CGroup: /system.slice/squid.service
           ├─590 /usr/sbin/squid -sYC -N
           └─591 (logfile-daemon) /var/log/squid/access.log
Если выхлоп консоли выглядит похоже, а точнее в нем нет ошибок и обязательно присутствует строка «Active: active (running)», то вы успешно установили себе Squid с поддержкой прозрачного проксирования HTTPS! Поздравляю!

Аватара пользователя
Роман Торопов
Администратор
Сообщения: 134
Зарегистрирован: 24 мар 2008, 10:49
Откуда: г. Пермь
Контактная информация:

Re: SQUID на ODROID-C1 Debian Jessie minimal

Сообщение Роман Торопов » 29 янв 2017, 09:23

Почти готово. Перейдем в каталог /etc/squid, кое-что там изменим. Создадим pem файлик, необходимый для SSL-Bump'инга:

Код: Выделить всё

openssl req -new -newkey rsa:1024 -days 365 -nodes -x509 -keyout squidCA.pem -out squidCA.pem
И приведем squid.conf к следующему виду:

Код: Выделить всё

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

dns_nameservers 8.8.8.8
http_access deny !Safe_ports

http_access deny CONNECT !SSL_ports

http_access allow localhost manager
http_access deny manager

http_access allow localnet
http_access allow localhost
http_access deny all

#прозрачный порт указывается опцией intercept
http_port 192.168.1.254:3128 intercept options=NO_SSLv3:NO_SSLv2

#также нужно указать непрозрачный порт, ибо если захотите вручную указать адрес
#прокси в браузере, указав прозрачный порт, вы получите ошибку доступа, поэтому нужно
#указывать непрозрачный порт в браузере, если конечно такое желание будет, к тому же в логах #сыпятся ошибки о том, что непрохрачный порт не указан=) 
http_port 192.168.1.254:3130 options=NO_SSLv3:NO_SSLv2 

#и наконец, указываем HTTPS порт с нужными опциями
https_port 192.168.1.254:3129 intercept ssl-bump options=ALL:NO_SSLv3:NO_SSLv2 connection-auth=off cert=/etc/squid/squidCA.pem

always_direct allow all
sslproxy_cert_error allow all
sslproxy_flags DONT_VERIFY_PEER

#укажем правило со списком блокируемых ресурсов (в файле домены вида .domain.com)
acl blocked ssl::server_name  "/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/lib/squid/ssl_crtd -s /var/lib/ssl_db -M 4MB

coredump_dir /var/spool/squid
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
cache_dir aufs /var/spool/squid 20000 49 256
maximum_object_size 61440 KB
minimum_object_size 3 KB

cache_swap_low 90
cache_swap_high 95
maximum_object_size_in_memory 512 KB
memory_replacement_policy lru
logfile_rotate 4
Далее завернем файрволом нужные порты на Squid:

Код: Выделить всё

iptables -t nat -A PREROUTING -p tcp -m tcp -s 192.168.1.0/24 --dport 443 -j REDIRECT --to-ports 3129
iptables -t nat -A PREROUTING -p tcp -m tcp -s 192.168.1.0/24 --dport 80 -j REDIRECT --to-ports 3128

Ответить