Вопрос или проблема
У меня есть машина с установленной Linux и docker-образом, предоставляющим доступ к SFTP через порт 2222. Машина на Linux также предоставляет доступ к SSH и SFTP через порт 2222. Как мне настроить, чтобы принимать только SSH на порту 22, перенаправляя порт 2222 внутрь docker и не отвечая на хосте?
Ответ или решение
Для решения задачи перенаправления порта 2222 к контейнеру Docker, не затрагивая порт 22, потребуется корректная настройка сети и конфигурации Docker. Рассмотрим пошаговую инструкцию по этому процессу.
Шаг 1: Понимание архитектуры
-
Linux-хост: Обеспечивает работу SSH-сервера на порту 22 для удаленного доступа и должен продолжать это делать, не взаимодействуя с портом 2222.
-
Docker-контейнер: Экспонирует SFTP-сервис через порт 2222 и требует прямого доступа из внешней сети, который будет организован с помощью перенаправления порта.
Шаг 2: Настройка Docker
Для настройки Docker следует убедиться, что контейнер запущен с правильной конфигурацией портов.
-
Запуск контейнера с перенаправлением порта:
docker run -d -p 2222:2222 <имя_или_id_образа>
Здесь
-p 2222:2222
указывает на то, что порт 2222 на хосте перенаправляется на порт 2222 в контейнере.
Шаг 3: Настройка брандмауэра
Для того чтобы порт 2222 не принимал подключения на хосте, необходимо настроить правила брандмауэра, например, с использованием iptables
.
-
Разрешение соединений на порт 22 для SSH:
sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT
-
Перенаправление трафика на порт 2222 только в Docker:
sudo iptables -A DOCKER ! -i docker0 -p tcp --dport 2222 -j DNAT --to-destination 172.17.0.2:2222
Здесь
172.17.0.2
должен быть заменен на IP-адрес Docker-контейнера. -
Блокировка входящих соединений на порт 2222 хоста:
sudo iptables -A INPUT -p tcp --dport 2222 -j DROP
Шаг 4: Обновление системных настроек
Проверьте, что настройка сохранилась и активна после перезагрузки:
- Записать правила iptables в конфигурационный файл, например,
/etc/iptables/rules.v4
или используйтеiptables-save
.
Дополнительные рекомендации
-
Использование IP Whitelisting: Защитите сервера, установив фильтрацию входящих IP для ещё большей безопасности.
-
Мониторинг и логирование: Настройте системы мониторинга для отслеживания активности на открытых портах.
Следуя этим шагам, вы сможете безопасно передать порт 2222 контейнеру Docker, сохраняя при этом работу SSH на порту 22 на вашем Linux-хосте.