В этой статье мы рассмотрим основные концепции и конкретные настройки, которые помогут повысить защищенность вашего CentOS сервера в Интернете. Использование данных подходов позволит повысить защиту сервера от взлома и заражения. Инструкция в большей части универсальна и основные моменты подойдут для повышения безопасности любого Linux сервера.
При установке CentOS (и любого дистрибутива Linux) на этапе разбивки диска, не создавайте один раздел, а отделите web -пространство от основного раздела, также создайте системные разделы:
При изоляции разделов злоумышленники не смогут подняться выше директории web при взломе сайта и внедрения в него вредоносных скриптов.
Используйте специальные опции для безопасного монтирования некоторых разделов диска:
Данные параметры могут быть установлены на директорию, только если она существует как отдельный раздел. Вы можете настроить /etc/fstab согласно следующим рекомендациям, если таковые разделы на диске у вас существуют:
При усановке сервера никогда не используйте дистрибутивы ОС, собранные неизвестными лицами. Скачивайте дистрибутивы только с официальных зеркал и не пользуйтесь чужими кикстарт файлами для установки. Если вы не разбираетесь в чужом коде, лучше вообще отменить эту затею и установить все вручную, либо проанализировать кикстарт файл полностью, чтобы не установить что-то вредоносное на свой сервер.
Устанавливайте только минимально необходимое ПО. Установка и настройка только по делу и с помощью установщика yum и dnf . Проверьте все установленное ПО и удалите ненужные пакеты:
yum list installed
yum list packageName
yum remove packageName
Используйте только официальные и доверенные репозитории пакетов .
Не используйте нешифрованные протоколы FTP, Telnet, Rlogin, Rsh.
Отключайте неиспользуемые сервисы на своем сервере, если в данный момент удаление сервиса вам не подходит.
Чтобы проверить список всех сервисов, используйте команду:
systemctl list-unit-files --type=service
Чтобы отключить и убрать службу из автозагрузки в CentOS используется systemctl :
systemctl stop service
systemctl disable service
Например, для отключения сервиса httpd используется такая команда:
systemctl stop httpd.service
systemctl disable httpd.service
Всегда держите в актуальном состоянии установленное программное обеспечение на вашем сервере. Вовремя обновленное ПО, защитит вас от известных уязвимостей. Вы можете настроить автоматическое обновление системы , чтобы каждый раз не выполнять это вручную.
yum update
— обновление системы
Для безопасной авторизации на сервере, используйте приватный ключ. Сгенерируйте ключ с помощью утилиты ssh-keygen:
# ssh-keygen
Generating public/private rsa key pair._x000D_Enter file in which to save the key (/root/.ssh/id_rsa):_x000D_Enter passphrase (empty for no passphrase):_x000D_Enter same passphrase again:_x000D_Your identification has been saved in /root/.ssh/id_rsa._x000D_ Your public key has been saved in /root/.ssh/id_rsa.pub._x000D_The key fingerprint is:_x000D_SHA256:ffIDjWIfOgMZmOVbQmDWaOCADK4G3cYYy0dTIjqLkD8 [email protected]_x000D_The key's randomart image is:_x000D_+---[RSA 2048]----+_x000D_|* +.B=+ |_x000D_|oO @oO. |_x000D_|*.*.B + . |_x000D_|=+ o * . o |_x000D_|+.E + S * o |_x000D_|. . o + * |_x000D_| + . o |_x000D_| o . |_x000D_| |_x000D_+----[SHA256]-----+_x000D_
После генерации, вы можете подключиться с помощью данного ключа к серверу, через ssh -клиент.
Создайте дополнительного пользователя и выполняйте команды через sudo .
sudo groupadd sudo
– создать группу sudo
adduser webmaster
– создать пользователя
passwd webmaster
– поменять пароль
usermod -aG sudo webmaster
— добавить пользователя в группу sudo
В файле /etc/sudoers добавьте строку:
%sudo ALL=(ALL:ALL) ALL
Отключите в настройка ssh -сервера, авторизацию через root и по логину/паролю:
nano /etc/ssh/sshd_config
И изменяем значение указанных ниже строк на:
PermitRootLogin no_x000D_PasswordAuthentication no_x000D_ChallengeResponseAuthentication no_x000D_UsePAM no_x000D_AuthenticationMethods publickey_x000D_PubkeyAuthentication yes_x000D_
Смените стандартный порт для ssh . Порт по умолчанию для ssh , в первую очередь будет подвержен взлому.
Чтобы поменять стандартный порт на ssh , в конфигурационном файле /etc/ssh/sshd_config замените значение в строке:
Port 22
Если вы все же используете пароли для авторизации в Linux, то настройте срок действия пароля через утилиту chage .
Чтобы проверить, сколько дней будет действовать пароль для любого пользователя, используйте команду:
chage -l root
По умолчанию для root у меня было установлено 99999 дней:
# chage -l root
Last password change : never_x000D_Password expires : never_x000D_Password inactive : never_x000D_Account expires : never_x000D_Minimum number of days between password change : 0_x000D_Maximum number of days between password change : 99999_x000D_Number of days of warning before password expires : 7_x000D_
Чтобы изменить срок действия пароля (например 9 дней), воспользуйтесь командой:
chage -M 9 root
Теперь при проверке информации о сроке пароля для пользователя root, информация поменялась:
# chage -l root
Last password change : never_x000D_Password expires : never_x000D_Password inactive : never_x000D_Account expires : never_x000D_Minimum number of days between password change : 0_x000D_Maximum number of days between password change : 9_x000D_Number of days of warning before password expires : 7_x000D_
Больше опций по утилите chage вы можете получить из справки:
man chage
Для блокировки пользователей при вводе неправильного пароля, воспользуйтесь утилитой fail2ban (она позволяет реализовать аналог групповых политик блокировки учетных записией в Windows ). Fail2ban позволяет защитить сервер Linux и службы от подбора паролей.
Для установки fail2ban выполните:
yum install epel-release fail2ban -y
Конфигурационный файл fail2ban расположен в /etc/fail2ban/jail.conf. Настройки, которые мы затронем:
Остальные настройки используются по желанию. Дополнительно вы можете настроить отправку отчетов к себе на почту.
Создайте файл /etc/fail2ban/jail.local и добавьте туда следующие строки:
После изменения конфигурационного файла, перезапустите сервис.
[DEFAULT]_x000D_ignoreip = 127.0.0.1/24_x000D_[ssh-iptables]_x000D_enabled = true_x000D_port = ssh_x000D_filter = sshd_x000D_action = iptables[name=sshd, port=ssh, protocol=tcp]_x000D_logpath = /var/log/secure_x000D_
После чего сохраните файл и перезапустите сервис fail2ban :
systemctl restart fail2ban
Таким образом, мы настроили блокировку пользователей для ssh:
При неправильном вводе пароля, меня заблокировало на 10 минут. Вы можете настроить fail2ban для работы с любым сервисом, который работает с пользователями, например:
Обычно при настройке сервера, я отключаю SELinux , хотя это не рекомендуется. Но настройка SELinux очень специфична и обширна. Настройка SELinux на сервере может затянуться на несколько дней. Если у вас есть время на настройку и отладку системы SELinux, то воспользуйтесь ей для безопасности вашего сервера.
SELinux имеет 3 режима работы:
В режиме enforsing SELinux применяет свою политику в системе и следит за несанкционированным доступом со стороны пользователей. Все попытки регистрируются в логах.
В режиме permissive политика SELinux не применяется, но вся информация фиксируется в логах, после чего вы можете их проанализировать. Данный режим полезен при настройке и отладке системы.
И disabled соответственно вообще отключает SELinux и ее политика не применяется вообще.
Конфигурационный файл SELinux — /etc/selinux/config
Тщательную настройку SELinux можно расписать на несколько статей, если вам нужна подробная информация, можно воспользоваться официальной документацией RedHat . Обычно при настройке сервера, все работает полноценно, я с включенным SELinux замечал, что возникают проблемы с ftp -сервером, а также с некоторым платным ПО.
Проверка статуса:
# sestatus
SELinux status: disabled
Для более удобного изучения логов SELinux рекомендую использовать утилиты aureport и sealer.
Откройте только минимально необходимый набор портов на сервере, которые действительно нужны для работы. Например, для работы web -серверов достаточно открыть 80 и 443. Если вы используете mysql/ mariadb , отключите возможность подключения с удаленных серверов на порт 3306 (если ваша БД используется только локально, не включена в кластер Galera и не испольуется в сценариях репликации ).
Если у вас на компьютере/шлюзе доступа задан статический IP адрес, добавьте в исключения файервола ваш доверенный адрес и подключайтесь к серверу с него. Подробнее о настройке firewalld в CentOS (если вы привыкки к iptables смотрите статью Настройка Linux-файрвола с помощью iptables ).
Чтобы проверить открытые порты на сервере, используйте утилиту netstat :
netstat -tulpn
Не используйте на своем сервере систему X Windows . Удалите все ПО, которое связанно с этой системой, нет необходимости использовать это на Linux сервере:
yum group remove "GNOME Desktop"
yum group remove "KDE Plasma Workspaces"
yum group remove "Server with GUI"
yum group remove "MATE Desktop"
Используйте настройки в файле /etc/sysctl.conf для обеспечения дополнительной безопасности во время загрузки ядра Linux.
Включите execshield :
kernel.exec-shield=1
Отключите IP-маршрутизацию (если ваш сервер не используется как шлюз доступа в Интернет из LAN ):
net.ipv4.conf.all.accept_source_route=0
Включите защиту от спуфинга
net.ipv4.conf.all.rp_filter=1
Включите игнорирование широковещательных запросов
net.ipv4.icmp_echo_ignore_broadcasts=1_x000D_net.ipv4.icmp_ignore_bogus_error_messages=1
Включите регистрацию подозрительных пакетов
net.ipv4.conf.all.log_martians = 1
Запустите поиск файлов без пользователя и группы, такие файлы потенциально несут угрозу и могут быть использованы злоумышленниками. Чтобы найти такие файлы, используйте команду:
find /директория -xdev ( -nouser -o -nogroup ) -print
Если файлы будут найдены, измените на них владельца и группу.
Установите флаг chattr на нужные файлы, чтобы защитить их от модификации. Ни один пользователь, не сможет изменить файл, пока данный флаг установлен. Например:
chattr +i /etc/mysript.sh
Не устанавливайте слишком высокие права на директории и файлы, например, стандартные права для web :
В некоторых случаях, могут быть исключения, но всегда внимательно подходите к этому вопросу. Запретите пользователям выставлять разрешение 777. Вы можете найти такие файлы:
find /home -type f -perm 777
Если вы используете сервер под web , позаботьтесь о настройке web-сервисов. Закройте просмотр содержимого директорий через Options -Indexes , а также добавьте X-frame.
Header always append X-Frame-Options SAMEORIGIN
Данный параметр, запретит открывать страницу во фрейме, это предотвратит встраивание контента вашего сайта на другие сайты.
Отключите показ версии вашего web -сервера. Для apache в конфигурационном файле пропишите:
serverSignature Off
Для nginx в конфигурационном файле в секцию http пропишите:
server_tokens off;
Если вы используете php, запретите небезопасные функции через php.ini :
expose_php=Off
— запретит показ версии php
disable_functions=exec,passthru,shell_exec,system,proc_open,popen
– запретит использование данных функций
Так же настройте лимиты по выполнению скриптов и их размер, это обезопасит вас от мелких атак.
Установите на свой сайт и почту SSL сертификат, чтобы соединение в браузере и при отправке почты, шифровалось. Можно воспользоваться бесплатным сертификатом от Let’s Encrypt , либо приобрести недорогой платный сертификат.
Если на вашем сервере есть консоль для удаленного доступа ILO / IPMI /BMC , закройте доступ к ней из вне, оставьте только ваш доверенный IP , это позволит ограничить себя от лишних проблем.
Если ваш физический сервер размещается вне офиса/дома, закройте BIOS/UEFI паролем.
И главный момент, размещайте свои сервера у проверенных провайдеров.
Конечно не стоит забывать о резервном копировании сервера. Вы можете выполнять резервные копии как всего сервера, так и отдельно взятые файлы или директории (можно настроить бэкап в бесплатные облачные хранилища скриптами ). В случае какого-либо инцидента, у вас всегда под рукой будет актуальная резервная копия, из которой можно развернуть сервер или заменить конфигурационный файлы.
Клиент удаленного рабочего стола (rdp) предоставляет нам возможность войти на сервер терминалов через консоль. Что…
В VMware Workstation есть несколько способов настройки сети гостевой машины: 1) Bridged networking 2) Network…
Встроенный брандмауэр Windows может не только остановить нежелательный трафик на вашем пороге, но и может…
Вопреки распространенному мнению, отключить IPv6 в Windows Vista и Server 2008 это не просто снять…
Параметры экранной заставки для текущего пользователя можно править из системного реестра, для чего: Запустите редактор…
В этой статье расскажу про возможность просмотра журналов событий из командной строки. Эти возможности можно…