
easywall v2.14.0
Веб-интерфейс для межсетевого экрана nftables в Linux, написанный на Go. Применение автоматически откатывается через 120 секунд, если вы не подтвердите его — вы не сможете заблокировать себе доступ. Установка на Debian и Docker.
easywall
Ваш брандмауэр. Ваши правила. Никаких сюрпризов.
Живая демонстрация · Документация · Журнал изменений
nftables через веб-интерфейс, который не может заблокировать вам доступ: каждое применение отменяет само себя, если вы его не подтвердите.
Идея
Редактирование правила ничего не меняет. Его применение меняет всё — на 120 секунд. Если новые правила обрывают ваше соединение, вы не можете нажать «Подтвердить», и именно отсутствие подтверждения возвращает старые правила.
Архитектура
Два процесса. Тот, что открыт в сеть, не обладает привилегиями, которые стоило бы украсть.
Полная переработка оригинального easywall — Python, Flask, iptables через
subprocess — который был архивирован в 2022 году после CVE. Обе первопричины устранены:
привилегии находятся в отдельном процессе, а путь применения собирает структуры Go
вместо командной строки. Как это работает →
Установка
# Debian / Ubuntu — amd64 and arm64
ARCH=$(dpkg --print-architecture)
wget https://github.com/jp1337/easywall/releases/latest/download/easywall_$ARCH.deb
sudo dpkg -i easywall_$ARCH.deb && sudo apt-get install -f
# Docker
git clone https://github.com/jp1337/easywall.git && cd easywall && docker compose up -d
# From source — Go 1.27+, nftables
git clone https://github.com/jp1337/easywall.git && cd easywall
make build && sudo make install
sudo systemctl enable --now easywall-core easywall-web
Затем откройте https://localhost:12227. При первом посещении
настраивается учётная запись и создаются первые правила.
Что вы получаете
| Порты | TCP и UDP, отдельные или диапазоны, с маршрутизацией SSH brute-force для каждого правила |
| Blocklist и allowlist | IPv4, IPv6 и CIDR, проверяются до любого правила порта |
| Модули защиты | Двенадцать, пять включены по умолчанию — флуды, сканирования, bogon-адреса, фрагменты, broadcast/multicast/anycast |
| Проброс портов | NAT-перенаправления с выбором протокола |
| Пользовательские правила | Сырой nftables, проверяется на синтаксис перед применением |
| Экспорт / импорт | Весь набор правил в виде JSON |
| Журнал аудита | Что изменилось и когда, один JSON-объект на строку |
| Сосуществование с Docker | Владеет table inet easywall, ничего другого не трогает |
| English, Deutsch, Français | Переключается в интерфейсе, в том числе до входа. Язык может быть частичным: недостающее отображается на английском, а пробел сообщается, а не скрывается |
| Светлая и тёмная темы | Следует за ОС, с ручным переключателем; обе проверены на контрастность |
Создано с помощью
| Go 1.27, единый бинарник | go-chi/chi · html/template |
nftables через google/nftables | netlink для типизированных правил; nft только для пользовательских правил |
| Argon2id | golang.org/x/crypto, 16-байтовая соль на каждый пароль |
| CSRF | net/http.CrossOriginProtection, нативно в Go 1.25 |
| Система дизайна | DESIGN.md + Tailwind v4 — без сторонних UI-библиотек |
| Шрифты | Inter + JetBrains Mono, собственный хостинг, ~145 КБ — работает в изолированной сети |
| CI | govulncheck, gosec, CodeQL, -race и набор интеграционных тестов на реальном ядре |