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

Является ли моя конфигурация Dante SOCKS5 «безопасной»?

Я понимаю, что «безопасный» - очень емкое определение.

Мне нужно подключиться к серверу регистрации SFTP (только пользователь / пароль, без ключа ssh).

Сервер SFTP имеет белый список IP-адресов, и все IP-адреса моих серверов являются динамическими. Я хочу настроить прокси-сервер SOCKS5 со статическим IP-адресом, который позволит мне подключаться с моих серверов и проксировать соединение SSH. К сожалению, я не могу занести в белый список входящие IP-адреса в брандмауэре, потому что я использую Heroku, который использует любой IP-адрес на Amazon.

Меня в основном беспокоит то, что этот прокси-сервер открыт для всего мира, и я хочу убедиться, что шаги, которые я сделал, хороши, или мне нужно сделать больше. Я знаю, что безопасность может идти в крайнем направлении, но я не очень продвинутый, поэтому я хочу найти золотую середину, которая подходит для 99,95% приложений.

Вот шаги, которые я сделал, ничего больше (так что никакой дополнительной настройки или установки программного обеспечения и т. Д.).

  1. Создайте экземпляр в Google Cloud, используйте Ubuntu 18.04, дайте ему статический IP
  2. Открытый порт tcp:1080 в брандмауэре с помощью веб-интерфейса Google Cloud заблокировать 80 и 443
  3. Создайте нового пользователя с помощью следующей команды, используя очень безопасный пароль (длина 24 символа, включая буквы и цифры)

    useradd -M -s /usr/sbin/nologin -p $(openssl passwd -1 PASSWORD) USERNAME 
    
  4. Установите 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
    }
    

Вот мои основные опасения:

  1. Можно ли открыть порт 1080? Некоторые люди говорят, что это плохо, но они связывают меня с некоторыми вещами, которые я не понимаю, например с netplan.io. Есть ли простое решение, которое я могу сделать, если это плохая идея?
  2. Я заметил, что вы можете использовать ключевое слово method внутри client и socks блоки ... я должен что-то туда положить? Или он использует то, что указано выше под socksmethod и clientmethod?
  3. Должен ли я добавить что-то, что блокирует неудачные попытки входа в систему (я думаю, это называется fail2ban?)
  4. Я добавил ограничение на socks часть, чтобы разрешить подключение только к logging-service.example.com, хотя я полагаю, что если до этого момента кто-то вторгся, что-то очень не так.
  5. В net-ssh/net-sftp библиотеки, которые я использую, также поддерживают прокси-серверы "jump", это более безопасно?
  6. Это кажется странным, когда мир просто подключается к порту 1080 и пытается угадать имя пользователя / пароль. Полагаю, это самое слабое звено. Если пароль длинный и надежный, есть ли что-нибудь еще, чтобы укрепить это самое слабое звено?

Есть ли другие идеи, чтобы сделать это более безопасным?

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.