FastNetMon

Thursday 12 March 2015

Установка и использование ipset на Debian 7 Wheezy

Просто бесконечно проста с учетом того, что ipset теперь идет в поставке ядра:
dpkg -S /lib/modules/3.2.0-4-amd64/kernel/net/netfilter/ipset/ip_set_list_set.ko
linux-image-3.2.0-4-amd64: /lib/modules/3.2.0-4-amd64/kernel/net/netfilter/ipset/ip_set_list_set.ko
Ставим зависимости:
apt-get install ipset 
Создаем хэш:
ipset --create blacklist iphash --hashsize 4096
Смотрим его содержимое:
ipset --list
Name: blacklist
Type: hash:ip
Header: family inet hashsize 4096 maxelem 65536
Size in memory: 65656
References: 0
Members:
Добавляем несколько IP в список блокировки:
ipset --add blacklist 41.231.136.121
ipset --add blacklist 37.236.253.170
ipset --add blacklist 37.236.239.42
Убеждаемся, что они добавлены:
ipset --list
Name: blacklist
Type: hash:ip
Header: family inet hashsize 4096 maxelem 65536
Size in memory: 65704
References: 0
Members:
41.231.136.121
37.236.253.170
37.236.239.42
Добавляем правило iptables для отсечения товарищей, кто в этом списке:
iptables -I INPUT -m set --match-set blacklist src -p TCP --destination-port 80 -j DROP
В итоге это будет выглядеть примерно так:
iptables -nvL
Chain INPUT (policy ACCEPT 2822 packets, 188K bytes)
 pkts bytes target     prot opt in     out     source               destination        
    0     0 DROP       tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            match-set blacklist src tcp dpt:80

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination        

Chain OUTPUT (policy ACCEPT 1882 packets, 320K bytes)
 pkts bytes target     prot opt in     out     source               destination          

Огромное преимущество ipset в том, что он сам проверяет на наличие дубликатов (на самом деле это приятное следствие из его структуры данных - хэша) и не нужно заниматься этим самостоятельно:
ipset --add blacklist 41.176.136.101
ipset v4.2: 41.176.136.101 is already in set blacklist.

Удалять IP из бана нужно следующим образом:
ipset --del blacklist 41.176.136.101

Полностью очистить спсиок блокировки можно так:
ipset --flush blacklist

Использования модуля при ну очень большом числе IP показывает, что он весьма стабилен и отлично работает:
ipset  -L | wc -l
43815
Баги/фичи:  "ipset v4.2: IP/port/element is outside of the set or set is full", при достжении размера очереди 65 тысячам IP:
ipset -L |wc -l
65541
Фикс - нет фикса (http://flug.org.ua/lists/debian-russian/71086/) Как обходник можно создать кучу хэшей и пропускать трафик через них.

Еще будет полезной фича ipset save, с помощью которой можно сделать восстановление/сохранение содержимого списков при перезагрузке:
ipset save
create blacklist hash:ip family inet hashsize 4096 maxelem 65536
add blacklist 41.231.136.121
add blacklist 37.236.253.170
add blacklist 37.236.239.42

Источники: http://lmn.name/archives/331 http://daemonkeeper.net/781/mass-blocking-ip-addresses-with-ipset/


No comments :

Post a Comment

Note: only a member of this blog may post a comment.