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
включают:
ACCEPT
: Пакет будет принят и разрешен.DROP
: Пакет будет отброшен и удален, без отправки какого-либо уведомления отправителю.REJECT
: Пакет будет отброшен и отправлено уведомление отправителю о том, что пакет был отклонен.LOG
: Пакет будет принят, но информация о пакете будет записана в системный журнал или файл журнала для целей мониторинга и отладки.DNAT
: Изменение адреса назначения (Destination NAT) позволяет перенаправить пакеты на другой адрес и/или порт.SNAT
: Изменение адреса источника (Source NAT) позволяет заменить исходный адрес пакета на другой адрес и/или порт.MASQUERADE
: Вид NAT, который заменяет исходный адрес источника на адрес интерфейса, через который пакет покидает систему.REDIRECT
: Перенаправление пакетов на локальный порт или сокет.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 <номер>