Как закрепить SSH-сервер?

117

Какие меры я могу предпринять, чтобы убедиться, что безопасность вокруг моего SSH-сервера абсолютно непроницаема?

Это будет вики сообщества с самого начала, поэтому давайте посмотрим, что делают люди для защиты своих серверов.

    
задан LassePoulsen 30.01.2015 в 17:27
источник

13 ответов

20

Сделать IP-адрес клиента блока sshd, который не смог предоставить правильную регистрационную информацию « DenyHØsts », может эффективно выполнять эту работу. У меня это установлено на всех моих Linux-боксах, которые каким-то образом достижимы с большой стороны.

Это позволит убедиться, что силовые атаки на SSHD не будут эффективными, но запомните (!) таким образом, что вы можете закончить себя, если забудете пароль. Это может быть проблемой на удаленном сервере, к которому у вас нет доступа.

    
ответ дан LassePoulsen 10.06.2016 в 23:17
источник
97

Использовать пары открытого / закрытого ключей для аутентификации вместо паролей.

  1. Создайте защищенный паролем ключ SSH для каждого компьютера, которому необходимо получить доступ к серверу:

    ssh-keygen

  2. Разрешить доступ SSH с открытым ключом с разрешенных компьютеров:

    Скопируйте содержимое ~/.ssh/id_rsa.pub с каждого компьютера в отдельные строки ~/.ssh/authorized_keys на сервере или запустите ssh-copy-id [server IP address] на каждом компьютере, которому вы предоставляете доступ (вам нужно будет ввести пароль сервера на строки).

  3. Отключить доступ к SSH для доступа:

    Откройте /etc/ssh/sshd_config , найдите строку, которая говорит #PasswordAuthentication yes , и измените ее на PasswordAuthentication no . Перезапустите демон сервера SSH, чтобы применить изменение ( sudo service ssh restart ).

Теперь единственным возможным способом SSH на сервере является использование ключа, который соответствует строке в ~/.ssh/authorized_keys . Используя этот метод, I не заботятся об атаках грубой силы, потому что, даже если они угадают мой пароль, он будет отклонен. Невозможно принудительно использовать пару открытых / закрытых ключей с сегодняшней технологией.

    
ответ дан Evan Kroske 08.06.2016 в 02:31
65

Я бы предложил:

  • Использование fail2ban для предотвращения попыток входа в грубую силу.

  • Отключение входа в систему с правами администратора через SSH. Это означает, что злоумышленнику приходилось определять сложнее и имя пользователя, и пароль, делающий атаку.

    Добавьте PermitRootLogin no к вашему /etc/ssh/sshd_config .

  • Ограничение пользователей, которые могут использовать SSH на сервере. Либо группа, либо только определенные пользователи.

    Добавьте AllowGroups group1 group2 или AllowUsers user1 user2 , чтобы ограничить, кто может SSH на сервер.

ответ дан Mark Davidson 08.06.2016 в 02:07
22

Другие ответы обеспечивают безопасность, но есть одна вещь, которую вы можете сделать, что сделает ваши журналы более тихими и сделает менее вероятным, что вы заблокируете свою учетную запись:

Переместите сервер из порта 22 в другой. Либо на вашем шлюзе, либо на сервере.

Это не повышает безопасность, но означает, что все случайные интернет-сканеры не будут загромождать ваши файлы журналов.

    
ответ дан Douglas Leeder 08.06.2016 в 02:15
20

Включить двухфакторную аутентификацию с помощью HOTP или TOTP . Это доступно с 13.10.

Это включает в себя использование аутентификации с открытым ключом по аутентификации паролем, как и в другом ответе здесь, но также требует, чтобы пользователь подтвердил, что он держит свой второй фактор-устройство в дополнение к его закрытому ключу.

Резюме:

  1. <р> sudo apt-get install libpam-google-authenticator
  2. Попросите каждого пользователя выполнить команду google-authenticator , которая генерирует ~/.google-authenticator и помогает им настраивать свои двухфакторные устройства (например, приложение Google Authenticator для Android).

  3. Измените /etc/ssh/sshd_config и установите:

    ChallengeResponseAuthentication yes
    PasswordAuthentication no
    AuthenticationMethods publickey,keyboard-interactive
    
  4. Запустите sudo service ssh reload , чтобы получить изменения в /etc/ssh/sshd_config .

  5. Измените /etc/pam.d/sshd и замените строку:

    @include common-auth
    

    с:

    auth required pam_google_authenticator.so
    

Более подробная информация о различных параметрах конфигурации - это мой пост в блоге из прошлого года: Лучшая двухфакторная аутентификация ssh на Ubuntu .

    
ответ дан Robie Basak 23.05.2017 в 00:29
19

Вот вам одна простая задача: установить ufw («несложный брандмауэр») и использовать его для оценки ограничений входящих подключений.

В командной строке введите:

$ sudo ufw limit OpenSSH 

Если ufw не установлен, сделайте это и повторите попытку:

$ sudo aptitude install ufw 

Многие злоумышленники попытаются использовать ваш SSH-сервер для перебора паролей. Это позволит только 6 подключений каждые 30 секунд с одного и того же IP-адреса.     

ответ дан mpontillo 15.08.2010 в 00:45
12

Если я хочу иметь некоторую дополнительную безопасность или вам нужно получить доступ к SSH-серверам глубоко внутри какой-либо корпоративной сети, я настрою скрытый службы с помощью программного обеспечения для анонимности Tor .

  1. Установить Tor и настроить сам SSH-сервер.
  2. Убедитесь, что sshd прослушивает только localhost .
  3. Открыть /etc/tor/torrc . Установите HiddenServiceDir /var/lib/tor/ssh и HiddenServicePort 22 127.0.0.1:22 .
  4. Посмотрите var/lib/tor/ssh/hostname . Существует имя типа d6frsudqtx123vxf.onion . Это адрес скрытой службы.
  5. Откройте $HOME/.ssh/config и добавьте несколько строк:

    Host myhost
    HostName d6frsudqtx123vxf.onion
    ProxyCommand socat STDIO SOCKS4A:127.0.0.1:%h:%p,socksport=9050
    

Кроме того, мне нужен Tor на моем локальном хосте. Если он установлен, я могу ввести ssh myhost , а SSH открывает соединение через Tor. Сервер SSH с другой стороны открывает свой порт только на локальном хосте. Поэтому никто не может подключить его через «обычный интернет».     

ответ дан qbi 08.06.2016 в 02:10
8

В этой теме есть статья администрирования Debian. Он охватывает базовую конфигурацию сервера SSH, а также правила брандмауэра. Это может представлять интерес также для упрочения SSH-сервера.

См. статью: Обеспечение безопасного доступа к SSH .

    
ответ дан Huygens 12.10.2010 в 00:35
6

Мой подход к упрощению SSH - это комплекс. Следующие пункты относятся к тому, как я это делаю, от края самой границы моей сети (ов) до самих серверов.

  1. Фильтрация трафика на уровне границ через IDS / IPS с известными сервисными сканерами и сигнатурами в списке блокировок. Я достигаю этого с помощью Snort через мой пограничный брандмауэр (это мой подход, pfSense прибор). Иногда я не могу этого сделать, например, с моими VPS.

  2. Брандмауэр / Сетевая фильтрация портов (ов) SSH. Я явно разрешаю некоторым системам доступ к моим SSH-серверам. Это делается либо через брандмауэр pfSense на границе моей сети, либо брандмауэры на каждом сервере, явно настроенные. Бывают случаи, когда я не могу этого сделать, хотя это почти никогда не происходит, за исключением частных лабораторий проверки при проверке подлинности или тестирования безопасности, где брандмауэры не помогут проверить вещи).

  3. В сочетании с моим pfSense или пограничным брандмауэром NAT-внутренней внутренней сетью и отделением от Интернета и систем Доступ только VPN для серверов . Gotta VPN в мои сети, чтобы добраться до серверов, потому что нет портов, ориентированных на Интернет как таковых. Это определенно не работает для всех моих VPS, но в сочетании с # 2 я могу иметь один VPS-шлюз через VPN-соединение на этом сервере, а затем разрешить его IP-адрес для других ящиков. Таким образом, я точно знаю, что может или не может SSH в моей моей коробке, которая является VPN. (Или, в моей домашней сети за pfSense, мое VPN-соединение, и я единственный, у кого есть доступ к VPN).

  4. Где # 3 не выполнимо, fail2ban, настроенный на блокировку после 4 неудачных попыток и блокировки IP-адресов в течение часа или более - это достойная защита от людей, постоянно атакующих с помощью bruteforcing - просто блок em на брандмауэре автоматически с fail2ban, и meh. Настройка fail2ban - это боль, хотя ...

  5. Обертка портов путем изменения порта SSH. Однако это НЕ хорошая идея обойтись без каких-либо дополнительных мер безопасности, а также - мантры " Безопасность через Obscurity "уже была опровергнута и оспаривается во многих случаях. Я сделал это в сочетании с IDS / IPS и сетевой фильтрацией, но это все еще ОЧЕНЬ плохая вещь, чтобы сделать это самостоятельно.

  6. ОБЯЗАТЕЛЬНАЯ двухфакторная аутентификация через двухфакторные проверки подлинности Duo Security . на моих SSH-серверах есть Duo, настроенный на нем, так что для того, чтобы даже войти, появляются подсказки 2FA, и я должен подтвердить каждый доступ. (Это самая полезная функция - потому что даже если у кого-то есть кодовая фраза или перерывы, они не могут пройти через плагины Duo PAM). Это одна из самых больших защит на моих SSH-серверах от несанкционированного доступа - каждый пользовательский логин ДОЛЖЕН привязываться к настроенному пользователю в Duo, и поскольку у меня есть ограничительный набор, в системе не могут быть зарегистрированы новые пользователи.

Мои двухценты для обеспечения SSH. Или, по крайней мере, мои мысли о подходе.

    
ответ дан Thomas W. 10.06.2016 в 23:14
1

Возможно, вы захотите проверить приложение FreeOTP от RedHat вместо использования Google Authenticator. Иногда при обновлении приложения они блокируют вас! ; -)

Если вы хотите использовать другие аппаратные токены, такие как Yubikey или eToken PASS или NG, или если у вас много пользователей или на многих серверах, вы можете использовать брандмауэр с двумя факторами с открытым исходным кодом.

В последнее время я написал способ об этом .     

ответ дан cornelinux 08.06.2016 в 02:12
0

В последнее время я написал небольшой учебник. В принципе, вам нужно использовать PKI, и мой учебник также показывает, как использовать двухфакторную аутентификацию для еще большей безопасности. Даже если вы не используете ни одну из этих вещей, есть также некоторые лакомые кусочки о защите сервера, удаляя слабые шифрованные сюиты и другие основы. Ссылка

    
ответ дан 01000101 19.05.2015 в 15:52
0

Для большого числа пользователей / сертификатов рассматривается интеграция с LDAP. Крупные организации используют LDAP в качестве репозитория для учетных данных пользователей и сертификатов, хранящихся на значках или брелоках, независимо от того, используются ли эти сертификаты для аутентификации или подписания электронных писем. Примеры включают openLDAP, openDJ, Active Directory, Oracle Universal Directory, IBM Directory Server, snareWorks ...

Компьютеры и группы также могут управляться в LDAP, предоставляя централизованное управление учетными данными. Таким образом, столы помощи могут иметь один магазин для работы с большими группами населения.

Вот ссылка на интеграцию centOS: Ссылка     

ответ дан weller1 29.04.2016 в 15:50
0

Вы также можете блокировать базу в стране происхождения с использованием базы данных geoIP.

В принципе, если вы живете в США, тогда у кого-то в России нет причин подключаться к вашему SSH, поэтому они будут автоматически заблокированы.

Сценарий можно найти здесь: Ссылка

Вы также можете добавить к нему команды iptables (я сделал для своих капель), чтобы автоматически удалить весь трафик на / из этих IP-адресов.

    
ответ дан Michael A Mike 10.08.2017 в 07:09