Variti ежедневно делает интернет чище и безопаснее – с помощью фильтрации ботов.
В то же время, безопасность должна обеспечиваться на всех уровнях. Для этого мы подготовили базовую, но от того не менее полезную инструкцию, где поэтапно рассказываем, как защитить веб-сервер.
Этот чек-лист, или, как мы его назвали, crush course, поможет администраторам проверить, обезопасен ли ресурс от простых, но от того не менее вредоносных атак. Инструкция будет полезна и тем, кто только собирается вести бизнес в интернете – и пока не успел подключить сервисы защиты.
Организуем вход на сервер по ключам по ssh.
1. Создайте пару ключей (открытый и закрытый) на своем компьютере. Для этого можно использовать команду:
ssh-keygen -t rsa -b 4096
2. Скопируйте открытый ключ на сервер. Это можно сделать с помощью команды:
ssh-copy-id user@server
Замените user на ваше имя пользователя, а server на адрес вашего сервера.
3. Подключитесь к серверу по SSH с помощью закрытого ключа. Обычная команда для этого:
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.
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.
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.
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 для редактирования
Например:
Откройте файл 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:
1. Убедитесь, что ваша файловая система поддерживает ACL. Обычно файловая система ext4 это позволяет, но нужно проверить, указана ли опция acl при монтировании. Это можно сделать с помощью команды mount и поиска в выводе acl:
mount | grep acl
Если опции acl там нет, нужно изменить настройки монтирования в файле /etc/fstab.
2. Установите нужные пакеты. На большинстве систем это можно сделать так:
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. Затем выполните команду для перемонтирования:
было:
/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. Создание нового домена и типов
Например:
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. Например, можно заблокировать определённый 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 на сервер:
Например:
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, а от обычного пользователя (если, конечно, не требуется другое).
Ну и главный совет - это бекапы. Необходимо создавать бекапы и проверять их работоспособность.
Пароли, если их необходимо использовать, желательно на каждый сервис генерировать свой, чтобы не было повторяющихся, и хранить их в безопасном месте (желательно в голове 😀).
Также хорошей практикой будет блокирование возможности сканирования системы для уточнения версий ПО и библиотек, ядра и прочей полезной для вредителей информации.
Запуск программ в user space выполнять не от root, а от обычного пользователя (если, конечно, не требуется другое).
Ну и главный совет - это бекапы. Необходимо создавать бекапы и проверять их работоспособность.