WordPress Xmlrpc Saldırısını Engelleme
WordPress xmlrpc.php Saldırısı Nasıl Önlenir?
WordPress kullanıcıları için güvenlik, her zaman kritik bir konudur. Birçok WordPress sitesi, xmlrpc.php dosyası üzerinden yapılan saldırılara maruz kalabilmektedir. Bugün, bu yazıda xmlrpc.php saldırıları nasıl önlenir sorusuna detaylı bir yanıt vereceğiz.
xmlrpc.php Nedir?
xmlrpc.php, WordPress sitelerinin farklı uygulama ve hizmetlerle uzaktan iletişim kurmasını sağlayan bir dosyadır. Bu dosya, uzaktan erişim protokolü olan XML-RPC’yi kullanarak sitenize erişim sağlar. Örneğin, mobil uygulamalar veya harici blog yazılımı gibi hizmetler ile siteye bağlanmak bu dosya üzerinden gerçekleşir.
Her ne kadar xmlrpc.php dosyası yararlı bir işlev sunsa da, aynı zamanda siber saldırılara açık bir kapı bırakabilir. Bu dosya üzerinden yapılan yaygın saldırılar arasında Brute Force (Kaba Kuvvet) ve DDoS (Dağıtık Hizmet Engelleme) saldırıları bulunmaktadır. Bu saldırılar, sitenizin yavaşlamasına veya erişilemez hale gelmesine neden olabilir.
xmlrpc.php Dosyası Üzerinden Yapılan Saldırı Türleri
- Brute Force (Kaba Kuvvet) Saldırıları: Kötü niyetli kişiler, xmlrpc.php dosyasını kullanarak sitenize çok sayıda oturum açma denemesi yapar. Genellikle şifreleri deneme yanılma yoluyla bulmaya çalışırlar.
- DDoS Saldırıları: Aynı dosya üzerinden çok sayıda istek gönderilerek sitenizin aşırı yüklenmesi sağlanır. Bu da sitenizin yavaşlamasına veya tamamen çökmesine yol açar.
- Pingback Saldırıları: XML-RPC, pingback adını verdiğimiz bir özelliği de destekler. Bu özellik üzerinden sahte pingback istekleri ile siteniz saldırıya uğrayabilir ve bu da DDoS saldırılarına benzer bir sonuç doğurabilir.
xmlrpc.php Saldırılarını Önleme Yöntemleri
- xmlrpc.php Dosyasını Devre Dışı Bırakmak Eğer siteniz xmlrpc.php dosyasına gerçekten ihtiyaç duymuyorsa, bu dosyayı tamamen devre dışı bırakabilirsiniz. Bunun için aşağıdaki kodu WordPress sitenizin
.htaccess
dosyasına eklemeniz yeterli olacaktır.
<Files xmlrpc.php> Order Deny,Allow Deny from all </Files>
Bu kod, xmlrpc.php dosyasına yapılan tüm istekleri engeller ve sitenizi bu dosya üzerinden yapılan saldırılardan korur.
Ancak sunucu sahipleri birden fazla wordpress site barındırıyorlar ise tek tek yapmak oldukça zahmetli olacaktır bunun için sizlere basit kullanışlı bir bash script ile bu durumdan kendini nasıl kurtarabilirsiniz onu anlatacağım evet şimdi basit kullanışlı bash script oluşturalım öncelikle putty aracılığı ile ssh login olalım ardından aşşağıdaki kodu komut satırına uygulayalım.
nano xmlrpc.sh
yukarıdaki komutu yazdıktan sonra aşşağıdaki bash scriptimizin kodunu kopyalayıp yapıştıralım.
#!/bin/bash # Ana kullanıcı dizini (cPanel kullanıcı dizinlerinin bulunduğu yer ) BASE_DIR="/home" # Kullanıcı dizinlerini bul for user_dir in "$BASE_DIR"/*; do if [ -d "$user_dir" ]; then # Her kullanıcının public_html dizinini tanımla PUBLIC_HTML_DIR="$user_dir/public_html" # Eğer public_html dizini varsa if [ -d "$PUBLIC_HTML_DIR" ]; then echo "Processing $PUBLIC_HTML_DIR" # WordPress sitelerini tanımlamak için dosya/dizin kontrolleri if [ -f "$PUBLIC_HTML_DIR/wp-config.php" ] || [ -d "$PUBLIC_HTML_DIR/wp-content" ] || [ -d "$PUBLIC_HTML_DIR/wp-includes" ]; then echo "WordPress installation detected in $PUBLIC_HTML_DIR" # .htaccess dosyalarını bul ve işleme al find "$PUBLIC_HTML_DIR" -name ".htaccess" | while read htaccess_file; do # Yedekleme dosyasının yolunu belirle backup_file="${htaccess_file}.backup" # .htaccess dosyasının yedeğini al if [ -f "$htaccess_file" ]; then echo "Backing up $htaccess_file to $backup_file" cp "$htaccess_file" "$backup_file" # XML-RPC engelleme kuralını ekle if ! grep -q "XML-RPC" "$htaccess_file"; then echo "Blocking XML-RPC in $htaccess_file" echo -e "\n# Block XML-RPC" >> "$htaccess_file" echo "RewriteEngine On" >> "$htaccess_file" echo "RewriteCond %{REQUEST_URI} ^/xmlrpc\.php [NC]" >> "$htaccess_file" echo "RewriteRule .* - [F,L]" >> "$htaccess_file" else echo "XML-RPC block already present in $htaccess_file" fi fi done else echo "WordPress kurulumu bulunamadı $PUBLIC_HTML_DIR" fi else echo "public_html dizini bulunamadı $user_dir" fi else echo "$user_dir is not a directory" fi done
Yukarıdaki kodu yapıştırdıktan sonra CTRL + O tuşuna basarak değişiklikleri kaydedebilirsiniz. Ardından CTRL + X tuşuna basın. Eğer değişiklik varsa kaydetmeyi isteyip istemediğinizi soracaktır. Evet için Y, veya Hayır için N yazın ve Enter tuşuna basın.
Ardından ise xmlrpc.sh çalıştırabilmek için izin verelim onuda aşşağıda verdiğim şekilde izin verebiliriz.
chmod +x xmlrpc.sh
izinlerimizi verdikten sonra sıra geldi bash scriptimizi çalıştırmaya.
sh xmlrpc.sh
komutu ile xmlrpc bash scriptimizi çalıştırabilirim bash script içinde cpanel sunucular içinde wordpress olan tüm siteleri tarayıp ardında wordpress olan sitelere xmlrpc için kural oluşturacak. Merak etmeyin bu kuralı oluştururken her ihtimale karşı script eski htaccess dosyanızın yedeğinide almış olacak. Bu şekilde bir nebzede olsa xmlrpc.php saldırılarından kendimizi arındırmış olacağız.
pleks sunucular için ise bash scripti aşşağıda veriyorum geri kalan herşey yukarıda belirttiğim gibi aynıdır.
#!/bin/bash # Ana dizin (Plesk kullanıcı dizinlerinin bulunduğu yer) BASE_DIR="/var/www/vhosts" # Kullanıcı dizinlerini bul for user_dir in "$BASE_DIR"/*; do if [ -d "$user_dir" ]; then # Her kullanıcının web dizinini tanımla WEB_ROOT_DIR="$user_dir/httpdocs" # Plesk'te varsayılan dizin genellikle httpdocs'dur # Eğer httpdocs dizini varsa if [ -d "$WEB_ROOT_DIR" ]; then echo "Processing $WEB_ROOT_DIR" # WordPress sitelerini tanımlamak için dosya/dizin kontrolleri if [ -f "$WEB_ROOT_DIR/wp-config.php" ] || [ -d "$WEB_ROOT_DIR/wp-content" ] || [ -d "$WEB_ROOT_DIR/wp-includes" ]; then echo "WordPress installation detected in $WEB_ROOT_DIR" # .htaccess dosyalarını bul ve işleme al find "$WEB_ROOT_DIR" -name ".htaccess" | while read htaccess_file; do # Yedekleme dosyasının yolunu belirle backup_file="${htaccess_file}.backup" # .htaccess dosyasının yedeğini al if [ -f "$htaccess_file" ]; then echo "Backing up $htaccess_file to $backup_file" cp "$htaccess_file" "$backup_file" # XML-RPC engelleme kuralını ekle if ! grep -q "XML-RPC" "$htaccess_file"; then echo "Blocking XML-RPC in $htaccess_file" echo -e "\n# Block XML-RPC" >> "$htaccess_file" echo "RewriteEngine On" >> "$htaccess_file" echo "RewriteCond %{REQUEST_URI} ^/xmlrpc\.php [NC]" >> "$htaccess_file" echo "RewriteRule .* - [F,L]" >> "$htaccess_file" else echo "XML-RPC block already present in $htaccess_file" fi fi done else echo "WordPress kurulumu bulunamadı $WEB_ROOT_DIR" fi else echo "httpdocs dizini bulunamadı $user_dir" fi else echo "$user_dir is not a directory" fi done
İçindekiler