Ubuntu → Настройка прокси-сервера SQUID+простой контент фильтр на Ubuntu Server 10.04 / 10.10
Использование прокси серверов оправдано в локальный сетях в том случае, если скорость соединения не очень высока или есть необходимость контролировать работу сотрудников в интернет-в общем под эти требования можно подогнать, в принципе, любые задачи. Короче, прокси-серверу быть!
SQUID считается огромным монстром, но если его освоить, то он работает как часы, даже в крупных сетях. С его помощью можно крутить сетевые запросы пользователей так, что неподготовленному человеку становится дурно от избытка информации. Переходим от слов к делу.
В этой статье я постараюсь рассказать как настроить кеширующий прокси-сервер для локальной сети, дополнительной возможностью блокировки сайтов, взрослой тематики.
Установка сервера проста до безобразия:
Правим файл конфигурации:
По умолчанию SQUID использует для работы порт 3128, но нам необходимо сделать так чтобы не было необходимо перенастраивать каждого клиента, для этого необходимо использовать прозрачное проксирование, по этому нам в строку определяющую порт, необходимо добавить transparent, чтобы все конфиге это выглядело:
Находим следующий блок:
Для повышения безопасности сервер будет обслуживать запросы только из локальной сети, IP адреса в моей локальной сети из диапазона 192.168.1.0/24,
Где: 192.168.1.0-подсеть, /24-количество бит в маске-идентификаторе сети (255.255.255.0)
Разрешаем доступ из localnet:
Находим и раскоментируем, правило кеширования
Здесь все можно оставить как есть.
Если на сервер не много оперативной памяти-1Gb то имеет смысл установить лимит ее использования, нашим сервером. Нам необходимо найти и раскоментировать:
Для уведомления пользователей об ошибках можно установить страницу ошибок на русском задается она в параметре error_directory и установить кодировку Windows-1251, для желающих можно зайти в директроию /usr/share/squid/errors/ и там посмотреть список папок.
На этом основная настройка закончена, сохраняем изменения выходим.
Нам необходимо перестроить кеш который хранится в /usr/sbin/squid
Технически сервер работает и готов к использованию и данной, минимальной конфигурации, вполне хватит для тестов, но он висит на порту 3128 к которому http запросы никаким образом не попадают, для этого нам необходимо завернуть порт 80 и 8080 на 3128 где их примет Squid и обработает.
Лезем в файл rc.local
В локальную сеть у меня смотрит интерфейс eth2 IP которого 192.168.1.1
В сеть провайдера eth1, из этих условий вытекает то что указано ниже:
Добавляем это в rc.local заменив IP адрес шлюза на тот что используется в вашей сети.
Перезагружаем шлюз чтобы настройки применились, можно конечно перезапустить rc.local, но иногда возникают непонятные глюки, которые отнимают много времени. Намного быстрее перезагрузить систему!
Проверяем на любом клиентском ПК интернет должен работать, без дополнительных настроек браузера.
В целом кеширование данных передаваемых из сети, а также DNS запросов от пользователей, будет производиться, но нам необходимо заблокировать, некоторые сайты и создать нечто, похожее на контент-фильтр.
Собирать в «рукопашную» доменные адреса порников- довольно утомительное и неблагодарное занятие, быстрое гугление выдало базу URL адресов, которые были рассортированы по категориям, меня интересовала категория adult, база занимала 14Мб -для текстового файла, реально много, попытка скормить ее? как есть Squid, с треском провалилась прокси-сервер просто отказывался запускаться.
Пришлось немного поработать руками, были удалены дублирующиеся записи и домены находившиеся на бесплатных хостингах типа narod.ru, pochta.ru и прочих, т.к. размещение сайтов данной тематики, является нарушением условий использования, то они довольно быстро прибиваются администрацией этих ресурсов, зачастую, они там живут не более месяца, а места занимают много.
Для простоты обслуживания я их рассортировывал по доменным зонам com, ru, net, org. Для тех кто будет использовать мои наработки, то их можно копировать как есть, все названия и расширения из данной статьи сохранены.
В результате удалось сократить размер файла до 1,7Мб, конечно многое пришлось выкинуть, но на эффективность рабы это не сильно повлияло.
Теперь нам необходимо добавить правила для заблокированных сайтов
И добавляем туда следующее:
Для тех кто использует файлы из архива, их достаточно скопировать в /etc/squid/.
Чтобы заблокировать сайт достаточно добавить его в один из файлов и перезагрузить squid.
Перезапускаем Squid:
Пробуем перейти с клиентского ПК по первому попавшемуся адресу из списка, должны получить сообщение что доступ заблокирован-значит все сделано правильно.
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 network
acl 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 ! -d 192.168.1.0/24 -p tcp -m multiport --dports 80,8080 -j DNAT --to-destination 192.168.1.1: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
Пробуем перейти с клиентского ПК по первому попавшемуся адресу из списка, должны получить сообщение что доступ заблокирован-значит все сделано правильно.
72 комментария
Не подскажите как настроить squid для одной сетевой карты. То есть. Сервер подключен к маршрутизатору. Ip сервера 192.168.10.5/24. Локальные пользователи на 192.168.9.0/24. Весь трафик между 192.168.10.0/24 и 192.168.9.0/24 через маршрутизатор. Сам сервер имеет доступ через маршрутизатор в интернет. Проблема как настроить squid на сервере 192.168.10.5.
Вот что пришло на ум прочитав ваш комментарий-я все правильно понял?
<--192.168.9.0/24---->|ROUTER|<---192.168.10.0/24--network clients--->
                                                   <---|squid server (192.168.10.5)|
Посути squid нужен как кэш прокси для сетки 192.168.9.0/24
Объяснение конечно топорное, но общий смысл я думаю понятен.
Рекомендую для прочтения материалы по основам сетевой маршрутизации.
может поправите howitmake на howitmake.ru
Поправил.
1. Файловый сервер smb (для локальных пользвоателей 1С)
2. Кеширующий прокси (для локальных пользователей)
3. Фтп-сервер (для обмена с удаленными складами)
4. Веб-сервер (для создания корпоративного сайта, доступного из внешнего мира знающему выделенный IP)
5. SSH-сервер (для удаленного администрирования)
Какие требования к системному блоку желательно выполнить, чтобы все работало без сбоев.
Чтобы все работало без сбоев, а у вас судя по требованиям, попадает в нормальный такой продакшн, да и фирма у вас торговая, то имеет смысл купить нормальный сервер, на серверных комплектующих для него нормальный UPC+взять простой NAS для бэкапов или собрать на основе декстопного железа и хардов большого объема поставив на него FreeNAS(но это если совсем бюджетно), думаю что смысл уловили.
В общем, в вашей ситуации порядок действий следующий:
1-Сервер, думаю что самого бюджетного вам хватит за глаза к нему 3-4 Гб ОЗУ, RAID контроллер,4-HDD(объем зависит от размера хранимой информации)RAID массив 10го уровня
2-UPS Не жалеть денег, купить мощный ИБП думаю что APC Back-UPS Pro BR1500GI, 1500ВA вам хватит вполне (но его мощность зависит от мощности БП сервера!) Из этих характеристик его и нужно выбирать, а как его настроить под Linux прочитать можно в этой статье
3-NAS Не ленитесь его купить и настроить т.к. стоимость формации зачастую выше, чем стоимость самой железки, а в случае сбоя ПО или железа на сервере, вас спасет только регулярное АВТОМАТИЧЕСКОЕ резервное копирование. И не храните резервные копии на том же сервере, это не правильно. В общем -регулярное резервное копирование-залог хорошего сна и безгеморойного проведения отпуска под пальмой с выключенным телефоном! :)
Настроил всё по статье, не работает, позже выложу конфиги…
iptables -t nat -A PREROUTING -i eth2 -p tcp -m tcp --dport 80 -j DNAT --to-destination 192.168.1.1:3128
-t nat – используем таблицу преобразования сетевых адресов
-A PREROUTING – вносим изменения на входе в шлюз
-i eth2 – интерфейс с которого получен пакет
-p tcp указываем протокол
-m – подключаем расширения для tcp
--dport – порт назначения
-j – описание того, что нужно выполнить переход
DNAT — преобразуем адреса места назначения в IP заголовке пакета
--to-destination — указываем, какой адрес подставлять к качестве адреса назначения
т.е. все пакеты с внутреннего интерфейса прокси с порта 80 попадают на тот же интерфейс, но на порт 3128? (я понимаю, что туплю, но только начал разбираться с linux...), что здесь делает DNAT, если интерфейс один и тот же.
все пакеты с внешнего интерфейса с 80 порта перенаправляются на порт 3128 (на порт какого интерфейса eth1 или eth2?)
iptables -t nat -A PREROUTING -i eth2 -p tcp -m tcp --dport 80 -j DNAT --to-destination 192.168.244.252:3128
iptables -t nat -A PREROUTING -i eth1 -p tcp -m tcp --dport 80 -j REDIRECT --to-ports 3128
читал в инете, везде описывают такие же правила, но у меня не работает, в какую сторону смотреть?
Проверяйте работоспособность iptables
А «на глаз» не заметно.
Что бы не мутит фрокс я наколхозил — запихал wget в cron на самом проксике и расшарил, а на нуждающемся компе сделал cmdху для копирования данных файлов.
Роутинг тут не причем, необходимо проверить что пользователи ходят через проксю, по сути, вы вообще можете «выпилить» маршрутизацию из iptables, интернет будет работать только у тех кто ходить через SQUID.
Для проверки, можно все это закомментировать (#) в rc.local, а на пользовательских ПК проверить настройки браузера, прописан ли там ваш прокси-сервер, ну и за одно чтобы порт был указан правильный, который слушает SQUID.
Роутинг не нужен, достаточно сделать перенаправление портов
вот для примера:
шлюз настроен по вашим мануалам «Настройка шлюза локальной сети, на базе Ubuntu 12.04 „
за ранее спасибо ВАМ!
Обратитесь к документации по SQUID…
Хочу поблагодарит Вас за ваши статьи, очень полезные.
В общем настроил шлюз в убунту 12,04 все работает как часы, хотел бы у вас уточнит кое что:
1, Возможно ли контралировать интернет в организации с помошью убунту 12,04 (на том же шлюзе что я настроил), к примеру в день такому такому то пользователю добавить 200 мб, с 09-00 до 18-00 после чего ограничение отключается, какие то сайты отключить к примеру порно сайты, и скорость резать кому то из пользователей?
2, настроить самбу для Убунту 12,04, к примеру у меня это все работает в винде сервиспак3 но глючит на нем винда, так как там было и шлюз и файловый сервер, вообщем у меня такая схема было:
1 шлюз был поднять на Windows XP3 professional
2. Файловый сервер, то есть на диске \\: Е (1.ТБ)
и внутри жесткого диска есть папки:
folder-1
folder-2
folder-3 и так далее в общем на всех папок только шеф имеел доступ с чтением и с записью с удалением, а др пользователи имели доступ к какому то а к какому то не имеют.
3. на том же винде еще и есть 3-жесткий также ТБ и там бекапится файлы с диска Е с помошью программы Акроникс.
в общем мне в первую очеред важно узнать возможно ли контраливать юзеров, в принципе слышал что да возможно, но ни где не могу найти нормальную статью
буду благодарен если вы ответите спасибо.
Файловый сервер SAMBA, статья по ее настройке есть, только необходимо расставить необходимые права доступа howitmake.ru/blog/ubuntu/11.html
Чтобы настроить квоты на пользование интернетом, нужно настроить авторизацию, иначе как вы отделите одного пользователя от другого
По поводу файлового сервера, все это решается правами доступа на папки.
и в обще есть ли статья что бы это дело у меня заработало?
а там есть как расставить необходимые права доступа?
Я, к сожалению, не телепат и не знаю что и куда у вас там ;)
А кроме SQUID с AD, нет еще другого пути, вот смотрите в винде по разному это дело можно сделать к примеру, Кери, Вин-гейт, Лан2нет, а вот как рас у меня и был установлен Лан2нет, конечно не стабильно работает но лучше что то, чем не чего, за то юзери знали что если будут что то скачивать у них инет отключится. В принципе не мне Вам говорит, Вы и так знаете, о чем я говорю))) Просто я вот думаю да, что есть Линукс, сервре говорят все там имеется, есть мануалы всякие и про все… а вот именно про контроля не где не нашел, как все это дело сделать, в общем имею ввиду.
Ну не чего буду ждать:)))
Настроил DNS DHCP BIND по вашим статьям Интернет работает без проблем спасибо вам.
Подскажите как настроить SQUID для такой ситуации 1юзеру — запретить интернет кроме определенных сайтов и почты(mozilla thuderbird)
2юзеру разрешить только почту(mozilla thuderbird)
остальным раздавать интернет без запретов.
Если можете то подскажите пожалуйста про перенаправленные порты Нужен доступ для радмина с внешки.
мой rc.local
iptables -t nat -A PREROUTING -i eth1 -p tcp -m tcp --dport 80 -j DNAT --to-destination 192.168.1.60:3128
iptables -t nat -A PREROUTING -i eth0 -p tcp -m tcp --dport 80 -j REDIRECT --to-ports 3128
iptables -t nat -A PREROUTING -i eth1 -p tcp -m tcp --dport 8080 -j DNAT --to-destination 192.168.1.60:3128
iptables -t nat -A PREROUTING -i eth0 -p tcp -m tcp --dport 8080 -j REDIRECT --to-ports 3128
exit 0
С Squid кода можно сказать нет так как я там абру катабру сделал и удалил все.
сеть 192.168.1.0
есть вот такой squid но как его завернуть под мои нужды?
http_port 192.168.1.60:8080 transparent
visible_hostname router
cache_mgr ****@gmail.com
cache_access_log /var/log/squid/access.log
logfile_rotate 31
acl all src 0/0
acl our_networks src 192.168.1.0/24
acl localhost src 127.0.0.1
acl Buh src 192.168.1.17
acl Reception src 192.168.1.26
acl Nalogi dstdomain .cabinet.salyk.kz
acl Balans dstdomain .balans.kz
acl R_B dstdomain .mail.rambler.ru
acl SitesRegexRuKz dstdom_regex \.ru$ \.com$ \.kz$ \.net$ \.org$ \.ua$ \.by$ \.su$
acl Rambler dstdomain .mail.rambler.ru
http_access allow Buh Nalogi
http_access allow BuhBalans
http_access allow R_B
http_access allow Reception Rambler
http_access allow Buh Rambler
http_access deny Reception SitesRegexRuKz
http_access deny Buh SitesRegexRuKz
http_access allow our_networks
http_access allow localhost
http_access deny all
Не пойму, куда глядеть, как проверить?..
Как отследить, что редирект портов происходит корректно?
Т.е. такое чувство, что пакеты не ходят через squid — хоть запущен, хоть остановлен — инет есть, сайты открываются.
Убирал squid.conf файл и создавал с нуля новый, заполнял только настройками из статьи — не работает.
Помогите разобраться!
interfaces это тот который /etc/network/. Был бы весьма признателен!!! Где то втупляю и не могу понять где…
Было предложение трафик направлять сразу на прокси, а после к route, т.е у клиентов шлюх прокси, у прокси шлюз router. Но мне такая ситуация не подходит, так как имеются еще серверы, которые обслуживают тех же клиетов, подскажите, что можно сделать.
(INTERNET) — |ROUTER| — |PROXY | — |ROUTER| — ( LAN )
2. ROUTER всего один
Статья об этом и написана…
А если в разных то прокси-сервер сам вернет пакет маршрутизатору, чтобы он передал его дальше.