Автор : Федеріко Керекі (Federico Kereki)^f_kereki

Переклад : Андрій Боровий

Оригінал статті : http://www.linux.com/feature/119446

Безпечний доступ до домашнього сервера може бути проблемою, особливо, якщо він не має статичної IP адреси, однак, ви можете розв'язати цю задачу за допомогою Linux, DynDNS, PAM та NX Free.

Кілька місяців тому мені потрібно було поїхати з дому, який знаходиться у Монтевідео (Уругвай) до Нью-Йорка. Оскільки планувалося перебувати за кордоном кілька тижнів, мені потрібно було переконатися, що я можу мати безпечний доступ до домашнього сервера. Незважаючи на стабільність Лінукса, я припускав, що у моєї родини можуть виникнути певні проблеми, а я не міг покладатися на передачу інструкцій за допомогою телефону або повідомлень.

Для того, щоб все добре працювало, було потрібно вирішити три проблеми. По-перше, я використовую ADSL-з'єднання, не маючи статичної IP адреси, тобто моя адреса може змінюватися, а отже слід забезпечити доступ за умов, що я не знатиму поточної адреси. По-друге, я, звісно, можу використовувати SSH, однак багато хто намагається атакувати машини, які мають відкритий SSH-порт, а я не хочу робити свій комп'ютер мішенню. Зрештою, я чув про NX Free Edition, і хотів спробувати його в роботі, однак я повинен був бути певним, що роблю це безпечним чином.

Доступ до комп'ютера, який не має статичної адреси

Відсутність статичної адреси є проблемою, яку можна вирішити за допомогою DynDNS від Dynamic Network Services. Ця безкоштовна послуга дозволяє будь-кому мати власний піддомен, який асоціюється зі змінною IP-адресою. Все, що потрібно — це встановити невеликий клієнт поновлення, який буде зберігати відповідність імені комп'ютера його поточній IP-адресі, повідомляючи центральний сервер щоразу при зміні IP-адреси комп'ютера. Якщо ж ви використовуєте один із сучасних маршрутизаторів, його можна налаштувати на відсилання таких повідомлень, не використовуючи клієнт.

Перейдіть до сторінки DynDNS, отримайте безкоштовний рахунок та оберіть ім'я домену (я обрав remotekereki.homelinux.com). Наприкінці скористайтеся поданими інструкціями, щоб отримати [клієнтську програму DD, яка є простим скриптом на мові Perl. Встановлення DDclient є дуже простим: отримайте код, розпакуйте його до /usr/bin (для цього потрібно мати права користувача root) та відредагуйте /etc/ddclient/ddclient.conf, вказавши деталі сайту:

pid=/var/run/ddclient.pid 
daemon=600
protocol=dyndns2
use=web, web=support.easydns.com/utils/get_ip.php
server=members.dyndns.org
login=вашеІм'яКористувача
password=вашПароль
вашеІм'яДомену

Використовуючи обліковий запис root, я виконав chkconfig ddclient on, а потім /etc/init.d/ddclient start та був готовий вирушати. Для того, щоб перевірити, чи все справді працює, я виконав ping remotekereki.homelinux.com та отримав відповідь, що означало, що моя адреса доступна з будь-якої точки світу. Першу проблему було вирішено!

Безпечний SSH доступ

Змінний модуль автентифікації (pluggable authentication module, PAM) є ключем до більшої гнучкості в питаннях безпеки. Зазвичай для користувача існує лише один шлях проходження автентифікації — ввести пароль та перевірити, чи він відповідає тому, який зазначено у /etc/passwd. Однак сьогодні використовується багато інших методів, які включають заміну файлу /etc/passwd смарт-картками^smartcard та іншими пристроями. Замість того, щоб переписувати усі програми для підтримки цих методів, достатньо встановити PAM — і усі перетворення відбуватимуться прозоро.

Я хотів встановити деякі обмеження на доступ, тому додав наступний рядок до файлу /etc/pam.d/sshd:

#%PAM-1.0
auth     include        common-auth
auth     required       pam_nologin.so
account  include        common-account
password include        common-password
session  include        common-session
account  required       pam_access.so

Модуль pam_access містить додаткові методи перевірки безпеки, які описано у файлі /etc/security/access.conf. Я відредагував його, вказавши, хто має доступ до мого комп'ютера:

+ : ALL : 192.168.
+ : remote1776 : ALL
+ : nx : ALL
- : ALL : ALL

Перший рядок означає, що будь-хто (“ALL”) може отримати доступ до мого комп'ютера з внутрішньої домашньої мережі. Другий рядок дозволяє користувачеві remote1776 отримати доступ до комп'ютера з будь-якої точки планети, а третя дає такі ж самі права користувачеві nx, який використовується NX Free. Останній рядок містить запис, який забороняє доступ до комп'ютера усім, кого не перелічено вище.

Користувач remote1776 є рахунком з мінімальними правами, який було створено лише для того, щоб отримати доступ до мого комп'ютера та запустити команду su і працювати або під своїм рахунком, або під рахунком root. Якщо ж хтось і вгадає пароль цього користувача, йому буде потрібно вгадати паролі інших, більш важливих користувачів; в даному випадку це додатковий бар'єр, який потрібно пройти зловмиснику до того, як він зможе завдати серйозної шкоди.

Тепер потрібно налаштувати SSH, який буде використовувати всі ці налаштування. Я відредагував /etc/ssh/sshd_config, включивши наступне:

Port 16949
Protocol 2
PermitRootLogin no
MaxAuthTries 3
UsePAM yes

Завважте, що зазначені вище рядки це все, що є у цьому фалі; розглянемо їх. Перший рядок змінює стандартний, загальновідомий порт (22) на інший для того, щоб потенційному зловмиснику було важче його вгадати. Переконайтеся, що вказаний вами порт — не зайнятий. Також, я відкрив цей порт у своєму фаєрволі.

Рядок protocol 2 дозволяє уникнути використання простіших протоколів. Третій рядок пояснює себе сам: я не хочу, щоб хтось міг увійти у систему, використовуючи рахунок root; ускладнимо кракерам життя. Дозволяємо лише 3 спроби автентифікації перед появою перерви, зупиняємо атаки грубої сили (brute-force). І нарешті, останній рядок примушує SSH використовувати налаштування PAM.

Після цього всього я перезапустив ssh за допомогоюi /etc/init.d/sshd restart і тепер для доступу до свого комп'ютера міг використовувати ssh remote1776@remotekereki.homelinux.com:9622; отаку довгу команду!

Використання NX Free

Після зробленого, змусити працювати NX Free із вказаними обмеженнями було дуже легко. NX Freeмає власні методи безпеки, однак я додав кілька покращень. По-перше, я додав користувача nx у перелік користувачів, які мають доступ. По-друге, коли я вказував з'єднання, я змінив стандартний порт (22) на (16949). Це все, що було потрібно зробити. Звісно, ви маєте перевагу встановленої інфраструктури, однак чи не чудово зробити трішки більше роботи і отримати кращу систему безпеки?

Вивчення наведених вище методів — це шмат роботи, але змусити це все працювати разом було досить легко та дало потрібний ефект. Я використовував домашній ПК з Нью-Йорку без жодних перешкод, вирішивши кілька проблем, які мали мої родичі, працюючи з комп'ютером “відкрито”, без жодних спроб вторгнень.

досвідом розробки систем, надання консультацій та викладання в університетах.

прим. перекл.