Nginx ve PHP Sıkılaştırma

Sıkılaştırma için kullanılacak dağıtım CentOS 7’dir. Sizin kullandığınız dağıtım ile config dosyalarının yerleri değişiklik gösterebilir.

1 – Nginx ve PHP Versiyon Başlığını Gizlemek

Expose

Sızma testlerinin ilk aşamasında hedef hakkında bilgi toplamak çok büyük önem arzetmektedir. Buna güvenlik bakış açısı ile yaklaşacak olursak kullandığımız Web Sunucunun HTTP Versiyon başlığını gizlemek, güvenlik açısından iyi olacaktır.

Nginx İçin;

“/etc/nginx/default.conf” dosyasının server ya da http bloklarından herhangi birine “server_tokens off;” satırını ekleyiniz.

PHP İçin;

“/etc/php.ini” dosyasında “expose_php = On” satırını bulun ve “expose_php = Off” olarak değiştirin.

Fixed

2 – Buffer Boyutlarını Küçültme

Web server’a karşı yapılacak buffer overflow ataklarını engellemek adına tüm clientler için buffer boyutlarını küçültebilirsiniz.

client_body_buffer_size 1K;
client_header_buffer_size 1k;
client_max_body_size 1k;
large_client_header_buffers 2 1k;

3 – Timeout Sürelerini Düşürme

client_body_timeout 10;
client_header_timeout 10;
keepalive_timeout 5 5;
send_timeout 10;

4 – Eş Zamanlı Bağlantı Sayılarını Kontrol Etme

limit_zone slimits $binary_remote_addr 5m;
limit_conn slimits 5;

5 – HTTP Metodlarını Sınırlama

Web uygulamaları için gerekli olan HEAD, POST, GET metodları dışında kalan metodları engellemek, güvenlik açısından doğru bir tercih olacaktır.

“/etc/nginx/conf.d/default.conf” dosyasında server bloğuna;

if ($request_method !~ ^(GET|HEAD|POST)$ ) {
return 444;
}

satırlarını ekleyin. Böylelikle TRACE, OPTIONS, DELETE gibi istemediğimiz HTTP metodlarını engellemiş oluyoruz.

6 – Referans Spamlarını Engelleme

yine “/etc/nginx/conf.d/default.conf” dosyasına aşağıdaki satırları kendinize göre düzenleyip eklerseniz referans spamlarından korunmuş olursunuz.

if ( $http_referer ~* (uygunsuz|uygunsuz|uygunsuz|uygunsuz) )
{
return 403;
}

7 – Web Güvenlik Tarayıcılarını Engelleme

6. maddede yazmış olduğum http_referer kontrolünü, web güvenlik açıklarını tarayan araçları sitenizden uzak tutmak için de kullanabilirsiniz.

if ($http_user_agent ~* (^w3af.sourceforge.net|dirbuster|nikto|wpscan|SF|sqlmap|fimap|nessus|whatweb|Openvas|jbrofuzz|libwhisker|webshag)) {
return 444;
}

8 – XSS Koruması

HTTP başlıklarına X-XSS-Protection başlığını eklerseniz XSS filtresi bypass edilmiş olan tarayıcılar, bu başlığı görünce korunmuş olacaktır.

add_header X-XSS-Protection “1; mode=block”;

X-XSS-Protection

9 – Clickjacking Ataklarından Korunma

Frame ve iframe ile bir dosyanın ya da web sayfasının dahil edilmesini engellemek adına (SOP) URL, Şema, Port üçlüsünün kontrolü kullanılabilir.

add_header X-Frame-Options “SAMEORIGIN”;

SAMEORIGIN

PHP Sıkılaştırma

Sadece Nginx sıkılaştırma yaparak güvende olduğunu düşünmek yanılgıdır. Bunun yanında php ile oluşturulmuş bir web uygulaması çalıştırıyorsanız, PHP Sıkılaştırma da yapmalısınız.
Bunun için “/etc/php.ini” dosyanızda aşağıdaki değişiklikleri yapmanız yararınıza olacaktır. Hangi fonksiyonun ne tür bir açıklığa neden olduğunu google aramasıyla yapmanızı tavsiye ederim.

#Sistem üzerinde zafiyete sebep olabilecek fonksiyonları yasaklayın.
disable_functions =exec,passthru,shell_exec,system,proc_open,popen,curl_exec,curl_multi_exec,parse_ini_file,show_source
max_execution_time = 30
max_input_time = 60
memory_limit = 8M
post_max_size = 8M
file_uploads = Off
upload_max_filesize = 2M
display_errors = Off
safe_mode = On
safe_mode_exec_dir = php-required-executables-path
safe_mode_allowed_env_vars = PHP_
log_errors = On
register_globals = Off
post_max_size = 1K
cgi.force_redirect = 0
file_uploads = Off
sql.safe_mode = On
allow_url_fopen=Off
allow_url_include=Off

Nginx ile birlikte PHP-FPM kullanıyorsanız “cgi.fix_pathinfo = 1” durumunu “0” durumuna getirmeniz şiddetle önerilir.

Yorum yapın