iptables
iptables это исходный инструмент firewall для Linux, построенный на основе netfilter в ядре. Всё ещё широко используется, но постепенно заменяется nftables, более эффективным и удобным для аудита преемником.
Почему он до сих пор широко используется, несмотря на возраст
iptables был стандартным firewall для Linux более двадцати лет, поэтому большая часть существующей документации, скриптов и инструментов автоматизации в интернете предполагает его использование, даже на дистрибутивах, где под капотом уже работает nftables.
Ловушка порядка правил
iptables обрабатывает правила сверху вниз и останавливается на первом совпадении. Широкое правило "allow", размещённое выше более конкретного правила "deny", молча делает правило deny бесполезным, это одна из самых частых ошибок настройки firewall.
iptables, nftables и ufw сравниваются, и объясняется, когда подходит каждый из них, здесь: руководство по файрволу в Linux.
Просмотр и изменение действующих правил
Начните с вывода правил со счётчиками и номерами. Согласно странице руководства iptables(8), параметр -n избавляет от медленного обратного DNS-разрешения, -v добавляет счётчики и имена интерфейсов, а --line-numbers показывает позицию каждого правила:
sudo iptables -L INPUT -n -v --line-numbers
sudo iptables -S
Форма -S печатает правила в том же стиле, что и iptables-save, что удобно для копирования. Счётчики пакетов показывают, срабатывает ли правило вообще: правило, у которого счётчик остаётся нулевым после нескольких дней трафика, либо не нужно, либо перекрыто более ранним правилом, то есть вы попали в описанную выше ловушку порядка.
При добавлении правил важна позиция. -A добавляет правило в конец цепочки, а -I INPUT 1 вставляет в начало, что является значением по умолчанию для -I. Параметр -C проверяет, существует ли уже такое правило, чтобы скрипты не создавали дубликаты; он ничего не меняет и сообщает результат кодом возврата.
sudo iptables -I INPUT 1 -p tcp --dport 22 -j ACCEPT
Наконец, проверьте, какой механизм работает под капотом. Документация xtables-nft отмечает, что строка версии, которую выводит iptables -V, показывает использование nf_tables.
Сохранение, проверка и постоянное хранение правил
Правила, загруженные через iptables, живут в памяти. iptables-save выгружает их в виде текста, а iptables-restore загружает обратно. В руководстве iptables-restore стоит запомнить два момента: без --noflush команда удаляет текущее содержимое каждой восстанавливаемой таблицы, а --test разбирает набор правил, не применяя его. Это позволяет безопасно проверить файл заранее:
sudo sh -c 'iptables-restore --test < /etc/iptables/rules.v4'
В Debian и Ubuntu вики Debian рекомендует пакет iptables-persistent, который читает правила IPv4 из /etc/iptables/rules.v4, а правила IPv6 из rules.v6. После удачного изменения сохраните действующие правила командой:
sudo netfilter-persistent save
Эта команда просит плагины сохранить загруженные в данный момент правила в постоянное хранилище. IPv6 это отдельный набор правил, которым занимается ip6tables, поэтому проверяйте оба. И не смешивайте на одной машине инструменты nft и legacy: проект nftables предупреждает, что одновременное использование обоих может привести к неожиданным результатам. Выберите один механизм и придерживайтесь его; куда он движется, объясняет статья про nftables.
Связанные термины: nftables, ufw, Firewall, Политика default deny.
Часто задаваемые вопросы
Уходит ли iptables в прошлое?
На современных дистрибутивах фактическую фильтрацию пакетов под капотом выполняет nftables, даже когда вы взаимодействуете с командой iptables через слой совместимости.
Сохраняются ли правила iptables после перезагрузки по умолчанию?
Нет. Правила существуют только в памяти, если их явно не сохранить и не настроить автоматическое восстановление при загрузке, обычно через iptables-persistent на системах на базе Debian.
Какая самая простая безопасная политика по умолчанию?
Установить политику по умолчанию для цепочки INPUT в DROP, а затем явно разрешить только те конкретные порты и сервисы, которые реально нужны.
Как понять, используется ли правило iptables на самом деле?
Выведите цепочку командой iptables -L -n -v и посмотрите счётчики пакетов и байтов. Если у правила счётчики остаются нулевыми, оно не совпадает ни с каким трафиком: либо оно не нужно, либо пакеты раньше перехватывает другое правило.
Как проверить, работает ли iptables на моём сервере поверх nftables?
Выполните iptables -V. Если команда является вариантом для nf_tables, строка версии об этом сообщит. В Debian переключаться между вариантами nft и legacy можно через update-alternatives, но использовать оба одновременно нельзя.
Хотите увидеть, в каком состоянии ваш сервер?
Запустите бесплатную read-only проверку сервера или откройте Security Lab и посмотрите цикл обнаружение, сдерживание, восстановление, проверка в действии.
Получить бесплатную проверку сервераОткрыть Security Lab