ДДСМ: цепочки, таблицы, фильтры
Jan. 26th, 2023 06:02 pm![[personal profile]](https://www.dreamwidth.org/img/silk/identity/user.png)
Дела домашние, сетевые, мелкие
В Линуксе есть традиция — каждые 10-15 лет менять файервол. Первый сетевой экран, который мне пришлось настраивать в Линуксе, звался IPChains. Это было больше 20 лет назад, он был простой, а меня незадолго перед этим Толпин с Тутубалиным научили строить простой файрвол для BSD (так давно было, что не помню в деталях, это ещё был BSD/OS, или уже FreeBSD) — на вход снаружи вовнутрь всё закрываем, открываем несколько специфичных служб (FTP, SSH, почта, Web); на выход всё открываем. Так что с IPChains я справился довольно быстро.
10 лет спустя IPChains заменили на IPTables, причём довольно резко. Как-то раз я обновил Debian и обнаружил, что мне надо всё бросить и срочно восстанавливать файрвол. Синтаксис у
Прошло ещё 10 лет, и в ядре появился NetFilter. К счастью, создатели я ядра и дистрибутивов учли мой предыдущий опыт и дали возможность переходить постепенно. Во-первых, они сохранили в ядре IPTables, а в дистрибутивах команду
Вторая удобная команда, созданная для СетевогоФильтра —
Третья команда в помощь переходящему с IPTables на NetFilter —
Я долго думал, как бы переписать все мои скрипты на
Сначала отладил его на ноутбуке — на нём проще всего восстановиться. Потом загрузил результат на сервер в Амстердаме — на его консоль есть WebVNC, и один раз мне пришлось им воспользоваться для исправления. И наконец вчера загрузил переписанные правила в домашний сервер; с ним сложнее всего, пойди что-то не так, его придётся выключить и подключить монитор. Но всё уже было хорошо отлажено. Заодно вчера Debian выкатил обновление ядра, так что я пару раз все мои хосты перезагрузил и убедился, что всё работает.
Теперь надо эти скрипты пооптимизировать, засунуть статику в файлы конфигурации вместо скриптов.
X-Post в ЖЖ.
В Линуксе есть традиция — каждые 10-15 лет менять файервол. Первый сетевой экран, который мне пришлось настраивать в Линуксе, звался IPChains. Это было больше 20 лет назад, он был простой, а меня незадолго перед этим Толпин с Тутубалиным научили строить простой файрвол для BSD (так давно было, что не помню в деталях, это ещё был BSD/OS, или уже FreeBSD) — на вход снаружи вовнутрь всё закрываем, открываем несколько специфичных служб (FTP, SSH, почта, Web); на выход всё открываем. Так что с IPChains я справился довольно быстро.
10 лет спустя IPChains заменили на IPTables, причём довольно резко. Как-то раз я обновил Debian и обнаружил, что мне надо всё бросить и срочно восстанавливать файрвол. Синтаксис у
iptables
был отдалённо похож на ipchains
, так что за пару часов переписывания я управился.Прошло ещё 10 лет, и в ядре появился NetFilter. К счастью, создатели я ядра и дистрибутивов учли мой предыдущий опыт и дали возможность переходить постепенно. Во-первых, они сохранили в ядре IPTables, а в дистрибутивах команду
iptables-legacy
; в Debian её можно сделать основной с помощью dpkg-reconfigure iptables
. Несколько лет я так и жил.Вторая удобная команда, созданная для СетевогоФильтра —
iptables-nft
. Она позволяет загрузить в Фильтр настройки в привычном синтаксисе IPTables. Как-то раз я перешёл с iptables-legacy
на iptables-nft
и ещё несколько лет так жил.Третья команда в помощь переходящему с IPTables на NetFilter —
iptables-translate
. Она берёт на вход синтаксис IPTables и выдаёт команды СетевогоФильтра. К сожалению, она очень строга к синтаксису, т.е. статику ей можно конвертировать, а динамику (вызов из условных операторов и циклов с подстановкой переменных) никак.Я долго думал, как бы переписать все мои скрипты на
nft
. В конце концов с помощью iptables-translate
и nft list ruleset
я подсмотрел, как использовать nft
. И написал питоновский скрипт, который примитивными регулярными выражениями разбирает мои команды и конвертирует в команды nft
.Сначала отладил его на ноутбуке — на нём проще всего восстановиться. Потом загрузил результат на сервер в Амстердаме — на его консоль есть WebVNC, и один раз мне пришлось им воспользоваться для исправления. И наконец вчера загрузил переписанные правила в домашний сервер; с ним сложнее всего, пойди что-то не так, его придётся выключить и подключить монитор. Но всё уже было хорошо отлажено. Заодно вчера Debian выкатил обновление ядра, так что я пару раз все мои хосты перезагрузил и убедился, что всё работает.
Теперь надо эти скрипты пооптимизировать, засунуть статику в файлы конфигурации вместо скриптов.
X-Post в ЖЖ.