Squid

Подписаться на эту рубрику по RSS

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

Используется сервер с Linux, дистрибутив Centos 7.

Установка squid проста:

yum install squid -y
systemctl enable squid
systemctl start squid

Есть несколько способов настройки squid. Опишу пару.

Первый способ - это использование авторизации на прокси.

Второй - без авторизации, входящие соединения клиентов принимаются на разных портах Squid.

Итак, первый способ.

Пусть у нас будет только 2 пользователя: user1 и user2, то есть им нужно иметь каждому свой исходящий адрес squid.

Создаём файл с паролями пользователей squid и добавляем пользователя username1 с паролем password1:

htpasswd -bc /etc/squid/passwd.squid username1 password1

В уже созданный файл с паролями пользователей squid добавляем пользователя username1 с паролем password1:

htpasswd -b /etc/squid/passwd.squid username2 password2

Редактируем файлик /etc/squid/squid.conf:

acl SSL_ports port 443
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
acl CONNECT method CONNECT
 
# Включаем с типом basic. Указываем параметр для это типа аутентификации program и путь к программе, которая выполняет проверку - /usr/lib64/squid/basic_ncsa_auth. Она в свою очередь имеет параметр - файл пользователей и паролей /etc/squid/passwd.squid.
auth_param basic program /usr/lib64/squid/basic_ncsa_auth /etc/squid/passwd.squid
 
# Включаем аутентификацию в конфиге с типом basic. Указываем параметр для это типа аутентификации program и путь к программе, которая выполняет проверку - /usr/lib64/squid/basic_ncsa_auth. Она в свою очередь имеет параметр - файл пользователей и паролей /etc/squid/passwd.squid.
auth_param basic program /usr/lib64/squid/basic_ncsa_auth /etc/squid/passwd.squid
 
#Разруливаем авторизованных пользователей на разные исходящие IP-адреса
acl user1 proxy_auth user1
acl user2 proxy_auth user2
 
#Разрешаем пользователю user1 доступ
http_access allow user1
# Устанавливаем для user1 исходящий адрес 1.2.11.111
tcp_outgoing_address 1.2.11.111 user1
 
http_access allow user2
tcp_outgoing_address 1.2.11.112 user2
 
http_access deny !Safe_ports
http_access deny CONNECT !SSL_ports
http_access allow localhost manager
http_access deny manager
http_access allow localhost
http_access deny all
http_port 1.2.11.111:3128

Перезапускаем squid:

systemctl restart squid или переконфигурируем: squid -k reconfigure

Теперь пользователь user1 выходит в мир с внешним адресом 1.2.11.111, а user2 - 1.2.11.112.

Второй способ не требует авторизации. Доступ к прокси-серверу осуществляется без авторизации из локальной сети с распределением исходящих адресов в зависимости от того, какой порт выбран при обращении к Squid.

Также редактируем /etc/squid/squid.conf:

acl localnet src 10.39.0.0/16# определяем локальную сеть (ограничиваем доступ только ею, так как у нас нет авторизации)

acl SSL_ports port 443
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
acl CONNECT method CONNECT
 
http_port 1.2.11.111:3128 name=3128 # указываем на каком порту слушать входящие подключения клиентов
http_port 1.2.11.111:3129 name=3129
 
# Создаём правило changeip3128 для обращении на порт 3128 с компьютеров сети localnet  
acl changeip3128 myportname 3128 src localnet
 
# Разрешаем по этому правилу changeip3128 доступ
http_access allow changeip3128
 
# Устанавливаем исходящий адрес запроса будет 1.2.11.111 для правила changeip3128
tcp_outgoing_address 1.2.11.111 changeip3128
 
acl changeip3129 myportname 3129 src localnet
http_access allow changeip3129
tcp_outgoing_address 1.2.11.112 changeip3128
 
http_access deny !Safe_ports
http_access deny CONNECT !SSL_ports
http_access allow localhost manager
http_access deny manager
http_access allow localhost
http_access deny all

Перезапускаем squid:

systemctl restart squid или переконфигурируем: squid -k reconfigure

Получаем, что при обращении клиента на порт 3128 исходящий адрес будет 1.2.11.111, а на 3129 - 1.2.11.111.

XZ