Главная

Прозрачный прокси с фильтрацией https

Хочу поделиться своим опытом установки squid3 в качестве прозрачного прокси с фильтрацией https на шлюз, работающий под управлением Debian 8 Jessie.

Сразу скажу, что данная статья является не чем то новым, но обобщением опыта, полученного от перелопачивания немалого объёма информации.

 

Передо мной возникла задача обеспечить контент фильтрацию в учебном заведении. Имеющиеся решения, которые не вынуждают лезть в консоль, оказались не очень подходящими. Заведение закупило пачку лицензий netPolice, но мало того, что программа ставится на каждую машину, которых более 50, так ещё ужасно грузит систему и доставляет попутные проблемы. Неплохой свободный аналог - Интернет - цензор, но он к сожалению перестал поддерживаться. Когда мне всё это надоело, а откладывать дальше было некуда, я перешёл на 3 суток в режим "Не беспокоить".

И так, что мы имеем:

  • импровизированный сервер (из десктопа);
  • на его борту 2 сетевые карты (одна в WAN, другая в LAN);
  • более 50 машин в локальной сети;
  • Debian 8 x64;
  • доступ узлов в интернет управляется iptables;

Инструкционная карта

Часть первая. Установка.

Скачиваем собранные deb пакеты здесь.

1) Устанавливаем Libressl

dpkg -i libressl_2.1.6-1_amd64.deb

ldconfig

 

2) Ставим новые пакеты, удаляя при этом старые

apt-get purge libecap2

dpkg -i libecap3_1.0.1-2_amd64.deb

dpkg -i libecap3-dev_1.0.1-2_amd64.deb

3) Устанавливаем Squid

dpkg -i squid_3.5.8-1_amd64.deb


4) Создаём сервис squid

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

########

 

5) Включим созданный сервис

systemctl enable squid

 

6) Переименуем конфигурационные файлы в 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

 

 

7) Создадим папку для логов Squid'a и назначим ей соответствующие права:

mkdir /var/log/squid

chown proxy /var/log/squid

 

8) Проверяем работу

systemctl start squid

systemctl status -l squid

 

Часть вторая. Конфигурация.

1) Переходим в каталог squid

cd /etc/squid/

 

2) Генерируем сертификат

openssl req -new -newkey rsa:1024 -days 365 -nodes -x509 -keyout squidCA.pem -out squidCA.pem

 

3) Правим конфигурационный файл

nano squid.conf

 

################

# Локалная сеть

acl localnet src 192.168.10.0/24

 

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

 

# Список разрешённыхhttp сайтов

acl whiteHttp url_regex "/etc/squid/whiteHttp.list"

 

dns_nameservers 192.168.137.254

 

http_access deny !Safe_ports

http_access deny CONNECT !SSL_ports

http_access deny manager

 

#Разрешаем осуществлять коннект к ресурсу, если https

http_access allow localnet CONNECT

 

# Запрещаем доступ к http сайтам не из белого списка

http_access deny localnet !whiteHttp

 

http_access allow localnet

http_access allow localhost

http_access deny all

 

#прозрачный порт указывается опцией intercept

http_port 192.168.10.1:3128 intercept options=NO_SSLv3:NO_SSLv2

 

 

#также нужно указать непрозрачный порт, ибо если захотите вручную указать адрес

http_port 192.168.10.1:3130 options=NO_SSLv3:NO_SSLv2 

 

#и наконец, указываем HTTPS порт с нужными опциями

https_port 192.168.10.1: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 whiteHttps ssl::server_name  "/etc/squid/whiteHttps.txt"

acl step1 at_step SslBump1

ssl_bump peek step1 !whiteHttps

 

#терминируем соединение, если клиент заходит на запрещенный ресурс

ssl_bump terminate !whiteHttps

 

sslcrtd_program /usr/lib/squid/ssl_crtd -s /var/lib/ssl_db -M 4MB

 

shutdown_lifetime 3

################

 

4) Создадим в этом же каталоге файлы с белыми списками

nano whiteHttp.list 

 

aa-mir\.ru

 

nano whiteHttps.txt

.yandex.ru

.ya.ru

 

5) С помощью iptables заставляем всех ходить в интернет через прокси

# Включить MASQUERADE, если он не включен

# iptables -t nat -A POSTROUTING -o eth1 -j MASQUERADE # где eth0 - WAN интерфейс

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

 

6) Перезагружаем squid

systemctl restart squid

 

Список источников:

https://habrahabr.ru/post/314718/

https://habrahabr.ru/post/267851/

https://habrahabr.ru/post/272733/

https://interface31.ru/tech_it/2013/09/squid-nastraivaem-url-filtraciyu-po-spiskam.html

http://wiki.centerstart.ru/index.php/