Иногда я специально пишу, что оставляю доступ root по паролю. Просто интересно почитать, что будут писать по этому поводу. Всегда находятся те, кто пишут, что это нубство, небезопасно, так делать нельзя, меня надо уволить и т.д. На что я всегда спрашиваю, а в чём конкретно тут проблема. Ответа не получаю, только общие слова, что так не принято, что пароль можно подобрать и т.д.
В общем случае никаких проблем с безопасностью службы SSH не будет, если вы оставите возможность подключаться root и использовать для этого сложный несловарный пароль. Менять стандартный порт 22 или ставить Fail2Ban тоже не обязательно. Достаточно поменять несколько настроек и про какой-либо перебор паролей можно забыть.
MaxAuthTries 3MaxSessions 2MaxStartups 10:30:60◽️MaxAuthTries - максимальное количество попыток аутентификации для одного соединения.
◽️MaxSessions - ограничение на количество активных сеансов на одно соединение. Можно сделать больше, если в реальности вам это нужно.
◽️MaxStartups - до 10-ти одновременных соединений все принимаются, при количестве соединений от 10 до 60 новые соединения отбрасываются с вероятностью 30%, при 60+ активных соединениях новые не открываются.
При таких настройках массовый перебор паролей становится нереален из-за ограничения в количестве попыток.
Теоретически есть опасность не подключиться к своему серверу, если какой-то злоумышленник вычислит эти параметры и будет постоянно держать 60+ активных соединений. Тогда есть вероятность, что вы тоже не подключитесь. Но шанс очень малый и обычно так никто не делает, потому что зайти владельцу на свой сервер в обход SSH всё равно можно.
Я показал эти параметры просто для примера, чтобы те, кто всё ещё думает, что пароли по SSH можно брутить, поняли, что это практически нереально. Даже настройки по умолчанию, более лояльные, не позволят это сделать.
В идеале доступ к серверу надо ограничивать файрволом вне зависимости от настроек. Я почти всегда это делаю. Но если вам по какой-то причине нужно оставить публичный доступ по паролю и при этом максимально защититься, то можно сделать следующим образом средствами SSH, даже без файрвола.
Запускаем одновременно две службы на разных портах. На стандартном 22 для всех и на 22555 для себя с ограничениями по IP. На 22 ставим параметры, как я показал выше. А для 22555 указываем ограничения по своим спискам IP адресов. Показываю, как это примерно выглядит.
# cp /etc/ssh/sshd_config /etc/ssh/sshd_root.conf# cat sshd_configPort 22...MaxAuthTries 3MaxSessions 2MaxStartups 10:30:60...Остальные настройки по желанию. Конфигурация приватной службы:
# cat sshd_root.confPort 22555AllowUsers root@192.168.137.0/24 root@1.2.3.4 root@5.6.7.8...Создаём для приватной службы юнит systemd:
# cd /etc/systemd/system# cp sshd.service sshd-root.serviceМеняем в конфигурации sshd-root.service один параметр:
ExecStart=/usr/sbin/sshd -D -f /etc/ssh/sshd_root.confЗапускаем приватную службу:
# systemctl daemon-reload# systemctl enable --now sshd-rootТеперь у нас две службы - одна на стандартном порту без ограничений по IP, куда будут безуспешно долбиться боты, вторая с ограничением для нас. На практике вторую службу лучше ограничить файрволом:
# iptables -A INPUT -p tcp --dport 22555 -s 192.168.137.0/24,1.2.3.4,5.6.7.8 -j ACCEPT# iptables -A INPUT -p tcp --dport 22555 -j DROPМного написал, что на практике не особо нужно. Я бы всё закрывал через Iptables с любыми настройками. Но даже если SSH открыт для всех, для root и по паролю, то в реальности никаких проблем это не доставит, если всё настроить аккуратно и не сливать пароль. Ключ, как и пароль, тоже может утечь. Это не абсолютная защита и не панацея, в отличии от файрвола, если его случайно не выключат (а так бывает).
❗️Если заметка вам полезна, не забудьте 👍 и забрать в закладки.
———
ServerAdmin: 📱 Telegram | 🌐 Сайт | 📲 MAX
#ssh