
, CC BY-SA
В днешно време настройването на сървър на хостинг е въпрос на минути и няколко кликвания на мишката. Но веднага след старта, той попада в враждебна среда, защото е открит за целия интернет като невинно момиче на рокерска дискотека. Бързо ще бъде открит от скенери и ще бъде забелязан от хиляди автоматизирани ботове, които търсят уязвимости и неправилни конфигурации. Има няколко неща, които трябва да направите веднага след старта, за да осигурите основна защита.
Съдържание
Не.root потребител
Първо трябва да създадете не.root потребител. Работата е там, че потребителят root има абсолютни права в системата, а ако му разрешите отдалечено администриране, вие ще направите половината работа за хакера, оставяйки му валидно потребителско име.
Затова трябва да създадете друг потребител, а за root да деактивирате отдалечното администриране по SSH.
Новият потребител се създава с командата useradd:
useradd [options] След това за него се добавя паролата с командата passwd:
passwd Накрая, този потребител трябва да бъде добавен в група, която има право за изпълнение на команди с повишени права. sudoВ зависимост от дистрибуцията на Linux, това могат да бъдат различни групи. Например, в CentOS и Red Hat, потребителят се добавя в групата wheel:
usermod -aG wheel В Ubuntu той се добавя в групата sudo:
usermod -aG sudo
Ключове вместо пароли SSH
Брутфорс или изтичане на пароли — стандартен вектор на атака, затова аутентификацията с пароли в SSH (Secure Shell) е най-добре да бъде деактивирана, а вместо нея да се използва аутентификация с ключове.
Има различни програми за реализиране на протокола SSH, като и , но най-популярната е 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-keygen -t rsa Публичният ключ се съхранява в файл .pub и изглежда като низ от случайни символи, който започва с ssh-rsa.
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQ3GIJzTX7J6zsCrywcjAM/7Kq3O9ZIvDw2OFOSXAFVqilSFNkHlefm1iMtPeqsIBp2t9cbGUf55xNDULz/bD/4BCV43yZ5lh0cUYuXALg9NI29ui7PEGReXjSpNwUD6ceN/78YOK41KAcecq+SS0bJ4b4amKZIJG3JWm49NWvoo0hdM71sblF956IXY3cRLcTjPlQ84mChKL1X7+D645c7O4Z1N3KtL7l5nVKSG81ejkeZsGFzJFNqvr5DuHdDL5FAudW23me3BDmrM9ifUmt1a00mWci/1qUlaVFft085yvVq7KZbF2OP2NQACUkwfwh+iSTP username@hostname
След това от root потребителя создайте директория SSH в домашния каталог на потребителя и добавете публичния SSH ключ в файла authorized_keys, използвайки текстов редактор, като Vim:
mkdir -p /home/user_name/.ssh && touch /home/user_name/.ssh/authorized_keysvim /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 за копиране на файлове, както и утилитата за отдалечено монтиране на файловата система или директории.
Препоръчително е да направите няколко резервни копия на личния ключ, защото ако изключите удостоверяването по парола и го загубите, няма да имате никаква възможност да влезете в собствения си сървър.
Както беше споменато по-горе, в SSH трябва да се изключи удостоверяването за root (поради тази причина създадохме нов потребител).
На 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 (), а с CentOS/Red Hat — .
Разрешаване на SSH в файрвола на Ubuntu:
sudo ufw allow ssh В CentOS/Red Hat използваме команда firewall-cmd:
sudo firewall-cmd --zone=public --add-service=ssh --permanentСлед тази процедура можете да стартирате файрвола.
На CentOS/Red Hat стартираме системната услуга за firewalld:
sudo systemctl start firewalld
sudo systemctl enable firewalldВ Ubuntu използваме следната команда:
sudo ufw enable
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 трябва да инсталирате приложението и да включите таймера:
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), затова създателят на програмата Тату Илтонен , и той беше одобрен в IANA.
Естествено, всички злонамерени лица са запознати с порта, на който работи SSH — и сканират същия заедно с останалите стандартни портове, за да установят версията на софтуера, да проверят стандартните пароли на рут администратора и т.н.
Смяната на стандартните портове — обфускация — значително намалява обема на ненужния трафик, размера на логовете и натоварването на сървъра, както и намалява повърхността на атаката. Въпреки това някои (security through obscurity). Причината е, че тази техника противоречи на основната . Затова, например, Националният институт по стандарти и технологии на САЩ в посочва необходимостта от открита сървърна архитектура: "Сигурността на системата не трябва да зависи от тайността на реализирането на нейните компоненти", се казва в документа.
Теоретично, смяната на портовете по подразбиране противоречи на практиката на откритата архитектура. Но на практика обемът на злонамерения трафик наистина намалява, така че това е проста и ефективна мярка.
Номерът на порта може да се настрои, като се промени директивата Port 22 в конфигурационния файл. Той също така се посочва с параметъра -p в Клиентът SSH и програмите също поддържат параметъра -p.
Параметър -p което може да се използва за указване на номера на порта при свързването с команда ssh в Linux. В и scp се използва параметър -P (заглавная P). Команден ред е преопределя всяко значение в конфигурационни файлове.
Ако сървърите са много, почти всичките тези действия за защита на Linux сървър могат да бъдат автоматизирани в скрипт. Но ако сървърът е само един, по-добре е да се контролира процеса ръчно.
Реклама
Поръчай и започни работа веднага! всякаква конфигурация и с всяка операционна система за минути. Максималната конфигурация ще позволи да отстъпите на 128 ядра CPU, 512 ГБ RAM, 4000 ГБ NVMe. Епично 🙂
Източник: habr.com
