Как установить и настроить прокси-сервер Squid на CentOS

Мы предоставляем услуги удаленного администрирования серверов

Как установить и настроить прокси-сервер Squid на CentOS

Обновлено: Опубликовано:

В данной инструкции рассмотрена установка Squid на систему Linux CentOS 7 или 8.

Подготовка CentOS

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

yum update

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

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

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

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

firewall-cmd —reload

3. Настраиваем время. Для этого сначала задаем корректный часовой пояс:

timedatectl set-timezone Europe/Moscow

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

yum install chrony

И запускаем ее для работы в качестве сервиса:

systemctl enable chronyd —now

Установка и настройка 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 enable squid —now

Проверка

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

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

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

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

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

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

vi /etc/squid/squid.conf

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

http_port 3128

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

http_port 3128 transparent

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

systemctl restart squid

Squid + HTTPS

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

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

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

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 через разные интерфейсы в настройку вносим:

vi /etc/squid/squid.conf

acl 217_66_157_33 localip 217.66.157.33
tcp_outgoing_address 217.66.157.33 217_66_157_33

acl 217_66_157_34 localip 217.66.157.34
tcp_outgoing_address 217.66.157.34 217_66_157_34

* в данном примере, при подключении к прокси через IP 217.66.157.33, исходящие пакеты будут от IP 217.66.157.33; аналогично для IP 217.66.157.34.

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

С помощью прокси-сервера SQUID мы можем разрешать и запрещать доступ к определенным сайтам. Рассмотрим два сценария — запретить определенные сайты или разрешить только конкретные сайты.

Разрешаем все, кроме определенного списка

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

vi /etc/squid/squid.conf

В разделе с acl добавим строку:

acl BLOCKED url_regex -i «/etc/squid/denysite»

* в данном примере мы создаем acl с названием BLOCKED — по сути, список, который будет читаться из файла /etc/squid/denysite.

Выше разрешающих правил добавляем строку:

http_access deny BLOCKED

http_access allow localnet
http_access allow localhost

* данная строка указывает прокси-серверу на блокироку acl с названием BLOCKED.

Создаем файл со списком запрещенных сайтов:

vi /etc/squid/denysite

web\.whatsapp\.com
facebook\.com
^(www\.)?vk\.com

* в данном примере мы запретили доступ к сайтам web.whatsapp.comfacebook.com и всем их поддоменам, а также к vk.com (поддомены vk.com разрешены).

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

systemctl reload squid

Запретить все, кроме некоторых сайтов

Теперь рассмотрим обратную ситуацию — мы запретим заходить на все сайты, а разрешим только для нескольких. Для этого открываем конфигурационный файл:

vi /etc/squid/squid.conf

В разделе с acl добавим строку:

acl ALLOWED url_regex -i «/etc/squid/allowsite»

* в данном примере мы создаем acl с названием ALLOWED — список, который будет читаться из файла /etc/squid/allowsite.

Комментируем все разрешающие правила и добавляем строку с ALLOWED:


#http_access allow localnet
#http_access allow localhost
http_access allow ALLOWED

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

Создаем файл со списком разрешенных сайтов:

vi /etc/squid/allowsite

admins24\.ru
mail\.ru
^fonts\.googleapis\.com/*

* мы разрешаем доступ к сайтам admins24.commail.ru и всех и всем их поддоменам, а также к fonts.googleapis.com.

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

systemctl reload squid