Найбільше турбує людей, які входять як адміністратор комп’ютера через SSH. Це можна зробити грубою силою, якщо у вас є просто здогадатися про пароль.
Ви можете вжити декілька заходів безпеки, нижче - деякі з тих, які я завжди вживаю під час налаштування SSH-сервера, та деякі додаткові.
Використовуйте надійний пароль, що складається з щонайменше (скажімо) 10 великих і малих літер, цифр та інших символів.
Користувачі в'язниці в домашній каталог. Користувачі, які потрапляють до в'язниці, не зможуть отримати доступ / редагувати файли, що знаходяться за межами домашнього каталогу. Таким чином, ваш користувач не зможе отримати доступ / редагувати ключові системні файли. Багато навчальних посібників можна знайти в Інтернеті про те, як ув’язнити користувача. Більшість з них використовує JailKit . Приклад такого підручника можна знайти тут . Крім того, ви також можете використовувати власну ChrootDirectory
директиву OpenSSH-сервера . Приклад навчального посібника з цього питання можна знайти тут .
Встановити Fail2Ban . Fail2Ban - програма, яка перевіряє журнали аутентифікації на предмет неправильних записів. Коли буде досягнуто певного обмеження, він додає блок брандмауера для цього певного IP протягом заданої кількості часу. Також в Інтернеті знайдено кілька навчальних посібників про те, як налаштувати Fail2Ban за допомогою SSH, наприклад, цей . На домашній сторінці Fail2Ban також є кілька приємних і повних HOWTO.
Вимкнути вхід в систему через SSH. Це користувач, який має доступ до майже всіх файлів у вашій системі, тому рекомендується вимкнути вхід в оболонку. В останніх версіях Ubuntu користувач root автоматично відключається, але це не завадить відключити його доступ до SSH. Це робиться шляхом редагування файлу /etc/ssh/sshd_config
. ✝ Подивіться на наступний рядок і переконайтеся , що немає # перед ним.
#PermitRootLogin no
Використовуйте нестандартний порт (напр., Не 22). Це робиться через переадресацію портів у вашому маршрутизаторі (наприклад, 16121 -> 22 замість 22 -> 22), або шляхом змушення демона SSH прослуховувати на іншому порту. Це зробить вашу службу SSH менш легкою для виявлення зловмисним користувачам. Це робиться шляхом редагування файлу /etc/ssh/sshd_config
. ✝ Подивіться на наступний рядок і зміни 22 в будь-який порт , який ви хочете. Не забудьте потім переслати правильний порт у своєму маршрутизаторі.
Port 22
Не використовуйте паролі для входу. Крім паролів, SSH також дозволяє входити в систему за допомогою приватних ключів. Це означає, що ключ зберігається на вашому комп’ютері, на якому ви отримуєте доступ до SSH машини SSH. При спробі з'єднання клієнт SSH використовує ключ для входу на сервер замість автентифікації пароля. Ключі аутентифікації набагато сильніше криптографічно, ніж паролі, і тому їх не так просто зламати. Також в Інтернеті знайдено кілька навчальних посібників про те, як налаштувати аутентифікацію на основі ключів за допомогою SSH, наприклад, цей . (Якщо ви SSH з вікон за допомогою PuTTY, перевірте це посилання на тему HowT PuTTY.) Після встановлення аутентифікації на основі ключа ви можете відключити автентифікацію пароля, відредагувавши файл /etc/ssh/sshd_config
. ✝ Знайдіть наступний рядок і переконайтеся, що перед ним немає #.
#PasswordAuthentication no
За бажанням, як @ Linker3000 згадував у своєму коментарі, ви можете налаштувати VPN-тунель на ПК, до якого ви хочете отримати доступ через SSH, а потім заборонити доступ до локальної мережі на сервері SSH. Таким чином, жоден зовнішній пристрій без VPN-з'єднання не зможе отримати доступ до вашого SSH-сервера. Це можна зробити, заборонивши ВСІ хости, а потім дозволити входити лише IP локальної мережі. Це робиться шляхом редагування /etc/hosts.deny
та додавання наступного:
sshd: ALL
і /etc/hosts.allow
додати наступне:
sshd: 192.168.1.*
де IP відповідає цій локальній мережі. *
є шаблоном, тому всі IP-адреси, що починаються з, 192.168.1.
будуть прийняті. Якщо це не працює, ваш дистрибутив може використовуватись ssh
замість sshd
. У такому випадку вам слід спробувати ssh: 192.168.1.*
і ssh: ALL
замість цього.
Ви можете дозволити лише певні хости, робити те саме з пунктом 6 /etc/hosts.allow
та /etc/hosts.deny
як описано в 6, але /etc/hosts.allow
додайте наступний рядок і кожен хост, щоб дозволити розділені пробілами:
sshd: {IP OF HOST TO ALLOW 1} {IP OF HOST TO ALLOW 2} {IP OF HOST TO ALLOW 3} {ETC.}
Дозволити доступ до вашого SSH-сервера лише конкретним користувачам. Це робиться шляхом редагування файлу /etc/ssh/sshd_config
. ✝ Подивіться на наступний рядок і переконайтеся , що немає # перед ним. Якщо його не існує, створіть його. Наприклад, якщо ви хочете дозволити лише Джон, Том і Маррі, додайте / редагуйте цей рядок:
AllowUsers john tom mary
Ви також можете заборонити конкретним користувачам, наприклад, якщо ви хочете заборонити доступ до John, Tom і Mary, додайте / редагуйте цей рядок:
DenyUsers john tom mary
Дозволити протокол SSH2 для вхідних з'єднань. Існує дві версії протоколу SSH. SSH1 є предметом проблем безпеки, тому використання SSH 2 рекомендується. Це можна примусити відредагувати файл /etc/ssh/sshd_config
. ✝ Подивіться на наступний рядок і переконайтеся , що немає # перед ним. Якщо його не існує, створіть його.
Protocol 2,1
видаліть, 1, так що лінія буде
Protocol 2
Не дозволяйте користувачам входити в систему, у яких не встановлено пароль. Це можна примусити відредагувати файл /etc/ssh/sshd_config
. ✝ Подивіться на наступний рядок і переконайтеся , що немає # перед ним. Якщо його не існує, створіть його.
PermitEmptyPasswords no
І хоча просто і, мабуть, не потрібно говорити, але в багатьох випадках виявляється вирішальним, оновлюйте своє програмне забезпечення. Регулярно оновлюйте встановлені пакети / програмне забезпечення.
залежно від того, який дистрибутив Linux ви використовуєте.