Как и прокси, GRE позволяет пропускать трафик с одной хост машины на любой другой удаленный пункт назначения. Попробуем использовать это для фильтрации наших ресурсов через удаленный фильтрующий сервер.
В нашем случае мы будем использовать 2 виртуальных сервера на базе KVM с разными локациями.
VM_GreFR - KVM сервер с DDoS фильтрацией в Европейском дата-центре.
VM_GreRU - KVM сервер без фильтрации в Российском дата-центре.
GRE туннели позволяют пропускать не только HTTP трафик. С помощью GRE моно доставить любой тип контента с любого сервера (аудио, видео, FTP, SSH, SCP и другое).
GRE туннелирование удобно когда мы хотим использовать защиту своих ресурсов от атак средствами стороннего фильтрующего сервиса.
Требования к системе
- iptables
- iproute2
- Ядро с поддержкой GRE (по умолчанию все linux дистрибутивы поддерживают ip_gre)
Данное руководство не подходит для серверов компании OVH, для настройки используйте IPIP туннель.
Настройка
Проверяем включен ли модуль ip_gre и если нет включаем его.
# modprobe ip_gre |
На сервере VM_GreFR разрешаем пересылку пакетов:
# echo 'net.ipv4.ip_forward=1' >> /etc/sysctl.conf |
# iptunnel add gre1 mode gre local YOUR_UNFILTERED_IP remote DESTINATION_SERVER_IP ttl 255 |
На сервере VM_GreRU выполняем следующие настройки:
Проверяем включен ли модуль ip_gre и если нет включаем его.
# modprobe ip_gre |
На сервере VM_GreFR разрешаем пересылку пакетов:
# echo 'net.ipv4.ip_forward=1' >> /etc/sysctl.conf |
# iptunnel add gre1 mode gre local DESTINATION_SERVER_IP remote YOUR_UNFILTERED_IP ttl 255 |
Обратите внимание, что в первых строчках на каждом сервере указаны какие адреса являются отправкой и какие назначением. Вторые строчки содержат в себе локальные адреса, которые не должны быть заняты в вашей внутренней сети.
Удостоверьтесь, что не столкнулись ни с каким видом проблем связанных MTU.
Роутинг
Исходные записи маршрута требуются, чтобы удостовериться в данных, которые прибыли и которые туннель GRE передает обратно.
Выполним следующие команды на сервере VM_GreRU
# echo '100 GreFilter' >> /etc/iproute2/rt_tables |
Обратите внимание, что данные команды должны быть выполнены только один раз. В противном случае придется вручную исправлять это в файле /etc/iproute2/rt_tables
Настраиваем NAT
Для того чтобы направить трафик в наш туннель необходимо завернуть трафик через NAT:
На фильтрующем сервере VM_GreFR выполняем:
# iptables -t nat -A POSTROUTING -s 192.168.168.0/30 ! -o gre+ -j SNAT --to-source YOUR_FILTERED_IP |
Перенаправление портов через GRE туннель
Чтобы сделать все проще, мы передадим все порты бэкэнд серверу.
На фильтрующем сервере VM_GreFR выполняем:
# iptables -t nat -A PREROUTING -d YOUR_FILTERED_IP -j DNAT --to-destination 192.168.168.2 |
Первое правило настраивает фактическое перенаправление портов, и второе правило удостоверяется, что соединения получают NAT’d и возвращаются назад должным образом.