Я использую Ubuntu 16.04 и хочу усилить аутентификацию SSH специальным образом.
У меня есть машина с минимальным Ubuntu сервером, который я использую в основном для передачи файлов через локальный OpenSSH сервер. Теперь, у меня нет брандмауэра на этой машине по нескольким причинам, и я также избегаю использования пары ключей, поэтому я использую только пароль. Один из единственных способов защиты от атак грубой силы, который мне сейчас больше всего нужен, это использование механизма, который блокирует пользователя на X часов после Y попыток подключения.
Я хочу иметь отдельный механизм (то есть не часть брандмауэра), который блокирует пользователя на X часов, после Y попыток соединения, как способ защиты от атак грубой силы.
Знаете ли вы утилиту (и конкретную конфигурацию), которая позволит мне достичь желаемой ситуации?
sudo apt-get install fail2ban
Затем:
sudo vim /etc/fail2ban/jail.conf
отредактируйте bantime
, чтобы установить желаемое время запрета
edit maxretry
, чтобы установить максимальное количество неудачных попыток
, как упоминалось в других комментариях, fail2ban требует iptables.
Это требует только iptables, практически 0 памяти и эффективно скроет вашу службу от сканирование портов
Не отвечает прямо на ваш вопрос, но, возможно, вы можете реализовать блокировку портов, чтобы скрыть доступность вашей службы, вместо запрета повторных попыток.
быстрый поиск в Google показывает следующее: https://www.digitalocean.com/community/tutorials/how-to-configure-port-knocking-using-only-iptables-on-an-ubuntu-vps
Однако вам нужны iptables.
PS: Я знаю, что безопасность через скрытность - это вовсе не безопасность, но вместе с другими практиками она может сделать вас более сложной целью.
Для такой защиты ничего устанавливать не нужно - просто добавьте соответствующие правила в вашей системе iptables .
В начале вашего набора правил разрешите любой связанный трафик возвращаться на сервер:
sudo iptables -A INPUT -i eth0 -m state --state ESTABLISHED,RELATED -j ACCEPT
Установите динамический список Badguy. Обнаружение и удаление плохих IP-адресов, которые атакуют паролем SSH. Как только они попадают в список BADGUY, система отбрасывает все их пакеты:
sudo iptables -A INPUT -i eth0 -m recent --update --hitcount 3 --seconds 90000 --name BADGUY_SSH -j LOG --log-prefix "SSH BAD:" --log-level info
sudo iptables -A INPUT -i eth0 -m recent --update --hitcount 3 --seconds 90000 --name BADGUY_SSH -j DROP
sudo iptables -A INPUT -i eth0 -p tcp -m tcp --dport 22 -m recent --set --name BADGUY_SSH -j ACCEPT
В приведенном выше коде время блокировки составляет 90000 секунд (25 часов).
Любая попытка с заблокированного IP-адреса, даже не связанная с SSH ( в зависимости от других правил, которые у вас могут быть или нет, и порядка) сбрасывает таймер времени блока.
Ограничьте количество неверных паролей на соединение до 2. По умолчанию 6.
Как sudo edit / etc / ssh / sshd_config
, и там установите:
MaxAuthTries 2
Этот ответ дает возможность ответить на главный вопрос: Защитить сервер Ubuntu OpenSSH от атак грубой силы, но без брандмауэра или пары ключей SSH?
На самом деле я предпочитаю использовать брандмауэр и пару ключей SSH и обнаружил ответ , предоставленный Дугом Смитисом, как действительно полезный.
Двухфакторная аутентификация (2FA) - это тип ] многофакторная аутентификация . В этом примере 2FA подтверждает заявленную личность пользователя с помощью комбинации этих двух различных компонентов:
Шестизначный токен-код на основе времени - код аутентификации. По умолчанию эти токены действительны в течение 30 секунд плюс дополнительно добавленные 60 секунд, чтобы компенсировать возможный временной сдвиг.
Пароль пользователя, который сам по себе должен быть достаточно безопасным .
Фактически, когда вы установили PermitRootLogin no
, и имена пользователей выбраны правильно, для меня этот метод можно назвать 3FA.
Кроме того, если компьютер, на который вы входите, не защищен от попыток входа в систему методом грубой силы , вы можете включить ограничение скорости для модуля аутентификации.
Начнем:
sudo apt-get install libpam-google-authenticator
Отредактируйте /etc/pam.d/sshd
и добавьте эту директиву:
# Google Authenticator
требуется авторизация pam_google_authenticator.so
Добавьте его в начало файла. Таким образом, система запросит первый код аутентификации и только потом запросит пароль. Добавьте его в конец файла - система запросит первый пароль.
Отредактируйте / etc / ssh / sshd_config
и измените или добавьте эти директивы:
ChallengeResponseAuthentication yes
UsePAM да
PasswordAuthentication no # Вы можете оставить это «да», это не имеет значения.
Переключитесь на пользователя, который должен использовать двухфакторную аутентификацию, и введите в терминале:
$ google-authenticator Enter Do you want authentication tokens to be time-based (y/n) yEnter https://www.google.com/chart?chs=200x200&chld=M|0&cht=qr&chl=otpauth://totp/user@host%3Fsecret%3DE3CY3TNSNBXXXXXX Your new secret key is: E3CY3TNSNBXXXXXX Your verification code is 229999 Your emergency scratch codes are: 19999711 ... Do you want me to update your "/home/user/.google_authenticator" file (y/n) yEnter Do you want to disallow multiple uses of the same authentication token? This restricts you to one login about every 30s, but it increases your chances to notice or even prevent man-in-the-middle attacks (y/n) yEnter By default, tokens are good for 30 seconds and in order to compensate for possible time-skew between the client and the server, we allow an extra token before and after the current time. If you experience problems with poor time synchronization, you can increase the window from its default size of 1:30min to about 4min. Do you want to do so (y/n) yEnter If the computer that you are logging into isn't hardened against brute-force login attempts, you can enable rate-limiting for the authentication module. By default, this limits attackers to no more than 3 login attempts every 30s. Do you want to enable rate-limiting (y/n) yEnter
В этом диалоговом окне будет создан файл аутентификации с именем .google_authenticator
размещен в домашнем каталоге пользователя. Этот файл можно использовать также для учетных записей других пользователей, если вы хотите, чтобы все они использовали одни и те же токены. Далее этот файл можно настроить, а также использовать для 2FA в Apache2 , но это уже другая история.
Секретный ключ - E3CY3TNSNBXXXXXX
- сгенерированный на предыдущем шаге, используется для генерации кодов аутентификации в некоторых приложениях как:
В этом примере используется расширение Authenticator для Chromium / Chrome:
РЕДАКТИРОВАТЬ:
В некоторых случаях может быть разница между часами Google и часами сервера. Вот несколько советов по этой проблеме:
К сожалению : Если это VPS, у вас может не быть разрешений на это ... Если вы используете VPS, обратитесь к своему провайдеру, чтобы сделайте это за вас.
В случае, если ваш провайдер не хочет отвечать вашим требованиям, вышеуказанная настройка будет работать, но со сдвигом по времени. Введите date
в консоли вашего сервера и измерьте этот временной сдвиг. Затем просто работайте с этим временным сдвигом между моментом создания кода аутентификации и моментом его использования.