Skip to main content

Iptables

Инфо:

Iptables - это инструмент для управления файрволом в операционной системе Linux. Он позволяет настраивать правила безопасности и контролировать трафик сети.

В Ubuntu iptables является утилитой уровня ядра и доступен по умолчанию. В Ubuntu 22 (и других версиях Ubuntu) установка iptables не требуется, так как она уже включена в ядро Linux и доступна изначально. 

Iptables предоставляет мощные возможности фильтрации и маршрутизации пакетов в Linux. Он работает на уровне ядра и используется для настройки правил файрвола и сетевых политик.

Применение:

1. Просмотр текущих правил:
iptables -L

Пример вывода:

Chain INPUT (policy ACCEPT)
target     prot opt source               destination         
ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:ssh
DROP       tcp  --  anywhere             anywhere             tcp dpt:http

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination  
Цепочки (Chain):
Chain INPUT: Цепочка, которая обрабатывает входящий трафик (пакеты, направленные к системе).
Chain FORWARD: Цепочка, которая обрабатывает пересылаемый трафик (пакеты, которые должны быть переданы через систему).
Chain OUTPUT: Цепочка, которая обрабатывает исходящий трафик (пакеты, отправляемые системой).

Столбцы для каждой цепочки:
target: Цель, то есть действие, которое будет выполнено с пакетом, если он соответствует правилу.
prot: Протокол, к которому относится правило (например, TCP, UDP).
opt: Опции, связанные с протоколом или действием.
source: Исходный адрес или сеть, откуда ожидается входящий трафик.
destination: Целевой адрес или порт, куда направляется трафик.

Из примера. В цепочке INPUT есть два правила:
Первое правило разрешает входящий TCP-трафик на порт SSH (22) с любого источника.
Второе правило блокирует входящий TCP-трафик на порт HTTP (80) с любого источника.
Цепочка FORWARD не содержит правил.
Цепочка OUTPUT не содержит правил.

В iptables есть несколько возможных состояний для параметра target в правилах. Некоторые из наиболее распространенных состояний target включают:

  1. ACCEPT: Пакет будет принят и разрешен.
  2. DROP: Пакет будет отброшен и удален, без отправки какого-либо уведомления отправителю.
  3. REJECT: Пакет будет отброшен и отправлено уведомление отправителю о том, что пакет был отклонен.
  4. LOG: Пакет будет принят, но информация о пакете будет записана в системный журнал или файл журнала для целей мониторинга и отладки.
  5. DNAT: Изменение адреса назначения (Destination NAT) позволяет перенаправить пакеты на другой адрес и/или порт.
  6. SNAT: Изменение адреса источника (Source NAT) позволяет заменить исходный адрес пакета на другой адрес и/или порт.
  7. MASQUERADE: Вид NAT, который заменяет исходный адрес источника на адрес интерфейса, через который пакет покидает систему.
  8. REDIRECT: Перенаправление пакетов на локальный порт или сокет.
  9. MARK: Пометка пакетов для дальнейшей обработки другими инструментами или правилами.

Каждое состояние target в iptables выполняет определенное действие с пакетом, определенным правилом. Выбор подходящего состояния target зависит от ваших потребностей и требований конкретной ситуации.

2.  Очистка существующих правил:
iptables -F
3. Закрыть \ открыть доступа к порту:
iptables -A INPUT -p tcp --dport <порт> -j DROP
iptables -A INPUT -p tcp --dport <порт> -j ACCEPT
4. Разрешение доступа только для определенных IP-адресов (вайтлист):
iptables -A INPUT -p tcp --dport <порт> -s <IP-адрес> -j ACCEPT

Пример:

iptables -A INPUT -p tcp --dport 51821 -s 192.168.1.100 -j ACCEPT

Команда добавляет правило в цепочку INPUT, которая разрешает входящий TCP-трафик на порт 51821 только от указанного IP-адреса.

5. Сохранение и загрузка правил iptables:
iptables-save > /etc/iptables/rules.v4 #записать изменения в файл
iptables-restore < /etc/iptables/rules.v4 #загрузить правила в iptables

Дополнительно:

Чтобы правила iptables из файла /etc/iptables/rules.v4 автоматически применялись при загрузке системы, можно использовать инструменты настройки системы для запуска команды iptables-restore при старте.

Например можно настроить службу netfilter-persistent или через systemd.

Настройка netfilter-persistent:

apt install netfilter-persistent
netfilter-persistent reload #применить правила iptables без перезагрузки системы

Автозагрузка netfilter-persistent при старте системы:

systemctl enable netfilter-persistent

Настройка через systemd:

vim /etc/systemd/system/iptables.service

Добавить в файл службы текст:

[Unit]
Description=Load iptables rules
After=network.target

[Service]
Type=oneshot
ExecStart=/sbin/iptables-restore /etc/iptables/rules.v4

[Install]
WantedBy=multi-user.target

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

sudo systemctl daemon-reload
sudo systemctl enable iptables.service

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

systemctl start iptables.service

Получить список правил с номерами:

iptables -L INPUT --line-numbers

Удалить правило по номеру:

iptables -D INPUT <номер>