К основному контенту
Variti Blog

Безопасность веб-сервера

Variti ежедневно делает интернет чище и безопаснее – с помощью фильтрации ботов.
В то же время, безопасность должна обеспечиваться на всех уровнях. Для этого мы подготовили базовую, но от того не менее полезную инструкцию, где поэтапно рассказываем, как защитить веб-сервер.
Этот чек-лист, или, как мы его назвали, crush course, поможет администраторам проверить, обезопасен ли ресурс от простых, но от того не менее вредоносных атак. Инструкция будет полезна и тем, кто только собирается вести бизнес в интернете – и пока не успел подключить сервисы защиты.

Организуем вход на сервер по ключам по ssh.

1. Создайте пару ключей (открытый и закрытый) на своем компьютере. Для этого можно использовать команду:
ssh-keygen -t rsa -b 4096
2. Скопируйте открытый ключ на сервер. Это можно сделать с помощью команды:
ssh-copy-id user@server
Замените user на ваше имя пользователя, а server на адрес вашего сервера.

3. Подключитесь к серверу по SSH с помощью закрытого ключа. Обычная команда для этого:
ssh user@server
Теперь, вместо пароля, для входа будет использоваться ключ.

Отключаем парольную авторизацию.

Чтобы отключить требование пароля для входа на сервер, нужно изменить некоторые настройки на самом сервере. Для этого:

1. Подключитесь к серверу.
2. Найдите файл настроек SSH, обычно он называется sshd_config и находится в папке /etc/ssh/.
3. Откройте этот файл для редактирования.
4. Найдите строку с параметром PasswordAuthentication и измените его значение на no.
5. Сохраните изменения и закройте файл.
6. Перезапустите службу SSH, чтобы изменения вступили в силу. Это можно сделать с помощью команды systemctl restart sshd или service ssh restart.

Теперь сервер не будет просить пароль, когда кто-то пытается к нему подключиться через SSH.

Отключаем авторизацию с помощью root учетной записи.

1. Откройте файл конфигурации SSH. Обычно он находится в /etc/ssh/sshd_config.

2. Найдите строку PermitRootLogin. Она может выглядеть так: PermitRootLogin yes.

3. Измените ее на PermitRootLogin no. Это отключит вход с правами root через SSH.

4. Сохраните изменения и закройте файл.

5. Перезапустите службу SSH, чтобы изменения вступили в силу. Это можно сделать с помощью команды systemctl restart sshd или service sshd restart.

Отключаем версии SSH ниже 2

Чтобы отключить старые версии SSH ниже 2 на сервере, нужно сделать следующее:

1. Откройте файл конфигурации SSH. Обычно он находится по пути /etc/ssh/sshd_config.

2. Найдите строку, которая начинается с Protocol.

3. Убедитесь, что она выглядит так: Protocol 2. Это означает, что используется только версия 2.

4. Сохраните изменения в файле.

5. Перезапустите службу SSH, чтобы изменения вступили в силу. Это можно сделать с помощью команды sudo systemctl restart ssh или sudo service ssh restart.

Переводим ssh на нестандартный порт (например 8022)

1. Откройте файл настроек SSH:
sudo nano /etc/ssh/sshd_config
2. Найдите строку:
#Port 22
3. Уберите решетку (#) и замените 22 на 8022:
Port 8022
4. Сохраните изменения и закройте файл.
5. Перезапустите сервис SSH:
sudo systemctl restart sshd
Теперь SSH будет слушать на порту 8022.

Чем меньше людей будут иметь доступ к Вашему серверу, тем лучше это скажется на безопасности.

Для пользователей размечаем доступы только к нужным командам через sudoers.

Чтобы дать пользователям доступ только к определённым командам на вашем компьютере, можно настроить файл sudoers. В этом файле вы указываете, какие команды пользователи могут выполнять с правами администратора. Например, если вам нужно, чтобы пользователь мог перезагружать систему, но не мог устанавливать программы, вы это указываете в sudoers.

Например:

Откройте файл sudoers для редактирования
sudo visudo
Добавьте следующее правило в файл:
username ALL=(ALL) NOPASSWD: /usr/bin/systemctl restart apache2, /usr/bin/systemctl status apache2
Пример выше позволяет пользователю "username" использовать команды systemctl restart apache2 и systemctl status apache2 без ввода пароля.

Для более расширенной настройки доступа к файлам можно использовать ACL на файловой системе ext4

Чтобы настроить доступ к файлам на файловой системе ext4 с помощью ACL (списков контроля доступа), нужно сделать следующее:

1. Убедитесь, что ваша файловая система поддерживает ACL. Обычно файловая система ext4 это позволяет, но нужно проверить, указана ли опция acl при монтировании. Это можно сделать с помощью команды mount и поиска в выводе acl:
mount | grep acl
Если опции acl там нет, нужно изменить настройки монтирования в файле /etc/fstab.

2. Установите нужные пакеты. На большинстве систем это можно сделать так:
sudo apt-get install acl
3. Включить опцию acl при монтировании файловой системы. Для этого откройте файл /etc/fstab:
sudo nano /etc/fstab
4. Добавьте acl в опции для нужной файловой системы, например:

было:
/dev/sda1 /mnt/data ext4 defaults 0 2

стало:
/dev/sda1 /mnt/data ext4 defaults,acl 0 2

5. Затем выполните команду для перемонтирования:
sudo mount -o remount,acl /mnt/data
6. Настройте права доступа к файлам и папкам с помощью команд setfacl и getfacl.

  • Чтобы установить дополнительные права для пользователя, используйте команду setfacl. Например, чтобы дать пользователю john права на чтение и запись к файлу example.txt:
setfacl -m u:john:rw example.txt
  • Чтобы посмотреть текущие ACL для файла или папки, используйте команду getfacl:
getfacl example.txt
Теперь вы можете точно регулировать, какие пользователи имеют доступ к каким файлам и папкам.

Для управления доступами исполняемых процессов, можно использовать selinux

SELinux (Security-Enhanced Linux) – это система безопасности, которая помогает контролировать, какие программы (или процессы) могут делать какие действия на компьютере. Она задает строгие правила, что может делать каждая программа: какие файлы открывать, куда записывать данные и так далее. Это нужно, чтобы повысить безопасность компьютера и предотвратить выполнение вредоносных действий.

Например:

1. Создание нового домена и типов
sudo semanage fcontext -a -t myapp_exec_t /usr/local/bin/myapp
sudo restorecon -v /usr/local/bin/myapp
2. Добавление правил разрешений
echo "allow myapp_t myapp_exec_t : process transition;" > myapp.te
echo "allow myapp_t myapp_exec_t : file { execute };" >> myapp.te
3. Компиляция и установка модуля политики
checkmodule -M -m -o myapp.mod myapp.te
semodule_package -o myapp.pp -m myapp.mod
sudo semodule -i myapp.pp
4. Назначение домена именно этому процессу
semanage permissive -a myapp_t
sudo runcon -t myapp_t /usr/local/bin/myapp

Для ограничения доступа на уровне сети, обязательно используем файервол, например iptables

Iptables — это инструмент для управления сетевыми доступами. Он позволяет решить, какие устройства и программы могут соединяться с вашим компьютером через интернет или локальную сеть.

Чтобы запретить кому-то доступ, можно настроить правила в iptables. Например, можно заблокировать определённый IP-адрес, чтобы этот компьютер не мог соединиться с вашим. Также можно разрешить доступ только к конкретным портам, если вас интересует безопасность отдельных программ.

Таким образом, iptables помогает контролировать, какие данные проходят через вашу сеть и какие нет.

Например:

1. Заблокируйте все входящие подключения:
iptables -P INPUT DROP
2. Разрешите входящие подключения от определенного IP (например, 192.168.1.100):
iptables -A INPUT -s 192.168.1.100 -j ACCEPT
3. Разрешите входящие подключения по определенному порту (например, 22 для SSH):
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
4. Запишите изменения:
service iptables save
Естественно, если есть возможность, то блокируем все порты и разрешаем доступ к ним только с необходимых адресов.

Если блокировка портов не применима, то для блокировки брутфорсеров можно воспользоваться утилитой fail2ban

Fail2ban помогает защитить ваш сервер от атак типа "брутфорс", когда кто-то просто перебирает множество паролей, чтобы взломать вашу систему. Fail2ban следит за лог-файлами (записями обо всем, что происходит на вашем сервере). Если кто-то несколько раз подряд неправильно вводит пароль, программа обнаруживает это. Fail2ban временно блокирует этот IP-адрес, чтобы предотвратить дальнейшие попытки взлома.

Например:

1. Установите fail2ban на сервер:
sudo apt-get install fail2ban
2. Создайте файл конфигурации для sshd:
sudo nano /etc/fail2ban/jail.local
3. Добавьте следующие строки в файл jail.local:
[sshd]
enabled = true
port = ssh
filter = sshd
logpath = /var/log/auth.log
maxretry = 5
bantime = 600
4. Перезапустите fail2ban для применения настроек:
sudo systemctl restart fail2ban
Также безопасность может повысить использование контейнеризации, например докер. Так как мы рассматриваем веб сервер, то тот же nginx можно запустить в контейнере, изолируя его от хостовой системы.

Пароли, если их необходимо использовать, желательно на каждый сервис генерировать свой, чтобы не было повторяющихся, и хранить их в безопасном месте (желательно в голове 😀).

Также хорошей практикой будет блокирование возможности сканирования системы для уточнения версий ПО и библиотек, ядра и прочей полезной для вредителей информации.

Запуск программ в user space выполнять не от root, а от обычного пользователя (если, конечно, не требуется другое).

Ну и главный совет - это бекапы. Необходимо создавать бекапы и проверять их работоспособность.
Экспертиза
Читайте также
Как выбрать антибот-сервис
На своем опыте мы видим, что часто клиенты не знают, на какие параметры защиты стоит обратить внимание, чтобы выбрать подходящий им сервис. Рассказываем об основных требованиях, которым должно отвечать антибот-решение!
DDoS в каждый дом
По оценкам аналитиков, количество DDoS-атак на российские компании за прошлый год выросло на 53%. При этом на каждую компанию в среднем пришлось около 340 атак
Одного мало. Как и зачем применять двухфакторную аутентификацию
Одним из ключевых средств защиты от атак уже долгие годы остается двухфакторная аутентификация пользователей. Расскажем о ней подробнее.
СМС-фрод: почему от него страдают не только клиенты, но и бизнес
Злоумышленники могут навредить бизнесу с помощью массовой рассылки фейковых SMS-сообщений. Анализируем механизмы смс-фрода и методы защиты от таких атак.