
easywall v2.14.0
Веб-интерфейс для межсетевого экрана nftables в Linux, написанный на Go. Применение автоматически откатывается через 120 секунд, если вы не подтвердите его — вы не сможете заблокировать себе доступ. Установка на Debian и Docker.
easywall
Ваш файрвол. Ваши правила. Без сюрпризов.
Живое демо · Документация · Журнал изменений
nftables через веб-интерфейс, который не может вас заблокировать: каждое применение откатывается само, если вы его не подтвердите.
Идея
Редактирование правила ничего не меняет. Его применение меняет всё — на 120 секунд. Если новые правила обрывают ваше соединение, вы не можете нажать «Подтвердить», а именно отсутствие подтверждения возвращает старые правила.
Архитектура
Два процесса. Тот, что открыт в сеть, не обладает привилегиями, которые стоило бы красть.
Полная переработка оригинального easywall — Python, Flask, iptables через
subprocess — который был заархивирован в 2022 году после CVE. Обе первопричины устранены:
привилегии живут в отдельном процессе, а путь применения правил собирает Go-структуры
вместо командной строки. Как это работает →
Установка
# Debian / Ubuntu — amd64 и 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
# Из исходников — 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-брутфорса для каждого правила |
| Чёрный и белый списки | IPv4, IPv6 и CIDR, проверяются до любого правила портов |
| Модули защиты | Двенадцать, пять включены по умолчанию — флуды, сканирования, bogons, фрагменты, 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, без subprocess 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 и интеграционный набор тестов против реального ядра |
Получение помощи
| Вопрос или что-то ведёт себя не так | Discord |
| Баг или желаемая функция | GitHub issues |
| Уязвимость в безопасности | Security advisory — не Discord и не публичный issue |
Участие в разработке
Настройка, соглашения о коммитах и чек-лист ревью: CONTRIBUTING.md.
Всё визуальное сначала проходит через DESIGN.md.
Проблемы безопасности: не как публичный issue — используйте GitHub Security Advisories.
Лицензия
GPL-3.0 — см. LICENSE.