Squid + squidGuard на CentOS
Как я уже говорил ранее, Роскомнадзор очень тщательно бдит за исполнением требований государства в области связи. Поэтому требования надо исполнять, иначе не миновать вам штрафных санкций.
Многие уже слышали об Едином Реестре Запрещенных Сайтов. Все доменные имена, что попадают в этот список обязательны для блокирования операторами связи. Но как это сделать технически? Об этом данная статья.
Для начала нам понадобится прокси сервер. Устанавливаем:
# yum install squid
А так же нам потребуется squidGuard. Это дополнителная приблуда подключаемая к прокси, для более быстрой филтрации списка доменов. Без нее наш прокси будет просто жутким тормозом.
Я брал репозиторий отсюда (https://pkgs.org/centos-7/epel-x86_64/squidGuard-1.4-26.el7.x86_64.rpm.html), т.к. через yum установить не удается - нет такого пакета.
Качаем и устанавливаем:
# wget http://dl.fedoraproject.org/pub/epel/7/x86_64/s/squidGuard-1.4-26.el7.x86_64.rpm
# rpm -i squidGuard-1.4-26.el7.x86_64.rpm
Теперь все готово. Можно добавить наш прокси в автозагрузку:
# chkconfig squid on
# service squid start
Для того чтоб все заработало, нам потребуется настроить кофиги. Приведу их в готовом виде.
/etc/squid/squid.conf
visible_hostname myProviderNet.ru
logfile_rotate 5
cache_mem 512 MBacl localnet src 172.16.0.0/12
redirector_bypass on
# подключаем модуль squidGuard
url_rewrite_program /usr/bin/squidGuard -c /etc/squid/squidGuard.conf
url_rewrite_children 5acl Safe_ports port 80 # http
http_access deny !Safe_ports
http_access allow localnethttp_port 127.0.0.1:3128 transparent
http_port 10.0.0.11:3128 transparent # адрес прокси в локальной сетиminimum_object_size 2 KB
maximum_object_size 1024 KBcoredump_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
/etc/squid/squidGuard.conf
dbhome /usr/rkn # указываем модулю, где хранятся списки для блокирования
logdir /var/log/squidGuard # дирректория для логовsrc net {
ip 172.16.0.0/12 # указываем тут всю нашу подсеть
}dest zapret {
domainlist block/domains.list # полный путь будет выглядеть так: /usr/rkn/block/domains.list
urllist block/urls.list
redirect http://mysite.org/bad.php # тут я указал страничку, на которую будет происходить редирект при сразатывании блокировки. Можно там написать, что сайт заблокирован.
}acl {
net {
pass !zapret all # предоставить доступ к сайтам не входящим в список запрещенных
}
default {
pass none # все остальное блокируем и редиректим на инфо-страничку
redirect http://mysite.org/bad.php
}
}
Осталось только перезапустить службу и наш фильтр готов:
# service squid restart
Но что делать с огромным числом пользователей? Не ходить же к каждому и не настраивать им прокси на все браузеры...
Будем всех автоматически заворачивать на наш прокси, так сказать без спроса. В этом нам поможет iptables
# iptables -t nat -A PREROUTING -s 172.16.0.0/12 -p tcp -m multiport --dport 80,8080 -j DNAT --to-destination <serverIP>:3128
# iptables -t nat -A POSTROUTING -p tcp -s 172.16.0.0/12 -d <serverIP> --dport 3128 -j SNAT --to-source <serverIP>
Теперь каждый, кто будет ломиться на сайты расположенные за сервером, автоматически будет пропущен через прокси, который в свою очередь уже решит: стоит ли его туда пускать.
Хочется добавить один момент. На некоторых системах никак не удается победить проблему с доступом к BerkleyDB от имени squidGuard`а. А всего-то нужно запускать сам squid от имени пользователя squid
# sudo -u squid squid -f /etc/squid/squid.conf
К сожалению, как наладить автозапуск от имени конкретного пользователя я так и не разобрался. Но как говорится "Coming soon..."