Как защитить ваш выделенный сервер: Первые 30 минут после доставки
Ваш выделенный сервер от Valebyte предлагает беспрецедентную производительность и изоляцию для ваших самых требовательных рабочих нагрузок, будь то высоконагруженные веб-приложения, сложные базы данных, мощные игровые серверы, потоковые сервисы или критически важные CI/CD-конвейеры. Однако с большой мощью приходит и большая ответственность, особенно в отношении безопасности. Первые минуты после доставки вашего сервера имеют первостепенное значение для внедрения фундаментальных мер безопасности, которые защитят ваши инвестиции от потенциальных угроз.
Предварительные условия и требования к серверу
Прежде чем приступить к защите вашего выделенного сервера, убедитесь, что у вас есть следующее:
- SSH-клиент: Клиент безопасной оболочки (например, OpenSSH в Linux/macOS, PuTTY или Windows Terminal с OpenSSH в Windows) для удаленного подключения к вашему серверу.
- Учетные данные root: Исходное имя пользователя и пароль root, или SSH-ключ, предоставленные Valebyte для вашего сервера.
- Базовое знакомство с командной строкой Linux: Знание основных команд Linux крайне важно.
- Подключение к Интернету: Вашей локальной машине требуется подключение к Интернету, а ваш выделенный сервер должен иметь сетевое подключение для загрузки обновлений и пакетов.
- Выделенный сервер от Valebyte: Готов и ждет ваших команд!
Это руководство предполагает чистую установку распространенного дистрибутива Linux, такого как Debian, Ubuntu или CentOS/RHEL. Команды будут предоставлены для обоих случаев, где существуют значительные различия.
Пошаговый контрольный список безопасности (в течение 30 минут)
Давайте начнем с немедленных действий по укреплению вашего сервера.
Шаг 1: Первоначальный доступ и проверка системы (прибл. 3-5 минут)
Ваш первый шаг — безопасно подключиться к серверу и проверить его базовую конфигурацию.
1.1 Подключение через SSH
Откройте свой SSH-клиент и подключитесь к серверу, используя IP-адрес и учетные данные root, предоставленные Valebyte.
ssh root@YOUR_SERVER_IP_ADDRESS
Вам может быть предложено принять отпечаток сервера. Введите yes и нажмите Enter. Затем введите свой пароль root.
1.2 Проверка сведений о системе
После входа в систему рекомендуется быстро проверить операционную систему и имя хоста.
lsb_release -a # Для Debian/Ubuntu
cat /etc/redhat-release # Для CentOS/RHEL
hostnamectl # Общая информация о системе
whoami # Подтвердите, что вы root
w # Проверьте, кто еще вошел в систему (должны быть только вы)
Это гарантирует, что вы находитесь на правильном сервере и нет неожиданных пользователей.
Шаг 2: Создание нового пользователя Sudo (прибл. 5 минут)
Постоянная работа от имени пользователя root является риском безопасности. Лучшей практикой является создание нового пользователя без прав root с административными (sudo) привилегиями для ваших повседневных задач.
2.1 Добавление нового пользователя
Замените your_username на желаемое имя пользователя.
adduser your_username
passwd your_username # Установите надежный пароль для этого пользователя
Следуйте подсказкам, чтобы установить надежный пароль и при желании заполнить информацию о пользователе (обычно их можно пропустить, нажав Enter).
2.2 Предоставление привилегий Sudo
Добавьте нового пользователя в группу sudo (или группу wheel для CentOS/RHEL), чтобы он мог выполнять команды с привилегиями root при необходимости.
Для Debian/Ubuntu:
usermod -aG sudo your_username
Для CentOS/RHEL:
usermod -aG wheel your_username
2.3 Тестирование нового пользователя
Откройте новую SSH-сессию (оставьте сессию root открытой в качестве запасного варианта) и попробуйте войти с новым пользователем. Затем проверьте доступ sudo.
ssh your_username@YOUR_SERVER_IP_ADDRESS
После входа в систему попробуйте команду sudo:
sudo whoami
Вам будет предложено ввести пароль для your_username, а затем вы увидите root в качестве вывода, подтверждающего доступ sudo.
Шаг 3: Защита SSH (прибл. 10 минут)
SSH — это ваш основной шлюз к серверу. Его усиление критически важно.
3.1 Отключение входа root
Запретите прямые входы root через SSH. Это вынуждает злоумышленников сначала угадывать имя пользователя.
sudo nano /etc/ssh/sshd_config # Или 'vi', если вы предпочитаете
Найдите строку PermitRootLogin и измените ее значение на no. Если она закомментирована (начинается с #), раскомментируйте ее.
PermitRootLogin no
3.2 Внедрение аутентификации на основе SSH-ключей
Аутентификация по паролю уязвима для атак методом перебора. SSH-ключи гораздо безопаснее.
На вашей локальной машине (не на сервере):
Сгенерируйте пару SSH-ключей, если у вас ее нет:
ssh-keygen -t rsa -b 4096 -C "[email protected]"
Следуйте подсказкам. Настоятельно рекомендуется использовать надежную парольную фразу для вашего закрытого ключа.
Скопируйте ваш публичный ключ на сервер:
Самый простой способ — использовать ssh-copy-id:
ssh-copy-id your_username@YOUR_SERVER_IP_ADDRESS
Если ssh-copy-id недоступен или вы предпочитаете ручные шаги, вы можете сделать это так:
cat ~/.ssh/id_rsa.pub # На вашей локальной машине, скопируйте вывод
# На сервере, войдя как your_username:
mkdir -p ~/.ssh
chmod 700 ~/.ssh
# Используйте nano/vi, чтобы открыть или создать authorized_keys
nano ~/.ssh/authorized_keys
# Вставьте ваш публичный ключ в этот файл
chmod 600 ~/.ssh/authorized_keys
Проверка входа на основе ключей:
Откройте новую SSH-сессию с вашей локальной машины (оставьте сессию root открытой!).
ssh your_username@YOUR_SERVER_IP_ADDRESS
Теперь вы должны войти в систему без пароля (или только с запросом парольной фразы вашего ключа).
3.3 Отключение аутентификации по паролю (после успешного входа по ключу!)
Как только вы подтвердите, что вход по ключу работает, полностью отключите аутентификацию по паролю.
sudo nano /etc/ssh/sshd_config
Найдите строку PasswordAuthentication и установите ее значение на no.
PasswordAuthentication no
3.4 Изменение порта SSH по умолчанию (необязательно, но рекомендуется)
Изменение порта SSH по умолчанию (22) на нестандартный порт (например, 2222, 22022) уменьшает количество автоматических попыток сканирования.
sudo nano /etc/ssh/sshd_config
Найдите строку Port 22, раскомментируйте ее при необходимости и измените 22 на желаемый порт.
Port 2222 # Выберите любой порт > 1024, который не используется
3.5 Применение изменений SSH
Перезапустите службу SSH, чтобы изменения вступили в силу.
Для Debian/Ubuntu:
sudo systemctl restart ssh
Для CentOS/RHEL:
sudo systemctl restart sshd
3.6 Тестирование новой конфигурации SSH
Крайне важно открыть новую SSH-сессию с вашей локальной машины, чтобы проверить новый порт и вход по ключу. НЕ закрывайте существующие SSH-сессии, пока не убедитесь, что вы можете успешно войти с новой конфигурацией.
ssh -p 2222 your_username@YOUR_SERVER_IP_ADDRESS
Если вы можете войти, ваше усиление SSH успешно. Теперь вы можете закрыть старую сессию root.
Шаг 4: Настройка базового брандмауэра (прибл. 5 минут)
Брандмауэр — это первая линия защиты вашего сервера, контролирующая входящий и исходящий сетевой трафик.
4.1 Установка и настройка UFW (Ubuntu/Debian) или Firewalld (CentOS/RHEL)
Для Ubuntu/Debian (использование UFW - Uncomplicated Firewall):
sudo apt update
sudo apt install ufw -y
Разрешите необходимые порты. Помните ваш новый SSH-порт!
sudo ufw allow 2222/tcp # Ваш новый SSH-порт
sudo ufw allow http # Порт 80 для веб-серверов
sudo ufw allow https # Порт 443 для веб-серверов
sudo ufw default deny incoming
sudo ufw default allow outgoing
Включение UFW (будьте осторожны!):
sudo ufw enable
Вы получите предупреждение о нарушении существующих SSH-соединений. Введите y и нажмите Enter.
Проверка статуса UFW:
sudo ufw status verbose
Для CentOS/RHEL (использование Firewalld):
sudo yum update # Или 'dnf update'
sudo yum install firewalld -y # Или 'dnf install firewalld'
sudo systemctl start firewalld
sudo systemctl enable firewalld
Разрешите необходимые службы/порты:
sudo firewall-cmd --permanent --add-port=2222/tcp # Ваш новый SSH-порт
sudo firewall-cmd --permanent --add-service=http
sudo firewall-cmd --permanent --add-service=https
Перезагрузите firewalld для применения изменений:
sudo firewall-cmd --reload
Проверка статуса Firewalld:
sudo firewall-cmd --list-all
Эта базовая настройка брандмауэра гарантирует, что только необходимые службы доступны из Интернета. Для конкретных случаев использования, таких как игровые серверы, почтовые серверы или базы данных, вам потребуется открыть дополнительные порты по мере необходимости (например, MySQL на 3306, PostgreSQL на 5432, специфические порты игровых серверов).
| Служба | Общий порт(ы) | Протокол |
|---|---|---|
| SSH | 22 (по умолчанию), например, 2222 (пользовательский) | TCP |
| HTTP (веб) | 80 | TCP |
| HTTPS (защищенный веб) | 443 | TCP |
| SMTP (исходящая почта) | 25, 587 | TCP |
| IMAP/IMAPS (входящая почта) | 143, 993 | TCP |
| POP3/POP3S (входящая почта) | 110, 995 | TCP |
| MySQL/MariaDB | 3306 | TCP |
| PostgreSQL | 5432 | TCP |
Шаг 5: Обновление вашей системы (прибл. 2-3 минуты для начальной команды)
Поддержание вашей операционной системы и всех установленных пакетов в актуальном состоянии является фундаментальным. Обновления часто включают исправления безопасности для известных уязвимостей.
Для Debian/Ubuntu:
sudo apt update && sudo apt upgrade -y
Для CentOS/RHEL:
sudo yum update -y # Или 'dnf update -y'
Хотя полный процесс обновления может занять больше 30 минут, немедленное его начало гарантирует, что ваш сервер начнет исправлять уязвимости без задержек. Вы можете запустить его в фоновом режиме или в вашей активной сессии.
Шаг 6: Установка Fail2Ban (необязательно, но настоятельно рекомендуется для 30 минут)
Fail2Ban — это фреймворк для предотвращения вторжений, который сканирует файлы журналов (например, /var/log/auth.log, /var/log/apache/error.log) на предмет вредоносной активности, такой как попытки перебора, и блокирует атакующие IP-адреса с помощью правил брандмауэра.
6.1 Установка Fail2Ban
Для Debian/Ubuntu:
sudo apt install fail2ban -y
Для CentOS/RHEL:
sudo yum install epel-release -y # Сначала установите репозиторий EPEL
sudo yum install fail2ban fail2ban-systemd -y
6.2 Включение и запуск Fail2Ban
Fail2Ban обычно запускается автоматически после установки, но полезно убедиться, что он включен.
sudo systemctl enable fail2ban
sudo systemctl start fail2ban
6.3 Базовая конфигурация (необязательно, для быстрого результата)
Для немедленной защиты часто достаточно конфигурации по умолчанию. Однако вы можете быстро создать локальный файл конфигурации, чтобы переопределить значения по умолчанию без изменения основного файла конфигурации:
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
sudo nano /etc/fail2ban/jail.local
Внутри jail.local вы можете настроить параметры, такие как bantime (как долго IP-адрес заблокирован), findtime (временное окно для попыток) и maxretry (количество попыток). Например, убедитесь, что [sshd] включен (enabled = true) и рассмотрите возможность увеличения bantime до более высокого значения, такого как 1h (1 час) или 1d (1 день).
[DEFAULT]
bantime = 1d
findtime = 10m
maxretry = 5
[sshd]
enabled = true
port = 2222 # Ваш пользовательский порт SSH
Перезапустите Fail2Ban после любых изменений:
sudo systemctl restart fail2ban
Проверьте его статус:
sudo systemctl status fail2ban
Что дальше? (За пределами первых 30 минут)
Хотя эти шаги обеспечивают прочную немедленную основу безопасности, безопасность сервера — это непрерывный процесс. Рассмотрите следующие шаги для вашего выделенного сервера Valebyte:
- Регулярные обновления: Автоматизируйте обновления безопасности, где это уместно, или планируйте регулярные ручные проверки.
- Мониторинг и логирование: Внедрите надежные решения для логирования и мониторинга. Инструменты, такие как стек ELK (Elasticsearch, Logstash, Kibana) или Prometheus/Grafana, могут предоставить глубокие аналитические данные.
- Стратегия резервного копирования: Разработайте и протестируйте комплексный план резервного копирования и аварийного восстановления для ваших данных.
- Системы обнаружения вторжений (IDS): Изучите инструменты, такие как OSSEC или Suricata, для более глубокого обнаружения вторжений.
- Сканеры руткитов: Периодически запускайте инструменты обнаружения руткитов, такие как
rkhunterилиchkrootkit. - Защита служб: Если вы используете веб-серверы (Apache, Nginx), базы данных (MySQL, PostgreSQL) или почтовые серверы, убедитесь, что они настроены безопасно с правильными разрешениями, SSL/TLS и надежными паролями.
- SELinux/AppArmor: Изучите и настройте эти системы принудительного контроля доступа для повышения безопасности (особенно SELinux на CentOS/RHEL).
- Регулярные аудиты безопасности: Периодически просматривайте конфигурации безопасности вашего сервера.
Устранение распространенных проблем
Даже при тщательном выполнении шагов могут возникнуть проблемы. Вот некоторые распространенные проблемы и их решения:
Проблемы с подключением SSH
- Доступ запрещен (publickey):
- Причина: Неправильные разрешения на
~/.ssh/authorized_keysна сервере (должно быть 600) или на вашем локальном закрытом ключе (должно быть 600 или 400). - Решение: На сервере:
chmod 600 ~/.ssh/authorized_keys; на локальной машине:chmod 600 ~/.ssh/id_rsa. - Причина: Неправильный публичный ключ скопирован на сервер.
- Решение: Убедитесь, что публичный ключ в
~/.ssh/authorized_keysсоответствует вашему локальномуid_rsa.pub.
- Причина: Неправильные разрешения на
- Соединение отклонено / Тайм-аут:
- Причина: Служба SSH не запущена, неправильный порт или брандмауэр блокирует соединение.
- Решение: Проверьте статус службы SSH (
sudo systemctl status sshd). Проверьте правила брандмауэра (sudo ufw statusилиsudo firewall-cmd --list-all) и убедитесь, что ваш новый SSH-порт разрешен. Попробуйте подключиться с помощьюssh -vvv your_username@YOUR_SERVER_IP_ADDRESS -p YOUR_SSH_PORTдля подробного вывода.
- Потеря доступа после отключения входа root / аутентификации по паролю:
- Причина: Вы отключили их до подтверждения входа по ключу для вашего нового пользователя.
- Решение: Вот почему вы держите сессию root открытой! Если вы ее закрыли, вам может потребоваться использовать консоль удаленного управления Valebyte (если доступна) или обратиться в службу поддержки для получения спасательной системы или доступа KVM, чтобы отменить изменения в
/etc/ssh/sshd_config.
Проблемы с разрешениями Sudo
- "your_username не находится в файле sudoers. Этот инцидент будет зарегистрирован."
- Причина: Ваш пользователь не был правильно добавлен в группу
sudo(Debian/Ubuntu) илиwheel(CentOS/RHEL). - Решение: Войдите как root (если возможно) или используйте пользователя с привилегиями sudo и выполните
usermod -aG sudo your_username(илиwheel). Затем выйдите и снова войдите сyour_username.
- Причина: Ваш пользователь не был правильно добавлен в группу
Блокировка брандмауэром
- Потеря SSH-соединения после включения брандмауэра:
- Причина: Вы включили брандмауэр, не разрешив сначала ваш SSH-порт.
- Решение: Если вы заблокированы, вам потребуется использовать консоль удаленного управления Valebyte или доступ KVM, чтобы отключить брандмауэр или добавить правильное правило SSH. Для UFW:
sudo ufw disable; Для Firewalld:sudo systemctl stop firewalld. Затем тщательно перенастройте.