/ #linux #web 

Блокування трафіку за допомогою iptables та ipset

Для захисту від DDOS-атак або паразитного трафіку, блокування на рівні сервера, а не nginx (як наприклад тут - https://bender.kr.ua/nginx-geoip/) , є більш ефективним. Тому, якщо у вас виникла потреба блокувати IP з певних країн і не існує інших застережень, варто скористатись зв’язкою iptables + ipset.

Для початку встановлюємо ipset:

apt-get install ipset

Створюємо скрипт, який буде оновлювати таблюцю адрес для блокування. Списки IP за приналежністю до країни, можна взяти на сайті ipdeny.com - https://www.ipdeny.com/ipblocks/. В нашому випадку ми блокуємо російський сегмент мережі.

#!/bin/bash

# створюємо список 'russia'
ipset -N russia hash:net

# вилучаємо старий файл з адресами
rm -rf /etc/ru.zone

# викачуємо новий файл
wget -c http://www.ipdeny.com/ipblocks/data/countries/ru.zone -O /etc/ru.zone

# додаємо IP з файлу до списку 'russia'
for i in $(cat /etc/ru.zone ); do ipset -A russia $i; done

# оновлюємо правила iptables
iptables-restore < /etc/iptables.up.rules

Що написати в /etc/iptables.up.rules можна подивитись в статті https://bender.kr.ua/howto-lemp-install/. Единою зміною буде додавання правила для блокування списку ‘russia’:

було:

# Accepts all established inbound connections
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

# Allows all outbound traffic
# You could modify this to only allow certain traffic
-A OUTPUT -j ACCEPT

стало:

# Accepts all established inbound connections
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

-A INPUT -p tcp -m set --match-set russia src -j DROP

# Allows all outbound traffic
# You could modify this to only allow certain traffic
-A OUTPUT -j ACCEPT

Після цього block_ip.sh треба зробити виконуваним

chmod +x /etc/block_ip.sh

та запхнути його в крон

crontab -e
0	0	*	*	*	/etc/block_ip.sh

Посилання

Author

Олександр Бобилєв

Залишаю собі право використовувати ненормативну (але інформативну) лексику там, де звичайні слова втрачають сенс і не відображають всієї палітри почуттів, від споглядання навколишньої дійсності.