iptables — заблокировать ip
Внимание! Данный пост был опубликован более года назад и, возможно, уже утратил свою былую актуальность. Но это не точно.

Рано или поздно встает задача - нужно для определенного ip закрыть доступ к ресурсу. Так же, если этот ip-адрес серый (динамический), то лучше подвергнуть блокировке весь его сегмент. Сейчас рассмотрим на примере как это сделать при помощи iptables.

Первым делом, мы берем ip будущей жертвы, и пробиваем по who.is, в выдаче выискивая строку вида:

% Note: this output has been filtered.
%       To receive output for a database update, use the "-B" flag.
% Information related to '111.111.111.0 - 111.111.111.255'
% Abuse contact for '111.111.111.0 - 111.111.111.255' is '[email protected]'

Как раз 111.111.111.0 - 111.111.111.255 - то нам и нужно. Открываем CIDR конвертер, и вбиваем в него полученный диапазон:

111.111.111.0,111.111.111.255

Получая на выходе, например: 111.111.111.0/24. Этот диапазон остается лишь добавить в iptables:

$ iptables -A INPUT -s 111.111.111.0/24 -j DROP
$ service iptables save

Подразумеваю, что ты залогинен под рутом, и iptables-services у тебя уже установлены.

Теперь проверяем, точно ли встали правила:

$ service iptables restart
$ iptables -L

И в цепочке INPUT ищем:

Chain INPUT (policy ACCEPT)
target     prot opt source               destination

...

DROP       all  --  111.111.111.0/24     anywhere
Chain FORWARD (policy ACCEPT)

...

Если оно имеет место быть - всё выполнено правильно, можно начать злобно потирать ладони :)

Снимаем блокировку (удаляем правило из iptables)

Тут тоже нет ничего сложного. Для начала нам нужно выяснить - какой номер у нашего правила:

$ iptables -L INPUT --line-numbers
Chain INPUT (policy ACCEPT)
num  target     prot opt source               destination

...

6    DROP       all  --  111.111.111.0/24     anywhere

...

В нашем примере оно идет под номером 6. Удаляем:

$ iptables -D INPUT 6

Имей в виду, что если удаляешь несколько правил, например, следующих друг за другом - “5, 6, и 7”, при удалении пятого - 6 и 7 сместятся вверх, и станут правилами под номерами 5 и 6. В данном вымышленном примере для удаления правил с 5 по 7 необходимо 3 раза подряд удалить правило под номером 5.

Теперь сохраняем и проверяем:

$ service iptables save
$ service iptables restart
$ iptables -L