У наш час падняць сервер на хостынгу - справа пары хвілін і некалькіх пстрычак мышы. Але адразу пасля запуску ён трапляе ў варожае асяроддзе, бо адкрыты для ўсяго інтэрнэту як нявінная дзяўчына на рокерскай дыскатэцы. Яго хутка намацаюць сканары і выявяць тысячы аўтаматычна скрыптовых робатаў, якія шныраюць па сетцы ў пошуках уразлівасцяў і няправільных канфігурацый. Ёсць некалькі рэчаў, якія трэба зрабіць адразу пасля запуску, каб забяспечыць базавую абарону.
Перш за ўсё неабходна завесці сабе нерутового карыстача. Справа ў тым, што ў карыстальніка 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 у хатнім каталогу карыстальніка і дадаць публічны ключ SSH у файл authorized_keys, выкарыстоўваючы тэкставы рэдактар накшталт Vim:
На баку кліента трэба пазначыць месцазнаходжанне сакрэтнага ключа для аўтэнтыфікацыі:
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:
Пасля праверкі, што новы карыстач праходзіць аўтэнтыфікацыю па сваім ключы, можна адключыць аўтэнтыфікацыю па паролі, каб выключыць рызыку яго ўцечкі ці брутфорса. Цяпер для доступу на сервер зламысніку неабходна будзе дастаць прыватны ключ.
На CentOS/Red Hat знаходзім радок PasswordAuthentication yes у канфігурацыйным файле /etc/ssh/sshd_config і змяняем яе наступным чынам:
PasswordAuthentication no
На Ubuntu дадаем радок PasswordAuthentication no у файл 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:
Сэрвіс Fail2Ban аналізуе логі на серверы і падлічвае колькасць спроб доступу з кожнага IP-адрасы. У наладах указаны правілы, колькі спроб доступу дазволена за пэўны інтэрвал - пасля чаго дадзены IP-адрас блакуецца на зададзены адрэзак часу. Напрыклад, дазваляем 5 няўдалых спроб аўтэнтыфікацыі па SSH у прамежак 2 гадзіны, пасля чаго блакуем дадзены IP-адрас на 12 гадзін.
Акрамя SSH, Fail2Ban можа абараняць і іншыя сэрвісы на вэб-серверы nginx ці Apache.
Аўтаматычныя абнаўленні бяспекі
Як вядома, ва ўсіх праграмах увесь час знаходзяць новыя ўразлівасці. Пасля публікацыі інфармацыі эксплоіты дадаюцца ў папулярныя эксплоіт-пакі, якія масава выкарыстоўваюцца хакерамі і падлеткамі пры сканаванні ўсіх сервераў запар. Таму вельмі важна ўсталёўваць абнаўленні бяспекі як толькі яны з'яўляюцца.
На серверы Ubuntu у канфігурацыі па змаўчанні ўключаны аўтаматычныя абнаўленні бяспекі, так што дадатковых дзеянняў не патрабуецца.
На CentOS/Red Hat трэба ўсталяваць дадатак dnf-аўтаматычны і ўключыць таймер:
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. Эпічненька 🙂