3.2 Установка и настройка Squid

Описание Squid
Установка Squid и настройка в прозрачном режиме работы
Настройка Selinux для Squid
Настройка кэширования
Контроль доступа к сайтам
Перенаправление трафика
Настройка браузера

 

Описание Squid

Squid – программа, представляющая собой кэширующий прокси-сервер для протоколов HTTP, HTTPS, FTP и других. Используется для кэширования часто запрашиваемого веб-контента, а также для фильтрации сетевого трафика.

 

Установка Squid и настройка в прозрачном режиме работы

Установка

Установите прокси-сервер следующей командой:
— для РЕД ОС версии 7.1 или 7.2:

# sudo yum install squid

— для РЕД ОС версии 7.3 и старше:

# sudo dnf install squid

Подготовка сертификатов

Чтобы работал HTTPS, необходимо сгенерировать сертификаты. Для этого создаем папку для хранения сертификатов, например, в /etc/squid/sslcert.

# sudo mkdir /etc/squid/sslcert

Переходим в эту папку:

# cd /etc/squid/sslcert

Генерируем ключ:

# sudo openssl genrsa -out /etc/squid/sslcert/squid.key

Создаем csr-запрос, используя ключ; нужно будет указать всю необходимую информацию для csr:

# sudo openssl req -new -key /etc/squid/sslcert/squid.key -out /etc/squid/sslcert/squid.csr

Подписываем сертификат самим собой:

# sudo openssl x509 -req -days 3650 -in /etc/squid/sslcert/squid.csr -signkey /etc/squid/sslcert/squid.key -out /etc/squid/sslcert/squid.pem

Генерируем корневой сертификат, который нужно будет добавить в браузер:

# sudo openssl x509 -in /etc/squid/sslcert/squid.pem -outform DER -out squid.der

Далее нужно будет дать права на папку с сертификатами для squid:

# chown -R :squid /etc/squid/sslcert

Описание настроек Squid.conf

Открываем файл настроек:

# sudo nano /etc/squid/squid.conf

Блок настроек «acl localnet src …» устанавливает правила доступа для вашей локальной сети, если в списке нет IP-адреса вашей сети, то его нужно добавить, например:

acl localnet src 10.9.1.0/24

или через файл:

acl localnet src "/etc/squid/acl_localnet"

* кавычки обязательны
** после необходимо создать файл /etc/squid/acl_localnet и с каждой строчки перечислить разрешенные IP-адреса.

Блок настроек http_access устанавливает разрешения на доступ; чтобы разрешить весь трафик, добавляем следующую строчку:

http_access allow all

* важно, чтобы выше она была запрещающей – http_access deny all.

Настройка Squid с HTTPS

Открываем файл конфигурации:

# sudo nano /etc/squid/squid.conf

Находим строку с http_port 3128 и под ней дописываем строки:
— создание прозрачного HTTP-порта 3129:

http_port 3129 intercept

— создание порта 3130 для https-трафика с генерацией сертификатов по ключу:

https_port 3130 intercept ssl-bump generate-host-certificates=on dynamic_cert_mem_cache_size=4MB cert=/etc/squid/sslcert/squid.pem key=/etc/squid/sslcert/squid.key

Отключаем проверку сертификатов:

sslproxy_cert_error allow all

Указываем, что необходимо принимать сертификаты, даже если они не прошли проверку:

sslproxy_flags DONT_VERIFY_PEER

Перенаправляем весь трафик на squid:

always_direct allow all

Устанавливаем безопасное соединение с сервером, затем с клиентом, используя имитированный сертификат сервера:

ssl_bump server-first all

Устанавливаем TCP-туннель, не расшифровывая прокси-трафик:

ssl_bump none all

Указываем расположение программы генерации сертификатов и устанавливаем кэширование:

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

Сохраняем и закрываем файл /etc/squid/squid.conf.

Дальше нужно пересоздать базу данных сертификатов:

# rm -rf /var/lib/ssl_db
# sudo /usr/lib64/squid/security_file_certgen -c -s /var/lib/ssl_db -M 4MB

Устанавливаем владельца squid на папку базы данных сертификатов:

# sudo chown -R :squid /var/lib/ssl_db

 

Настройка Selinux для Squid

Добавляем политики:

# sudo semanage fcontext -a -t squid_conf_t '/var/lib/ssl_db/index.txt'
# sudo semanage fcontext -a -t squid_conf_t '/var/lib/ssl_db/size'

Применяем политики:

# sudo /sbin/restorecon -v /var/lib/ssl_db/index.txt
# sudo /sbin/restorecon -v /var/lib/ssl_db/size

Перезагружаем систему и запускаем squid:

# sudo systemctl start squid

Проверяем работоспособность squid:

# sudo systemctl status squid

Squid должен быть активен.

Добавляем squid в автозагрузку:

# sudo systemctl enable squid

 

Настройка кэширования

Настройте директорию для кэша в файле /etc/squid/squid.conf:

cache_dir ufs /var/spool/squid 4096 32 256

* где ufs – файловая система (ufs для SQUID является самой подходящей);
/var/spool/squid — директория хранения кэша;
4096 — объем пространства в мегабайтах, которое будет выделено под кэш;
32 — количество каталогов первого уровня, которое будет создано для размещения кэша;
256 — количество каталогов второго уровня, которое будет создано для размещения кэша.

Теперь создайте структуру папок под кэш следующей командой:

# sudo squid -z

Перезапускаем squid:

# sudo systemctl restart squid

 

Контроль доступа к сайтам

Открываем конфигурационный файл squid:

nano /etc/squid/squid.conf

После строки «acl CONNECT method CONNECT» прописываем:

acl BLOCKED url_regex -i "/etc/squid/blocklist"

Тем самым создается список доступа к сайтам.

Далее перед строкой «http_access allow localnet» для блокировки списка доступа прописываем:

http_access deny BLOCKED

Сохраняем конфигурационный файл.

Создаем файл со списком сайтов для блокировки:

# sudo nano /etc/squid/blocklist

Например, с таким списком сайтов:

facebook\.com
vk\.com
youtube\.com

Сохраняем файл.

Перечитываем конфигурацию squid:

# sudo systemctl reload squid

Блокировка сайтов настроена, осталось только перенаправить трафик на сервер squid.

 

Перенаправление трафика

Включаем ip_forwarding для разрешения проходящего трафика:

# sudo echo 1 >> /proc/sys/net/ipv4/ip_forward

Чтобы настройка ip_forward не сбрасывалась после перезагрузки, нужно в конце файла /usr/lib/sysctl.d/50-default.conf прописать:

# net.ipv4.ip_forward = 1

Добавляем правила для iptables:

# sudo iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 3129
# sudo iptables -t nat -A PREROUTING -p tcp --dport 443 -j REDIRECT --to-port 3130

Для тестирования прокси-сервера с локальным трафиком, надо перенаправлять на Squid весь трафик, кроме трафика от Squid, это можно сделать правилами:

# sudo iptables -t nat -A OUTPUT -p tcp -m owner ! --uid-owner squid --dport 80 -j REDIRECT --to-port 3129
# sudo iptables -t nat -A OUTPUT -p tcp -m owner ! --uid-owner squid --dport 443 -j REDIRECT --to-port 3130

Если нужно сохранить правила iptables, чтобы после перезагрузки они не сбрасывались, необходимо ввести команду:

# sudo service iptables save

Перезапускаем squid:

# sudo systemctl restart squid

 

Настройка браузера

Сейчас большинство сайтов используют технологию HSTS для предотвращения MiTM-атак, поэтому если вы хотите настроить Squid для фильтрации трафика в своей организации, вам следует добавить сертификат .der. Рассмотрим на примере Chrome.

В меню браузера переходим по пути: Настройки->Конфиденциальность и безопасность->Безопасность->Настроить сертификаты->Центры сертификации->Импорт.

Добавляем созданный ранее сертификат для браузера по пути:

/etc/squid/sslcert/squid.pem

Устанавливаем все галочки и нажимаем «ОК».

Если все сделано правильно, то при входе на запрещенный сайт должна отобразиться такая страница:

Если вы нашли ошибку, пожалуйста, выделите текст и нажмите Ctrl+Enter.

Print Friendly, PDF & Email