Linux Sunucularda PHP.ini Düzenleme Ve Güvenlik
PHP Nedir ?
Bir Sunucuda PHP uzantılı dosyaların çalıştırılabilmesi için gerekli olan yazılımlar/paketler yüklendikten sonra projenize bağlı olarak bazı değişiklikler yapmanız gerekebilir. Örneğin web sitenizde bir dosya yükleme alanı varsa buradan yüklenecek dosya boyutunu izinler dosyasından değiştirmeniz gerekebilir.
İşte bu ve bunun gibi önemli PHP ayarların barındırıldığı özel ayar dosyası php.ini dosyasıdır.
PHP.ini Dosyası nasıl düzenlenir ?
Bu makalede yer alan php.ini düzenlemesini tüm Linux VPS sunucularda gerçekleştirebilirsiniz.
cPanel, Directadmin, Plesk sunucular için php.ini yolu şu şekildedir ;
/usr/local/lib/php.ini
Eğer php.ini yolunuzu öğrenmek isterseniz şu komutu ssh üzerinden çaılştırmanız gerekiyor ;
$ php -i | grep php.ini
Yukarıda Gördüğünüz gibi yol ekrana gelecektir.
php.ini dosyamızı nano editör ile açalım ;
nano -w /usr/local/lib/php.ini
PHP.ini içerisinde istediğiniz değerleri bularak sunucu kaynaklarımıza veya scriptinizin ihtiyacı oranında yükseltelim ve kaydedelim.
Ardından apache veya nginx kullanıyorsanız nginx servisini ayarlarımızın yapılandırılması için son olarak baştan başlatıyoruz ;
service httpd restart & service httpd restart
Tebrikler Artık Linux Sunucularda PHP.ini düzenleyebiliyorsunuz. 🙂
Linux Sunucularda Güvenlik
1. Kernel
İlk olarak Kernel Sürümünüzü Güncel Tutmanız sizi bir çok sistem açığından koruyacaktır.
Peki Kernel Nasıl Güncellenir ?
Bu site üzerinden en güncel kernel sürümünü indirin.
Arşivden çıkarma işlemi
$ unzx -v linux-4.19.tar.xz
ya da$ xz -d -v linux-4.19.tar.xz
Yapılandırma ayarlarları
$ cd linux-4.19
$ cp -v /boot/config-$(uname -r) .config
Örnek çıktı:
'/boot/config-4.15.0-30-generic' -> '.config'
Gerekli geliştirici araçları yükleme
$ sudo apt-get install build-essential libncurses-dev bison flex libssl-dev libelf-dev
Kernel’i Yapılandırma
Kaynak kodların olduğu yerde aşağıdaki komuntlardan gerekli olanı yazıyoruz:
- $ make menuconfig — Grafiksel arayüz ile yapılandırma
- $ make xconfig — KDE Masaüstü ortamları için ideal yapılandırma
- $ make gconfig — Gnome Masaüstü ortamları için ideal yapılandırma
Örnek komut kullanım şekli:$ make menuconfig
Eğer make komutu bulunamadı hatası gelirse “sudo apt-get install make” ile indirmeniz gerekmekte !
Kernel’i Derleme
Sıkıştırılmış kernel imajını derlemek için alttaki komutu yazın:$ make
Derleme hızını arttırmak için -j ile birden fazla çekirdek kullanabiliriz:## use 4 core/thread ##
$ make -j 4
## get thread or cpu core count using nproc command ##
$ make -j $(nproc)
Kernel Modüllerini Yükleme
Alttaki komutla kernel modüllerini yüklüyoruz:
$ sudo make modules_install
Kernel’i Yükleme
Kernel derleme işlemi de bittiğine göre artık kernel yüklene bilir:$ sudo make install
Bu yükleme işlemi alttakileri /boot dizinine yükleyecektir:
- initramfs-4.19.img
- System.map-4.19
- vmlinuz-4.19
Grub Yapılandırmasını Güncelleme
Grub2 yükleyicisinin yapılandırma ayarlarını yapmamız gerekmekte.
Bu komutlar isteğe bağlıdır. make install işlemi bu işlemleri zaten yapmış olacaktır. Yine de vermekte fayda var:$ sudo update-initramfs -c -k 4.19
$ sudo update-grub
İşlemi Sonlandırma
Sistemi yeniden başlatma komutunu giriyoruz:# reboot
Yeniden başlatıldıktan sonra, Linux Kernel Versiyon’unu kontrol ediyoruz:$ uname -mrs
Örnek çıktımız:
Linux 4.19 x86_64
2. PHP “Disable Functions”
PHP.ini Düzenlemeyi göstermiştik en başta hatırlarsınız. Şimdi ise PHP.ini içerisindeki Disable Function yani “Kapalı Fonksiyonlar” için bazı değerler gireceğiz. Bunun sebebi ise Sistemdeki User’lerin erişimini kısıtlayarak saldırıları minimum’a indirmek.
Örnek Kod ;
disable_functions=exec,passthru,shell_exec,system,proc_open,popen,curl_exec,curl_multi_exec,parse_ini_file,show_source
3. SSH Port’unu Değiştirmek
SSH portunu değiştirmek sunucu güvenliği için gerekli bir işlemdir.Kurulum sonrası varsayılan olarak gelen 22 portu veya sık kullanılan SSH portları sürekli bot’lar tarafından taranmaktadır.Sunucunuzun hacklenmemesi için bilindik ya da varsayılan portları kullanmamanızı tavsiye ederim.
nano /etc/ssh/sshd_config
komutu ile SSH ayarlarının bulunduğu dosyayı açıyoruz. Bu dosya içerisinde aşağıdaki şekilde portu belirten bir bilgi olacaktır.
Buradaki #Port 22 olan bölümü unutmayacağınız bir port ile değiştirebilirsiniz.Yeni gireceğiniz portun sürekli kullanılan ya da bilindik bir port olmamasına dikkat ediniz. Değişikliği yaptıktan sonra CTRL+X ve sonrasında Y tuş kombinasyonu ile dosyayı kaydedip çıkış yapabilirsiniz.Yapmış olduğunuz port ayarının aktif olabilmesi için son olarak sshd servisine restart atmanız gerekiyor.
/etc/init.d/sshd restart
4.Python ve Perl Güvenliği
Son zamanlarda cgi-telnet scriptleri ile sunuculara sızmaya çalışan ve ln ile hedef sitenin içerisine müdahale eden mudavimlerle dolu sanal ortam maalesefki . bu konuda aşağıdaki işlemleri uygulayarak kalıcı çözüm oluşturabilirsiniz.
nano /etc/httpd/conf/httpd.conf
Komutu ile apache konfigurasyon dosyasına erisim sağlayarak akabinde aşağıdaki satırı bulun ( kismi olarak bulunabilir addhandler diye aratabilirsiniz )
AddHandler cgi-script .cgi .pl .plx .ppl .perl
Daha sonra bu komutun başına bir sharp işareti ekleyerek etkisiz hale getiriniz.
Örn : # AddHandler cgi-script .cgi .pl .plx .ppl .perl
Daha sonra Perl Kütüphanesine erişimi engellemek için ;
chmod 710 /usr/bin/perl
komutunu ssh üzerinde çalıştırınız . en son olarak apache ‘yi restart ediyoruz.
/etc/init.d/httpd restart
Aynı işlemi Plesk için aşağıdaki komutlar ile gerçekleştirebilirsiniz.
chmod 700 /usr/bin/perl
/etc/init.d/httpd restart & service apache restart
Artık Cgi-Telnet erişimi kapanmıştır. Bazı Cgi-Telnet bağlantıları python ile çalışmaktadır aynı işlemleri python kütüphanesi için yapabilirsiniz.
5. Veri Akışını kesmek
Kötü amaçlı kullanımlar için, örneğin basit icmp saldırılar için en güvenli yol sunucuyu dışarıdan ping’e kapatmaktır. Pingi kapatmak ddos saldırılarından bizi korumaz, yalnızca isteklere kapatır. Bunun sunucumuza veya site erişimlerine bir zararı yoktur hatta faydası vardır.
Ping i kapatmak için ssh ile login olduktan sonra nano komutu ile aşağıdaki kısıma erişiyoruz;
nano /etc/sysctl.conf
Daha sonra aşağıdaki komutu en alt satıra ekliyoruz, kaydedip çıkıyoruz;
net.ipv4.icmp_echo_ignore_all=1
Değişiklikleri uygulamak için aşağıdaki komutu çalıştırıyoruz;
sysctl -p
Farklı bir bilgisayardan alan adımızı veya ip adresimizi pinglediğimizde zaman aşımına uğrayacaktır.
Yeniden ping erişimine açmak istersek aşağıdaki komutu çalıştırıyoruz;
nano /etc/sysctl.conf
En aşağıda eklediğimiz satırı siliyoruz ve kaydedip çıkıyoruz.
Değişikliği uygulamak için aşağıdaki komutu çalıştırıyoruz.
sysctl -p
İşlemimiz bu kadar.
6. Fail2Ban
Fail2ban belirli servislere ait log dosyalarını takip ederek başarısız login girişimlerini tespit eder ve bu denemeler belirli bir sayıya ulaştığı zaman ilgili aktivitenin kaynak IP’si için Iptables’a bir drop kuralı ekler. Sisteminizde iptables yoksa ya da iptables kullanmak istemiyorsanız aynı şeyi tcpwrapper ile de yapabilir ve ilgili IP adresini hosts.deny dosyasına ekler. Ancak bu durum sadece tcpwrapper kullanan (örn: sshd) servisler için geçerlidir. Mesela apache tcpwrapper kullanmaz bu nedenle apache için iptables kullanmanız gerekir.
Fail2ban ile reject edilen IP adresleri için öntanımlı olarak 5 dakikalık bir ban süresi bulunmaktadır. Ban süresi dolan IP adresleri için girilen drop kuralları (ya da hosts.deny girdileri) sistemden kaldırılır. Sonuç olarak ban durumu kalıcı değildir ve süre sonunda ilgili IP adresleri tekrardan erişim sağlayabilirler.
Bunun yanı sıra, Fail2ban, banlanan ipleri mail yolu ile raporlayabilir; böylece sunucudaki aktivite ile ilgili bilgi edinebilirsiniz.
Bu kısa bilgilendirmeden sonra kurulum ve yapılandırma kısmına geçebiliriz.
Kurulumu kaynak koddan yapıyorum. Bu nedenle şimdi “/usr/local/src/” dizinine geçerek son “http://sourceforge.net/projects/fail2ban/files/” adresinden fail2ban’ın son sürümünü download edelim.
(Şu an son sürüm 0.8.4’tür. Siz download etmeden önce kontrol edin.)
# cd /usr/local/src # http://downloads.sourceforge.net/project/fail2ban/fail2ban-stable/fail2ban-0.8.4/fail2ban-0.8.4.tar.bz2?use_mirror=ignum
Şimdi tar.bz2 dosyasını açıp kurulumu yapmak için fail2ban dizinine geçiyoruz.
# tar xjvf fail2ban-0.8.4.tar.bz2 # cd fail2ban-0.8.4
Kurulum aşağıdaki gibi setup.py scripti üzerinden yapılmaktadır.
# python setup.py install
Yükleme işlemi bittikten sonra fail2ban binary dosyaları /usr/bin
dizinine, yapılandırma dosyaları ise /etc/fail2ban dizinine konulur.
Ancak yapılandırmaya başlamadan önce fail2ban’ı sisteme servis olarak ekleyelim.
# cp /usr/local/src/fail2ban-0.8.4/files/redhat-initd /etc/init.d/fail2ban # chmod 755 /etc/init.d/fail2ban # chkconfig --add fail2ban # chkconfig fail2ban on
Şimdi fail2ban’ı start edelim. (Ön tanımlı ayarlarda herhangi bir servis için ban özelliği aktif değildir.)
service fail2ban start
Böylelikle Fail2Ban Kurulumumuzu tamamlamış oluyoruz.
7. Bash Güvenlik Açığı
Linux sistemleri etkileyen , heartbleed ten daha tehlikeli gözüken yeni bir açık bulundu , en kısa sürede bash’i güncellemelisiniz ,açıktan etkilenip etkilenmediğinizi anlamak için terminal de aşağıdaki komutu çalıştırınız.
# env x='() { :;}; echo vulnerable’ bash -c “echo this is a test”
Eğer çıktısı aşağıdaki gibi ise acilen yama yapmalısınız.
vulnerable
this is a test
Eğer komutu çalıştırdığınızda aşağıdaki sonucu görüyor iseniz Sizin korkacak bir şeyinizi yok demektir.
bash: warning: x: ignoring function definition attempt
bash: error importing function definition for `x’
this is a test
8. Cloudflare
Cloudflare web performansını arttıran ve web sitenizin güvenliğini arttırmaya yarayan bir hizmettir. Cloudflare free planı sayesinde CloudFlare CDN, SSL, DDoS koruması gibi birçok özelliği ücretsiz olarak kullanabiliyorsunuz. Cloudflare’in genel özelliklerinden bahsettikten sonra gelelim bu özelliklerin ne işe yaradığına:
1. CDN Nedir?
CDN’nin açılımı Content Delivery Network olup Türkçe anlamı İçerik
Dağıtım Ağı’dır. CDN’nin amacı kullanıcılara sitenin en hızlı şekilde
ulaştırılmasıdır.
Peki CDN nasıl çalışıyor?
CDN dünyanın birçok yerine dağıtılmış sunucuların bir alt yapısıdır. Bu
yapıda kullanıcı hangi ülkedeyse o ülkeye en yakın sunucuya ulaşıyor. Bu
sayede kullanıcı uzaktaki sunucuya bağlanıp zaman kaybetmiyor. Bu
yüzden hızlandırma açısından önemli bir özellik.
Ayrıca sitenizin hızlı açılması SEO açısından da çok faydalıdır.
2. DDoS Koruması Nedir?
DDoS saldırganlar sizin sunucunuza çok sayıda PC üzerinden istekler
gönderir ve sunucuyu meşgul ederler. Bu şekilde sunucu yoğunluktan yanıt
veremez olur ve sunucunuz çöker. İşte Cloudflare sitenize yapılan DDoS
saldırılarını bir noktaya kadar önleyebiliyor.
Cloudflare DDoS’u nasıl engelliyor?
Sitenize gelen trafik önce Clodflare sunucusuna erişiyor ve sistem
burada saldırgan davranışlarını tespit ederek sitenize ulaşmasını
engelliyor.
3. SSL Sertifikası nedir?, Ne işe yarar?
SSL internet üzerinde bilgi aktarımı sırasında bilgininin gizlilik ve güvenliğini saplamak için yapılmış bir güvenlik protokolüdür. Bu SSL sertifikasını sitenin https ile başlaması ve yeşil kilit bulundurmasıyla anlayabiliriz. Siz de Cloudflare ile sitenize SSL sertifikası ekleyebilirsiniz.
4. Trafik analizi
Sitenizin analizi için genelde Google Analytics gibi araçlar kullanılıyor. Ancak Javascript ve pixel tracking yöntemleriyle elde edilemeyen kullanıcıları Cloudflare ile görebilirsiniz.
5. Önbellekleme
Sunucunuz tarafından dinamik şekilde oluşturulmayan sayfaları otomatik olarak tanır, bu sayfaları kendi sunucularında önbellekleyerek hem sunucunuzdaki trafiğinizi azaltır hem de sayfa yükleme sürelerinizi azaltır.
6. Spam Yorum Koruma
CloudFlare sitenize gelen spam yorum sayısını en aza indirgemek için üçüncü parti birçok uygulamadan yararlanır.
7. Dosya Optimizasyonu
Cloudflare Javascipt, CSS gibi dosyalarınızı sıkıştırarak sitenizi daha hızlı açılmasını sağlıyor.
8. Her Zaman Online
Eğer sunucunuz çökerse CloudFlare sitenizin önbelleğe alınmış halini servis ediyor. Bu sayede sitenize giren kullanıcılar hata sayfası almayacak sitenizi görüntüleyebilecek.
Evet arkadaşlar umarım hazırladıgım makaleyi beğenmişsinizdir.Başka makalelerde görüşmek üzere..