9  /  16

Синтаксис iptables

Синтаксис iptables

iptables — работает в режиме совместимости и ссылается на утилиту iptables-nft, а значит в бэкграунде работает nft

  • filter — предназначен для фильтрации трафика, состоит из трех компонентов:
    • INPUT — для входящих пакетов, адресованных непосредственно локальному серверу
    • FORWARD — для перенаправления (транзитного) трафика между разными сетями или сетевыми интерфейсами
    • OUTPUT — для исходящих пакетов, генерируемых локальным сервером.
  • nat — предназначен для замены/подмены IP адресов, состоит из трех компонентов:
    • POSTROUTING — для обработки исходящих (транзитных) пакетов (SNAT, MASQUERADE)
    • PREROUTING — для обработки входящих пакетов (DNAT,REDIRECT)
    • OUTPUT — для исходящих пакетов, генерируемых локальным сервером
  • mangle — предназначен для модификации заголовок IP пакетов (TTL,TOS,MARK), редко необходим и может быть опасен для не опытных, состоит из пяти компонентов:
    • INPUT
    • FORWARD
    • OUTPUT
    • POSTROUTING
    • PREROUTING
  • raw — предназначен для маркировки пакетов, которые НЕ должны обрабатываться системой, редко необходим, состоит из двух компонентов:
    • PREROUTING
    • OUTPUT

P.S. Компоненты с одинаковым названием, но в разных таблицах — совершенно независимые объекты

Для того чтоб посмотреть текущее состояние правил фаервола, можно набрать команду:

 sudo iptables -L

Таблица filter (INPUT)

  • Разрешить входящий трафик с сети 192.168.19.0/24
iptables -A INPUT -s 192.168.19.0/24 -j ACCEPT
  • Запретить входящий трафик с сети 192.168.19.0/24
iptables -A INPUT -s 192.168.19.0/24 -j DROP
  • Запретить входящий трафик с хоста
iptables -A INPUT -s 192.168.19.224/32  -j DROP
  • Открыть порт 80 для всех входящих
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
  • Разрешить только с одного хоста
iptables -A INPUT -s 192.168.19.224/32 -p tcp --dport ssh -j ACCEPT
  • Разрешить весь входящий трафик для интерфейса
iptables -A INPUT -i ens32  -j ACCEPT
  • Разрешить весь входящий трафик для интерфейса с определенной сети
iptables -A INPUT -i ens32 -s 192.168.19.0/24 -j ACCEPT
  • Разрешить весь входящий трафик для интерфейса кроме определенной сети
iptables -A INPUT -i ens32 ! -s 192.168.19.0/24 -j ACCEPT
  • Разрешить для интерфейса входящий трафик с хоста по протоколу и порту
iptables -A INPUT -i ens32 -s 192.168.19.224/32  -p tcp --dport 80 -j ACCEPT
  • Несколько портов в одном правиле
iptables -A INPUT -i ens32 -s 192.168.19.0/24  -p tcp -m multiport --dports 80,81,443,53 -j ACCEPT
  • привязка по MAC адресу
iptables -A INPUT -i ens32 -s 192.168.19.224/32 -m mac --mac-source a0:8c:fd:a3:ed:a4 -p icmp -j ACCEPT
  • По времени
iptables -A INPUT -i ens32 -m mac --mac-source a0:8c:fd:a3:ed:a4  -m time --timestart 12:03 --timestop 16:04 -j ACCEPT
  • Ограничения по количеству пакетов
iptables -A INPUT -p icmp -m limit --limit 10/m -j ACCEPT
  • Ограничения по размеру
iptables -A INPUT -p icmp --icmp-type echo-request -m length  --length 93:0xffff -j DROP
  • логирование
iptables -A INPUT -p icmp -j LOG --log-prefix "ICMP_TRACE"
  • Разрешить вход тех пакетов которые сервер сам запросил, а так же уже установленные сессии
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

Таблица filter (FORWARD)

  • Разрешить передачу трафика от сетевой карточки ens32 к другой сетевой карточки ens33
iptables -A FORWARD -i ens32 -o ens33
  • Разрешить передачу трафика от сетевой карточки ens33 к другой сетевой карточки ens32
iptables -A FORWARD -i ens33 -o ens32 
  • от сети 192.168.19.0/24 к сети 192.168.100.0/24
iptables -A FORWARD -s 192.168.19.0/24 -d 192.168.100.0/24 -j ACCEPT
  • от сети 192.168.100.0/24 к сети 192.168.19.0/24
iptables -A FORWARD -s 192.168.100.0.24 -d 192.168.100.0/24 -j ACCEPT

Таблица filter (OUTPUT)

Как правило исходящий трафик со стороны сервера не запрещают, но бывают некоторые исключения, например если на сервер установили «крякнутый» софт, который будет требовать лицензию, и появилось необходимость заблокировать попытку обращения на официальный ресурс

iptables -A OUTPUT -d 192.168.0.50 -j DROP

Таблица nat (POSTROUTING)

  • MASQUERADE — Для исходящих пакетов заменяет IP-адрес источника на адрес интерфейса, с которого уходит пакет
iptables -t nat -A POSTROUTING -s 192.168.19.0/24 -o ens33 -j MASQUERADE
  • SNAT — Аналогично MASQUERADE, но с указанием конкретного адреса, чей адрес будет использоваться для подмены
iptables -t nat -A POSTROUTING -s 192.168.19.0/24 -o ens33 -j SNAT --to-source 1.1.1.1

Таблица nat (PREROUTING)

  • Пробросить порт 8000/tcp на другой сервер с адресом 10.7.0.169 (DNAT)
iptables -t nat -A PREROUTING  -p tcp --dport 8000 -j DNAT --to-destination 10.7.0.169
  • Пробросить порт 8080/tcp на порт 80 (REDIRECT)
iptables -t nat -A PREROUTING  -p tcp --dport 8080 -j REDIRECT --to-port 80

Важный момент

  • Порядок действий происходит сверху вниз, важно понимать если вы сначала напишите разрешить а следующим правилом запретить то будет выполняться первое правила а на второе не будет доходить
  • Даже в случае пинга внешних хостов, нужно не только отправить пакеты к ним, но и получить ответ. При работе с iptables важно помнить, что многие протоколы передачи данных требуют двусторонней коммуникации. Поэтому нужно настраивать правила соответствующим образом — случаи, когда новички забывают разрешить работу с сервером по SSH случаются очень часто.