Вопрос или проблема
Я запускаю сервер CentOS (7.0) и хочу входить в систему через sshd как пользователь, а не root. Поэтому я установил PermitRootLogin no
в конфигурационном файле и использую su -
после входа. Я столкнулся с множеством хакерских активностей и решил разрешить вход только одному пользователю через sshd. Поскольку имя пользователя не мое настоящее имя или какое-то общее имя, я думаю, что это будет достаточно. Пусть это будет ‘hkbjhsqj’.
Я попробовал оба способа, представленные на nixCraft: AllowUsers в sshd_config или pam_listfile.so в PAM. Единственная проблема для меня заключается в том, что кто угодно все еще имеет возможность ввести пароли, и это оставляет записи в /var/log/secure. Я предполагаю, что эти действия расходуют ресурсы моего сервера на проверку пароля и другие вещи.
Допустим, я пытаюсь войти с именем пользователя ‘admin’:
www$ ssh [email protected]
[email protected]'s password:
Permission denied, please try again.
[email protected]'s password:
Permission denied, please try again.
[email protected]'s password:
Permission denied (publickey,gssapi-keyex,gssapi-with-mic,password).
и в secure log:
Aug 8 08:28:40 www sshd[30497]: pam_unix(sshd:auth): check pass; user unknown
Aug 8 08:28:40 www sshd[30497]: pam_listfile(sshd:auth): Refused user admin for service sshd
Aug 8 08:28:43 www sshd[30497]: Failed password for invalid user admin from 192.168.0.1 port 52382 ssh2
Aug 8 08:28:47 www sshd[30497]: pam_unix(sshd:auth): check pass; user unknown
Aug 8 08:28:47 www sshd[30497]: pam_listfile(sshd:auth): Refused user admin for service sshd
Aug 8 08:28:50 www sshd[30497]: Failed password for invalid user admin from 192.168.0.1 port 52382 ssh2
Aug 8 08:28:52 www sshd[30497]: pam_unix(sshd:auth): check pass; user unknown
Aug 8 08:28:52 www sshd[30497]: pam_listfile(sshd:auth): Refused user admin for service sshd
Aug 8 08:28:55 www sshd[30497]: Failed password for invalid user admin from 192.168.0.1 port 52382 ssh2
Aug 8 08:28:55 www sshd[30497]: Connection closed by 192.168.0.1 [preauth]
Aug 8 08:28:55 www sshd[30497]: PAM 2 more authentication failures; logname= uid=0 euid=0 tty=ssh ruser= rhost=192.168.0.1
Все это не произойдет, если я добавлю IP в /etc/hosts.deny:
www$ ssh [email protected]
ssh_exchange_identification: Connection closed by remote host
и в secure log:
Aug 8 08:35:11 www sshd[30629]: refused connect from 192.168.0.1 (192.168.0.1)
Aug 8 08:35:30 www sshd[30638]: refused connect from 192.168.0.1 (192.168.0.1)
Итак, мой вопрос, есть ли способ отказать во всех запросах на ssh от нерелевантных пользователей из любых мест без проверки пароля, как если бы я добавлял их в список hosts.deny? Но в то же время мне нужно разрешить все ssh-запросы с именем пользователя ‘hkbjhsqj’ из любого места и проверять тогда пароль.
Я не думаю, что это возможно сделать то, о чем вы спрашиваете. Если бы это было возможно, кто-то мог бы “перебором” найти действительные имена пользователей на вашем сервере. Я также почти уверен, что имя пользователя и пароль отправляются клиентом одновременно, вы можете это проверить, захватывая пакеты с помощью Wireshark на незашифрованном SSH-соединении.
Под “хакерскими активностями” я предполагаю, вы говорите о попытках подбирания паролей. Существует множество способов защитить себя от этого, я объясню самые распространенные.
Отключение входа root
Запретив вход root через SSH, злоумышленник должен будет знать или угадать действительное имя пользователя. Большинство автоматизированных атак перебора пробуют войти только как root.
Блокировка IP при неудачной аутентификации
Демоны, такие как fail2ban и sshguard, отслеживают ваши лог-файлы для обнаружения неудачных попыток входа. Вы можете настроить их так, чтобы блокировать IP-адрес, пытающийся войти, после определенного количества неудачных попыток входа. В вашем случае я бы рекомендовал это. Это снижает спам в логах и нагрузку на ваш сервер, так как все пакеты с этого IP будут заблокированы до того, как они достигнут демона sshd.
Вы могли бы, например, настроить fail2ban для блокировки IP с 3 неудачными попытками входа за последние 5 минут на 60 минут. Вы увидите в худшем случае три неудачные попытки входа в логе каждые 60 минут.
Аутентификация по открытому ключу
Вы можете полностью отключить аутентификацию по паролю и разрешить вход только клиентам с определенными ключами. Это часто считается самым безопасным решением (при условии, что клиент хранит свой ключ в безопасности и зашифрованным). Чтобы отключить аутентификацию по паролю, добавьте свой открытый ключ в ~/.ssh/authorized_keys
на сервере и установите PasswordAuthentication
в no
в sshd_config. Существует множество руководств и инструментов, которые могут помочь в этом.
Если вас беспокоит только количество логов, вы могли бы уменьшить его с помощью настройки LogLevel в sshd_config.
Если вы предпочитаете избежать чрезмерного вмешательства в ваш SSH-сервер, вы могли бы использовать что-то вроде fail2ban для блокировки IP-адресов после определенного количества неудачных попыток.
PasswordAuthentication no
Match user hkbjhsqj
PasswordAuthentication yes
Вы могли бы также установить все остальные типы аутентификации в “no” (используйте “sshd T | grep -i auth.*yes”, чтобы найти их), чтобы уменьшить трафик переговоров,
Ответ или решение
Для обеспечения надежной и безопасной SSH-аутентификации на сервере CentOS 7.0, важно ограничить доступ только до определенных пользователей, свести к минимуму попытки взлома и снизить нагрузку на сервер. Ваше желание ограничить доступ через SSH только для пользователя "hkbjhsqj" требует комплексного подхода. Рассмотрим несколько эффективных стратегий, которые помогут реализовать безопасную SSH-конфигурацию.
1. Ограничение доступа с помощью AllowUsers
Параметр AllowUsers
в конфигурационном файле sshd_config
позволит вам явно указать пользователей, которым разрешен доступ к серверу. Это сократит количество попыток несанкционированного входа:
PermitRootLogin no
AllowUsers hkbjhsqj
2. Использование Fail2Ban для блокировки несанкционированных IP-адресов
Fail2Ban — мощный инструмент, который анализирует логи и автоматически блокирует IP-адреса с высоким количеством неудачных попыток входа. Установите и настройте fail2ban следующим образом:
- Установите fail2ban:
yum install fail2ban
- Создайте или отредактируйте файл
jail.local
:
[sshd]
enabled = true
bantime = 3600
findtime = 600
maxretry = 3
Таким образом, любые IP-адреса будут блокироваться на один час после трех неудачных попыток входа в течение 10 минут.
3. Аутентификация по ключам SSH
Отключение аутентификации по паролю и использование только аутентификации по ключам SSH значительно увеличивает безопасность, так как злоумышленники не смогут использовать простые переборы паролей.
- Сгенерируйте ключи SSH на клиенте:
ssh-keygen -t rsa -b 2048
- Копируйте публичный ключ на сервер:
ssh-copy-id [email protected]
- Отключите аутентификацию по паролю, добавив в
sshd_config
следующие строки:
PasswordAuthentication no
4. Изменение порта SSH
Стандартный порт 22 является часто атакуемым, поэтому изменение его на нестандартный может снизить количество автоматических атак:
Port 2222
5. Настройка hosts.allow
и hosts.deny
Используйте /etc/hosts.allow
и /etc/hosts.deny
для управления доступом на основании IP-адресов. Это поможет снизить нагрузку на сервер, предварительно отсекая несанкционированные попытки:
В /etc/hosts.deny
добавьте:
sshd: ALL
В /etc/hosts.allow
разрешите только нужные адреса:
sshd: <Ваш_допустимый_IP>, 192.168.0.0/16
Заключение
Реализация перечисленных выше методов позволит значительно увеличить безопасность вашего сервера, сократить количество записей в логах и снизить нагрузку на систему. Только комплексный подход поможет вам защитить сервер от нежелательных вторжений, сохранив при этом необходимую функциональность. Не забывайте регулярно обновлять систему и следить за актуальными методами защиты.