Связаться по:
vkarabedyants Telegram Viber
+7 (499) 350-10-69

Блог о системном администрировании серверов и сайтов

Установка, настройка программного обеспечения Linux, Windows операционных систем

Настройка nginx от DDoS

Все чаще DDoS атаки стали смещаться с уровня обычной сетевой атаки на уровень приложений.

Особенности nginx защиты от DDoS атак. Построение первичной защиты

Небольшой сайт, обладающий скромными характеристиками даже от стресс – тестирования может перестать функционировать. Именно поэтому наличие защиты является необходимостью и залогом безопасности, по аналогии с антивирусом на обычном ПК.

Первичным рубежом защиты будет брандмауэр iptables. Его можно использовать со штатными настройками. Единственная разница – стоит увеличить количество допустимых соединений в пункте №8 и №10.

### 1: Drop invalid packets ### 
/sbin/iptables -t mangle -A PREROUTING -m conntrack --ctstate INVALID -j DROP  

### 2: Drop TCP packets that are new and are not SYN ### 
/sbin/iptables -t mangle -A PREROUTING -p tcp ! --syn -m conntrack --ctstate NEW -j DROP 
 
### 3: Drop SYN packets with suspicious MSS value ### 
/sbin/iptables -t mangle -A PREROUTING -p tcp -m conntrack --ctstate NEW -m tcpmss ! --mss 536:65535 -j DROP  

### 4: Block packets with bogus TCP flags ### 
/sbin/iptables -t mangle -A PREROUTING -p tcp --tcp-flags FIN,SYN,RST,PSH,ACK,URG NONE -j DROP 
/sbin/iptables -t mangle -A PREROUTING -p tcp --tcp-flags FIN,SYN FIN,SYN -j DROP 
/sbin/iptables -t mangle -A PREROUTING -p tcp --tcp-flags SYN,RST SYN,RST -j DROP 
/sbin/iptables -t mangle -A PREROUTING -p tcp --tcp-flags FIN,RST FIN,RST -j DROP 
/sbin/iptables -t mangle -A PREROUTING -p tcp --tcp-flags FIN,ACK FIN -j DROP 
/sbin/iptables -t mangle -A PREROUTING -p tcp --tcp-flags ACK,URG URG -j DROP 
/sbin/iptables -t mangle -A PREROUTING -p tcp --tcp-flags ACK,FIN FIN -j DROP 
/sbin/iptables -t mangle -A PREROUTING -p tcp --tcp-flags ACK,PSH PSH -j DROP 
/sbin/iptables -t mangle -A PREROUTING -p tcp --tcp-flags ALL ALL -j DROP 
/sbin/iptables -t mangle -A PREROUTING -p tcp --tcp-flags ALL NONE -j DROP 
/sbin/iptables -t mangle -A PREROUTING -p tcp --tcp-flags ALL FIN,PSH,URG -j DROP 
/sbin/iptables -t mangle -A PREROUTING -p tcp --tcp-flags ALL SYN,FIN,PSH,URG -j DROP 
/sbin/iptables -t mangle -A PREROUTING -p tcp --tcp-flags ALL SYN,RST,ACK,FIN,URG -j DROP  

### 5: Block spoofed packets ### 
/sbin/iptables -t mangle -A PREROUTING -s 224.0.0.0/3 -j DROP 
/sbin/iptables -t mangle -A PREROUTING -s 169.254.0.0/16 -j DROP 
/sbin/iptables -t mangle -A PREROUTING -s 172.16.0.0/12 -j DROP 
/sbin/iptables -t mangle -A PREROUTING -s 192.0.2.0/24 -j DROP 
/sbin/iptables -t mangle -A PREROUTING -s 192.168.0.0/16 -j DROP 
/sbin/iptables -t mangle -A PREROUTING -s 10.0.0.0/8 -j DROP 
/sbin/iptables -t mangle -A PREROUTING -s 0.0.0.0/8 -j DROP 
/sbin/iptables -t mangle -A PREROUTING -s 240.0.0.0/5 -j DROP 
/sbin/iptables -t mangle -A PREROUTING -s 127.0.0.0/8 ! -i lo -j DROP  

### 6: Drop ICMP (you usually don't need this protocol) ### 
/sbin/iptables -t mangle -A PREROUTING -p icmp -j DROP  

### 7: Drop fragments in all chains ### 
/sbin/iptables -t mangle -A PREROUTING -f -j DROP  

### 8: Limit connections per source IP ### 
/sbin/iptables -A INPUT -p tcp -m connlimit --connlimit-above 111 -j REJECT --reject-with tcp-reset  

### 9: Limit RST packets ### 
/sbin/iptables -A INPUT -p tcp --tcp-flags RST RST -m limit --limit 2/s --limit-burst 2 -j ACCEPT 
/sbin/iptables -A INPUT -p tcp --tcp-flags RST RST -j DROP  

### 10: Limit new TCP connections per second per source IP ### 
/sbin/iptables -A INPUT -p tcp -m conntrack --ctstate NEW -m limit --limit 60/s --limit-burst 20 -j ACCEPT 
/sbin/iptables -A INPUT -p tcp -m conntrack --ctstate NEW -j DROP  

### 11: Use SYNPROXY on all ports (disables connection limiting rule) ### 
# Hidden - unlock content above in "Mitigating SYN Floods With SYNPROXY" section

 

Перед непосредственным запуском защиты стоит убедиться, что всегда есть возможность вернуть значения в первичное состояние. Это необходимо на случай ошибок в настройках – иначе к серверу вообще никто не сможет подключиться, даже имея root права.

Данный брандмауэр может контролировать и противостоять атаке на сетевом уровне. Следующим этапом будет непосредственно nginx.

Настройка nginx от DDoS атаки

Первое, что следует сделать, чтобы защитить свой сервер и данные, это запретить доступ устройствам, обращающимся по ip адресу, а не по доменному имени. Сделать это можно через файл nginx.conf.

Там же следует изменить количество доступных обращений (снизить лимит). Это действие позволить гасить запросы взломщиков, однако пропускать обычных пользователей.

Удобной является использование нескольких инструментов в связке – к примеру, Lua и nginx. Lua позволяет быстрее и удобнее менять скрипты, без их предварительной компиляции сервером.

В этом случае nginx DDoS защита может подвергаться изменению и модернизации. К примеру, можно использовать сервер openresty, который может:

  •  Применять в работе так называемые словари, которые, в свою очередь, используются для создания белых и черных списков ip адресов, позволяющих моментально распознавать вероятную атаку (если она производится с адреса, уже выполнявшего вредоносные действия);
  •  Использовать скрипты. Так, работая с белыми и черными списками можно задать набор действий, скриптов, при соответствии адреса, приславшего запрос, адресу, имеющемуся в списках. Подобные манипуляции потребуют профессиональных знаний темы. И если их нет – стоит заказать настройку у специалистов;
  • Применть операнды, позволяющие задействовать скрипты, без необходимости их повторной настройки при рестарте сервера.

Как защитить nginx от DDoS

Работа со скриптами и операндами доступна каждому, кто владеет хотя бы одним языком программирования и понимает машинную логику.

Тем не менее, защита от DDoS атак nginx доступна, к сожалению, далеко не всем. Пользователь, не знающий команд, не владеющий языком программирования может оказаться в затруднении — ведь необходимо не только сменить некоторые значения, но и самому, вручную прописать несколько операндов. К примеру, использовать переменную ngx, позволяющую отфильтровывать ip адреса по спискам, распознавать непосредственную DDoS атаку. В ином случае результаты первой же атаки будут плачевными для владельца сервера – сохранить его в рабочем состоянии как минимум не удастся.

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

 

Оставить комментарий

Лимит времени истёк. Пожалуйста, перезагрузите CAPTCHA.