iptables представляет собой утилиту командной строки для настройки интегрированного в ядро Linux межсетевого экрана, разработанного в рамках проекта netfilter.

iptables – это программный межсетевой экран, который по умолчанию включен в большинство дистрибутивов Linux. Чтобы установить его, просто выполните следующую команду в терминале:

RHEL/CentOS:

# yum install iptables-services

Debian/Ubuntu:

# apt-get install iptables

Типы цепочек

iptables использует пять различных цепочек: PREROUTING, INPUT, FORWARD, OUTPUT and POSTROUTING.

  • PREROUTING: пакеты войдут в эту цепочку до того, как будет принято решение о маршрутизации.
  • INPUT: пакет будет доставлен локально. Он не имеет ничего общего с процессами, имеющими открытый сокет; локальная доставка контролируется таблицей маршрутизации”local-delivery” routing table: ip route show table local.
  • FORWARD: все пакеты, которые были маршрутизированы и не предназначены для локальной доставки, будут проходить через эту цепочку.
  • OUTPUT: пакеты, отправленные с самого компьютера, будут посещать эту цепочку.
  • POSTROUTING: решение о маршруте принято. Пакеты входят в эту цепочку непосредственно перед передачей их аппаратному обеспечению.

Список правил iptables

Вы можете вывести список правил, используя флаг -L:

# iptables -L

Вы можете вывести номера строк для правил, используя –line-numbers:

# iptables -L  --line-numbers

Чтобы вывести список конкретной таблицы, используйте флаг -t с именем таблицы:

# iptables -L -t nat

Добавление правил iptables

После настройки цепочек вы можете настроить iptables для разрешения или блокировки определенных адресов, диапазонов адресов и портов. В этих примерах мы установим соединения на DROP, но вы можете переключить их на ACCEPT или REJECT, в зависимости от ваших потребностей и конфигурации цепочек

Разрешить подключения с определенного IP-адреса:

# iptables -A INPUT -s <IP_ADDRESS> -j DROP

Разрешить подключение с определенного порта:

# iptables -I INPUT <NUMBER> -s <IP_ADDRESS>  --dport <PORT_NUMBER> -j ACCEPT

<NUMBER> – номер добавляемого правила, желательно добавлять под номером 1.

SYN Flooding

# iptables -A INPUT -p tcp -m state --state NEW -m recent --update --seconds 60 --hitcount 20 -j DROP
# iptables -A INPUT -p tcp -m state --state NEW -m recent --set -j ACCEPT

Эти правила ограничивают скорость запросов SYN от одного IP до 20 в минуту. Не рекомендуется его использовать постоянно так как вы можете заблокировать белый трафик, исходящий из сетей за NAT.

Некоторые атаки SYN легко фильтруются, поскольку они имеют одинаковые «необычные» параметры в заголовке TCP.

Удаление правил iptables

Определите номер правила и название цепочки в списке:

# iptables -L --line-numbers

Удалить правило:

# iptables -D <CHAIN> <RULE_NUMBER>

Или вы можете удалить правило напрямую из списка:

# iptables -S

Скопируйте правило из вывода и удалите его:

#  iptables -D INPUT -s 12.34.56.78 -j DROP

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

# iptables -F

Сохранить правила iptables

RHEL/CentOS:

# iptables-save > /etc/sysconfig/iptables

Debian/Ubuntu:

# iptables-save > /etc/iptables/rules.v4

Восстановить правила iptables

RHEL/CentOS:

# iptables-restore < /etc/sysconfig/iptables

Debian/Ubuntu:

# iptables-restore < /etc/iptables/rules.v4