Защита wordpress
Это шпаргалка по защите wordpress от взлома.
После инсталляции заменить salt keys
Для этого сходить по ссылке https://api.wordpress.org/secret-key/1.1/salt/ и вставить ключи в wp-config.php
Установить правильные права на каталоги
Завести пользователя wpadmin, дать ему группу под которой запущен apache (apache для CentOs или www-data для Ubuntu), установить владельцем файлов этого пользователя. На каталоги и файлы даем разрешение на запись только владельцу, группе и остальным только чтение (за исключением папки uploads).
adduser -g wpadmin usermod -g www-data wpadmin
Скрипт для установки прав на каталоги SetPermissionsOnHtml.sh:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | #! /bin/bash USER='pmadmin' GROUP='apache' WWW_DIR='/var/www' cd $WWW_DIR || exit echo "Set owner to files.." find . -type f -exec chown $USER:$GROUP {} \; echo "Set permissions to files.." find . -type f -exec chmod 644 {} \; find . -type f | grep -i upload | xargs chmod 666 echo "Set permissions to folders.." find . -type d -exec chmod 755 {} \; echo "Set owner to folders.." find . -type d -exec chown $USER:$GROUP {} \; find . -type d | grep -i upload | xargs chmod 775 find . -type d | grep -i cache | xargs chmod 775 echo "Set owner and permission to .htaccess files" find $WWW_DIR -type f -name .htaccess -exec chown pmadmin:root {} \; find $WWW_DIR -type f -name .htaccess -exec chmod 644 {} \; echo "Done!" |
Отключить использование .htaccess, использовать конфиг апача вместо .htaccess
Отключить использование .htaccess добавив опцию AllowOverride None
в VirtualHost (в раздел Directory /var/www/html
):
Добавить в VirtualHost следующие опции:
<Files .htaccess> Order allow,deny Deny from all </Files> <Files wp-config.php> order allow,deny deny from all </Files> <Directory /var/www/html/wp-content/uploads> php_flag engine off Options -ExecCGI <FilesMatch \.php$> RemoveHandler .php RemoveType php SetHandler application/x-httpd-php-source </FilesMatch> </Directory> <Directory /var/www/html> AllowOverride None Options All -Indexes # Block the include-only files. RewriteEngine On RewriteBase / RewriteRule ^wp-admin/includes/ - [F,L] RewriteRule !^wp-includes/ - [S=3] RewriteRule ^wp-includes/[^/]+\.php$ - [F,L] RewriteRule ^wp-includes/js/tinymce/langs/.+\.php - [F,L] RewriteRule ^wp-includes/theme-compat/ - [F,L] # secure XSS injections RewriteCond %{QUERY_STRING} (\<|%3C).*script.*(\>|%3E) [NC,OR] RewriteCond %{QUERY_STRING} GLOBALS(=|\[|\%[0-9A-Z]{0,2}) [OR] RewriteCond %{QUERY_STRING} _REQUEST(=|\[|\%[0-9A-Z]{0,2}) RewriteRule ^(.*)$ index.php [F,L] </Directory>
Закрыть доступ к wp-admin
Добавить в VirtualHost:
<Directory /var/www/html/blog/wp-admin> Order deny,allow Allow from 192.168.1.0/24 Deny from All </Directory>
Отключить функционал pingback (xmlrpc.php)
Создать файл wp-content/mu-plugins/xmlrpc_off.php
:
<?php /* Plugin Name: pingback_off Version: 0.1 Description: xmlrpc setting Plugin URI: Author: Trend Author URI: http://trendwebsites.ru */ add_filter( 'xmlrpc_methods', 'remove_xmlrpc_pingback_ping' ); function remove_xmlrpc_pingback_ping( $methods ) { unset( $methods['pingback.ping'] ); return $methods; } ; add_filter( 'xmlrpc_methods', 'Remove_Unneeded_XMLRPC' ); function Remove_Unneeded_XMLRPC( $methods ) { unset( $methods['wp.getUsersBlogs'] ); return $methods; } ; add_filter( 'wp_headers', 'yourprefix_remove_x_pingback' ); function yourprefix_remove_x_pingback( $headers ) { unset( $headers['X-Pingback'] ); return $headers; } ?>
Вообще закрыть xmlrpc.php
При помощи xmlrpc.php удалено создаются посты в блоге. Как правило этот функционал не используется пользователем, зато прекрасно используется хакерами для взлома.
# Block WordPress xmlrpc.php requests <Files xmlrpc.php> order deny,allow deny from all allow from 123.123.123.123 </Files>
Настроить SeLinux
Отдельная статья: SELinux - настройки для Apache
Установить и настроить aide
Отдельная статья: Настройка AIDE в CentOs
Включить логирование трафика на уровне iptables
Отдельная статья: Мониторим взлом web сервера по исходящим соединениям