Захист ssh в ubuntu

Одна з найбільш важливих речей, які потрібно зробити відразу ж після підключення сервера з Ubuntu до мережі інтернет - це, звичайно ж, захист від несанкціонованого доступу до управління сервером через ssh. Якщо цього не зробити, то дуже швидко спеціально написані програми, скануючі глобальну мережу, виявлять, що на вашому сервері відкритий порт 22 і що для повного контролю над системою досить тільки підібрати пароль для користувача root. Звичайно, абсолютного захисту не існує, але максимально ускладнити завдання зловмисникові нам цілком під силу. Розповідь про методи захисту ssh я буду вести, враховуючи можливі особливості як для повноцінних виділених серверів з Ubuntu, так і для VPS / VDS серверів.

Захищати доступ по ssh безумовно потрібно. Якщо ви цього ще не робили, то просто загляньте в файл /var/log/auth.log. Напевно там є записи про спроби несанкціонованого доступу до системи.

sudo nano / etc / ssh / sshd_config

В одній з його перших рядків знаходимо директиву Port. Замінюємо номер порту 22 на один з нестандартних портів, наприклад, на 4118.

# What ports, IPs and protocols we listen for Port 4118

Після цього перезапускаємо ssh-сервер:

sudo service ssh restart

... і цілком передбачувано втрачаємо зв'язок з сервером. Тому заново підключаємося по ssh, але тепер вказуємо в параметрах підключення новий порт, наприклад, так:

ssh -p 4118 [email protected]

Зміна номера порту ssh дозволяє позбутися від більшості спроб перебору паролів автоматичними програмами. Однак від більш професійних спроб несанкціонованого доступу до всієї системи цей крок не врятує. Разом з ним слід застосовувати й інші методи захисту.

Тому на прикладі створення нового облікового запису test покажу як створити нового користувача і наділити його правом виконання команди sudo. Власне, спочатку створимо нового користувача. Будемо вважати, що новий користувач створюється з-під облікового запису root, тому навмисно опускаю ключове слово sudo перед командою adduser:

Далі потрібно дізнатися, кому в системі дозволено виконувати команди від імені суперкористувача, використовуючи ключове слово sudo. Для цього нам потрібно зазирнути в файл visudo:

У цьому файлі ви можете побачити такі рядки:

Рядки, наведені вище означають, що виконувати команди від імені суперадміністратора може користувач root, а також користувачі, що входять до групи sudo і admin. Тому досить помістити нового користувача в одну з цих груп. Файл visudo, тим часом, слід закрити, не вносячи в нього змін. Після цього додамо користувача test в групу sudo:

usermod -a -G sudo test

Щоб переконатися, що користувач test був доданий до групи sudo, можна виконати наступну команду:

Після цього закриваємо сеанс ssh від імені користувача root, входимо в систему під користувачем test (пам'ятаємо, що поміняли номер порту в першому кроці) і відключаємо обліковий запис root:

logout ssh -p 4118 [email protected] sudo passwd -l root

Ключі за замовчуванням зберігаються в домашній каталог користувача, в файли

/.ssh/id_rsa (закритий ключ) і

scp -P 4118 [email protected]:

Це командою ми завантажимо файл id_rsa.pub на сервер example.org в домашній каталог користувача test. Також в цій команді вказано нестандартний номер порту ssh: 4118. Потім вже на віддаленому сервері потрібно додати вміст файлу id_rsa.pub в файл

/.ssh/authorized_keys в домашньому каталозі того користувача, під яким ми хочемо увійти в систему, використовуючи згенерований нами ключ. Після додавання в authorized_keys вихідний файл з публічним ключем можна видалити.

ssh -p 4118 -v [email protected]

# Change to no to disable tunnelled clear text passwords PasswordAuthentication no

Після цього залишається тільки перезапустити ssh:

sudo service ssh restart

Спочатку встановимо denyhosts зі сховищ:

sudo aptitude install denyhosts

Відразу після установки denyhosts вже готове до роботи, проте рекомендую звернути увагу на кілька налаштувань, які знаходяться в файлі /etc/denyhosts.conf.

По-перше, це директива PURGE_DENY, яка визначає час, протягом якого слід зберігати заблоковані ip в списку hosts.deny. За замовчуванням ця директива містить пусте значення, що означає, що список hosts.deny не очищається ніколи.

Тому рекомендую встановити цю директиву в значення, рівне декільком годинам.

Для того щоб нові налаштування вступили в силу, потрібно перезапустити службу denyhosts:

sudo service denyhosts restart

Схожі статті