Настройка прокси сервера SQUID с авторизацией по IP на CentOS 7

22.06.2019

Задача

Настроить прокси сервер для парсинга, например, Wordstat.yandex.ru или поисковой выдачи. Так же подойдет прокси с забугорными IP адресами для доступа к определенным сайтам.

VPS и IP адреса для прокси

VPS с минимальной конфигурацией. Подойдет VPS c объемом оперативной памяти от 1 GB. Такие VPS продают в России от 150 рублей. Найти их не сложно на сайтах вроде https://poiskvps.ru/.

Также нам потребуются IPv4 адреса. IPv6 не подходят для парсинга wordstat. Если он вам не нужен, можно использовать IPv6, они на порядок дешевле.

Отсортировать VPS по стоимости доп. адресов от разных компаний не получится. Зачастую информации о стоимости доп. адресов нет на сайте хостинг-компании. А при большом количестве IP адресов стоимость самой VPS будет уже не так важна. В среднем один IPv4 адрес стоит от 60 до 90 рублей в месяц. Самые дешевые IP адреса, которые удалось найти, у https://beget.com/ru/vps – 55 рублей в месяц. Из минусов – IP арендуется сроком на 1 год. Если его забанят, вернуть часть денег за неиспользованный период не получится. Из плюсов: Бегет стабильный хостинг с неплохой тех. поддержкой.

Если нужен масштаб, можно поискать хостинг провайдеров, которые отдают большие пулы адресов со скидкой. Например https://www.reg.ru/ отдают от 128 адресов по 42 рубля (поштучно – 67 рублей). Но у этого хостинга обнаружилась одна неприятная особенность: не удалось настроить прокси сервер на работу с google. Любой поисковый запрос выдает 403 ошибку. Имейте ввиду, если вам нужен google.

Настройка сетевого интерфейса VPS

Нам нужно добавить дополнительные IP адреса сетевом интерфейсу сервера. Для этого:

  • создаем копии файла /etc/sysconfig/network-scripts/ifcfg-eth0 столько раз, сколько у нас дополнительных IP адресов
  • каждая копия файла должна отличаться номером на конце:
    • ifcfg-eth0:1 (двоеточие обязательно)
    • ifcfg-eth0:2
    • ……..
    • ifcfg-eth0:128

В новых файлах меняем IPADDR и DEVICE:

DEVICE=eth0:1
BOOTPROTO=static
ONBOOT=yes
IPADDR=45.9.73.229
NETMASK=255.255.255.255

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

systemctl restart network

Проверить что все правильно можно командой:

ip addr

Должно быть что-то вроде:

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 52:64:00:a5:00:68 brd ff:ff:ff:ff:ff:ff
    inet 45.9.73.217/24 brd 45.9.73.255 scope global eth0
       valid_lft forever preferred_lft forever
    inet 45.9.73.229/24 brd 45.9.73.255 scope global secondary eth0:1
       valid_lft forever preferred_lft forever
    inet 45.9.73.230/24 brd 45.9.73.255 scope global secondary eth0:2
       valid_lft forever preferred_lft forever
    inet6 fe80::5064:ff:fea5:68/64 scope link
       valid_lft forever preferred_lft forever

У интерфейса eth0 добавились дополнительные адреса

Настройка IPTABLES для работы SQUID

Отключим доступ к серверу по всем портам, кроме необходимых. Порт 22 для всех адресов для доступа к консоли сервера. Порт 3128 откроем только для адреса с которого будем парсить поисковые системы.

В CentOS 7 управление файерволлом через iptables по умолчанию отключено. Исправим это.

Отключение встроенной утилиты firewalld:

systemctl stop firewalld
systemctl disable firewalld

Установка iptables

yum -y install iptables-services

Включаем в автозапуск

systemctl enable iptables

Минимальный конфиг /etc/sysconfig/iptables

*filter<br>
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p icmp -j REJECT
-A INPUT -p tcp --dport 22 -j ACCEPT
-A INPUT -p tcp -s 1.1.1.1 --dport 3128 -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -j REJECT
COMMIT

Вместо 1.1.1.1 нужно подставить IP компьютера с которого будет происходить парсинг.

Перезапускаем iptables для применения настроек

systemctl  restart  iptables

Установка SQUID

Обновим пакеты перед установкой:

yum update

Установка squid:

yum install squid

Добавляем в автозагрузку

systemctl enable squid

Стартуем сервер SQUID

systemctl start squid

В конфигурационный файл squid /etc/squid/squid.conf добавляем:

Мы уже закрыли порт для всех через iptables. Перебдим и включим доступ к прокси только для нашего IP

acl localnet src 1.1.1.1/32

Добавляем наши дополнительные ip адреса

acl myip_229 localip 45.9.73.229
tcp_outgoing_address 45.9.73.229 myip_229
acl myip_230 localip 45.9.73.230
tcp_outgoing_address 45.9.73.230 myip_230

Отключаем заголовки, нарушающие приватность:

request_header_access X-Forwarded-For deny all
request_header_access Via deny all
request_header_access Proxy deny all
request_header_access Cache-Control deny all

Отключаем кеширование. Для наших целей оно не нужно:

cache deny all

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

squid -k parse

Если все хорошо, рестартуем прокси сервер:

systemctl restart squid.service

На этом всё. Настроим броузер для работы с прокси.

Проверяем что о вас думает яндекс: https://yandex.ru/internet/

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

Настройка squid для работы с несколькими IPv6

Если решили все же использовать IPv6 адреса, потребуется дополнительная настройка.

В файле /etc/sysctl.conf

net.ipv6.conf.all.disable_ipv6 = 0

В файле /etc/sysconfig/network

NETWORKING_IPV6=yes

В файлах /etc/sysconfig/network-scripts/ifcfg-eth0:1

DEVICE=eth0:1
BOOTPROTO=static
ONBOOT=yes
IPV6INIT=yes
IPV6ADDR=2A00:F940:2:1:2:0:0:23FF

В файле /etc/sysconfig/network-script/ifcfg-eth0 прописываем наши адреса

IPV6ADDR_SECONDARIES="2a00:1313:36:1ba::eac3/64 2a00:1313:36:1ba::eac4/64 2a00:1313:36:1ba::eac5/64 2a00:1838:36:1ba::eac6/64 2a00:1313:36:1ba::eac7/64"

В конфигурационный файл squid /etc/squid/squid.conf добавляем:

dns_v4_first off
acl to_ipv6 dst ipv6
http_access deny !to_ipv6
http_access allow to_ipv6 

Для запрета IPv4 протокола.

Для каждого IPv6 адреса создаем порт на прокси сервере. Тогда при запросе на IPv4 адреса сервера, исходящий трафик будет идти с нужного IPv6 адреса.

Вместо

http_port 3128 

пропишем

http_port 45.9.73.229:3128 name=port3128
http_port 45.9.73.229:3129 name=port3129
http_port 45.9.73.229:3130 name=port3130
http_port 45.9.73.229:3131 name=port3131
http_port 45.9.73.229:3132 name=port3132

Настраиваем исходящие IPv6 адреса по аналогии с IPv4

acl from_port3128 myportname port3128
tcp_outgoing_address 2a00:1313:36:1ba::eac2 from_port3128
tcp_outgoing_address 2a00:1313:36:1ba::eac2 !all
acl from_port3129 myportname port3129
tcp_outgoing_address 2a00:1313:36:1ba::eac3 from_port3129
tcp_outgoing_address 2a00:1313:36:1ba::eac3 !all
acl from_port3130 myportname port3130
tcp_outgoing_address 2a00:1313:36:1ba::eac4 from_port3130
tcp_outgoing_address 2a00:1313:36:1ba::eac4 !all
acl from_port3131 myportname port3131
tcp_outgoing_address 2a00:1313:36:1ba::eac5 from_port3131
tcp_outgoing_address 2a00:1313:36:1ba::eac5 !all
acl from_port3131 myportname port3132
tcp_outgoing_address 2a00:1313:36:1ba::eac6 from_port3132
tcp_outgoing_address 2a00:1313:36:1ba::eac6 !all

Проверяем конфиг и перезапускаем сервер.

Не забудем в iptables открыть нужные порты:

-A INPUT -p tcp -s 1.1.1.1 --dport 3128:3132 -j ACCEPT

Проверить что ваш IPv4 адрес скрыт можно тут https://yandex.ru/internet/ или тут https://ipv6-test.com/

Comments 0

Добавить комментарий

Your email address will not be published. Required fields are marked *