База знаний по Open Source
Авторизация
Поиск по базе знаний

Достаточно часто при работе с VDS возникает необходимость заблокировать особо надоедливые IP адреса. Для портов HTTP можно конечно использовать плагины CMS, настройки .htacess или nginx.conf. Но есть еще порты SSH сервера, почтового сервера и т.п.

Лучше всего, с наименьшими затратами, блокировать ip адреса при помощи iptables (для ipv4). Iptables — утилита командной строки, является стандартным интерфейсом управления работой межсетевого экрана (брандмауэра) Netfilter для ядер Linux, начиная с версии 2.4.

Существенно облегчает жизнь использование fail2ban. Но иногда нужно просто забанить какой то ip-шник без всяких правил и ко всему серверу.

Самый простой и эффективный способ заблокировать ip:

sudo iptables -A INPUT -s XXX.XXX.XXX.XXX -j DROP

Этой командой добавляется правило блокирующее с ip адреса  XXX.XXX.XXX.XXX все входящие запросы к серверу.

Вместо DROP можно поставить REJECT. Насчет целесообразности использования того или другого можно услышать диаметрально противоположные мнения.

DROP — просто закрывает соединение и не отправляет ничего в ответ. Соединение потом убивается по таймауту, время которого при желании можно сократить. В итоге при множестве запросов мы не посылаем ничего в ответ. Однако при сканировании закрытых портов, они будут помечаться как filtered, что говорит, что что-то всё-таки слушает порт.

REJECT — сбрасывает соединение и отправляет в ответ сообщение, указанное в опции —reject-with. По умолчанию отправляется host is unreachable. При множестве запросов – множество ответов, но при сканировании порты будут unreachable. Ресурсов сервера будет потребляться больше.

Посмотреть все правила можно командой:

sudo iptables -n -L -v --line-numbers

Где:

  • -L : Показать список правил.
  • -v : Отображать дополнительную информацию. Эта опция показывает имя интерфейса, опции, TOS маски. Также отображает суффиксы ‘K’, ‘M’ or ‘G’.
  • -n : Отображать IP адрес и порт числами (не используя DNS сервера для определения имен. Это ускорит отображение).
  • –line-numbers: Нумерация правил.

На экране получим нечто подобное:

Chain INPUT (policy ACCEPT 6796 packets, 3406K bytes)
num   pkts bytes target     prot opt in     out     source               destination         
1      926 46804 DROP       all  --  *      *       XXX.XXX.XXX.XXX        0.0.0.0/0           

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

Chain OUTPUT (policy ACCEPT 6697 packets, 4944K bytes)
num   pkts bytes target     prot opt in     out     source               destination

Разблокировать строку можно по номеру правила:

sudo iptables -D INPUT 1

или указав правило полностью:

sudo iptables -D INPUT -s XXX.XXX.XXX.XXX -j DROP

Удалить все правила:

sudo iptables -F

Настроенные блокировки ip будут действовать до следующей перезагрузки системы. Чтобы они восстанавливались при последующих загрузках системы, можно использовать разные методы.
Один из самых простых – установить пакет iptables-persistent, с помощью которого можно будет сохранять создаваемые правила в отдельные конфигурационные файлы, которые в свою очередь будут автоматически загружаться после перезагрузки системы.

sudo apt-get install iptables-persistent

Для сохранения правил нужно набрать:

sudo service iptables-persistent save

Добавить комментарий