Настройка защиты на уровне L7

Для корректной работы услуг, которые включают в себя защиту L7, необходимо правильно настроить целевой сервер и сеть. 

 

После очистки от атакующих запросов трафик направляется на ваш сервер или в вашу сеть через прокси-серверы DDoS-Guard. Чтобы не потерять трафик, важно настроить систему на своей стороне для корректной обработки пакетов/запросов из сетей DDoS-Guard. В этой инструкции разбираем, как это сделать.

 

 

Мы рекомендуем запретить подключения к целевому серверу с любых адресов, кроме адресов DDoS-Guard, с которых осуществляется проксирование запросов. Для этого в фаерволе создайте правила на drop любых запросов, кроме запросов из доверенных сетей DDoS-Guard.

 

Вот сети, которые необходимо добавить в белый список фаервола:

 

77.220.207.0/24
45.10.240.0/24
45.10.241.0/24
45.10.242.0/24
186.2.160.0/24
186.2.164.0/24
186.2.167.0/24
186.2.168.0/24
185.178.209.197/32
190.115.30.44/32

 

Ниже приводим примеры настроек для популярных фаерволов. 

 

Обратите внимание, что это примерные команды, а не готовый набор настроек для вашего сервера — используйте их только убедившись, что они не нарушат работу проекта

 

Пример настроек iptables

 

iptables -I INPUT -s 77.220.207.0/24 -p tcp --dport 80 -j ACCEPT
iptables -I INPUT -s 77.220.207.0/24 -p tcp --dport 443 -j ACCEPT
iptables -I INPUT -s 45.10.240.0/24 -p tcp --dport 80 -j ACCEPT
iptables -I INPUT -s 45.10.240.0/24 -p tcp --dport 443 -j ACCEPT
iptables -I INPUT -s 45.10.241.0/24 -p tcp --dport 80 -j ACCEPT
iptables -I INPUT -s 45.10.241.0/24 -p tcp --dport 443 -j ACCEPT
iptables -I INPUT -s 45.10.242.0/24 -p tcp --dport 80 -j ACCEPT
iptables -I INPUT -s 45.10.242.0/24 -p tcp --dport 443 -j ACCEPT
iptables -I INPUT -s 186.2.160.0/24 -p tcp --dport 80 -j ACCEPT
iptables -I INPUT -s 186.2.160.0/24 -p tcp --dport 443 -j ACCEPT
iptables -I INPUT -s 186.2.164.0/24 -p tcp --dport 80 -j ACCEPT
iptables -I INPUT -s 186.2.164.0/24 -p tcp --dport 443 -j ACCEPT
iptables -I INPUT -s 186.2.167.0/24 -p tcp --dport 80 -j ACCEPT
iptables -I INPUT -s 186.2.167.0/24 -p tcp --dport 443 -j ACCEPT
iptables -I INPUT -s 186.2.168.0/24 -p tcp --dport 80 -j ACCEPT
iptables -I INPUT -s 186.2.168.0/24 -p tcp --dport 443 -j ACCEPT
iptables -I INPUT -s 185.178.209.197 -p tcp --dport 80 -j ACCEPT
iptables -I INPUT -s 185.178.209.197 -p tcp --dport 443 -j ACCEPT
iptables -I INPUT -s 190.115.30.44 -p tcp --dport 80 -j ACCEPT
iptables -I INPUT -s 190.115.30.44 -p tcp --dport 443 -j ACCEPT
iptables -A INPUT -p tcp --dport 80 -j DROP
iptables -A INPUT -p tcp --dport 443 -j DROP

 

Пример настроек UFW

 

sudo ufw allow from 77.220.207.0/24 to any port 80 proto tcp
sudo ufw allow from 77.220.207.0/24 to any port 443 proto tcp
sudo ufw allow from 45.10.240.0/24 to any port 80 proto tcp
sudo ufw allow from 45.10.240.0/24 to any port 443 proto tcp
sudo ufw allow from 45.10.241.0/24 to any port 80 proto tcp
sudo ufw allow from 45.10.241.0/24 to any port 443 proto tcp
sudo ufw allow from 45.10.242.0/24 to any port 80 proto tcp
sudo ufw allow from 45.10.242.0/24 to any port 443 proto tcp
sudo ufw allow from 186.2.160.0/24 to any port 80 proto tcp
sudo ufw allow from 186.2.160.0/24 to any port 443 proto tcp
sudo ufw allow from 186.2.164.0/24 to any port 80 proto tcp
sudo ufw allow from 186.2.164.0/24 to any port 443 proto tcp
sudo ufw allow from 186.2.167.0/24 to any port 80 proto tcp
sudo ufw allow from 186.2.167.0/24 to any port 443 proto tcp
sudo ufw allow from 186.2.168.0/24 to any port 80 proto tcp
sudo ufw allow from 186.2.168.0/24 to any port 443 proto tcp
sudo ufw allow from 185.178.209.197 to any port 80 proto tcp
sudo ufw allow from 185.178.209.197 to any port 443 proto tcp
sudo ufw allow from 190.115.30.44 to any port 80 proto tcp
sudo ufw allow from 190.115.30.44 to any port 443 proto tcp
sudo ufw deny 80 proto tcp
sudo ufw deny 443 proto tcp

 

Пример настроек nftables

 

Пример настроек для командной строки (действуют до перезагрузки операционной системы):

 

nft add table ip ddg_filter 
nft add chain ip ddg_filter input '{ type filter hook input priority 0; policy accept; }'
nft add rule ip ddg_filter input ip saddr 77.220.207.0/24 tcp dport {80, 443} accept
nft add rule ip ddg_filter input ip saddr 45.10.240.0/24 tcp dport {80, 443} accept
nft add rule ip ddg_filter input ip saddr 45.10.241.0/24 tcp dport {80, 443} accept
nft add rule ip ddg_filter input ip saddr 45.10.242.0/24 tcp dport {80, 443} accept
nft add rule ip ddg_filter input ip saddr 186.2.160.0/24 tcp dport {80, 443} accept
nft add rule ip ddg_filter input ip saddr 186.2.164.0/24 tcp dport {80, 443} accept
nft add rule ip ddg_filter input ip saddr 186.2.167.0/24 tcp dport {80, 443} accept
nft add rule ip ddg_filter input ip saddr 186.2.168.0/24 tcp dport {80, 443} accept
nft add rule ip ddg_filter input ip saddr 185.178.209.197 tcp dport {80, 443} accept
nft add rule ip ddg_filter input ip saddr 190.115.30.44 tcp dport {80, 443} accept
nft add rule ip ddg_filter input tcp dport {80, 443} drop 

 

Для постоянного применения нужно добавить следующие строки в файл /etc/nftables.conf:

 

table ip ddg_filter {
        chain input {
                type filter hook input priority filter; policy accept;
                ip saddr 77.220.207.0/24 tcp dport { 80, 443 } accept
                ip saddr 45.10.240.0/24 tcp dport { 80, 443 } accept
                ip saddr 45.10.241.0/24 tcp dport { 80, 443 } accept
                ip saddr 45.10.242.0/24 tcp dport { 80, 443 } accept
                ip saddr 186.2.160.0/24 tcp dport { 80, 443 } accept
                ip saddr 186.2.164.0/24 tcp dport { 80, 443 } accept
                ip saddr 186.2.167.0/24 tcp dport { 80, 443 } accept
                ip saddr 186.2.168.0/24 tcp dport { 80, 443 } accept
                ip saddr 185.178.209.197 tcp dport { 80, 443 } accept
                ip saddr 190.115.30.44 tcp dport { 80, 443 } accept
                tcp dport { 80, 443 } drop
        }
}

 

Пример настроек firewalld

 

firewall-cmd  --permanent --new-zone=ddg
firewall-cmd  --permanent --zone=ddg --add-port=80/tcp
firewall-cmd  --permanent --zone=ddg --add-port=443/tcp
firewall-cmd  --permanent --zone=ddg --add-source=186.2.160.0/24
firewall-cmd  --permanent --zone=ddg --add-source=77.220.207.0/24
firewall-cmd  --permanent --zone=ddg --add-source=45.10.240.0/24 
firewall-cmd  --permanent --zone=ddg --add-source=45.10.241.0/24 
firewall-cmd  --permanent --zone=ddg --add-source=186.2.167.0/24
firewall-cmd  --permanent --zone=ddg --add-source=186.2.168.0/24
firewall-cmd  --permanent --zone=ddg --add-source=45.10.242.0/24
firewall-cmd  --permanent --zone=ddg --add-source=186.2.164.0/24
firewall-cmd  --reload
 

 

 

Чтобы видеть реальные IP-адреса посетителей сайта, настройте расшифровку X-Forwarded-For для сетей из списка выше.

 

Примеры таких настроек для популярных веб-серверов:

 

 

Веб-сервер Apache до версии 2.4

 

Измените файл /etc/apache2/mods-enabled/rpaf.conf, добавив следующие строки:

 

<IfModule rpaf_module>
      RPAFenable On
      # When enabled, take the incoming X-Host header
      # and update the virtualhost settings accordingly:
      RPAFsethostname On
      # Define which IP's are your frontend proxies that sends
      # the correct X-Forwarded-For headers:
      RPAFproxy_ips 77.220.207.0/24 45.10.240.0/24 45.10.241.0/24 45.10.242.0/24 186.2.160.0/24 186.2.164.0/24 186.2.167.0/24 186.2.168.0/24
      # Change the header name to parse from the default
      # X-Forwarded-For to something of your choice:
      # RPAFheader DDG-Connecting-IP
    </IfModule>


 

Данная конфигурация возможна при использовании модуля: https://github.com/gnif/mod_rpaf


При использовании стандартного mod_rpaf корректная работа будет обеспечена только в случае перечисления всех адресов в RPAFproxy_ips.

 

Веб-сервер Apache версии 2.4 и выше


Деактивируйте mod_rpaf командой a2dismod rpaf, активируйте mod_remoteip командой a2enmod mod_remoteip и перезагрузите Apache.


Создайте или измените файл /etc/apache2/conf-available/remoteip.conf, добавив следующие строки:

<IfModule remoteip_module>
      # Take the incoming X-Host header and
      # update the virtualhost settings accordingly:
      RemoteIPHeader X-Forwarded-For
      # Define which IP's are your frontend proxies that sends
      # the correct X-Forwarded-For headers:
      RemoteIPTrustedProxy 77.220.207.0/24 45.10.240.0/24 45.10.241.0/24 45.10.242.0/24 186.2.160.0/24 186.2.164.0/24 186.2.167.0/24 186.2.168.0/24
    </IfModule>


Перезагрузите Apache.

 

Веб-сервер Nginx


Добавьте следующие строки в /etc/nginx/nginx.conf в секцию http:

 

set_real_ip_from 77.220.207.0/24;
    set_real_ip_from 45.10.240.0/24;
    set_real_ip_from 45.10.241.0/24;
    set_real_ip_from 45.10.242.0/24;
    set_real_ip_from 186.2.160.0/24;
    set_real_ip_from 186.2.164.0/24;
    set_real_ip_from 186.2.167.0/24;
    set_real_ip_from 186.2.168.0/24;

 

Содержимое X-Forwarded-For можно подделать, но последним адресом в цепочке всегда будет реальный IP, с которого запрос пришел в нашу сеть. Этот адрес также передается в заголовке DDG-Connecting-IP.

 

Заголовок X-Real-IP проксируется без изменений и может содержать ложную информацию. Не используйте его для функций, связанных с безопасностью

 

 

Если у вас установлена BGP-сессия с DDoS-Guard, в настройках оборудования необходимо разрешить прием этих и более специфичных анонсов  (/24 - /32):

 

77.220.207.0/24 - /32
45.10.240.0/24 - /32
45.10.241.0/24 - /32
45.10.242.0/24 - /32
186.2.160.0/24 - /32
186.2.164.0/24 - /32
186.2.167.0/24 - /32
186.2.168.0/24 - /32
185.178.209.197/32
190.115.30.44/32