В этой небольшой публикации я подготовлю своего рода шпаргалку по работе с iptables. Поскольку iptables в своей основе использует, например, ufw. Подчеркну, что это далеко не исчерпывающий материал, а скорее именно шпаргалка по тем командам, которые я использую чаще всего.
Шпаргалка по iptables
Я лишь подготовлю для себя (и вас) краткую шпаргалку по основным командам.
Просмотр текущих правил iptables
Одна из самых часто используемых команд – просмотр всех текущих правил:
sudo iptables -S
Либо второй вариант – отображение всех правил с группировкой по цепочкам:
sudo iptables -L
Также можно указать название цепочки, для которой необходимо отобразить правила:
sudo iptables -L INPUT
sudo iptables -S OUTPUT
Просмотр с отображением порядкового номера правила для каждой цепочки:
sudo iptables -L --line-numbers
Добавление правил iptables
Для добавления правил iptables используется параметр -A (append).
iptables -A
Пример добавления правила для SSH:
sudo iptables -A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
Пример добавления правила для HTTPS:
sudo iptables -A INPUT -p tcp -m state --state NEW -m tcp --dport 443 -j ACCEPT
Блокирование определенного IP-адреса:
sudo iptables -A INPUT -s 87.236.16.250 -j DROP
Добавление правила в определенную позицию в цепочке правил. Ниже пример для добавления разрешающего правила входящих HTTP подключений, которое будет находится третьим по порядку в цепоче INPUT.
sudo iptables -I INPUT 3 -p tcp --dport 80 -j ACCEPT
Изменение правил iptables
Для изменения правил iptables используется параметр -R (replace).
iptables -R
Удобнее все редактировать правила по их порядковому номеру. Например, сначала определим порядковый номер запрещающего правила для IP-адреса 87.236.16.250:
sudo iptables -L INPUT --line-numbers
Теперь отредактируем правило – изменим адрес на 1.1.1.1:
sudo iptables -R INPUT 4 -s 1.1.1.1 -j DROP
Удаление правил iptables
Для добавления правил iptables используется параметр -D (delete).
iptables -D
Удаление первого вхождения правила, которое запрещает подключение с IP-адреса 87.236.16.250. Если идентичных правил будет несколько, то удалиться только первое из них.
sudo iptables -D INPUT -s 1.1.1.1 -j DROP
Удаление правила для разрешения SSH подключений:
sudo iptables -D INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
Удаление определенного номера правила в указанной цепочке. Пример для удаления правила №3 из цепочки INPUT.
sudo iptables -D INPUT 3
Удаление всех правил из определенной цепочки iptables.
sudo iptables -F OUTPUT
Удаление всех правил iptables.
sudo iptables -F
Минимальный набор правил
Вам не обязательно использовать непосредственно iptables. Вместо iptables современные дистрибутивы предлагаю другие инструменты. Например, ufw или firewall-cmd. Но, если вы все же решили использовать именно iptables, то нужно немного подготовить систему для этого.
Примеры ниже приведены для дистрибутива Linux Mint. Для других дистрибутивов последовательность действий будет примерно такая же.
Сначала необходимо создать файл для хранения правил iptables:
sudo nano /etc/sysconfig/iptables
Добави набор минимально необходимых правил.
configuration
∗filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-host-unreachable
-A FORWARD -j REJECT --reject-with icmp-host-unreachable
COMMIT
Сохраняем внесенные изменения.
В таблице ниже я приведу очень краткое описание каждой строчки из правил iptables.
Правило | Назначение |
*filter | Все строочки ниже будут добавлены в таблицу FILTER |
:INPUT ACCEPT [0:0] | Принимать все пакеты в цепочке INPUT |
:FORWARD ACCEPT [0:0] | Принимать все пакеты в цепочке FORWARD |
:OUTPUT ACCEPT [0:0] | Принимать все пакеты в цепочке OUTPUT |
-A INPUT -m state –state RELATED,ESTABLISHED -j ACCEPT | Принимать подключение от уже установленных соединений |
-A INPUT -p icmp -j ACCEPT | Принимать ICMP запросы |
-A INPUT -i lo -j ACCEPT | Принимать все подключения на loopback интерфейсе |
-A INPUT -j REJECT –reject-with icmp-host-unreachable | Отклонить все не разрешенные соединения в цепочке INPUT |
-A FORWARD -j REJECT –reject-with icmp-host-unreachable | Отклонить все не разрешенные соединения в цепочке FORWARD |
COMMIT | Подтвердить применение правил выше |
Сохранение правил iptables
По умолчанию, если вы добавляете какие-то правила iptables, то они не сохраняются после перезагрузки системы. Для того, чтобы это исправить вы можете использовать утилиту iptables-save.
Использование утилиты предельно простое:
sudo iptables-save
По мере работы Шпаргалка по iptables будет дополняться.