- Хостинг
- Услуги
- Помощь
- Акции
Помощь
Аудит безопасности сервера
Проводите аудит безопасности сервера раз в месяц для своевременного обнаружения возможных проблем, связанных с проникновением злоумышленников на сервер.
Если вы не видите никаких признаков сторонней активности на VPS или сайте, выполните следующий ряд проверок и корректив для защиты сервера от взлома.
Настройки на прикладном уровне
Если на сервере установлены CMS, то проверьте, установлены ли все последние обновления.
Joomla
В корневой директории сайта найдите файл changelog.txt, в котором отыщите информацию о версии CMS. Если она устарела, обновите Joomla.
Wordpress
Выполните поиск файла wp-includes/version.php, в котором отыщите информацию о версии CMS. Если она устарела, обновите Wordpress.
DLE
Выполните поиск файла engine/data/config.php, отыщите строчку version_id и убедитесь, что версия не устарела.
Также проверьте файлы engine/ajax/updates.php и upgrade/index.php (параметр $dle_version).
1C-Битрикс
Выполните поиск файла /bitrix/modules/main/classes/general/version.php, в котором отыщите информацию о версии CMS. Также проверьте файл /bitrix/admin/update_system.php. Если версия устарела, обновите 1C-Битрикс.
Drupal
В корневой директории сайта найдите файл changelog.txt, в котором отыщите информацию о версии CMS. Если она устарела, обновите Drupal.
Проверьте версию ядра в файле /modules/system/system.info.
Также вы можете обнаружить версию CMS через панель управления.
Выполните проверку веб-сервера.
Apache
Откройте конфигурационный файл Apache (в зависимости от версии это могут быть файлы httpd.conf, httpd2.conf, apache.conf, apache2.conf) и проверьте, есть ли в нем директива, отключающая вывод информации о версии веб-сервера:
ServerTokens Prod
Если этой директивы нет, то добавьте и сохраните файл.
Выполните поиск файла secure.conf, откройте его для просмотра и сверьте его содержимое со следующим примером:
<Directory /home/*> Options +Includes -FollowSymLinks +SymLinksIfOwnerMatch AllowOverride FileInfo AuthConfig Limit Indexes Options Order allow,deny Allow from all </Directory> <IfModule php5_module> php_admin_value open_basedir "." </IfModule> <Directory /home/*/data/www/*/cgi-bin> Options -Indexes </Directory> Action php-cgi /php-bin/php
В вашем secure.conf не должно быть существенных отличий от приведенного примера.
Проверьте установленный МРМ командой
apachectl -V
Для более прочной безопасности используйте mpm_itk, если нет острой необходимости в mpm_prefork.
Если вы хотите изменить МРМ, выполните переустановку, предварительно сделав резервные копии конфигурационных файлов. После переустановки проверьте, является ли владельцем сайта и всех его директорий пользователь.
Nginx
Откройте конфигурационный файл веб-сервера (nginx.conf), перейдите в секцию http и проверьте, есть ли в ней директивы, которые лимитируют количество подключений с одного IP-адреса:
limit_zone slimits $binary_remote_addr 5m; limit_conn slimits 10; или (для последних версий) limit_conn_zone $binary_remote_addr zone=addr:10m; limit_conn addr 10;
Если этих директив нет, то добавьте и сохраните файл.
Заблокируйте некоторые агенты пользователя (user agents) для блокировки нежелательного трафика. В секцию http конфигурационного файла Nginx добавьте директиву
if ($http_user_agent ~* LWP::Simple|BBBike|wget|msnbot) {return 403;}
Заблокируйте ссылочный спам (referral spam), добавив в секцию http конфигурационного файла Nginx директиву
if($http_referer ~*(babes|forsale|girl|jewelry|love|nudit|organic|poker|porn|sex|teen) ){return 403;}
ISPmanager
В панели управления ISPmanager выполните следующие проверки.
Проверьте, ограничен ли доступ к панели управления по IP-адресу.
Настройте резервное копирование данных, если оно не включено. Мы рекомендуем использовать внешний диск для бэкапа, чтобы исключить потерю данных вместе с архивом.
PHP
Откройте конфигурационный файл php.ini и добавьте следующие директивы.
expose_php=Off - выключение передачи информации о версии PHP в HTTP-заголовке; sql.safe_mode=On - включение SQL safe-mode; post_max_size=8M - ограничение размера передаваемых методом POST данных; disable_functions exec, system, passthru, proc_open, shell_exec - отключение некоторых функций в целях безопасности.
NTP
В конфигурационный файл NTP (по умолчанию /etc/ntp.conf) добавьте строки, запрещающие рекурсивные запросы:
restrict default kod limited nomodify notrap nopeer noquery restrict -6 default kod limited nomodify notrap nopeer noquery restrict 127.0.0.1 restrict -6 ::1
Bind
В файл named.conf поместите следующие строки, запрещающие рекурсивные запросы:
allow-recursion { 127.0.0.1; 82.146.32.0/19; 78.24.216.0/21; 92.63.96.0/20; 62.109.0.0/19; 188.120.224.0/19; 149.154.64.0/21; 37.230.112.0/21; 94.250.248.0/21; };
Проверка владельца директории сайта
Проверьте, кому принадлежит основная директория сайта и все ее поддиректории.
В панели инструментов ISPmanager перейдите в раздел “Система” -> “Менеджер файлов” и откройте директорию сайта. Убедитесь, что в столбцах “Владелец” и “Группа” стоит пользователь-владелец сайта. Чтобы изменить эти атрибуты, нажмите кнопку “Атрибуты” на панели инструментов.
Допустимые имена владельца сайта apache, www, www-data, если вы используете mpm_prefork. Мы рекомендуем использовать mpm_itk для укрепления безопасности.
Если сайт содержит папки общего доступа (например, upload, tmp), то для них допустимо имя владельца 777. Убедитесь, что этот пользователь установлен только на нужные директории, выполнив команду
find ./ -perm 0777
Она отыщет все папки и файлы, владельцем которых является 777.
Настройки на уровне операционной системы
rkhunter
Используйте утилиту rkhunter для выявления потенциальных уязвимостей сервера.
Для установки утилиты используйте команду:
yum install rkhunter - ОС CentOS apt-get install rkhunter - ОС Debian/Ubuntu make all install clean -C /usr/ports/security/rkhunter или pkg install rkhunter - ОС FreeBSD
Для обновления базы этой утилиты выполните команды
rkhunter --update
rkhunter --propupd
Выполните проверку системы командой
rkhunter -c --cs2
В процессе проверки несколько раз вам необходимо нажать клавишу Enter для продолжения. По окончании появится сводная информация о результате проверки.
Результаты проверки помещаются в лог файл /var/log/rkhunter/rkhunter.log, просмотрите его на предмет предупреждений и ошибок.
sysctl
Используйте утилиту sysctl для управления параметрами ядра системы. Откройте конфигурационный файл утилиты /etc/sysctl.conf и внесите следующие строки.
Отключите возможность маршрутизации входящего трафика, поскольку злоумышленник может использовать эту возможность для подмены IP-адресов:
net.ipv4.conf.all.accept_source_route = 0
Отключите ответы на ICMP-запросы по широковещательному каналу - это поможет предотвратить smurf-атаки:
net.ipv4.icmp_echo_ignore_broadcasts = 1
Отключите ведение журнала о неправильных сообщениях об ошибках:
net.ipv4.icmp_ignore_bogus_error_responses = 1
Включите защиту от переполнения памяти:
kernel.exec-shield = 1 (CentOS)
Включите использование памяти ASLR:
kernel.randomize_va_space = 2
Отключите возможность переадресации ICMP-сообщений:
net.ipv4.conf.all.accept_redirects = 0 net.ipv4.conf.default.accept_redirects = 0
Если вы не используете на сервере VPN или другие специальные приложения, отключите форвардинг:
net.ipv4.conf.all.forwarding = 0
Включите защиту от SYN-флуда - использование SYN cookies:
net.ipv4.tcp_syncookies = 1
Установите количество попыток передачи SYN-ACK пакетов:
net.ipv4.tcp_synack_retries = 3
Установите время, через которое сервер проверяет соединение, если оно давно не используется (по умолчанию это 2 часа):
net.ipv4.tcp_keepalive_time=1800
Установите количество проверок соединения прежде, чем оно будет разорвано:
net.ipv4.tcp_keepalive_probes=3
Установите время пребывания сокета в состоянии FIN-WAIT-2:
net.ipv4.tcp_fin_timeout=30
fstab
Проверьте конфигурационный файл fstab (/etc/fstab), в котором содержится информация о дисках, разделах и устройствах хранения, указывается как они монтируются в систему.
vi /etc/fstab
Обратите внимание, что некорневые разделы должны иметь параметр nodev. Если /tmp примонтирована отдельным разделом, добавьте nodev, noexec, nosuid для этого раздела.
rsyslog
Проверьте системный лог файл /etc/rsyslog.conf.
vi /etc/rsyslog.conf
Обратите внимание на следующие строки, которые должны иметь вид:
Также убедитесь, что лог файл не пустой, т.е. логирование корректно ведется.
sudo
Проверьте, корректно ли настроена утилита sudo (или su), которая позволяет пользователю запускать некоторые команды и программы с правами суперпользователя root. Настройки этой утилиты находятся в конфигурационном файле /etc/sudoers или /usr/local/etc/sudoers. Откройте его для редактирования
vi /etc/sudoers
Найдите строку, которая прописана по умолчанию и разрешает суперпользователю root запускать любые команды.
Для того, чтоб наделить всех пользователей привилегией запускать команды от имени root, добавьте ниже строку:
ALL ALL=/bin/su или ALL ALL=/usr/bin/su
Для того, чтоб наделить определенного пользователя привилегией запускать только некоторые команды от имени root, добавьте строку:
%users ALL=/sbin/mount - группа users сможет использовать sudo только с командой mount user ALL=/sbin/mount - пользователь user сможет использовать sudo только с командой mount
Настройки на сетевом уровне
Проверьте, какие порты на сервере открыты и какие службы их используют, выполнив команду
netstat -tuplnw | awk '{print $4,$NF}' | sort | uniq
Например, запись 127.0.0.1:53 748/named означает, что служба named использует 53 порт. Проверьте, что среди работающих служб находятся только необходимые, отключите все остальные.
FTP
Установите диапазон используемых портов для пассивного режима FTP. Для этого откройте для редактирования конфигурационный файл вашего FTP-сервера и добавьте строки:
для vsftpd.conf:
pasv_min_port=1028 pasv_max_port=1048
для proftpd.conf:
PassivePorts 1028 1048
Без особой необходимости не используйте FTP-протокол, вместо него работайте по SFTP. Если все же необходим FTP, добавьте следующие строки в конфигурационный файл:
для vsftpd.conf:
xferlog_enable=YES (ведение лог-файла по ftp) anonymous_enable=NO (запрет подключений анонимных пользователей) anon_upload_enable=NO anon_mkdir_write_enable=NO
для proftpd.conf:
в секции <Anonymous ~username>...</Anonymous> удалите все секции <Limit…> и добавьте строки
<Limit LOGIN> DenyAll </Limit> <Limit ALL> DenyAll </Limit>
iptables
Проверьте, правильно ли настроен фаервол. Для iptables выполните команду
iptables -nL
Эта команда выводит в командную строку все правила фаервола iptables. Также эти правила можно просмотреть и отредактировать в конфигурационном файле фаервола /etc/sysconfig/iptables - для ОС CentOS, /etc/network/if-up.d/ispmgrfw - для ОС Debian/Ubuntu.
В правилах фаервола закройте все порты, кроме тех, которые используются работающими на сервере службами. Для этого измените строки
:INPUT ACCEPT [0:0] :FORWARD ACCEPT [0:0] :OUTPUT ACCEPT [0:0] на :INPUT DROP [0:0] :FORWARD DROP [0:0] :OUTPUT DROP [0:0]
Чтобы открыть нужные порты добавьте строки вида
-A INPUT -p tcp -m tcp --dport 53 -j ACCEPT -A INPUT -p udp -m udp --dport 53 -j ACCEPT -A INPUT -p tcp -m multiport --sports 53,80,25,443,953 -j ACCEPT
где 53 - номер порта который нужно открыть.
Перед тем, как вносить изменения в конфигурационный файл фаервола, сделайте копию работающего файла.
Правила фаервола можно настраивать из панели управления ISPmanager.
SSH
Откройте конфигурационный файл SSH:
vi /etc/ssh/sshd_config
Проверьте, что следующие строки не закоментированы:
Protocol 2 (для использования второй версии протокола) IgnoreRhosts yes (не использовать .rhost файл) HostbasedAuthentication no (не аутентифицировать хост) PermitRootLogin no (запрет доступа суперпользователя root) PermitEmptyPasswords no (не использовать пустые пароли) PermitUserEnvironment no (запрет пользователю устанавливать переменные окружения) PasswordAuthentication yes (разрешить аутентификацию по паролю)
Включите SFTP, добавив в sshd_config строку:
Subsystem sftp /usr/lib/openssh/sftp-server
Прочие настройки и рекомендации
Почтовая очередь
Проверьте почтовую очередь на предмет переполнения и убедитесь, что среди сообщений нет спама.
Выполните команду mailq и просмотрите список сообщений. Если список очень большой, то выборочно проверьте сообщения, которые могут быть спамом. По идентификатору (например, BD65F10DEE4) определите отправителя письма. Команда
exim -Mvh ID_сообщения
выводит заголовок письма, а команда
exim -Mvb ID_сообщения
даст просмотреть тело сообщения.
Среди заголовков сообщения поле From: содержит отправителя, а X-PHP-Originating-Script - скрипт, которым было отправлено сообщение.
Программное обеспечение
Проверьте программное обеспечение сервера на предмет уязвимостей.
ОС CentOS
Выполните команду, которая выводит перечень файлов установленного программного обеспечения недавно модифицированных:
rpm -qVa - для вывода всех файлов, rpm -qVa | awk '$2!="c" {print $0}' - для вывода файлов за исключением логов.
Проанализируйте, какие файлы и как были изменены, используя следующие значения параметров:
S - модифицирован размер файла M - модифицированы права, установленные по умолчанию 5 - модифицирована контрольная сумма MD5 D - модифицированы major/minor номера для устройства L - модифицирована символическая ссылка U - модифицирован владелец файла G - модифицирована группа T - модифицирована дата изменения файла (mtime) c - конфигурационный файл d - файл документации g - файл, который не включен в пакет l - файл лицензии r - README файл
Например, строка S.5....T. c /etc/httpd/conf/httpd.conf означает, что httpd.conf является конфигурационным файлом, был изменен его размер, контрольная сумма и дата последнего изменения. Поскольку это конфигурационный файл, то эти изменения не вызывают подозрений.
Обратите внимание на файлы, у которых без видимой причины изменены значения контрольной суммы. Для таких файлов выполните команду:
stat /usr/sbin/sshd && file /usr/sbin/sshd где usr/sbin/sshd - путь к файлу.
В результате команды на экран выводится подробная информация об изменении этого файла.
Выполнит команду:
yum --security update
для установки security-update.
ОС Debian
Выполните команды, которые проверяют контрольные суммы MD5 для установленных программ:
# apt-get install debsums # debsums -c
Выполните следующие команды для проверки security-update:
# echo ‘deb http://security.debian.org wheezy/updates main contrib non-free’ >> /etc/apt/sources.list # grep security /etc/apt/sources.list > /etc/apt/secsrc.list # apt-get -s -o Dir::Etc::sourcelist="secsrc.list" -o Dir::Etc::sourceparts="-" upgrade
Для установки security-update выполните команду:
# apt-get -o Dir::Etc::sourcelist="secsrc.list" -o Dir::Etc::sourceparts="-" upgrade
Проверьте наличие во всех репозиториях сверки gpg, выполнив команды:
# grep -ri gpgcheck /etc/yum.conf # grep -ri gpgcheck /etc/yum.repos.d/ Убедитесь, что строки имеют вид: gpgcheck=1 # grep -ri AllowUnauthenticated /etc/apt/
Строк вида
APT::Get::AllowUnauthenticated "true";
быть не должно.
Неиспользуемые службы
ОС CentOS
Выполните команду, которая выводит список неиспользуемых служб:
chkconfig --list
Для отключения запуска неиспользуемой службы выполните команду:
chkconfig --del service_name где service_name - имя службы.
ОС Debian
Выполните команду, которая выводит список неиспользуемых служб:
sysv-rc-conf
Для отключения запуска неиспользуемой службы выполните команду:
sysv-rc-conf off service_name где service_name - имя службы.