Iptables — это межсетевой экран для операционных систем Linux, позволяющий управлять потоком трафика. При попытке установить соединение с сервером (или при отправке запроса с сервера) Iptables проверяет цепочку правил для конкретного соединения и реализует заданные настройки.
Iptables предустановлен во всех современных дистрибутивах Linux.
При работе в сети передачи данных, такой как локальная вычислительная сеть (ЛВС) или Интернет, часто возникает необходимость ограничить доступ от конкретного узла к другому узлу сети или от конкретного узла ко всем компьютерам, находящимся под его управлением. Это часто бывает необходимо. Каждый компьютер, использующий для связи IPv4 или IPv6, имеет уникальный номер в определенном диапазоне.
Этот номер называется IP-адресом. Рассмотрим как заблокировать IP-адреса IPv4 и ограничить доступ хостов с этим идентификатором к определенным компьютерам, для которых настроены правила межсетевого экрана Netfilter с помощью пакета iptables.
Как блокировать определенные IP-адреса.
Для блокирования IP-адресов используются действия DROP и REJECT. Рассмотрим общий синтаксис действия block.
sudo iptables -t (таблица) -A (цепочка) -s (IP адрес/маска) -d (IP адрес/маска) -j (действие)
Параметры утилиты.
-s [IP-адрес/маска] — IP-адрес отправителя пакета, к которому необходимо применить обработку;
-d [IP-адрес/маска] — IP-адрес получателя пакета, к которому необходимо применить обработку;
Чтобы запретить ip адрес или подсеть, iptables блокирует все входящие на защищаемую машину пакеты от узла, с IP адресом 5.5.5.5 или подсети 5.5.5.0/24 Стоит заметить, что узел источник пакетов при использовании действия DROP не получит никакой ответной информации от защищаемого узла. Для него всё будет выглядеть так, как будто данный узел в данный момент отсутствует в сети.
Заблокировать ip адрес через iptables:
iptables -A INPUT -s 5.5.5.5 -j DROP
Заблокировать подсеть адрес через iptables:
iptables -A INPUT -s 5.5.5.0/24 -j DROP
Заблокировать все IP-адреса, кроме указанного:
Будьте внимательны, можно заблокировать доступ себе на сервер через ssh, та как будут заблокированы все ip адреса кроме указанного.
iptables -A INPUT -s 5.5.5.5 -j ACCEPT
iptables -P INPUT DROP
Разрешение IP-адресов с помощью iptables:
Разрешение IP-адресов происходит очень похоже.
Разрешите входящий трафик от устройства с IP-адресом 5.5.5.5:
iptables -A INPUT -s 5.5.5.5 -j ACCEPT
Разрешаем всю подсеть 5.5.5.0/24:
iptables -A INPUT -s 5.5.5.0/24 -j ACCEPT
Разрешаем весь входящий трафик, кроме трафика с узла с IP-адресом 5.5.5.5:
iptables -A INPUT -s 5.5.5.5 -j DROP
iptables -P INPUT ACCEPT
То же самое и для исходящего и транзитного трафиков:
Разрешаем исходящий трафик узла с IP-адресом 5.5.5.5:
iptables -A OUTPUT -s 5.5.5.5 -j ACCEPT
Разрешаем транзитный трафик для всех, кроме 5.5.5.5:
iptables -A FORWARD -s 5.5.5.5 -j DROP
iptables -P FORWARD ACCEPT
Таким образом, разрешить или заблокировать трафик с определенного устройства или подсети с помощью iptables не составляет особого труда.
Есть два правила — одно, DROP, заставит удаленную машину думать, что наш узел в данный момент вообще отсутствует в сети, а другое, REJECT, позволит удаленному узлу понять, что пакет был отброшен из-за правил межсетевого экрана.