Какие меры я могу предпринять, чтобы убедиться, что безопасность вокруг моего SSH-сервера абсолютно непроницаема?
Это будет вики сообщества с самого начала, поэтому давайте посмотрим, что делают люди для защиты своих серверов.
Сделать IP-адрес клиента блока sshd, который не смог предоставить правильную регистрационную информацию, «DenyHØsts» может эффективно выполнять эту работу. У меня это установлено на всех моих Linux-боксах, которые каким-то образом достижимы с отличной внешней стороны.
Это позволит убедиться, что силовые атаки на SSHD не будут эффективными, но запомните (!) Это вы можете закончить себя, если вы забудете пароль. Это может быть проблемой на удаленном сервере, к которому у вас нет доступа.
Сделать IP-адрес клиента блока sshd, который не смог предоставить правильную регистрационную информацию, «DenyHØsts» может эффективно выполнять эту работу. У меня это установлено на всех моих Linux-боксах, которые каким-то образом достижимы с отличной внешней стороны.
Это позволит убедиться, что силовые атаки на SSHD не будут эффективными, но запомните (!) Это вы можете закончить себя, если вы забудете пароль. Это может быть проблемой на удаленном сервере, к которому у вас нет доступа.
Мой подход к упрощению SSH ... сложный. Следующие пункты относятся к тому, как я это делаю, от самой граничной границы моей сети (ов) до самих серверов.
Фильтрация трафика на уровне границ через IDS / IPS с известными сервисными сканерами и подписи в списке блокировок. Я достигаю этого с помощью Snort через мой пограничный брандмауэр (это мой подход, устройство pfSense). Иногда я не могу этого сделать, например, с помощью моих VPS. Брандмауэр / Сетевая фильтрация портов (ов) SSH. Я явно разрешаю некоторым системам доступ к моим серверам SSH. Это делается либо через брандмауэр pfSense на границе моей сети, либо брандмауэры на каждом сервере, явно настроенные. Бывают случаи, когда я не могу этого сделать, хотя это почти никогда не происходит, за исключением частных лабораторий проверки подлинности или тестирования безопасности, где брандмауэры не помогут проверить вещи). В сочетании с моим pfSense или пограничным брандмауэром NAT-внутренней внутренней сетью и отделением от Интернета и систем, VPN-Only Access to Servers. Gotta VPN в мои сети, чтобы добраться до серверов, потому что нет портов, ориентированных на Интернет как таковых. Это определенно не работает для всех моих VPS, но в сочетании с # 2 я могу иметь один VPS-шлюз через VPN-соединение на этом сервере, а затем разрешать его IP-адреса другим блокам. Таким образом, я точно знаю, что может или не может SSH в моей моей коробке, которая является VPN. (Или, в моей домашней сети за pfSense, мое VPN-соединение, и я единственный, у кого есть доступ к VPN). Там, где # 3 не выполнимо, fail2ban, настроенный на блокировку после 4 неудачных попыток и блокирования IP-адресов в течение часа или более, является достойной защитой от людей, постоянно атакующих с помощью bruteforcing - просто блокируйте их на брандмауэре автоматически с помощью fail2ban и meh. Настройка fail2ban - это боль, хотя ... Обфускация портов путем изменения SSH-порта. Однако это не является хорошей идеей обойтись без каких-либо дополнительных мер безопасности, а мантра «Безопасность через Obscurity» уже была опровергнута и оспаривается во многих случаях. Я сделал это в сочетании с IDS / IPS и сетевой фильтрацией, но это все еще очень плохо для себя. ОБЯЗАТЕЛЬНАЯ двухфакторная аутентификация с помощью двухфакторной аутентификации Duo Security. На каждом из моих SSH-серверов есть Duo, настроенный на нем, так что для того, чтобы даже войти, появляются подсказки 2FA, и я должен подтвердить каждый доступ. (Это самая полезная функция - потому что даже если у кого-то есть кодовая фраза или перерывы, они не могут пройти через плагины Duo PAM). Это одна из самых больших защит на моих серверах SSH от несанкционированного доступа - каждый пользовательский логин ДОЛЖЕН привязываться к настроенному пользователю в Duo, и поскольку у меня есть ограничительный набор, в системе не могут быть зарегистрированы новые пользователи.Мои двухценты для обеспечения SSH. Или, по крайней мере, мои мысли о подходе.
В последнее время я написал небольшой учебник. В принципе, вам нужно использовать PKI, и мой учебник также показывает, как использовать двухфакторную аутентификацию для еще большей безопасности. Даже если вы не используете ни одну из этих вещей, есть также некоторые лакомые кусочки о защите сервера, удаляя слабые шифрованные сюиты и другие основы. https://joscor.com/blog/hardening-openssh-server-ubuntu-14-04/
Если я хочу иметь некоторую дополнительную безопасность или вам нужно получить доступ к SSH-серверам глубоко внутри какой-либо корпоративной сети, я настраиваю скрытую службу с помощью программного обеспечения для анонимности Tor.
Установите Tor и настройте сам SSH-сервер. Убедитесь, что sshd прослушивает только localhost. Откройте /etc/tor/torrc. Установите HiddenServiceDir /var/lib/tor/ssh и HiddenServicePort 22 127.0.0.1:22. Посмотрите на var/lib/tor/ssh/hostname. Это имя похоже на d6frsudqtx123vxf.onion. Это адрес скрытой службы. Откройте $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 с другой стороны открывает свой порт только на локальном хосте. Поэтому никто не может подключить его через «обычный интернет».
Включить двухфакторную аутентификацию с помощью HOTP или TOTP. Это доступно начиная с 13.10.
Это включает в себя использование аутентификации с открытым ключом по аутентификации паролем, как и в другом ответе здесь, но также требует, чтобы пользователь подтвердил, что он держит свой второй фактор-устройство в дополнение к его закрытому ключу.
Резюме:
sudo apt-get install libpam-google-authenticator Попросите каждого пользователя выполнить команду google-authenticator, которая генерирует ~/.google-authenticator и помогает им настраивать свои двухфакторные устройства (например, приложение Google Authenticator для Android ). Отредактируйте /etc/ssh/sshd_config и установите:ChallengeResponseAuthentication yes
PasswordAuthentication no
AuthenticationMethods publickey,keyboard-interactive
Запустите sudo service ssh reload, чтобы получить изменения в /etc/ssh/sshd_config. Измените /etc/pam.d/sshd и замените строку: @include common-auth
на: auth required pam_google_authenticator.so
Подробнее о различных параметрах конфигурации - это мой пост в блоге из прошлого года: HOTP .
Возможно, вы захотите проверить приложение FreeOTP от RedHat вместо использования Google Authenticator. Иногда при обновлении приложения они блокируют вас! ; -)
Если вы хотите использовать другие аппаратные токены, такие как Yubikey или eToken PASS или NG, или если у вас много пользователей или на многих серверах, вы можете использовать брандмауэр с двумя ключами с открытым исходным кодом. ! d1]
В последнее время я написал об этом.
Я бы предложил:
Использование fail2ban для предотвращения попыток входа в грубую силу. Отключение входа в систему с правами администратора через SSH. Это означает, что злоумышленнику приходилось определять сложнее и имя пользователя, и пароль, делающий атаку. Добавьте PermitRootLogin no к вашему /etc/ssh/sshd_config. Ограничение пользователей, которые могут использовать SSH на сервере. Либо группа, либо только определенные пользователи. Добавьте AllowGroups group1 group2 или AllowUsers user1 user2, чтобы ограничить, кто может SSH на сервер.Используйте пары открытого / закрытого ключей для аутентификации вместо паролей.
Создайте защищенный паролем ключ SSH для каждого компьютера, которому необходимо получить доступ к серверу: ssh-keygen Разрешить доступ SSH с открытым ключом с разрешенных компьютеров: скопировать содержимое ~/.ssh/id_rsa.pub с каждого компьютера на отдельный строки ~/.ssh/authorized_keys на сервере или запустить ssh-copy-id [server IP address] на каждом компьютере, которому вы предоставляете доступ (вам нужно будет ввести пароль сервера в строке). Отключить пароль SSH-доступ: откройте /etc/ssh/sshd_config, найдите строку, которая говорит #PasswordAuthentication yes, и измените ее на PasswordAuthentication no. Перезапустите демон сервера SSH, чтобы применить изменение (sudo service ssh restart).Теперь единственным возможным способом SSH на сервере является использование ключа, соответствующего строке в ~/.ssh/authorized_keys. Используя этот метод, мне не нужны атаки с грубой силой, потому что даже если они угадают мой пароль, он будет отклонен. Жесткое принуждение пары открытого / закрытого ключа невозможно с сегодняшней технологией.
В этой теме есть статья администрирования Debian. Он охватывает базовую конфигурацию сервера SSH, а также правила брандмауэра. Это может представлять интерес и для упрощения SSH-сервера.
См. Статью: Сохранение доступа SSH.
Вы также можете блокировать базу в стране происхождения с использованием базы данных geoIP.
В принципе, если вы живете в США, тогда у кого-то в России нет причин подключаться к вашему SSH, поэтому они будут автоматически заблокированы.
Сценарий можно найти здесь: https://www.axllent.org/docs/view/ssh-geoip/
Вы также можете добавить к нему команды iptables (я сделал для моих капель), чтобы автоматически удалить весь трафик на / из этих IP-адресов.
Вот одна простая задача: установить ufw («несложный брандмауэр») и использовать его для оценки ограничений входящих соединений.
В командной строке введите:
$ sudo ufw limit OpenSSH
Если ufw не установлен, выполните это и повторите попытку:
$ sudo aptitude install ufw
Многие злоумышленники попытаются использовать ваш SSH-сервер для перебора паролей. Это позволит только 6 подключений каждые 30 секунд с одного и того же IP-адреса.
Для большого числа пользователей / сертификатов рассматривается интеграция LDAP. Крупные организации используют LDAP в качестве репозитория для учетных данных пользователей и сертификатов, хранящихся на значках или брелоках, независимо от того, используются ли эти сертификаты для аутентификации или подписания электронных писем. Примеры включают openLDAP, openDJ, Active Directory, Oracle Universal Directory, IBM Directory Server, snareWorks ...
Компьютеры и группы также могут управляться в LDAP, предоставляя централизованное управление учетными данными. Таким образом, справочные службы могут иметь одностановочный магазин для работы с большими группами населения.
Вот ссылка на интеграцию centOS: http://itdavid.blogspot.com/2013/11/howto-configure-openssh- to-fetch-public.html
Мой подход к упрощению SSH ... сложный. Следующие пункты относятся к тому, как я это делаю, от самой граничной границы моей сети (ов) до самих серверов.
Фильтрация трафика на уровне границ через IDS / IPS с известными сервисными сканерами и подписи в списке блокировок. Я достигаю этого с помощью Snort через мой пограничный брандмауэр (это мой подход, устройство pfSense). Иногда я не могу этого сделать, например, с помощью моих VPS. Брандмауэр / Сетевая фильтрация портов (ов) SSH. Я явно разрешаю некоторым системам доступ к моим серверам SSH. Это делается либо через брандмауэр pfSense на границе моей сети, либо брандмауэры на каждом сервере, явно настроенные. Бывают случаи, когда я не могу этого сделать, хотя это почти никогда не происходит, за исключением частных лабораторий проверки подлинности или тестирования безопасности, где брандмауэры не помогут проверить вещи). В сочетании с моим pfSense или пограничным брандмауэром NAT-внутренней внутренней сетью и отделением от Интернета и систем, VPN-Only Access to Servers. Gotta VPN в мои сети, чтобы добраться до серверов, потому что нет портов, ориентированных на Интернет как таковых. Это определенно не работает для всех моих VPS, но в сочетании с # 2 я могу иметь один VPS-шлюз через VPN-соединение на этом сервере, а затем разрешить его IP-адрес для других ящиков. Таким образом, я точно знаю, что может или не может SSH в моей моей коробке, которая является VPN. (Или, в моей домашней сети за pfSense, мое VPN-соединение, и я единственный, у кого есть доступ к VPN). Там, где # 3 не выполнимо, fail2ban, настроенный на блокировку после 4 неудачных попыток и блокирования IP-адресов в течение часа или более, является достойной защитой от людей, постоянно атакующих с помощью bruteforcing - просто блокируйте их на брандмауэре автоматически с помощью fail2ban и meh. Настройка fail2ban - это боль, хотя ... Обфускация портов путем изменения SSH-порта. Однако это не является хорошей идеей обойтись без каких-либо дополнительных мер безопасности, а мантра «Безопасность через Obscurity» уже была опровергнута и оспаривается во многих случаях. Я сделал это в сочетании с IDS / IPS и сетевой фильтрацией, но это все еще очень плохо для себя. ОБЯЗАТЕЛЬНАЯ двухфакторная аутентификация с помощью двухфакторной аутентификации Duo Security. На каждом из моих SSH-серверов есть Duo, настроенный на нем, так что для того, чтобы даже войти, появляются подсказки 2FA, и я должен подтвердить каждый доступ. (Это самая полезная функция - потому что даже если у кого-то есть кодовая фраза или перерывы, они не могут пройти через плагины Duo PAM). Это одна из самых больших защит на моих серверах SSH от несанкционированного доступа - каждый пользовательский логин ДОЛЖЕН привязываться к настроенному пользователю в Duo, и поскольку у меня есть ограничительный набор, в системе не могут быть зарегистрированы новые пользователи.Мои двухценты для обеспечения SSH. Или, по крайней мере, мои мысли о подходе.
я написал небольшой учебник по ведению последнее время этот. В основном, вы должны быть с использованием PKI и мой учебник показывает, как использовать двухфакторную аутентификацию для еще большей безопасности. Даже если вы используете ни один из этих вещей, есть также некоторые лакомые кусочки О защите сервера, убрав слабых шифров и других основах. https://joscor.com/blog/hardening-openssh-server-ubuntu-14-04/
Если я хочу иметь некоторую дополнительную безопасность или вам нужно получить доступ к SSH-серверам глубоко внутри какой-либо корпоративной сети, я настраиваю скрытую службу с помощью программного обеспечения для анонимности Tor.
Установите Tor и настройте сам SSH-сервер. Убедитесь, что sshd прослушивает только localhost. Откройте /etc/tor/torrc. Установите HiddenServiceDir /var/lib/tor/ssh и HiddenServicePort 22 127.0.0.1:22. Посмотрите на var/lib/tor/ssh/hostname. Это имя похоже на d6frsudqtx123vxf.onion. Это адрес скрытой службы. Откройте $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 с другой стороны открывает свой порт только на локальном хосте. Поэтому никто не может подключить его через «обычный интернет».
Включить двухфакторную аутентификацию с помощью HOTP или TOTP. Это доступно начиная с 13.10.
Это включает в себя использование аутентификации с открытым ключом по аутентификации паролем, как и в другом ответе здесь, но также требует, чтобы пользователь подтвердил, что он держит свой второй фактор-устройство в дополнение к его закрытому ключу.
Резюме:
sudo apt-get install libpam-google-authenticator Попросите каждого пользователя выполнить команду google-authenticator, которая генерирует ~/.google-authenticator и помогает им настраивать свои двухфакторные устройства (например, приложение Google Authenticator для Android ). Отредактируйте /etc/ssh/sshd_config и установите:ChallengeResponseAuthentication yes
PasswordAuthentication no
AuthenticationMethods publickey,keyboard-interactive
Запустите sudo service ssh reload, чтобы получить изменения в /etc/ssh/sshd_config. Измените /etc/pam.d/sshd и замените строку: @include common-auth
на: auth required pam_google_authenticator.so
Подробнее о различных параметрах конфигурации - это мой пост в блоге из прошлого года: HOTP .
Возможно, вы захотите проверить приложение FreeOTP от RedHat вместо использования Google Authenticator. Иногда при обновлении приложения они блокируют вас! ; -)
Если вы хотите использовать другие аппаратные токены, такие как Yubikey или eToken PASS или NG, или если у вас много пользователей или на многих серверах, вы можете использовать брандмауэр с двумя ключами с открытым исходным кодом. ! d1]
В последнее время я написал об этом.
Я бы предложил:
Использование fail2ban для предотвращения попыток входа в грубую силу. Отключение входа в систему с правами администратора через SSH. Это означает, что злоумышленнику приходилось определять сложнее и имя пользователя, и пароль, делающий атаку. Добавьте PermitRootLogin no к вашему /etc/ssh/sshd_config. Ограничение пользователей, которые могут использовать SSH на сервере. Либо группа, либо только определенные пользователи. Добавьте AllowGroups group1 group2 или AllowUsers user1 user2, чтобы ограничить, кто может SSH на сервер.Используйте пары открытого / закрытого ключей для аутентификации вместо паролей.
Создайте защищенный паролем ключ SSH для каждого компьютера, которому необходимо получить доступ к серверу: ssh-keygen Разрешить доступ SSH с открытым ключом с разрешенных компьютеров: скопировать содержимое ~/.ssh/id_rsa.pub с каждого компьютера на отдельный строки ~/.ssh/authorized_keys на сервере или запустить ssh-copy-id [server IP address] на каждом компьютере, которому вы предоставляете доступ (вам нужно будет ввести пароль сервера в строке). Отключить пароль SSH-доступ: откройте /etc/ssh/sshd_config, найдите строку, которая говорит #PasswordAuthentication yes, и измените ее на PasswordAuthentication no. Перезапустите демон сервера SSH, чтобы применить изменение (sudo service ssh restart).Теперь единственным возможным способом SSH на сервере является использование ключа, соответствующего строке в ~/.ssh/authorized_keys. Используя этот метод, мне не нужны атаки с грубой силой, потому что даже если они угадают мой пароль, он будет отклонен. Жесткое принуждение пары открытого / закрытого ключа невозможно с сегодняшней технологией.
В этой теме есть статья администрирования Debian. Он охватывает базовую конфигурацию сервера SSH, а также правила брандмауэра. Это может представлять интерес и для упрощения SSH-сервера.
См. Там статью: Сохранение доступа SSH.
Вы также можете блокировать базу в стране происхождения с использованием базы данных geoIP.
В принципе, если вы живете в США, тогда у кого-то в России нет причин подключаться к вашему SSH, поэтому они будут автоматически заблокированы.
Сценарий можно найти здесь: https://www.axllent.org/docs/view/ssh-geoip/
Вы также можете добавить к нему команды iptables (я сделал для моих капель), чтобы автоматически удалить весь трафик на / из этих IP-адресов.
Вот одна простая задача: установить ufw («несложный брандмауэр») и использовать его для оценки ограничений входящих соединений.
В командной строке введите:
$ sudo ufw limit OpenSSH
Если ufw не установлен, выполните это и повторите попытку:
$ sudo aptitude install ufw
Многие злоумышленники попытаются использовать ваш SSH-сервер для перебора паролей. Это позволит только 6 подключений каждые 30 секунд с одного и того же IP-адреса.
Для большого числа пользователей / сертификатов рассматривается интеграция LDAP. Крупные организации используют LDAP в качестве репозитория для учетных данных пользователей и сертификатов, хранящихся на значках или брелоках, независимо от того, используются ли эти сертификаты для аутентификации или подписания электронных писем. Примеры включают openLDAP, openDJ, Active Directory, Oracle Universal Directory, IBM Directory Server, snareWorks ...
Компьютеры и группы также могут управляться в LDAP, предоставляя централизованное управление учетными данными. Таким образом, справочные службы могут иметь одностановочный магазин для работы с большими группами населения.
Вот ссылка на интеграцию centOS: http://itdavid.blogspot.com/2013/11/howto-configure-openssh- to-fetch-public.html