Описание задачи. Есть сервис, который банит 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.