В наше время сети IPv6 набирают очень большую популярность, и множество провайдеров даёт в комплекте с VPS подсеть IPv6 бесплатно. Допустим, вам нужно очень много адресов прокси, и у вас есть сервер с одним публичным адресом IPv4 и подсетью адресов IPv6. Используя эти адреса и прокси сервер Squid, вы можете очень просто получить необходимое количество прокси-серверов IPv6 .
Такие прокси не подходят для многих задач, но для проверки позиций сайта в поисковых системах они - самое то. В этой статье будет рассмотрена настройка Squid для IPv6. Базовая настройка Squid уже рассматривалась в статье установка Squid в Ubuntu.
Содержание статьи
Как это будет работать
У вас есть только один IP-адрес IPv4, с помощью которого вы можете получить доступ к вашему прокси-серверу. Но нам как-то нужно определиться, какой адрес IPv6 для какого запроса будет использоваться. Для этого будем применять порты. Например, если мы подключаемся к порту 3128, то Squid будет отправлять запрос к сайту с адреса 2a00:1838:36:1ba::eac3, а если с порта 3129, то 2a00:1838:36:1ba::eac4 и так далее. Такие адреса можно добавлять до тех пор, пока производительность вашего сервера будет находится на приемлемом уровне.
Далее мы будем использовать аутентификацию по паролю, для того чтобы никто кроме вас не смог получить доступ к этим прокси-серверам. Отключим дополнительные заголовки, которые добавляет Squid, чтобы не светить ваш основной адрес. А также полностью выключим обращение к IPv4-сайтам, чтобы невозможно было отследить, что у всех этих адресов общий адрес IPv4. А теперь перейдем к настройке.
Настройка Squid для IPv6
Начнем с настройки адресов IPv6, обычно их советуют добавлять с помощью команды ip, но лучше прописать их в конфигурационном файле /etc/sysconfig/network-script/ifcfg-eth0, в строке IPV6ADDR_SECONDARIES:
Теперь перезагрузите сеть:
systemctl restart network
Эти команды актауальны для CentOS 7, в Ubuntu всё будет выглядеть по другому. Далее настроим аутентификацию: для этого создаём файл пользователей и паролей с помощью команды htpasswd:
htpasswd /etc/squid/passwd
На запрос команды надо ввести логин пользователя и пароль для него. Только теперь мы можем перебраться к конфигурационному файлу Squid. Продолжаем настраивать аутентификацию, для этого добавьте в самом начале такие строки:
- basic program - в первой строке мы загружаем модуль аутентификации /usr/lib64/squid/basic_ncsa_auth, в вашей системе путь к библиотеке может отличаться, вам надо найти правильный. В параметры модулю передаётся путь к файлу с паролями /etc/squid/passwd;
- basic children - количество обрабатываемых за раз запросов;
- basic realm - приветствие;
- basic credentialsttl - время, на протяжении которого пользователь считается аутентифицированным.
В последней строке мы создаем acl-список для всех аутентифицированных пользователей и позже с помощью него разрешим им доступ к нашему прокси. Дальше удаляем заголовки, которые нарушают приватность:
Запрещаем все исходящие подключения, не через IPv6, с помощью acl-списков:
Разрешаем подключение аутентифицированным пользователям:
Запрещаем всем остальным:
Теперь работа с портами. По умолчанию Squid запущен на порту 3128, эту строчку надо закомментировать:
Вместо неё добавим пять портов и каждому присвоим имя с помощью параметра name:
Теперь для каждого порта создаем acl-список, а затем с помощью директивы outgoing_ip_address указываем, через какой IP будет передаваться запрос во вне:
Готово, сохраните конфигурационный файл, и проверьте его на ошибки с помощью команды:
squid -k parse
Перезапустите Squid:
sudo systemctl restart squid
И не забудьте добавить порты в исключение брэндмауэера:
sudo iptables -A INPUT -p tcp --match multiport --dports 3128:3132 -j ACCEPT
Теперь вы можете попытаться подключиться через ваш прокси, например, используя Firefox, и проверить, какой адрес используется. Обратите внимание, что сервис не может определить ваш адрес IPv6, а если бы мы не запретили запросы к IPv4, то любой ресурс мог бы подставить вам сайт, который не поддерживает IPv6. Squid просто взял бы его по IPv4, чем выдал бы свой адрес.
Выводы
В этой статье мы рассмотрели, как выполняется настройка Squid для IPv6 и использования нескольких исходящих IP-адресов. Конечно, решение описывать каждый порт и IP отдельно не очень удобно при больших объёмах, и что-то мне подсказывает, что можно решить задачу иначе, если вы знаете более эффективный способ, напишите в комментариях.
acl from_port313(1)<--- ошибка! myportname port3132
Как можно добавить аутентификацию по логину\паролю в данный конфиг ?