Автономные системы Интернета

Как уже было сказано в предыдущей статье, прокси сервер squid не может правильно проксировать SSL трафик в прозрачном режиме. Следовательно, в настройках тонких политик доступа в интернет для наших сегментов, мы можем столкнуться с проблемой — большинство крупных порталов в наше время используют SSL. Что же делать ? А делать следующее, — необходимо нужный трафик пустить минуя прокси сервер, т.е. добавить список нужных IP-адресов в правила iptables. но тут мы сталкиваемся с очередной проблемой — крупные порталы, такие как google, yandex и так далее имеют не один ip-адрес, а целые пулы адресов. Тут нам на помощь и приходит протокол BGP.

Все ip-сети интернета объединены в группы под названием автономные системы. У каждой автономной системы (AS) есть свой уникальный номер и общие политики маршрутизации на все IP-адреса. Следовательно, можно определить какой автономной системе принадлежит тот или иной хостинг и настроить политики доступа к популярным SSL-сайтам через iptables + geoip, либо просто добавить список сетей в правила iptables.
Для примера разрешим нашим бухгалтерам заходить на google без использования geoip. Для этого, пингуем адрес google.com. Резольвер выдает айпишник 173.194.32.165. Далее, заходим на сайт http://bgp.he.net/, вбиваем в поиске ip 173.194.32.165 и получаем AS15169. Проверяем список IPv4 префиксов и вдумчиво копируем их в скрипт с правилами iptables. Под вдумчиво понимается объединение IP сетей за счет маски подсети, чтобы сократить количество записей.

Ну и наконец, добавляем новые правила в скрипт iptables. Для этого создадим для google отдельные переменные (вдруг нам понадобится еще кому-нибудь открыть туда доступ).

# Google Variables
$G1="1.0.0.0/2"
$G2="1.1.1.0/24"
$G3="1.2.3.0/24"
$G4="8.8.4.0/24"
$G5="8.8.8.0/24"
$G6="8.15.202.0/24"
$G7="8.34.0.0/16"
$G8="8.35.0.0/24"
$G9="23.236.0.0/16"
$G10="64.233.0.0/16"
$G11="66.102.0.0/16"
$G12="66.249.0.0/16"
$G13="70.32.0.0/16"
$G14="72.14.0.0/16"
$G15="74.125.0.0/16"
$G16="104.154.0.0/16"
$G17="107.167.0.0/16"
$G18="108.59.0.0/16"
$G19="113.197.106.0/24"
$G20="130.211.0.0/16"
$G21="142.250.0.0/15"
$G22="146.148.0.0/17"
$G23="162.216.148.0/22"
$G24="162.222.176.0/21"
$G25="172.217.0.0/16"
$G26="172.253.0.0/16"
$G27="173.194.0.0/16"
$G28="173.255.112.0/20"
$G29="192.158.28.0/22"
$G30="192.178.0.0/15"
$G31="193.142.125.0/24"
$G32="199.192.112.0/22"
$G33="199.223.232.0/21"
$G34="207.223.160.0/20"
$G35="209.85.0.0/16"
$G36="216.58.192.0/19"
$G37="216.239.0.0/16"

# Google for Buh
$FW -A FORWARD -d $G1 -s $NET101 -j ACCEPT
$FW -A FORWARD -d $G2 -s $NET101 -j ACCEPT
$FW -A FORWARD -d $G3 -s $NET101 -j ACCEPT
$FW -A FORWARD -d $G4 -s $NET101 -j ACCEPT
$FW -A FORWARD -d $G5 -s $NET101 -j ACCEPT
$FW -A FORWARD -d $G6 -s $NET101 -j ACCEPT
$FW -A FORWARD -d $G7 -s $NET101 -j ACCEPT
$FW -A FORWARD -d $G8 -s $NET101 -j ACCEPT
$FW -A FORWARD -d $G9 -s $NET101 -j ACCEPT
$FW -A FORWARD -d $G10 -s $NET101 -j ACCEPT
$FW -A FORWARD -d $G11 -s $NET101 -j ACCEPT
$FW -A FORWARD -d $G12 -s $NET101 -j ACCEPT
$FW -A FORWARD -d $G13 -s $NET101 -j ACCEPT
$FW -A FORWARD -d $G14 -s $NET101 -j ACCEPT
$FW -A FORWARD -d $G15 -s $NET101 -j ACCEPT
$FW -A FORWARD -d $G16 -s $NET101 -j ACCEPT
$FW -A FORWARD -d $G17 -s $NET101 -j ACCEPT
$FW -A FORWARD -d $G18 -s $NET101 -j ACCEPT
$FW -A FORWARD -d $G19 -s $NET101 -j ACCEPT
$FW -A FORWARD -d $G20 -s $NET101 -j ACCEPT
$FW -A FORWARD -d $G21 -s $NET101 -j ACCEPT
$FW -A FORWARD -d $G22 -s $NET101 -j ACCEPT
$FW -A FORWARD -d $G23 -s $NET101 -j ACCEPT
$FW -A FORWARD -d $G24 -s $NET101 -j ACCEPT
$FW -A FORWARD -d $G25 -s $NET101 -j ACCEPT
$FW -A FORWARD -d $G26 -s $NET101 -j ACCEPT
$FW -A FORWARD -d $G27 -s $NET101 -j ACCEPT
$FW -A FORWARD -d $G28 -s $NET101 -j ACCEPT
$FW -A FORWARD -d $G29 -s $NET101 -j ACCEPT
$FW -A FORWARD -d $G30 -s $NET101 -j ACCEPT
$FW -A FORWARD -d $G31 -s $NET101 -j ACCEPT
$FW -A FORWARD -d $G32 -s $NET101 -j ACCEPT
$FW -A FORWARD -d $G33 -s $NET101 -j ACCEPT
$FW -A FORWARD -d $G34 -s $NET101 -j ACCEPT
$FW -A FORWARD -d $G35 -s $NET101 -j ACCEPT
$FW -A FORWARD -d $G36 -s $NET101 -j ACCEPT
$FW -A FORWARD -d $G37 -s $NET101 -j ACCEPT

Разумеется, все манипуляции с инкриментами делаем в LibreOffice или в гугладоках.

В итоге, правила для сегмента бухгалтеров в скрипте iptables у нас будут выглядеть следующим образом:

#VLAN101 (BUH)
# Google for Buh
$FW -A FORWARD -d $G1 -s $NET101 -j ACCEPT
$FW -A FORWARD -d $G2 -s $NET101 -j ACCEPT
$FW -A FORWARD -d $G3 -s $NET101 -j ACCEPT
$FW -A FORWARD -d $G4 -s $NET101 -j ACCEPT
$FW -A FORWARD -d $G5 -s $NET101 -j ACCEPT
$FW -A FORWARD -d $G6 -s $NET101 -j ACCEPT
$FW -A FORWARD -d $G7 -s $NET101 -j ACCEPT
$FW -A FORWARD -d $G8 -s $NET101 -j ACCEPT
$FW -A FORWARD -d $G9 -s $NET101 -j ACCEPT
$FW -A FORWARD -d $G10 -s $NET101 -j ACCEPT
$FW -A FORWARD -d $G11 -s $NET101 -j ACCEPT
$FW -A FORWARD -d $G12 -s $NET101 -j ACCEPT
$FW -A FORWARD -d $G13 -s $NET101 -j ACCEPT
$FW -A FORWARD -d $G14 -s $NET101 -j ACCEPT
$FW -A FORWARD -d $G15 -s $NET101 -j ACCEPT
$FW -A FORWARD -d $G16 -s $NET101 -j ACCEPT
$FW -A FORWARD -d $G17 -s $NET101 -j ACCEPT
$FW -A FORWARD -d $G18 -s $NET101 -j ACCEPT
$FW -A FORWARD -d $G19 -s $NET101 -j ACCEPT
$FW -A FORWARD -d $G20 -s $NET101 -j ACCEPT
$FW -A FORWARD -d $G21 -s $NET101 -j ACCEPT
$FW -A FORWARD -d $G22 -s $NET101 -j ACCEPT
$FW -A FORWARD -d $G23 -s $NET101 -j ACCEPT
$FW -A FORWARD -d $G24 -s $NET101 -j ACCEPT
$FW -A FORWARD -d $G25 -s $NET101 -j ACCEPT
$FW -A FORWARD -d $G26 -s $NET101 -j ACCEPT
$FW -A FORWARD -d $G27 -s $NET101 -j ACCEPT
$FW -A FORWARD -d $G28 -s $NET101 -j ACCEPT
$FW -A FORWARD -d $G29 -s $NET101 -j ACCEPT
$FW -A FORWARD -d $G30 -s $NET101 -j ACCEPT
$FW -A FORWARD -d $G31 -s $NET101 -j ACCEPT
$FW -A FORWARD -d $G32 -s $NET101 -j ACCEPT
$FW -A FORWARD -d $G33 -s $NET101 -j ACCEPT
$FW -A FORWARD -d $G34 -s $NET101 -j ACCEPT
$FW -A FORWARD -d $G35 -s $NET101 -j ACCEPT
$FW -A FORWARD -d $G36 -s $NET101 -j ACCEPT
$FW -A FORWARD -d $G37 -s $NET101 -j ACCEPT
$FW -A FORWARD -s 0/0 -d $NET101 -j ACCEPT
$FW -A INPUT -s $NET101 -d 172.16.100.1 -p tcp --dport 3128 -j ACCEPT
$FW -t nat -A PREROUTING -i vlan101 -d 0/0 -p tcp -m multiport --dport 80,8080 -j DNAT --to 172.16.100.1:3128
$FW -t nat -A POSTROUTING -s $NET101 -j MASQUERADE
$FW -A INPUT -i vlan101 -s $NET101 -d $VLAN101 -j ACCEPT

О том, как настроить автоматическое определение автономных сетей с помощью geoip мы поговорим в следующих статьях.