Назад | Перейти на главную страницу

Как правильно сделать бастион ssh с помощью fail2ban в контейнере Docker

Я уже задал вопрос на форумах Docker но пока с ответом не повезло. Я надеюсь, что здесь мне повезет больше.

Я в процессе создания бастиона ssh (с fail2ban для безопасности) в контейнере Docker. Контейнер не будет служить никакой другой цели, кроме как быть бастионом ssh и будет служить для доступа к связанным томам через sshfs.

В настоящее время я использую, как мне кажется, очень плохой метод. Мой Dockerfile:

Это работает, с некоторыми оговорками (нет /var/log/auth.log для fail2ban, чтобы съесть, так что там довольно много искажений конфигурации), но я чувствую, что делаю это неправильно.

Проблема в том, что очень сложно найти информацию о том, как правильно делать то, что я пытаюсь сделать. Есть бесконечные страницы, на которых перечисляется, как использовать ssh в контейнере для отладки, резервного копирования и т. Д. несколько интересных страниц о том, почему вам не следует использовать ssh в контейнере. Но я не нашел страницу святого Грааля "вот как правильно настроить бастион ssh с fail2ban в контейнере Docker». Он вообще существует? Или я прав, что поступаю так, как есть?

Спасибо!

N.B. Я знаю, что это старый вопрос, но он возник в поисковой системе. Пишу свой ответ, чтобы помочь любому, у кого такой же вопрос.


Это Лучшая практика - иметь как можно меньше сервисов на контейнер.

Это снижает сложность обновления контейнеров и восстановления, если что-то пойдет не так.

У вас должно получиться два контейнера - один SSH контейнер и Fail2Ban контейнер.

Для SSH контейнера, вы сопоставляете соответствующий файл журнала с каталогом на хосте. Настройте контейнер в соответствии с вашими потребностями.

В Fail2Ban контейнеру потребуются разрешения для редактирования IPTables брандмауэр на хосте. В Fail2Ban контейнер также необходимо сопоставить с тем же SSH файлы журнала (и даже добавить с :ro для «только для чтения» в сопоставлении, так как запись в файлы журнала не требуется)