WordPress по умолчанию может использовать различные сетевые порты для подключения к внешним сервисам, обновлений, API и других функций. Однако открытые или неиспользуемые порты могут стать точкой уязвимости, позволяя злоумышленникам получить доступ к вашему сайту или серверу. В этой статье мы подробно разберём, как выявить и отключить ненужные порты в WordPress, а также заблокировать внешние запросы через них.
Почему важно контролировать порты в WordPress? Безопасность и нагрузка
Открытые порты — это потенциальные двери в ваш сервер. Многие атаки на сайты WordPress проводятся именно через уязвимости в сетевых соединениях, особенно если сайт работает на общем хостинге с минимальной защитой. Контроль портов помогает:
- Уменьшить поверхность атаки;
- Ограничить исходящие соединения только доверенными сервисами;
- Снизить вероятность DDoS-атак, связанных с лишними открытыми портами;
- Оптимизировать работу сайта, убрав ненужные внешние запросы.
Часто плагины или темы создают свои запросы к API на определённых портах, которые по умолчанию открыты. Иногда эти порты не нужны и их можно безопасно отключить.
Как проверить, какие порты использует WordPress: диагностика и анализ внешних запросов
Чтобы понять, какие порты задействованы, используйте несколько инструментов и методов:
- WP-CLI: команда
wp cron event listпокажет задачи, которые могут делать запросы; - Плагины для анализа запросов: например, Query Monitor или Debug Bar, которые фиксируют HTTP-запросы и их параметры;
- Логи сервера: в них вы увидите исходящие соединения и порты, если включена соответствующая логика;
- Использование PHP-функций: можно добавить временный код для логирования запросов, сделанных через wp_remote_get/post и другие сетевые функции.
Пример кода для логирования исходящих запросов WordPress (добавьте в functions.php вашей темы):
add_filter('http_api_debug', 'wpsolution_log_http_requests', 10, 5);
function wpsolution_log_http_requests($response, $type, $class, $args, $url) {
error_log("HTTP request to: " . $url . " | Response code: " . wp_remote_retrieve_response_code($response));
return $response;
}
Этот фильтр запишет в error_log все HTTP-запросы, включая адреса и коды ответов, что поможет понять, какие порты используются.
Как удалить или заблокировать порты в WordPress: практические методы
WordPress не управляет портами напрямую — это задача сервера и его сетевой настройки. Однако с помощью настроек PHP, плагинов и конфигурации сервера можно ограничить доступ к портам:
1. Отключение внешних HTTP-запросов через фильтр
Если нужно полностью запретить внешние запросы, можно использовать фильтр pre_http_request. Например:
add_filter('pre_http_request', 'wpsolution_block_external_requests', 10, 3);
function wpsolution_block_external_requests($preempt, $args, $url) {
$allowed_hosts = ['api.wordpress.org', 'your-trusted-domain.com'];
$host = parse_url($url, PHP_URL_HOST);
if (!in_array($host, $allowed_hosts)) {
return new WP_Error('blocked', 'Внешние запросы к этому хосту запрещены');
}
return false; // разрешить запрос
}
Этот код разрешит запросы только к указанным доменам и заблокирует остальные, включая все порты, кроме стандартного 80/443.
2. Использование плагина Clearfy Pro для блокировки ненужных запросов
Плагин Clearfy Pro позволяет отключить запросы к внешним сервисам и API, которые часто используют нестандартные порты. В настройках можно отключить:
- Heartbeat API;
- Автоматические обновления;
- Запросы пингов;
- Реклама и трекеры.
Это снизит количество исходящих соединений и уменьшит риск уязвимостей.
3. Настройка firewall на сервере (iptables, ufw) для блокировки портов
На уровне сервера можно заблокировать порты, которые не должны использоваться WordPress. Например, в Linux с ufw:
sudo ufw deny 8080
sudo ufw deny 3306
sudo ufw deny 21
Важно разрешить порты 80 и 443 для веб-сервера, а все остальные закрыть, если они не используются. Это надежный способ защитить сайт от нежелательных входящих и исходящих соединений.
Примеры: блокировка запросов к нестандартным портам через PHP
Если вам нужно заблокировать в WordPress запросы к определённым портам, можно расширить фильтр pre_http_request следующим образом:
add_filter('pre_http_request', 'wpsolution_block_ports', 10, 3);
function wpsolution_block_ports($preempt, $args, $url) {
$parsed_url = parse_url($url);
if (isset($parsed_url['port'])) {
$blocked_ports = [8080, 3306, 21];
if (in_array($parsed_url['port'], $blocked_ports)) {
return new WP_Error('blocked_port', 'Запросы к порту ' . $parsed_url['port'] . ' заблокированы');
}
}
return false; // разрешить запрос
}
Этот код позволит блокировать именно те порты, которые вы считаете нежелательными для исходящих запросов, тем самым повышая безопасность.
Рекомендации по безопасности и мониторингу портов в WordPress
Для комплексной защиты сайта используйте следующие подходы:
- Регулярно проверяйте установленные плагины и темы на предмет внешних запросов;
- Используйте специализированные плагины для безопасности, например, Wordfence или iThemes Security;
- Настраивайте firewall на уровне сервера и хостинга;
- Внедряйте логирование и мониторинг HTTP-запросов;
- Используйте сервисы типа WPRemark для анализа качества и безопасности контента и запросов.
Только комплексный подход обеспечит максимальную защиту от уязвимостей, связанных с открытыми портами и внешними запросами в WordPress.