Использование прокси серверов оправдано в локальный сетях в том случае, если скорость соединения не очень высока или есть необходимость контролировать работу сотрудников в интернет-в общем под эти требования можно подогнать, в принципе, любые задачи. Короче, прокси-серверу быть! SQUID считается огромным монстром, но если его освоить, то он работает как часы, даже в крупных сетях. С его помощью можно крутить сетевые запросы пользователей так, что неподготовленному человеку становится дурно от избытка информации. Переходим от слов к делу
В этой статье я постараюсь рассказать как настроить кеширующий прокси-сервер для локальной сети, дополнительной возможностью блокировки сайтов, взрослой тематики.
Установка сервера проста до безобразия:sudo apt-get install squid
Правим файл конфигурации:
sudo nano /etc/squid/squid.conf
По умолчанию SQUID использует для работы порт 3128, но нам необходимо сделать так чтобы не было необходимо перенастраивать каждого клиента, для этого необходимо использовать прозрачное проксирование, по этому нам в строку определяющую порт, необходимо добавить transparent, чтобы все конфиге это выглядело:
http_port 3128 transparent
Находим следующий блок:
#acl localnet src 10.0.0.0/24 # RFC1918 possible internal network
#acl localnet src 172.16.0.0/12 # RFC1918 possible internal network#acl localnet src 192.168.0.0/16 # RFC1918 possible internal network
Для повышения безопасности сервер будет обслуживать запросы только из локальной сети, IP адреса в моей локальной сети из диапазона 192.168.1.0/24, Где: 192.168.1.0-подсеть, /24-количество бит в маске-идентификаторе сети (255.255.255.0)
#acl localnet src 10.0.0.0/24 # RFC1918 possible internal network
#acl localnet src 172.16.0.0/12 # RFC1918 possible internal networkacl localnet src 192.168.1.0/24 # RFC1918 possible internal network
Разрешаем доступ из localnet:
http_access allow localnet
Находим и раскоментируем, правило кеширования
cache_dir ufs /var/spool/squid 4096 32 256
Здесь все можно оставить как есть.Если на сервер не много оперативной памяти-1Gb то имеет смысл установить лимит ее использования, нашим сервером. Нам необходимо найти и раскоментировать:
memory_pools on
memory_pools_limit 50 MB
50мб установлено по умолчанию, у меня используется это значение-вполне нормально работает.Для уведомления пользователей об ошибках можно установить страницу ошибок на русском задается она в параметре error_directory и установить кодировку Windows-1251, для желающих можно зайти в директроию /usr/share/squid/errors/ и там посмотреть список папок.
error_directory /usr/share/squid/errors/Russian-1251
На этом основная настройка закончена, сохраняем изменения выходим.Нам необходимо перестроить кеш который хранится в /usr/sbin/squid
sudo /usr/sbin/squid -z
sudo /etc/init.d/squid start
Технически сервер работает и готов к использованию и данной, минимальной конфигурации, вполне хватит для тестов, но он висит на порту 3128 к которому http запросы никаким образом не попадают, для этого нам необходимо завернуть порт 80 и 8080 на 3128 где их примет Squid и обработает.Лезем в файл rc.local
sudo nano /etc/rc.local
В локальную сеть у меня смотрит интерфейс eth2 IP которого 192.168.1.1В сеть провайдера eth1, из этих условий вытекает то что указано ниже:
iptables -t nat -A PREROUTING -i eth2 -p tcp -m tcp --dport 80 -j DNAT --to-destination 192.168.1.1:3128
iptables -t nat -A PREROUTING -i eth1 -p tcp -m tcp --dport 80 -j REDIRECT --to-ports 3128iptables -t nat -A PREROUTING -i eth2 -p tcp -m tcp --dport 8080 -j DNAT --to-destination 192.168.1.1:3128
iptables -t nat -A PREROUTING -i eth1 -p tcp -m tcp --dport 8080 -j REDIRECT --to-ports 3128
Добавляем это в rc.local заменив IP адрес шлюза на тот что используется в вашей сети. Перезагружаем шлюз чтобы настройки применились, можно конечно перезапустить rc.local, но иногда возникают непонятные глюки, которые отнимают много времени. Намного быстрее перезагрузить систему!Проверяем на любом клиентском ПК интернет должен работать, без дополнительных настроек браузера. В целом кеширование данных передаваемых из сети, а также DNS запросов от пользователей, будет производиться, но нам необходимо заблокировать, некоторые сайты и создать нечто, похожее на контент-фильтр.Собирать в «рукопашную» доменные адреса порников- довольно утомительное и неблагодарное занятие, быстрое гугление выдало базу URL адресов, которые были рассортированы по категориям, меня интересовала категория adult, база занимала 14Мб -для текстового файла, реально много, попытка скормить ее? как есть Squid, с треском провалилась прокси-сервер просто отказывался запускаться.Пришлось немного поработать руками, были удалены дублирующиеся записи и домены находившиеся на бесплатных хостингах типа narod.ru, pochta.ru и прочих, т.к. размещение сайтов данной тематики, является нарушением условий использования, то они довольно быстро прибиваются администрацией этих ресурсов, зачастую, они там живут не более месяца, а места занимают много.Для простоты обслуживания я их рассортировывал по доменным зонам com, ru, net, org. Для тех кто будет использовать мои наработки, то их можно копировать как есть, все названия и расширения из данной статьи сохранены.В результате удалось сократить размер файла до 1,7Мб, конечно многое пришлось выкинуть, но на эффективность рабы это не сильно повлияло.Скачать архив, со списком сайтов, можно по этой ссылкеТеперь нам необходимо добавить правила для заблокированных сайтов
sudo nano /etc/squid/squid.conf
И добавляем туда следующее:
acl ru url_regex "/etc/squid/ru.acl"
acl com url_regex "/etc/squid/com.acl"acl org url_regex "/etc/squid/org.acl"
acl net url_regex "/etc/squid/net.acl"
http_access deny ru
http_access deny com
http_access deny org
http_access deny net
Для тех кто использует файлы из архива, их достаточно скопировать в /etc/squid/.Чтобы заблокировать сайт достаточно добавить его в один из файлов и перезагрузить squid.Перезапускаем Squid:
sudo /etc/init.d/squid stop
sudo /etc/init.d/squid start
Пробуем перейти с клиентского ПК по первому попавшемуся адресу из списка, должны получить сообщение что доступ заблокирован-значит все сделано правильно.