Абарона Linux-сервера. Што зрабіць у першую чаргу

Абарона Linux-сервера. Што зрабіць у першую чаргу
Habib M'henni / Wikimedia Commons, CC BY-SA

У наш час падняць сервер на хостынгу - справа пары хвілін і некалькіх пстрычак мышы. Але адразу пасля запуску ён трапляе ў варожае асяроддзе, бо адкрыты для ўсяго інтэрнэту як нявінная дзяўчына на рокерскай дыскатэцы. Яго хутка намацаюць сканары і выявяць тысячы аўтаматычна скрыптовых робатаў, якія шныраюць па сетцы ў пошуках уразлівасцяў і няправільных канфігурацый. Ёсць некалькі рэчаў, якія трэба зрабіць адразу пасля запуску, каб забяспечыць базавую абарону.

Змест

Нерутавы юзэр

Перш за ўсё неабходна завесці сабе нерутового карыстача. Справа ў тым, што ў карыстальніка root абсалютныя прывілеі ў сістэме, а калі дазволіць яму выдаленае адміністраванне, тыя вы зробіце палову працы для хакера, пакінуўшы для яго валідны username.

Таму трэба завесці іншага карыстача, а для рута адключыць выдаленае адміністраванне па SSH.

Новы карыстач заводзіцца камандай useradd:

useradd [options] <username>

Затым для яго дадаецца пароль камандай passwd:

passwd <username>

Нарэшце, гэтага карыстальніка трэба дадаць у групу, якая мае права выконваць каманды з павышэннем прывілеяў. sudo. У залежнасці ад дытрыбутыва Linux гэта могуць быць розныя групы. Напрыклад, у CentOS і Red Hat юзэра дадаюць у групу wheel:

usermod -aG wheel <username>

У Ubuntu ён дадаецца ў групу sudo:

usermod -aG sudo <username>

Ключы замест пароляў SSH

Брутфорс або ўцечка пароляў - стандартны вектар нападу, так што аўтэнтыфікацыю па паролях у SSH (Secure Shell) лепш адключыць, а замест яе выкарыстоўваць аўтэнтыфікацыю па ключах.

Ёсць розныя праграмы для рэалізацыі пратаколу SSH, такія як lsh и Мядзьведзь, Але самай папулярнай з'яўляецца OpenSSH. Устаноўка кліента OpenSSH на Ubuntu:

sudo apt install openssh-client

Ўстаноўка на серверы:

sudo apt install openssh-server

Запуск дэмана SSH (sshd) на серверы пад Ubuntu:

sudo systemctl start sshd

Аўтаматычны запуск дэмана пры кожнай загрузцы:

sudo systemctl enable sshd

Трэба заўважыць, што серверная частка OpenSSH уключае ў сябе кліенцкую. Гэта значыць праз openssh-server можна падлучацца да іншых сервераў. Больш за тое, са сваёй кліенцкай машыны вы можаце запусціць SSH-тунэль з выдаленага сервера на іншы хост, і тады іншы хост будзе лічыць выдалены сервер крыніцай запытаў. Вельмі зручная функцыя для маскіроўкі сваёй сістэмы. Падрабязней гл. артыкул «Практычныя парады, прыклады і тунэлі SSH».

На кліенцкай машыне звычайна няма сэнсу ставіць паўнавартасны сервер, каб не дапушчаць магчымасць выдаленага падлучэння да кампутара (у мэтах бяспекі).

Такім чынам, для свайго новага карыстача спачатку трэба згенераваць ключы SSH на кампутары, з якога вы будзеце заходзіць на сервер:

ssh-keygen -t rsa

Публічны ключ захоўваецца ў файле .pub і выглядае як радок выпадковых сімвалаў, якія пачынаюцца з ssh-rsa.

ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQ3GIJzTX7J6zsCrywcjAM/7Kq3O9ZIvDw2OFOSXAFVqilSFNkHlefm1iMtPeqsIBp2t9cbGUf55xNDULz/bD/4BCV43yZ5lh0cUYuXALg9NI29ui7PEGReXjSpNwUD6ceN/78YOK41KAcecq+SS0bJ4b4amKZIJG3JWm49NWvoo0hdM71sblF956IXY3cRLcTjPlQ84mChKL1X7+D645c7O4Z1N3KtL7l5nVKSG81ejkeZsGFzJFNqvr5DuHdDL5FAudW23me3BDmrM9ifUmt1a00mWci/1qUlaVFft085yvVq7KZbF2OP2NQACUkwfwh+iSTP username@hostname

Затым з-пад рута стварыць на серверы дырэкторыю SSH у хатнім каталогу карыстальніка і дадаць публічны ключ SSH у файл authorized_keys, выкарыстоўваючы тэкставы рэдактар ​​накшталт Vim:

mkdir -p /home/user_name/.ssh && touch /home/user_name/.ssh/authorized_keys

vim /home/user_name/.ssh/authorized_keys

Нарэшце, усталяваць карэктныя дазволы для файла:

chmod 700 /home/user_name/.ssh && chmod 600 /home/user_name/.ssh/authorized_keys

і змяніць валоданне на гэтага карыстача:

chown -R username:username /home/username/.ssh

На баку кліента трэба пазначыць месцазнаходжанне сакрэтнага ключа для аўтэнтыфікацыі:

ssh-add DIR_PATH/keylocation

Зараз можна залагініцца на сервер пад імем юзэра па гэтым ключы:

ssh [username]@hostname

Пасля аўтарызацыі можна выкарыстоўваць каманду scp для капіявання файлаў, утыліту SSHFS для выдаленага прымантавання файлавай сістэмы ці дырэкторый.

Пажадана зрабіць некалькі рэзервовых дзід прыватнага ключа, таму што калі адключыць аўтэнтыфікацыю па паролі і страціць яго, то ў вас не застанецца наогул ніякай магчымасці зайсці на ўласны сервер.

Як згадвалася вышэй, у SSH неабходна адключыць аўтэнтыфікацыю для рута (па гэтай прычыне мы і заводзілі новага карыстача).

На CentOS/Red Hat знаходзім радок PermitRootLogin yes у канфігурацыйным файле /etc/ssh/sshd_config і змяняем яе:

PermitRootLogin no

На Ubuntu дадаем радок PermitRootLogin no у канфігурацыйны файл 10-my-sshd-settings.conf:

sudo echo "PermitRootLogin no" >> /etc/ssh/sshd_config.d/10-my-sshd-settings.conf

Пасля праверкі, што новы карыстач праходзіць аўтэнтыфікацыю па сваім ключы, можна адключыць аўтэнтыфікацыю па паролі, каб выключыць рызыку яго ўцечкі ці брутфорса. Цяпер для доступу на сервер зламысніку неабходна будзе дастаць прыватны ключ.

На CentOS/Red Hat знаходзім радок PasswordAuthentication yes у канфігурацыйным файле /etc/ssh/sshd_config і змяняем яе наступным чынам:

PasswordAuthentication no

На Ubuntu дадаем радок PasswordAuthentication no у файл 10-my-sshd-settings.conf:

sudo echo "PasswordAuthentication no" >> /etc/ssh/sshd_config.d/10-my-sshd-settings.conf

Інструкцыю па падлучэнні двухфактарнай аўтэнтыфікацыі па SSH гл. тут.

Брандмаўэр

Файрвол гарантуе, што на сервер пойдзе толькі той трафік па тых партах, якія вы наўпрост дазволілі. Гэта абараняе ад эксплуатацыі портаў, якія выпадкова ўлучыліся з іншымі сэрвісамі, гэта значыць моцна памяншае паверхню нападу.

Перад усталёўкай файрвала трэба пераканацца, што SSH занесены ў спіс выключэнняў і не будзе блакавацца. Інакш пасля запуску файрвала мы не зможам падлучыцца да сервера.

З дыстрыбутывам Ubuntu ідзе Uncomplicated Firewall (UFW), а з CentOS/Red Hat firewalld.

Дазвол SSH у файрволі на Ubuntu:

sudo ufw allow ssh

На CentOS/Red Hat выкарыстоўваем каманду firewall-cmd:

sudo firewall-cmd --zone=public --add-service=ssh --permanent

Пасля гэтай працэдуры можна запусціць файрвол.

На CentOS/Red Hat запускаем сэрвіс systemd для firewalld:

sudo systemctl start firewalld
sudo systemctl enable firewalld

На Ubuntu выкарыстоўваем такую ​​каманду:

sudo ufw enable

Fail2Ban

Сэрвіс Fail2Ban аналізуе логі на серверы і падлічвае колькасць спроб доступу з кожнага IP-адрасы. У наладах указаны правілы, колькі спроб доступу дазволена за пэўны інтэрвал - пасля чаго дадзены IP-адрас блакуецца на зададзены адрэзак часу. Напрыклад, дазваляем 5 няўдалых спроб аўтэнтыфікацыі па SSH у прамежак 2 гадзіны, пасля чаго блакуем дадзены IP-адрас на 12 гадзін.

Усталяванне Fail2Ban на CentOS і Red Hat:

sudo yum install fail2ban

Усталяванне на Ubuntu і Debian:

sudo apt install fail2ban

запуск:

systemctl start fail2ban
systemctl enable fail2ban

У праграме два канфігурацыйных файла: /etc/fail2ban/fail2ban.conf и /etc/fail2ban/jail.conf. Абмежаванні для бана паказваюцца ў другім файле.

Джэйл для SSH уключаны па змаўчанні з дэфолтнымі наладамі (5 спроб, інтэрвал 10 хвілін, бан на 10 хвілін).

[DEFAULT] ignorecommand = bantime = 10m findtime = 10m maxretry = 5

Акрамя SSH, Fail2Ban можа абараняць і іншыя сэрвісы на вэб-серверы nginx ці Apache.

Аўтаматычныя абнаўленні бяспекі

Як вядома, ва ўсіх праграмах увесь час знаходзяць новыя ўразлівасці. Пасля публікацыі інфармацыі эксплоіты дадаюцца ў папулярныя эксплоіт-пакі, якія масава выкарыстоўваюцца хакерамі і падлеткамі пры сканаванні ўсіх сервераў запар. Таму вельмі важна ўсталёўваць абнаўленні бяспекі як толькі яны з'яўляюцца.

На серверы Ubuntu у канфігурацыі па змаўчанні ўключаны аўтаматычныя абнаўленні бяспекі, так што дадатковых дзеянняў не патрабуецца.

На CentOS/Red Hat трэба ўсталяваць дадатак dnf-аўтаматычны і ўключыць таймер:

sudo dnf upgrade
sudo dnf install dnf-automatic -y
sudo systemctl enable --now dnf-automatic.timer

Праверка таймера:

sudo systemctl status dnf-automatic.timer

Змена партоў па змаўчанні

SSH быў распрацаваны ў 1995 годзе для замены telnet (порт 23) і ftp (порт 21), таму аўтар праграмы Тату Ілтанен абраў порт 22 па змаўчанні, і яго зацвердзілі ў IANA.

Натуральна, усе зламыснікі ў курсе, на якім порце працуе SSH – і скануюць яго разам з астатнімі стандартнымі партамі, каб пазнаць версію праграмнага забеспячэння, для праверкі стандартных пароляў рута і гэтак далей.

Змена стандартных партоў - обфускация - у некалькі разоў скарачае аб'ём смеццевага трафіку, памер логаў і нагрузку на сервер, а таксама скарачае паверхню нападу. Хаця некаторыя крытыкуюць такі метад "абароны праз невыразнасць" (security through obscurity). Чыннік у тым, што гэтая тэхніка супрацьпастаўляецца фундаментальнай архітэктурнай абароне. Таму, напрыклад, Нацыянальны інстытут стандартаў і тэхналогій ЗША ў «Кіраўніцтве па бяспецы сервера» паказвае неабходнасць адкрытай сервернай архітэктуры: "Бяспека сістэмы не павінна спадзявацца на ўтоенасць рэалізацыі яе кампанентаў", – сказана ў дакуменце.

Тэарэтычна, змена партоў па змаўчанні супярэчыць практыцы адчыненай архітэктуры. Але на практыцы аб'ём шкоднаснага трафіку сапраўды скарачаецца, так што гэта простая і эфектыўная мера.

Нумар порта можна наладзіць, змяніўшы дырэктыву Port 22 у файле канфігурацыі / І г.д. / SSH / sshd_config. Ён таксама паказваецца параметрам -p <port> в SSHD. Кліент SSH і праграмы SFTP таксама падтрымліваюць параметр -p <port>.

Параметр -p <port> можна выкарыстоўваць для ўказання нумара порта пры падключэнні з дапамогай каманды ssh у Linux. У SFTP и scp выкарыстоўваецца параметр -P <port> (загалоўная P). Указанне з каманднага радка перавызначае любое значэнне ў файлах канфігурацыі.

Калі сервераў шмат, амаль усе гэтыя дзеянні па абароне Linux-сервера можна аўтаматызаваць у скрыпце. Але калі сэрвер толькі адзін, то лепш уручную кантраляваць працэс.

На правах рэкламы

Закажы і адразу працуй! Стварэнне VDS любой канфігурацыі і з любой аперацыйнай сістэмай на працягу хвіліны. Максімальная канфігурацыя дазволіць адарвацца на поўную – 128 ядраў CPU, 512 ГБ RAM, 4000 ГБ NVMe. Эпічненька 🙂

Абарона Linux-сервера. Што зрабіць у першую чаргу

Крыніца: habr.com