Установка и настройка Squid на CentOS. Другие материалы в категории Настройка сервера Linux Описание squid conf

Squid - это популярный прокси-сервер, который используется в основном для кэширования часто запрашиваемого веб-контента, чтобы уменьшить время отклика страниц, а также для фильтрации сетевого трафика. Он поддерживает множество различных протоколов таких как HTTP, FTP, TLS, SSL, Internet Gopher и HTTPS. А еще эта штука может быть очень полезной при медленном интернет-соединении. Первоначально Squid был разработан как Unix демон, но потом было выпущено несколько портов для WIndows. Squid распространяется под лицензией GNU General Public License.

В этой инструкции вы узнаете как установить Squid в Ubuntu 16.04. Просто последовательно выполняйте эти инструкции и установка squid ubuntu не вызовет никаких проблем. Squid это довольно многофункциональная программа и мы не сможем охватить в этой статье все ее функции, но попытаемся рассмотреть основные, чтобы вы смогли ее полностью настроить и использовать. Начнем с установки.

Есть несколько способов установки Squid в Ubuntu, один из самых распространенных - установка из официальных репозиториев с помощью утилиты apt.

Сначала откройте терминал сочетанием клавиш Ctrl+Alt+T и обновите индекс пакетов:

После обновления списка пакетов можно переходить к установке прокси-сервера просто выполните команду:

sudo apt install squid

Затем утилита спросит нужно ли продолжать установку, введите Y и дождитесь окончания загрузки и установки:

Затем можно переходить к настройке.

Настройка Squid

Конфигурационный файл сервера находится в директории /etc/squid. В зависимости от версии Squid название папки и самого файла может отличаться, например, /etc/squid3/squid.conf или /etc/squid/squid.conf. Все настройки находятся в этом файле. Давайте его рассмотрим.

vim /etc/squid3/squid.conf

Когда откроется файл вы увидите что то похожее:

Файл содержит несколько опций настроек, а также очень много документации по их использованию. Мы не будем трогать многие из них, но основные рассмотрим.

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

Сначала нам нужно настроить правила доступа клиентов к нашему прокси-серверу. Squid проектировался как программа для организаций и даже если вы используете его дома, настройка squid 3 тоже должна быть выполнена.

Для это используется acl список. это обычный список объектов, сейчас он вообще ничего не значит. Это могут быть ip адреса, порты и т д. Потом мы укажем программе что нужно делать с этим списком, разрешать или запрещать доступ. Синтаксис создания acl списка такой:

acl имя_списка тип_списка элемент_списка

Таких строк может быть несколько с одним именем и типом, из них получается список. Имя списка может быть произвольным, мы его еще будем использовать. Тип списка это намного интереснее. Может быть одним из:

  • src - ip адрес откуда исходит соединение, адрес клиента;
  • dst - ip адрес назначения соединения, адрес сервера, к которому хочет получить доступ клиент;
  • dstdomain - домен назначения соединения;
  • srcdomain - домен клиента;
  • arp - MAC адрес сетевой карты клиента;
  • time - время, когда выполняется соединение;
  • port - порт, к которому пытается получить доступ клиент;
  • proto - протокол, по которому устанавливается соединение;
  • method - метод передачи данных, например, GET - передача данных HTTP, POST - передача данных форм в HTTP, CONNECT - запрос соединения с сервером;
  • http_status - ответ сервера;
  • browser - браузер клиента;
  • url_regex - url адрес, к которому пытаются получить доступ.

Это далеко не все типы списков, но для начала хватит, а более подробная информация есть в том же конфигурационном файле.

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

acl localnet src 192.168.0.0/16

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

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

Создадим еще два списка - SSL_ports и connect, чтобы разрешить использовать метод connect только для ssl соединений. Это запретит клиенту использовать другие прокси-серверы поверх нашего:

acl SSL_ports port 443

acl connect method CONNECT

Как я уже говорил, эти списки сами по себе ничего не значат и никак не влияют на работу сервера. Чтобы применить список нужно использовать директиву http_access. Ее синтаксис:

http_access действие имя_списка

Действие может быть allow (разрешить) или deny (запретить). теперь запретим доступ ко всем портам, кроме заданных в Safe_ports:

http_access deny Connect !SSL_ports

Теперь разрешим доступ из этого компьютера (acl список localhos предопределен):

http_access allow localhost

Разрешим доступ из локальной сети:

http_access allow localnet

И запретим все остальное:

http_access deny all

Другие настройки

Контроль доступа, это один из самых важных компонентов, но настройка squid ubuntu на этом незакончена. Есть еще много интересных параметров, мы рассмотрим только несколько из них:

http_port - задает ip адрес и порт, на котором будет работать программа. Можно запускать прокси только на этом компьютере такой конструкцией:

http_port localhost:3218

Или в локальной сети:

https_port - задает ip адрес и порт, на котором будут приниматься https соединения. Мы не рассматриваем работу с https в этой статье.

cache_mem - количество памяти, которая выделяется для кэширования объектов.

cache_dir - позволяет задать папку для хранения кэша. По умолчанию весь кэш хранится в оперативной памяти. Синтаксис:

cache_dir файловая_система папка размер_в_мб L1 L2

L1 и L2 - количество подпапок первого и второго уровня. Файловая система определяет каким образом данные будут писаться на диск. Например:

cache_dir aufs /var/spool/squid 100 16 256

coredump_dir - директория, в которую будет сохранен дамп памяти в случае ошибки.

refresh_pattern - очень интересный параметр, который позволяет продлить время жизни объектов в кэше. Синтаксис такой:

refresh_pattern -i регулярное_выражение минимальное_время процент максимальное_время параметры

  • регулярное выражение - задает объекты, к которым нужно применять параметр;
  • минимальное_время - время в минутах пока объект считается свежим;
  • максимальное_время - максимальное время в минутах, пока объект будет свежим;

параметры могут быть такие:

  • override-expire - игнорировать заголовок expire;
  • override-lastmod - игнорировать последнюю дату изменения файла;
  • reload-into-ims - вместо не кэшировать отправлять запрос If-Modified-Since;
  • ignore-reload - игнорировать запросы клиента не кэшировать.

Например:

refresh_pattern -i \.gif$ 43200 100% 43200 override-lastmod override-expire

Вам могут понадобиться и другие настройки после того, как установка squid ubuntu Будет завершена. Но они выходят за рамки этой статьи. Теперь сохраните изменения, закройте файл и перезагрузите Squid:

sudo service squid3 restart

Если эта команда вернет ошибку, попробуйте другую:

sudo service squid restart

Осталось проверить работу нашего прокси-сервера. Это можно сделать с помощью любого браузера. Откройте настройки браузера и выполните настройку прокси. Я покажу как это сделать в Mozilla Firefox. Если у вас другой браузер, например, Google Chrome думаю вы разберетесь как там настраивается прокси.

Настройка клиентской стороны

Откройте браузер, перейдите в Настройка --> Дополнительно --> Сеть . Затем нажмите Настройки в разделе Подключение и выберите настроить прокси вручную :

В поле HTTP прокси укажите IP адрес машины, на которой выполнялась установка Squid сервера, а в поле порт - номер порта 3128. Этот порт используется по умолчанию в Squid, но вы можете изменить номер порта с помощью /etc/squid/squid.conf

Обновляем систему:

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

firewall-cmd --permanent --add-port=3128/tcp

* где 3128 — порт, на котором будет настроен наш прокси-сервер .

и перезапускаем firewalld:

firewall-cmd --reload

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

Устанавливаем прокси-сервер следующей командой:

yum install squid

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

vi /etc/squid/squid.conf

Если сеть клиентских компьютеров отличается от стандартной (192.168.0.0/16, 172.16.0.0/12, 10.0.0.0/8), необходимо ее добавить в acl, например:

acl localnet src 217.66.157.0/24

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

acl localnet src "/etc/squid/acl_localnet"

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

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

http_access allow all

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

Настраиваем директорию для кэша :

cache_dir ufs /var/spool/squid 4096 32 256

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

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

И уже можно запускать squid:

systemctl start squid

Не забываем разрешить его автозапуск:

systemctl enable squid

Проверка

Заходим в настройки браузера и настраиваем использование прокси-сервера. Например, в Mozilla Firefox настройки нужно выставить такими:

* где 192.168.163.166 — IP-адрес моего прокси-сервера.

Теперь открываем сайт 2ip.ru . После его загрузки мы увидем внешний IP-адрес — он должен соответствовать той сети, от которой работает настроенный SQUID.

Прозрачный прокси

Прозрачный прокси позволяет автоматически использовать прокси-сервер, не настраивая при этом браузер компьютера. Пользователи могут даже не знать, что трафик идет через squid.

vi /etc/squid/squid.conf

Находим строчку:

И приводим ее к следующему виду:

http_port 3128 transparent

И перезагружаем squid:

systemctl restart squid

Squid + HTTPS

Специально настраивать https для squid в CentOS 7 мне не пришлось — все заработало по умолчанию.

Авторизация по логину и паролю

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

vi /etc/squid/squid.conf

Вставляем следующее:

auth_param basic program /usr/lib64/squid/basic_ncsa_auth /etc/squid/auth_users
auth_param basic children 25
auth_param basic realm SQUID PROXY
auth_param basic credentialsttl 3 hours
acl auth_users proxy_auth REQUIRED

* где /usr/lib64/squid/basic_ncsa_auth — расположение ncsa_auth (в зависимости от системы может находиться в другом каталоге); /etc/squid/auth_users — файл с логинами и паролями; children 25 разрешает 25 одновременных подключений; SQUID PROXY — произвольная фраза для приветствия; credentialsttl 3 hours будет держать сессию 3 часа, после потребуется повторный ввод логина и пароля.

http_access deny !Safe_ports

Добавляем:

http_access allow auth_users

Создаем файл с пользователями и создаем первую пару логина и пароля:

htpasswd -c /etc/squid/auth_users user1

* если система вернет ошибку «bash: htpasswd: command not found » установим htpasswd командой yum install httpd-tools

Создаем второго пользователя:

htpasswd /etc/squid/auth_users user2

И перезагружаем squid:

systemctl restart squid

Исходящий сетевой интерфейс

На нашем сервере может быть несколько внешний IP-адресов. По умолчанию, все исходящие запросы будут работать через интерфейс со шлюзом по умолчанию. Чтобы иметь возможность работы со squid через разные интерфейсы в настройку вносим.

Материалы о построении роутера на базе Squid - одни из самых популярных на нашем сайте. Такое решение позволяет с минимальными затратами (прежде всего на программную часть) организовать и упорядочить доступ к сети интернет на предприятии. Но рассматриваемые нами варианты предназначались преимущественно для работы в составе рабочей группы. Отсутствие интеграции с Active Directory резко снижало удобство применения такого роутера в доменных сетях, поэтому мы решили исправить это упущение.

В процессе подготовки данного материала мы не планировали отдельно останавливаться на подготовке сервера, намереваясь использовать для этого уже существующий материал: . Однако, когда количество уточнений и отличий стало превышать разумные пределы, мы решили посвятить этому вопросу отдельную статью. В тоже время мы предполагаем, что читатель знаком с вышеуказанным материалом и поэтому не будем объяснять подробно многие используемые нами настройки и не будем останавливаться на второстепенных деталях.

Особенности интеграции с Active Directory

В чем смысл интеграции прокси-сервера Squid в Active Directory? Скажем сразу, что если ваша основная цель - просто раздать интернет всем и без ограничений, ну разве что закрыв социальные сети, то дальше можно не читать, уже описанная нами конфигурация полностью удовлетворит ваши потребности. Основное преимущество интеграции роутера в Active Directory - это использование единой точки аутентификации и управление доступом к сети интернет на базе уже существующих в домене учетных записей и групп безопасности.

Отсюда следуют некоторые особенности. Так прозрачный режим не поддерживает аутентификацию и от него придется отказаться, указывая настройки прокси непосредственно в настройках браузера. Этот процесс несложно автоматизировать при помощи DHCP-сервера и протокола WPAD.

В качестве DNS-серверов, в том числе и на роутере , должны обязательно указываться только доменные DNS, по умолчанию DNS-сервером является каждый контроллер домена. По этой причине роутер не должен иметь роли DNS-сервера. Также, для обеспечения интеграции с AD, роль DHCP-сервера также следует передать Windows Server, обычно на один или несколько контроллеров домена.

Теперь подходим к тому, ради чего все это затевалось. Аутентификация по доменным учетным записям позволяет использовать единую точку входа (SSO, Single Sign-On ), когда пользователь вводит логин и пароль один раз - при входе в систему. Это достигается применением протокола Kerberos , который является способом аутентификации в AD по умолчанию. В отличии от авторов иных руководств, мы не видим смысла настраивать или Basic-аутентификацию, в первую очередь по соображениям безопасности. Тем более Kerberos поддерживают все современные операционные системы.

Следующим шагом является авторизация на основе существующих групп безопасности, это особенно актуально при переходе с Forefront TMG или ISA Server . Это позволяет один раз настроив Linux-сервер дальнейшее управление доступом осуществлять привычным способом - через группы Active Directory, что позволяет снизить порог вхождения для администраторов.

Так как Active Directory имеет более сложную структуру и большее количество "действующих лиц", то чтобы вы не запутались в используемых нами адресах и именах хостов мы подготовили небольшую схему:


В наших примерах будет использоваться домен Active Directory с FQDN именем interface31.lab , за который отвечают два контроллера домена SRV-DC01 и SRV-DC02 с адресами 192.168.31.101 и 102 соответственно. Оба контроллера реализованы на базе Windows Server 2012 R2.

Роутер выполнен на базе Ubuntu Server 14.04 (Debian 7/8) и имеет имя SRV-GW01 с адресом 192.168.31.100. Также в сети имеется группа серверов со статическими адресами 192.168.31.103-105 и клиентские ПК, адреса которым выдаются DHCP сервером из диапазона 192.168.31.111-199.

Настройка сети

Сеть настраивается традиционным образом, посредством правки конфигурационного файла /etc/network/interfaces . Примем что внешней сети соответствует интерфейс eth0 , а внутренней eth1 . В результате настройки у нас должно получиться примерно следующее:

Auto lo
iface lo inet loopback

auto eth0
iface eth0 inet static
address 172.18.0.106
netmask 255.255.240.0
gateway 172.18.0.1
dns-search interface31.lab
dns-nameservers 192.168.31.101 192.168.31.102

auto eth1
iface eth1 inet static
address 192.168.31.100
netmask 255.255.255.0

post-up /etc/nat

Обратите внимание, что несмотря на то, что в настройках внешнего интерфейса использован внешний адрес и шлюз, адреса DNS-серверов указаны внутренние. Также указана опция dns-search , которая определяет домен для разрешения не FQDN-имен. Это означает, что к каждому короткому имени будет автоматически добавлен указанный домен, например, srv-dc01 будет дополнено до srv-dc01.interface31.lab .

Если вас смущает указание внутренних DNS в настройках внешней сетевой карты, то можете перенести эти строки в секцию eth1, на работу сервера это не повлияет.

DNS-сервера провайдера или публичные DNS следует указать в разделе Серверы пересылки внутреннего DNS-сервера на любом из контроллеров домена.

Если вы получаете сетевые настройки от провайдера по DHCP, то для использования внутренних серверов имен, вместо DNS провайдера секция eth0 должна иметь вид:

Auto eth0
iface eth0 inet dhcp
dns-search interface31.lab
dns-nameservers 192.168.31.101 192.168.31.102

Таким образом явно указанные настройки перекроют полученные автоматом от провайдера.

Сохраняем содержимое файла, перезагружаемся. Проверяем наличие интернета на сервере и разрешение имен. Например, выполните команду:

Nslookup srv-dc02

Ответить вам должен первый указанный доменный сервер имен, в нашем случае 192.168.33.101 и выдать полное FQDN-имя хоста и его IP-адрес.

После чего проверьте разрешение внешних имен:

Nslookup ya.ru

Вы также должны получить ответ от внутреннего сервера. На этом настройку сети можно считать законченной.

Настройка NAT и брандмауэра

Базовая настройка брандмауэра принципиально ничем не отличается от варианта роутера для рабочей группы, за одним исключением. Так как наш прокси является непрозрачным, то существует возможность выхода напрямую через NAT, если по какой-то причине браузер не будет настроен на работу с прокси-сервером. Поэтому ограничим доступ по HTTP (порт 80) для всех клиентов локальной сети, за исключением серверов и отдельных хостов, которым может потребоваться прямой доступ.

Мы считаем, что прокси-сервер нужен в первую очередь для контроля пользователей, поэтому заворачивать на него сервера и служебные хосты, которые не предоставляют доступ к интернет пользователям, не видим никакого смысла.

Создадим и откроем файл /etc/nat

touch /etc/nat

внесем в него следующее содержимое:

# Включаем форвардинг пакетов
echo 1 > /proc/sys/net/ipv4/ip_forward

# Сбрасываем настройки брандмауэра
iptables -F
iptables -X
iptables -t nat -F
iptables -t nat -X

# Разрешаем доступ из локальной сети
iptables -A INPUT -i eth1 -j ACCEPT

# Разрешаем инициированные нами подключения извне
iptables -A INPUT -i eth0 -m state --state ESTABLISHED,RELATED -j ACCEPT

# Разрешаем подключения по SSH
iptables -A INPUT -i eth0 -p tcp --dport 22 -j ACCEPT

#Запрещаем входящие извне
iptables -A INPUT -i eth0 -j DROP

# Разрешаем инициированные нами транзитные подключения извне
iptables -A FORWARD -i eth0 -o eth1 -m state --state ESTABLISHED,RELATED -j ACCEPT

#Разрешаем HTTP серверам
iptables -A FORWARD -i eth1 -s 192.168.31.101 -p tcp --dport 80 -j ACCEPT
...
iptables -A FORWARD -i eth1 -s 192.168.31.105 -p tcp --dport 80 -j ACCEPT

#Запрещаем HTTP
iptables -A FORWARD -i eth1 -p tcp --dport 80 -j DROP

# Запрещаем транзитный трафик извне
iptables -A FORWARD -i eth0 -o eth1 -j DROP

# Включаем NAT
iptables -t nat -A POSTROUTING -o eth0 -s 192.168.31.0/24 -j MASQUERADE

Секция #Разрешаем HTTP серверам подразумевает набор идентичных правил для каждого хоста, которому мы разрешаем выход в интернет в обход прокси. В нашем случае это адреса от 192.168.31.101 до 192.168.31.105, чтобы не загромождать пример мы написали первый и последний, разделив их многоточием (которого в реальном конфиге быть не должно).

Сохраним файл и дадим ему права на исполнение:

Chmod +x /etc/nat

Перезагрузимся:

После чего можно проверить интернет на клиентах, на тех, которые входят в список исключений - он будет, на остальных нет. Другие протоколы: почта (SMTP, POP3, IMAP), FTP, HTTPS и т.п. должны работать на всех клиентах.

Настройка синхронизации времени

Для успешной работы с доменом Active Directory и прохождения Kerberos-аутентификации важно чтобы часы роутера были синхронизированы с часами контроллера домена.

Установим NTP-клиент:

Apt-get install ntp

Затем откроем файл конфигурации /etc/ntp.conf и закомментируем все строки, начинающиеся на server . После чего добавим две свои записи:

Server srv-dc01.interface31.lab
server srv-dc02.interface31.lab

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

Затем добавим в конец файла две строки, ограничивающие работу NTP-клиента внутренним интерфейсом:

Interface ignore wildcard
interface listen eth1

Сохраняем файл и перезапускаем службу:

Service ntp restart

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

Ss -l | grep 123

В выводе команды должны быть только внутренние адреса и адреса локальной петли (localhost):

Проверить синхронизацию можно командой:

В выводе обращаем внимание на колонки: when -время с последнего ответа сервера, pool - время опроса сервера, offset - разница времени в секундах.

Если ваш роутер расположен в виртуальной среде, то при загрузке, пока система не знает с кем синхронизировать время, время внутри виртуальной машины синхронизируется с временем гипервизора. Поэтому либо отключите эту функцию в настройках виртуальной машины, либо синхронизируйте часы гипервизора с часами домена.

Настройка кеширующего прокси-сервера Squid3

Внимание! Если вы перенастраиваете сервер для рабочей группы, то обязательно удалите пакет dnsmasq или иные DNS и DHCP сервера!

Важно! Начиная с Debian 9 и Ubuntu 16.04 вместо пакета squid3 снова используется squid , также аналогичным образом следует изменить все пути, т.е. вместо /etc/squid3 использовать /etc/squid .

Установим прокси-сервер squid3 командой:

Apt-get install squid3

Откроем конфигурационный файл /etc/squid3/squid.conf и зададим минимальную конфигурацию, добавив или раскомментировав в соответствующих секциях указанные строки.

Укажем acl элемент для локальной сети:

Acl localnet src 192.168.31.0/24

Минимальный набор списков доступа:

Http_access allow localnet
http_access allow localhost
http_access deny all

Интерфейсы, порты и режимы работы прокси:

Http_port 192.168.31.100:3128
http_port 127.0.0.1:3128

Настройки кеша:

Cache_mem 1024 MB
maximum_object_size_in_memory 512 KB

cache_dir ufs / var /spool/squid3 2048 16 256

maximum_object_size 4 MB

Настройки лога:

Access_log daemon:/var/log/squid3/access.log squid
logfile_rotate 31

Для squid 3.1 и ниже первая строка должна выглядеть так:

Access_log /var/log/squid3/access.log squid

Сохраните и проверьте конфигурацию:

Squid3 -k check

Если нет ошибок, то перезапускаем squid:

Service squid3 restart

Перестраиваем кэш:

Service squid3 stop
squid3 -z
service squid3 start

На DNS-сервере домена добавьте A-запись для нашего роутера:

Теперь в настройках браузера укажите полное FQDN имя сервера и порт 3128:

Так как никаких ограничений пока не установлено, то вы должны получить доступ в интернет.

Продолжаем цикл статей с настройкой сервера ubuntu 14.04.1, сегодня на очереди установка и настройка squid3 – прокси сервера для ubuntu server. Если вы еще не знаете что такое прокси сервер, попробую описать одним предложением. Прокси сервер – это компьютер который обрабатывает запросы клиентских компьютеров при обращении к сети интернет.

С помощью прокси сервера, можно не только предоставить централизованный доступ к интернету, но и лимитировать его, закрывать доступ к определенным сайтам, открывать доступ только к разрешенным сайтам, кэшировать статичные данные (css, картинки, баннеры…) и многое другое.

Для установки прокси сервера я буду использовать уже готовый и настроенными службами и . И так, приступим.

Открываем доступ к интернету для компьютеров в локальной сети

Для начала нам нужно открыть полный доступ к интернету для всех компьютеров в нашей локальной сети. Для этого воспользуемся NATом. NAT – технология позволяющая пускать весь сетевой трафик через один адрес. То есть все запросы к интернету в локальной сети, будут обрабатываться именно сервером.

Создадим файл с настройками

sudo touch /etc/nat

Внесем в этот фал следующее:

#!/bin/sh #Включаем форвардинг пакетов echo 1 > /proc/sys/net/ipv4/ip_forward #Разрешаем траффик на lo iptables -A INPUT -i lo -j ACCEPT #Разрешаем доступ из внутренней сети наружу iptables -A FORWARD -i eth1 -o eth0 -j ACCEPT #Включаем NAT iptables -t nat -A POSTROUTING -o eth0 -s 192.168.0.0/24 -j MASQUERADE #Разрешаем ответы из внешней сети iptables -A FORWARD -i eth0 -m state --state ESTABLISHED,RELATED -j ACCEPT #Запрещаем доступ снаружи во внутреннюю сеть iptables -A FORWARD -i eth0 -o eth1 -j REJECT

Сохраним файл и присвоим ему права на выполнение:

sudo chmod +x /etc/nat

Добавим запуск NATа (строку post-up /etc/nat ) в файл с сетевыми настройками:

sudo nano /etc/network/interfaces

ваш файл должен выглядеть так:

Auto lo iface lo inet loopback auto eth0 iface eth0 inet static address 192.168.1.104 netmask 255.255.255.0 gateway 192.168.1.1 auto eth1 iface eth1 inet static address 192.168.0.1 netmask 255.255.255.0 post-up /etc/nat

Сохраняем, закрываем и перезагружаем сервер:

В таком виде, все готово для раздачи интернета компьютерам в сети. Если сейчас включить клиентский компьютер, он получит IP адрес от DHCP сервера, а также получит настройки шлюза (192.168.0.1), соответственно должен появится интернет. Если интернет появился, двигаемся дальше, если нет, проверяем что сделали не так.

Установка и настройка Squid3

Теперь нам нужно установить Squid3 – сам прокси сервер. В статье описаны базовые настройки, для более углубленной настройки, советую почитать документацию по squid.

Устанавливаем пакет squid3

sudo aptitude install squid3

После установки откроем файл /etc/squid3/squid.conf

sudo nano /etc/squid3/squid.conf

В первую очередь найдем строку http_port 3128 и добавим к ней значение intercept и IP адрес сервера, чтобы получилось вот так:

Http_port 192.168.0.1:3128 intercept

Это делается для того, чтобы в последующем нам не приходилось настраивать прокси сервер на всех клиентских машинах (прокси будет прозрачным).

Теперь, нужно указать сеть в которой будет работать наш прокси сервер, для этого раскомментируем строку acl localnet src 192.168.0.0/16 # RFC1918 possible internal network и укажем префикс маски сети 24 вместо 16 (так как у нас маска 255.255.255.0). В итоге срока должна выглядеть так:

Acl localnet src 192.168.0.0/24 # RFC1918 possible internal network

разрешаем доступ к прокси из внутренней сети, расскомментировав строку

Http_access allow localnet

Теперь настроим кэширование. Нужно найти строку cache_dir ufs /var/spool/squid3 100 16 256 , раскомментировать её и поменять значения на такие:

Cache_dir ufs /var/spool/squid3 2048 16 256

Раскомментируем строку maximum_object_size_in_memory 512 KB , тем самым указываем максимальный объем кэшированного объекта в памяти.

Раскомментируем строку cache_mem 256 MB и заменим занчение с 256 на 1024 , тем самым указываем допустимый объем памяти.

Вот мы и настроили кэширование, кэширование должно снизить нагрузку на канал и увеличить скорость открытия страниц. Кэш очищается при перезагрузке сервера.

Теперь включим ведение логов, для этого раскомментируем строку access_log daemon:/var/log/squid3/access.log squid и добавим ниже logfile_rotate 31 (файлы логов будут храниться 31 день, после будут перезаписываться самые старые).

На этом базовую настройку squid3 можно завершить. Перезапустим squid3

sudo service squid3 restart

Теперь прокси сервер настроен и запущен, но для того чтобы трафик пользователей шел именно через него, нужно завернуть весь http трафик на squid. Для этого добавляем в /etc/nat строку:

# Заворачиваем http на прокси iptables -t nat -A PREROUTING -i eth1 ! -d 192.168.0.0/24 -p tcp -m multiport --dport 80,8080 -j DNAT --to 192.168.0.1:3128

Собствеенно теперь мой файл /etc/nat имеет такой вид:

#!/bin/sh #Включаем форвардинг пакетов echo 1 > /proc/sys/net/ipv4/ip_forward #Разрешаем траффик на lo iptables -A INPUT -i lo -j ACCEPT #Разрешаем доступ из внутренней сети наружу iptables -A FORWARD -i eth1 -o eth0 -j ACCEPT #Включаем NAT iptables -t nat -A POSTROUTING -o eth0 -s 192.168.0.0/24 -j MASQUERADE #Разрешаем ответы из внешней сети iptables -A FORWARD -i eth0 -m state --state ESTABLISHED,RELATED -j ACCEPT #Запрещаем доступ снаружи во внутреннюю сеть iptables -A FORWARD -i eth0 -o eth1 -j REJECT # Заворачиваем http на прокси iptables -t nat -A PREROUTING -i eth1 ! -d 192.168.0.0/24 -p tcp -m multiport --dport 80,8080 -j DNAT --to 192.168.0.1:3128

Если вы сделали все как написано в статье, значит у вас будет полностью рабочий прокси сервер. В следующих статьях я напишу как установить контент – фильтр Dansguardian и как сделать black list для добавления запрещенных сайтов.

Если остались вопросы, добро пожаловать в комментарии.

Настройка прокси сервера Squid

Очень часто нам нужен прокси. Например у вас серый IP или вы счастливый пользователь спутникового интернета. Скачать что-то с сайтов подобных Rapidshare нереально. Здесь нас и выручит squid.

Для установки proxy необходим сервер на виртуализации KVM. На других виртуализациях размещение proxy-серверов запрещено.

Более расширенный вариант моей статьи можно найти на сайте Курского LUG , где я так же рассмотрел возможность использования squid домашними пользователями, а также интеграцию системы сжатия траффика Globax или Toonel каскадом в squid.

Установка squid

cd /usr/ports/www/squid && make BATCH=yes install

Настройка squid

Немного об acl и правилах

Сердцем конфигурирования squid являются acl (access control list) и правила.
Для начала надо усвоить принципы работы acl. ACL имеют сделующий формат:

Acl <имя> <тип> <содержание>

Например этот acl описывает две пользовательские машины с айпишниками (тип src) 192.168.0.1 и 192.168.0.2

Acl comps src 192.168.0.1/32 192.168.0.2/32

Теперь рассмотрим правила.
Правила имеют следующий формат:

<тип_правила> <действие>

На этом этапе надо усвоить то, что правила одного типа проверяются до первого выполняющегося правила. Действие этого правила будет выполнено, и проверка дальнейших правил этого типа будет остановлена. Пример:

Acl all src 0/0 acl vasya src 192.168.1.12/32 http_access allow vasya http_access deny all

Правила типа http_access это правила разрешающие или запрещающие доступ по http. Рассмотри действие вышеописанного отрывка. acl all указывает нам на все айпишники. А acl vasya указывает на один ip 192.168.1.12
Проверка будет проходить так:
1) http_access allow vasya Если через прокси сидит пользователь с этого айпишника то разрешим ему доступ. Проверка будет остановлена, четвертая строка даже не будет проверена.
2) если прокси использует пользователь не с этого айпи, то правило на строке 3 не выполнится и мы перейдем к правилу на строке 4. Поскольку под acl all подходит любой айпи, то данное правило выполнится и мы заблокируем доступ. дальнейшие правила проверяться не будут . Таким образом мы запретили пользоваться прокси всем кроме Васи.

Рассмотрим частую ошибку на основе прошлого примера:

Acl all src 0/0 acl vasya src 192.168.1.12/32 http_access deny all http_access allow vasya

В данном случае даже Вася не сможет пользоваться прокси. Так как правилом на строке 3 мы заблокировали доступ всем, оно выполнилось, и правило на строке 4 даже не будет проверяться. Внимательно следите за порядком правил одного типа.

Создаем конфиг squid

Приступим к написанию конфига. Разберу на примере своего конфига.

Для начала в папке /etc/squid создадим папку acls. В ней я создал 3 файла: banners, nobanners, 1banners
В файле banners хранятся регулярные выражение реклам и баннеров которые будут вырезаны. В nobanners хранятся исключения, то есть те страницы и картинки которые будут грузиться даже если в banners есть правило под которое они попадают. В файле 1banners хранятся регулярные выражения описывающие те баннеры которые будут вырезаться в первую очередь. Содержимое своих файлов фильтрации рекламы приведу в конце статьи.

С root правами создадим файл /etc/squid/squid.conf и начинаем добавлять в него строки:

Укажем порт на котором будет работать прокси: (ВНИМАНИЕ!! Никогда не ставьте стандартные порты вроде 8080 80 или 3128 если не хотите чтобы ваш прокси легко можно было обнаружить)

Http_port 1234

Укажем имя нода на котором стоит squid. Узнать свое имя можно выполнив uname -n

Visible_hostname dimon4eg

Отключим icp

Icp_port 0

Через acl с регулярными выражениями укажем страницы которые не будут кешироваться

Acl donocache urlpath_regex cgi-bin user submit no_cache deny donocache

Создадим папку /var/spool/squid и сделаем chmod 777 /var/spool/squid
Опишем обьем "быстрого" кеша и кеша на жестком диске. Объем быстрого кеша рекомендуется ставить не более 32 метров для экономии оперативной памяти.

Cache_mem 32 MB cache_dir ufs /var/spool/squid 1000 16 256

Аналогично создадим папки /var/log/squid и укажем где хранить логи

Cache_access_log /var/log/squid/access.log cache_log /var/log/squid/cache.log cache_store_log /var/log/squid/store.log

Таблица mime и pid процесса

Mime_table /etc/squid/mime.conf pid_filename /var/run/squid.pid

Настройки фтп через прокси

Ftp_user anonymous@ ftp_list_width 32 ftp_passive on ftp_sanitycheck on

Служебные acl

Acl all src 0/0 acl SMTP port 25

Список айпи с которых разрешен прокси. Обязательно указать 127.0.0.1 и адрес самого сервера в локалке. Далее укажем всех пользователей кто имеет доступ. (ВНИМАНИЕ, обязательно отключите доступ всем кому попало.)

Acl doallow src 192.128.0.2/32 127.0.0.1/32

Зададим порты которые разрешены

Acl Safe_ports port 80 acl Safe_ports port 21 acl Safe_ports port 443 563 5190 5552 acl Safe_ports port 777

Расположение файлов с правилами вырезания рекламы. Ключ -i означает сделать правила не чувствительными к регистру

Acl banners url_regex -i "/etc/squid/acls/banners" acl 1banners url_regex -i "/etc/squid/acls/1banners" acl nobanners url_regex -i "/etc/squid/acls/nobanners"

Теперь опишем правила

Http_access deny 1banners http_access deny banners !nobanners http_access deny !Safe_ports http_access deny SMTP http_access allow doallow http_access deny all

Запретим доступ icp

Icp_access deny all

Приложения

Полный текст моего squid.conf

http_port 1234 visible_hostname dimon4eg icp_port 0 acl donocache urlpath_regex cgi-bin user submit no_cache deny donocache
cache_mem 32 MB cache_dir ufs /var/spool/squid 1000 16 256
cache_access_log /var/log/squid/access.log cache_log /var/log/squid/cache.log cache_store_log /var/log/squid/store.log
mime_table /etc/squid/mime.conf pid_filename /var/run/squid.pid
ftp_user anonymous@ ftp_list_width 32 ftp_passive on ftp_sanitycheck on
acl server src 192.168.0.2/32
acl all src 0/0 acl manager proto cache_object acl localhost src 127.0.0.1/32 acl SSL_ports port 443 563 acl SMTP port 25
acl doallow src 192.128.0.2/32 127.0.0.1/32
acl Safe_ports port 80 acl Safe_ports port 21 acl Safe_ports port 443 563 acl Safe_ports port 777 acl CONNECT method CONNECT
acl banners url_regex -i "/etc/squid/acls/banners" acl 1banners url_regex -i "/etc/squid/acls/1banners" acl nobanners url_regex -i "/etc/squid/acls/nobanners"
http_access deny 1banners http_access deny banners !nobanners http_access deny !Safe_ports http_access deny SMTP http_access allow doallow http_access deny all
icp_access deny all
never_direct allow all

Мои правила для нарезки рекламы

/etc/squid/acls/banners

.?(count(\d|er|\.rbc)|hitbox|advertising|linkexchange|click\d|\dcount|adriver) .*(/ad(s|v)|\.adnet\.ru|banview|banner|adriver|\dcount|bnr|bans\.|/sale|/pagead) .*exaccess\.ru/asp/. .*(spylog|warlog\.info|ipz.ru/cgi-bin/cm\.cgi\?|c\.mystat-in\.net|c\.bigmir\.net|online\.mirabilis|top\.winrate\.net|vipelita\.ru|cnews\.ru.*/informres).* .*(brs\.trilan\.ru/images|google-analytics\.com|/informer|bantex\.ru|100-100\.ru).* .?(hotlog|tours|sharereactor|&rand=|livejournal\.com/userpic).* ^(www\.)?ad\d?\..* .?images\.rambler\.ru/upl.* .*s1\.adward\.ru/\?r.* .*(bhanvad)\.com.* .*(dosugonline|blogonline|all-web|otvali|loveplanet|ziza|body\.imho|meganame)\.ru.* .?(clx|gold-music)\.ru/.* .*(nnm.ru|rambler|realcoding|kpnemo\.ru/advimg).*\.swf .*/ad?.* .?re(k|c)lama.* .^(www\.)?(1001tur|jmp\.net|kmindex.ru/.*/\?|kreis\.trl\.ru|rot\.goup\.ru/\?|au-au\.ru).* .?r\.mail\.ru/b.*\.swf .?bs\.yandex\.ru/show.* .?br\.gcl\.ru/cgi-bin/br.* .?m1.nedstatbasic.net/basic.js .*\.doubleclick\.net .*an.yandex.ru/* .*/adserver/*

Понравилась статья? Поделиться с друзьями: