Безопасность сервера Linux
ШифропанкКак только вы впервые запускаете свой сервер, он становится видимым внешнему миру и является мишенью для злоумышленников, которые хотят получить доступ к вашим данным или использовать ваш сервер в качестве еще одного узла для своих крупномасштабных DDOS-атак.
Хуже всего то, что без хорошей защиты вы никогда не узнаете, был ли ваш сервер скомпрометирован. Злоумышленник мог получить доступ к вашему серверу и скопировать ваши данные, ничего не изменив или ваш сервер мог быть частью DDOS-атаки.
Есть много вещей, которые вы можете сделать, чтобы защитить сервер Linux, и это руководство лишь малая часть, но не менее важная.
Обновление системы
В программном обеспечении постоянно находят и исправляют различные уязвимости. Своевременные обновления дистрибутива является ключевым моментом для обеспечения безопасности вашего VPS.
Для обновления надо выполнить 2 простые команды:
sudo apt update
и
sudo apt upgrade
Эта операция должна выполняться регулярно, чтобы поддерживать систему в актуальном состоянии.
Изменение пароля пользователя root
Настоятельно рекомендуется изменить пароль пользователя root, чтобы не оставлять его по умолчанию в новой системе.
Войдите в свой VPS от имени root и измените пароль командой:
passwd
Создание пользователя с ограниченными правами
Как правило, задачи, не требующие прав root, должны выполняться через обычного пользователя. Создать нового пользователя можно с помощью следующей команды:
adduser Имя_нового_пользователя
Новому пользователю будет разрешен вход в систему через SSH . При установлении соединения используйте имя нового пользователя.
Для выполнения операций, требующих повышенных прав всегда можно переключиться на root командой:
su
Отключение доступа к серверу через root
Не рекомендуется и даже опасно оставлять VPS доступным через root.
Поэтому сразу после создания нового пользователя, нужно отключить прямой доступ через пользователя root по протоколу SSH. Для этого необходимо изменить файл конфигурации SSH следующим образом.
Открываем файл конфигурации:
nano /etc/ssh/sshd_config
Ищем следующий раздел:
# Authentication: LoginGraceTime 120 PermitRootLogin yes StrictModes yes
Заменяем yes на no в строке PermitRootLogin и сохраняем.
Чтобы эта модификация была принята, необходимо перезапустить службу SSH :
sudo service sshd restart
После этого подключение к серверу через пользователя root будет отключено.
Изменение SSH-порта
По умолчанию SSH использует 22 порт и большинство атак идут именно на этот порт. Изменение порта SSH должно добавить дополнительный уровень безопасности. Для этого в том же файле /etc/ssh/sshd_config нужно найти строку:
#Port 22
и заменить порт на любой другой, также убрав # в самом начале. Обязательно проверьте, не используется ли выбранный порт другими службами. Например:
Port 2345
Новый номер порта нужно запомнить, иначе вы не сможете получить доступ к своему серверу. При следующем подключении к серверу используйте команду:
ssh [username]@[ip-server] -p 2345
Вход по SSH с использованием ключей
SSH поддерживает возможность аутентификации по ключу, что обеспечивает максимальный уровень безопасности.
Чтобы сгенерировать Ed25519 ключи, на своем ПК используйте команду:
ssh-keygen -t ed25519
При запросе, вводим ключевую фразу (пароль) для ключа, таким образом ваш приватный ключ будет бесполезен для того, кто этой фразы не знает.
Далее закинем на сервер публичный ключ командой:
ssh-copy-id -i ~/.ssh/id_ed25519.pub [username]@[ip-server]
Вводим пароль от сервера. Готово.
Теперь присвоим ПК приватный ключ командой:
ssh-add ~/.ssh/id_ed25519
Далее, чтобы включить аутентификацию по ключу нам нужно отредактировать файл /etc/ssh/sshd_config на сервере:
nano /etc/ssh/sshd_config
Раскомментируем строчку, т.е убираем #
#AuthorizedKeysFile %h/.ssh/authorized_keys
В этом же файле нужно отключить возможность авторизовываться на сервере по паролю, для этого ищем строку:
#PasswordAuthentication yes
и меняем на
PasswordAuthentication no
Сохраняем и перезагружаем ssh-сервер
sudo service sshd restart
Теперь сервер принимает только ssh-ключ.
Сделаем файл authorized_keys неизменяемым.
chattr +i /home/[username]/.ssh/authorized_keys
Брандмауэр
Настройка брандмауэра имеет решающее значение в обеспечении безопасности вашего сервера. В Linux наиболее распространенным брандмауэром является iptables, который многим может показаться довольно сложным в настройке. Чтобы не мучиться с настройкой iptables, предлагаю другой вариант - UFW (Uncomplicated Firewall). UFW - это интерфейс для iptables упрощающий процесс управления правилами iptables, которые сообщают ядру Linux, что делать с сетевым трафиком.
Устанавливается ufw командой:
sudo apt install ufw
Один из вариантов использования, запретить весь исходящий и входящий трафик и открыть только те порты, которые вы будите использовать.
Запретить весь исходящий трафик:
sudo ufw default deny outgoing
Запретить весь входящий трафик:
sudo ufw default deny incoming
Сразу откроем ssh порт, который мы перенесли на порт 2345, используя команду:
sudo ufw limit in 2345/tcp
Несколько примеров открытия портов, которые вам могут понадобиться (для удобства в каждую команду добавлен комментарий) :
# разрешить выход трафика на порт 53 -- DNS sudo ufw allow out 53 comment 'allow DNS calls out' # разрешить выход трафика на порт 123 -- NTP sudo ufw allow out 123 comment 'allow NTP out' # разрешить выход трафика для HTTP, HTTPS, FTP # apt может нуждаться в них sudo ufw allow out http comment 'allow HTTP traffic out' sudo ufw allow out https comment 'allow HTTPS traffic out' sudo ufw allow out ftp comment 'allow FTP traffic out' # разрешить whois sudo ufw allow out whois comment 'allow whois' # разрешить трафик на порту 68 -- DHCP-клиент # это нужно только в том случае, если вы используете DHCP sudo ufw allow out 67 comment 'allow the DHCP client to update' sudo ufw allow out 68 comment 'allow the DHCP client to update'
Запустить ufw:
sudo ufw enable
Чтобы посмотреть список разрешений используйте команду:
sudo ufw status verbose
Установка Fail2ban
Fail2ban — сканирует log–файлы запущенных сервисов, и блокирует IP-адреса активность которых является подозрительной (большое количество попыток войти с неправильно введенным паролем, выполнение опасных или бессмысленных действий и т.д.).
Установка:
sudo apt install fail2ban
Все необходимые настройки Fail2Ban производятся в файле /etc/fail2ban/jail.conf . Но прежде чем вносить свои изменения в этот файл, Fail2Ban советует сделать копию с помощью локального файла. Это необходимо потому, что файлы conf по умолчанию могут быть перезаписаны при обновлениях, и вы потеряете все свои настройки.
Поэтому копируем файл jail.conf в файл jail.local. и будем производить все настройки в jail.local, они будут сохраняться при обновлениях. Оба файла автоматически считываются Fail2ban.
cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
Файл jail.conf поделён на секции, так называемые «тюрьмы», каждая секция отвечает за определённый сервис.
Запустить fail2ban:
sudo fail2ban-client start
Антивирус ClamAV
ClamAV — это антивирус с открытым исходным кодом для обнаружения троянов, вирусов, вредоносных программ и других вредоносных угроз.
Нам понадобятся 3 пакета:
- clamav - сам сканер
- clamav-freshclam - сервис обновления вирусной базы данных
- clamav-daemon - демон сканера
Установка:
sudo apt install clamav clamav-freshclam clamav-daemon
По умолчанию все уже достаточно хорошо настроено, так что можно за это не волноваться.
Запустим clamav-freshclam:
sudo service clamav-freshclam start
Проверим:
sudo service clamav-freshclam status
Сканирование файлов/папок
- Для ручного сканирования файлов/папок используется
clamscan. clamscanзапускается от имени пользователя, поэтому ему нужны разрешения на чтение файлов/папок, которые он сканирует.- Использование
clamscanот имениrootопасно, потому что если файл на самом деле является вирусом, существует риск того, что он может использовать привилегии root. - Для сканирования файла:
clamscan /path/to/file - Для сканирования каталога:
clamscan -r /path/to/folder
Сканер руткитов
Одной из самых опасных вредоносных программ является руткит.
Он существует на уровне операционной системы и может скрытно открыть доступ к серверу. Можно использовать Chrootkit или Rkhunter, инструменты с открытым исходным кодом, чтобы узнать, заражен ли ваш сервер.
Установка Chrootkit:
sudo apt install chkrootkit
Сканирование производится командой:
sudo chkrootkit
Установка Rkhunter:
sudo apt install rkhunter
Обновление rkhunter и его баз данных:
sudo rkhunter --versioncheck sudo rkhunter --update sudo rkhunter --propupd
Сканирование системы:
sudo rkhunter --check
Руткиты не всегда легко удалить, проще переустановить ОС.
Помимо всего вышеперечисленного могу добавить, что не стоит захламлять систему ненужными пакетами и программами. Каждая такая программа это потенциальная точка входа, которой могут воспользоваться незваные гости. Так что устанавливайте только то ПО, без которого вы не можете обойтись.
Всегда используйте надежные пароли и делайте резервные копии своей системы.
P.S. Автоматическая настройка
Обратите внимание на Bash скрипт, который автоматизирует некоторые задачи, чтобы обеспечить базовую безопасность VPS сервера. О том что делает этот скрипт и как им пользоваться можно прочитать на странице скрипта.
Поддержать канал
Bitcoin: bc1qx07rnee8n78k3tac0ra690309ujyjg7hnkeu0v
Ethereum: 0xf9FCac64C6510A7DB29706f903d38FB532dfbDc0
Litecoin: LPdVENDq5ataHCqRrQnEEemVqFQmJ7aUqJ
DASH: XeLtyRNnMET2nF1gRApzBWzFoN15C2tWgj
Zcash: t1acDtEboR4oPPmAPKADNQ3tyoU11KdpqEZ
Monero: 487g4zkuCVE5n4a9pDeHLSdNCwp3nCMhp4Ki1T5UkBpWG1mVcB9ghmoUmjGXisSNaKiLhpVqZSNhvGsv3trszHhnSpW6nR5