Я понимаю, что «безопасный» - очень емкое определение.
Мне нужно подключиться к серверу регистрации SFTP (только пользователь / пароль, без ключа ssh).
Сервер SFTP имеет белый список IP-адресов, и все IP-адреса моих серверов являются динамическими. Я хочу настроить прокси-сервер SOCKS5 со статическим IP-адресом, который позволит мне подключаться с моих серверов и проксировать соединение SSH. К сожалению, я не могу занести в белый список входящие IP-адреса в брандмауэре, потому что я использую Heroku, который использует любой IP-адрес на Amazon.
Меня в основном беспокоит то, что этот прокси-сервер открыт для всего мира, и я хочу убедиться, что шаги, которые я сделал, хороши, или мне нужно сделать больше. Я знаю, что безопасность может идти в крайнем направлении, но я не очень продвинутый, поэтому я хочу найти золотую середину, которая подходит для 99,95% приложений.
Вот шаги, которые я сделал, ничего больше (так что никакой дополнительной настройки или установки программного обеспечения и т. Д.).
Ubuntu 18.04
, дайте ему статический IPtcp:1080
в брандмауэре с помощью веб-интерфейса Google Cloud заблокировать 80
и 443
Создайте нового пользователя с помощью следующей команды, используя очень безопасный пароль (длина 24 символа, включая буквы и цифры)
useradd -M -s /usr/sbin/nologin -p $(openssl passwd -1 PASSWORD) USERNAME
Установите Dante со следующей конфигурацией (ens4
приходит из бега ifconfig
и получение имени адаптера. Думаю, так это называется в облаке Google):
logoutput: /var/log/danted.log
internal: ens4 port = 1080
external: ens4
socksmethod: username
clientmethod: none
user.privileged: root
user.unprivileged: nobody
# comment out user.libwrap lines
timeout.io: 43200
client pass {
from: 0.0.0.0/0 to: 0.0.0.0/0
log: error
}
socks pass {
from: 0.0.0.0/0 to: logging-service.example.com
log: error
}
Вот мои основные опасения:
method
внутри client
и socks
блоки ... я должен что-то туда положить? Или он использует то, что указано выше под socksmethod
и clientmethod
?socks
часть, чтобы разрешить подключение только к logging-service.example.com
, хотя я полагаю, что если до этого момента кто-то вторгся, что-то очень не так.net-ssh
/net-sftp
библиотеки, которые я использую, также поддерживают прокси-серверы "jump", это более безопасно?Есть ли другие идеи, чтобы сделать это более безопасным?
1) Не уверен, о чем они говорят. Очевидно, вам нужно будет открыть один порт, и пока ваши серверы могут достичь этого порта, не имеет большого значения, какой у него номер порта.
Однако 1080 - это стандартный порт socks, поэтому, если кто-то выполняет сканирование порта и видит, что порт 1080 открыт, их первое предположение может заключаться в том, что на этом порту работает сервер socks, и они атакуют его с помощью своих «инструментов атаки socks». . Если вместо этого вы позволите Dante прослушивать порт 443, возможно, они сначала догадаются, что это https-сервер, и сначала атакуют его с помощью своих инструментов атаки https. То есть, это может немного запутать злоумышленника.
2) Он будет использовать то, что указано выше. Помещение его внутрь полезно только в том случае, если то, что указано выше, представляет собой список из нескольких методов / клиентских методов, и вы хотите ограничить определенные правила подмножеством этого списка.
3) Не знаю, что такое «fail2ban», но вы можете установить для этого правила. Если вы затем заметили в своем файле журнала Dante сотню заблокированных запросов с IP-адреса «k», возможно, будет разумнее добавить правило «блокировки клиента» для этого IP-адреса, вместо того, чтобы позволить ему продолжать игру в угадывание.
4) Имеет смысл.
5) Да, если вы можете заставить его работать в вашем сценарии использования.
6) Может и нет. Однако некоторые возможности могут быть следующими:
Используйте "method: gssapi" вместо "method: username". Это гораздо более безопасно (имя пользователя и пароли в открытом виде не отправляются по сети в Dante), но также гораздо сложнее настроить и включает в себя настройку Kerberos.
Если серверы, которые вы подключаетесь к Dante, работают с запуском identd / rfc931-servers, вы можете изменить «clientmethod: none» на «clientmethod: rfc931» и добавить для этой цели дополнительное имя пользователя «identd» на хосте Dante.
Будет служить своего рода двухфакторной аутентификацией, когда кто-то должен будет угадать, от каких имен пользователей Dante будет принимать соединения, и какие имена пользователей / пароли Dante будет принимать от этих соединений. Однако это также протокол с открытым текстом, поэтому, если кто-то может перехватить сетевой трафик, он сможет увидеть имя идентификатора, а также ваше имя пользователя и пароль socks.