Phalcon Php Framework 3.x Kurulumu
/in Linux Sunucu Yönetimi, Linux VDS, Linux Web Hosting, Web Sunucuları/tarafından adminCyber Panel + Ubuntu 20 sunucu üzerinde phalcon 3.x (eski versiyon) kurulum aşamaları
1.Dilediğin php versiyonu için pecl ve pear eklentisini kur.
apt install lsphp72-pecl lsphp72-pear
2.Phalcon 3.4.5 tar dosyasını indir.
wget https://github.com/phalcon/cphalcon/archive/refs/tags/v3.4.5.tar.gz tar zxvf v3.4.5.tar.gz cd cphalcon-3.4.5/build/ ./install
3.Tüm adımlar başarılı ise ini dosyasını ekle
/usr/local/lsws/lsphp72/etc/php/7.2/mods-available altında phalcon.ini dosyası oluştur.openlitespeed'i restart et. cat phalcon.ini #extension=psr.so #v4 ve sonrası için gerekli. extension=phalcon.so
Not:Benzer şekilde phalcon v4 de kurabilirsin ancak Phalcon v4 psr eklentisine gereksinimi var.Bunun için;
cd /usr/local/lsws/lsphp72/bin ./pecl install psr-1.1.0
Ip adreslerini dosyadan ayırmak
/in Centos 7, E-mail Sunucuları, Linux Hosting, Linux Server Kurulumu, Linux Sunucu Kurulumu, Linux Sunucu Yönetimi, Linux Web Hosting, Web Sunucuları/tarafından admingrep -Eo ‘([0-9]{1,3}\.){3}[0-9]{1,3}’ maillog | sort | uniq
Iptables Geoip Eklentisinin Kurulumu ve Kullanımı
/in Ağ uygulamaları, Centos 7, Web Sunucuları/tarafından adminBelli bir ülkeden gelen ip trafiğini kısıtlamak veya engellemek için kullanabileceğiniz bir iptables eklentisidir.Eklenti standart Linux distrolarında eklenmiş,hazır halde değildir.Ayrıca bu eklentiyi kullanabilmeniz için güncel bir geoip veritabanına ihtiyaç duyarsınız.Bu veritabanını da maxmind.com’a üyelik yaparak ücretsiz kullanabileceksiniz.
Debian veya Ubuntu türevleri için öncelikle gerekli paketleri sisteminize kurun.
apt-get install iptables-dev xtables-addons-common libtext-csv-xs-perl pkg-config
Redhat ve Centos için ise;
yum install gcc-c++ make automake kernel-devel-`uname -r` wget unzip iptables-devel perl-Text-CSV_XS
Daha sonrasında addons paketini proje sitesinden indirelim.(Not: Dkms modulu olarak veya src paketi olarak da debian/ubuntu depolarından indirebilirsiniz.)
Örneğin (sizin için uygun versiyon işletim sisteminizin kerneline göre farklılık gösterebilir.)
wget http://downloads.sourceforge.net/project/xtables-addons/Xtables-addons/xtables-addons-2.3.tar.xz
Sıkıştırılmaz paketi açıp paketi derliyoruz.
# tar xf xtables-addons-2.3.tar.xz
# cd xtables-addons-2.3
# ./configure
# make
# make install
Kullanacağımız eklenti maxmind’ın eski yapıdaki (Geoip Legacy Databases) veritabanını destekliyor.Öyle görünüyor ki maxmind eski yapıdaki veritabanın da indirme linkini kaldırmış.Yine de Geoip2 veritabanını bir script yazarak eski yapıya dönüştürmek mümkün görünüyor.Nette biraz araştırınca şöyle bir websitesiyle karşılaşıyoruz.
https://mailfud.org/geoip-legacy/
Websitesin sahibi, güncel v2 db yi alıp eski tip db ye sadece çevirmekle kalmamış aynı zamanda bunu sık sık güncelliyor da.
Iptables için uygun olan geoip db linki aşağıdadır.
https://mailfud.org/geoip-legacy/GeoIP-legacy.csv.gz
Linkten dosyayı download ettikten sonra sunucunzda bir yere gz dosyayı açın.
Açılan dosyayı önceden derlenmiş kodda hazır halde olan xt_geoip_build aracı ile iptables’a uygun hale getiriyoruz.
./xt_geoip_build GeoIP-legacy.csv
Ardından gerekli klasörü oluşturup bu db yi içine kopyalıyoruz.
mkdir -p /usr/share/xt_geoip/
cp -r {BE,LE} /usr/share/xt_geoip/
Artık dilediğimiz geoip tabanlı iptables kurallarını yazabiliriz.Son olarak dilerseniz ülke kodlarına https://en.wikipedia.org/wiki/ISO_3166-1 sayfasından bakabilirsiniz.
Örnek olarak Hindistan ve USA ‘dan gelen tüm istekleri engelleyebiliriz.
iptables -I INPUT -m geoip –src-cc IN,US -j DROP
Veya sadece TR dışındaki tüm talepleri engelleyebiliriz.
iptables -I INPUT -m geoip ! –src-cc TR -j DROP
Bir başka örnek ise sadece tcp port 587 e gelen istekleri Türkiye içi ağlarla sınırlandırabiliriz.
iptables -A INPUT -p tcp -m geoip ! –src-cc TR –dport 587 -j DROP
Uygulama Alananları ve Karşılaşabileceğiniz Problemler…
Bu eklentilerin kurulumunu Ubuntu 16.04 ve Ubuntu 14.04 de gerçekleştirdim.Esasen 14.04 de gerekliydi ve hem kaynaktan derleme hem de dkms şeklinde linux çekirdeğine ilavede sorun yaşadım.Sorun yaşamamın sebebini xtables-addons paketindeki başka eklentilerin kullanmakta olduğum kernel ile uyumsuz olduğunu (daha açık olarak belirtmek gerekirse Linux 3.16 da bu bazı eklentilerin desteğinin yeni başladığını) okudum.O yüzden bazı eklentileri mconfig dosyasından iptal ettip.Çünkü bana özellikle geoip modulu gerekiyordu.
Örnek mconfig dosyam aşağıdadır.Karşılıkları boş olanlar sistemde derlenemedi malesef.
# -*- Makefile -*-
#
build_ACCOUNT=m
build_CHAOS=
build_DELUDE=m
build_DHCPMAC=m
build_DNETMAP=m
build_ECHO=m
build_IPMARK=m
build_LOGMARK=m
build_RAWNAT=m
build_STEAL=m
build_SYSRQ=m
build_TARPIT=
build_condition=m
build_fuzzy=m
build_geoip=m
build_gradm=m
build_iface=m
build_ipp2p=m
build_ipv4options=m
build_length2=m
build_lscan=m
build_pknock=
build_psd=m
build_quota2=m
Ancak Ubuntu 16.04 de bunlara hiç gerek duymadan dkms ile tümünü kernele eklemeyi başardım.
Geoip & Iptables kullanmaktaki amacım,mail sunucunun (postfix) email kullanıcı şifre doğrulaması yapılan portlarını kısıtlamak idi.
Tcp Port 25 i sadece email sunucularından gelen isteklere yanıt verir hale getirirken port 587 (submission) ve port 465’i (smtps) sadece TR içinde izin vermek amaç..
Her ne kadar “en mantıklı/iyi çözüm” olmasa da sunucuları brute force ataklarından ve şifresini çaldıran eposta kullanıcılarının başıma açtığı dertlerden kurtardı.
Maxmind Apache eklentisi ile geoip url filtreleme
/in Centos 7, Linux Hosting, Linux Sunucu Yönetimi, Ubuntu Linux, Web Sunucuları/tarafından adminMaxmind geoip servisinin Apache eklentisinin Centos/Cloudlinux 7.2 ve Ubuntu 14.x LTS üzerine kurulumunu anlatıyoruz.
İlk kurulumumuz Centos/Cloudlinux için.Öncelikle yapmanız gereken maxmind kütüphanesini kurup ardından Apache extension tool (apxs) kurulumunun ardından maxmind apache modülünü sistemimize eklemek olacak.Bunun ardından örnek bir apache/maxmind konfigurasyon dosyası ile wordpress kurulu websitelerin wp-login.php dosyasına Türkiye dışından erişimi engelleyeceğiz.
Centos kurulum derleme aşamalarını biraz sadeleştirmek amacıyla önceden bir Cloudlinuxta derlemiş olduğum MaxMind Apache modülünü (.so dosyasını) kullanacağız.
Centos / Cloudlinux Kullananlar İçin hazır batch dosyayı sistemimize indirip çalıştırıyoruz.
wget https://www.linux-destek.com/maxmind/maxmind.sh
Sunucunuza indirdiğiniz maxmind.sh dosyasını çalıştırıyorsunuz.
/bin/bash maxmind.sh
Kurulum işte bu kadar.Sunucunuzda host ettiğiniz bir wordpress siteyi, örneğin www.abc.com/wp-login.php vey xmlrcp.php dosyasının yurt dışından erişilemediğini test etmek size kalıyor.
Debian/Ubuntu Kullanalar için ise kurulum aşamalarımız şöyle;
İlk olarak maxmind kütüphanesini (sistem için gerekli olan) bir apt deposunu ekleyerek kuruyoruz;
sudo add-apt-repository ppa:maxmind/ppa
apt deposunu ekledikten sonra
apt-get update komutunu çalıştırın ve aşağıdaki gerekli paketleri sisteminize kurun
sudo apt install libmaxminddb0 libmaxminddb-dev mmdb-bin apache2-devel automake autoconf libtool git
Paketler sisteminize kurulduktan sonra git client ile sisteminize indirip kurmak için aşağıdaki komutları sırasıyla uygulayın;
git clone –recursive https://github.com/maxmind/mod_maxminddb.git
cd mod_maxminddb/
./bootstrap
./configure –with-apxs=/usr/bin/apxs
make install
Bu aşamadan sonra önceden maxmind ücretsiz servisinden indirmiş olduğumuz dosyayı sunucuda bir klasöre yerleştiriyoruz.
mkdir /usr/local/share/GeoIP/ && cd /usr/local/share/GeoIP/
wget https://www.linux-destek.com/maxmind/modmaxmind/GeoLite2-Country.mmdb
Herşey yolunda giderse artık sistemimizde maxmind kütüphanesi ve apache modülü kurulmuş olacak.Sıra apache için örnek bir konfigurasyon oluşturmakta.Bu örnekte belirttiğimiz gibi wordpress wp-login.php ve xmlrpc.php dosyalarına erişimi geoip tabanlı engelliyoruz.Erişim sadece Türkiye Ip adreslerinden olacak.
Örnek Apache Konfigurasyonu;
#<IfModule mod_maxminddb.c>
LoadModule maxminddb_module modules/mod_maxminddb.so
MaxMindDBEnable On
MaxMindDBFile DB /usr/local/share/GeoIP/GeoLite2-Country.mmdb
MaxMindDBEnv MM_COUNTRY_CODE DB/country/iso_code
<FilesMatch “wp-login.php|xmlrpc.php”>
SetEnvIf MM_COUNTRY_CODE ^(TR) AllowCountry
#Deny from env=BlockCountry
Allow from env=AllowCountry
Deny from All
#RewriteEngine on
#RewriteCond %{ENV:MM_COUNTRY_CODE} !^(RU|DE|FR)$
#RewriteRule ^(.*)$ – [F,L]
</FilesMatch>
#</IfModule>
Üzerinde bazı değişlikler ve iptal edilen satırlar var.Sadece size farklı bir fikir verebilir.Bu şekilde kullanabilirsiniz de.Dosya içeriği bu şekilde.Apache Web sunucusunun dosyayı /etc/apache2/conf-enabled/maxmind.conf ismiyle oluşturmanız ve bu içeriği yapıştırmanız gerekecek.
Dosyanızı kaydettikten sonra service apache2 restart komutu ile webservisini yeniden başlatın.Herhangi bir error seviyesinde hata almaz iseniz kurulum tamam demektir.
Aynı şekilde bir wordpress sitenizdeki wp-login.php dosyanıza yurt dışından erişimi deneyerek testinizi yapınız.Eğer herşey çalışıyorsa Forbidden mesajı ile karşılacaksınız.
Son Söz;
Elbette wordpress veya başka bir website kodunu bu şekilde korumak en iyi yol değildir.Güvenlik kodda başlar.Sistem de güncel kaldığı sürece her bakımdan güvendesiniz demektir.
Burada yapılan çalışma,internet dünyasında bir gerçekten yola çıkılarak düşünülmelidir.O gerçek ise, günümüze wordpress gibi kodlara yapılan bruteforce gibi atakların tamamına yakını Rusya,Çin,Amerika vs gibi ülkelerden gelmekte olduğudur.Şifreniz kırılamasa dahi bu yapılan bot,bruteforce saldırıları sunucuları yormaktadır.
İkinci gerçek ise webmasterları ve sunucu yöneticilerini ilgilendirmekte.Düşünün ki 500 websitesi host ediyorsunuz ve bunun tamamına yakını wordpress.Her gün yüzbinlerce şifre kırma saldırısı host ettiğiniz websitelerinize yapılıyor.Bundan korunmanın en iyi yolu nedir?
Bir vatandaş ücret karşılığı bir websitesi yaptırmış.Webmaster parayı almış,iş bitmiş.Kime neyi anlatacaksınız?Müşterinize nispeten eski kalan wordpressin güvenlik açıklarından bahsetseniz sizi muhtemelen roket bilimi ile uğraşıyorsunuz filan sanır.Ona webmasterin nerde olduğunu sorsanız,adını bile hatırlamayacaktır.
Ancak kötü şeyler herşeyi sorgusuz sualsiz değiştirir.Müşterinizin sitesi gerçekten hackenirse bu sefer sizden bir açıklama bekleyecek,sizi suçlayacak hatta güvenlik açıklarınızın olduğunu söyleyip belki kötü reklamınızı yapacaktır.
Ne yazıkki Internet Sektörü son derece zır cahil seviyesinde yürümekte.O yüzden sunduğumuz çözüm de biraz Türk İşi oldu.Söz de uzadı.Kalın sağlıcakla.
Apache SSL açıklarını kapatın
/in Ağ uygulamaları, Centos 7, E-Mail Kurulum ve Yapılandırılması, E-mail Sunucuları, Linux Dağıtımları, Linux Eğitim, Linux Hosting, Linux Server Kurulumu, Linux Sunucu Kurulumu, Linux Sunucu Yönetimi, Linux Web Hosting, Plesk Küçük İpuçları, Uncategorized @tr, Web Sunucuları/tarafından adminSon dönemde ortaya çıkan openssl ve zayıf şifreleme methodlarını kapatın.Özellikle bankalardan sanal pos talep etmeden önce sunucunuzda uygulamanızı tavsiye ederim.
Centos sunucular için
/etc/httpd/conf.d/ssl.conf dosyasının en altına aşağıdaki satırları yerleştirin.Httpd servisini yeniden başlatın.Nispeten güncellenmemiş sunucular için yum update yapmanızı öneriririm.
<IfModule mod_ssl.c>
SSLProtocol +TLSv1 +TLSv1.1 +TLSv1.2 -SSLv2 -SSLv3
</IfModule>
<IfModule mod_ssl.c>
#SSLCipherSuite HIGH:!aNULL:!MD5:!RC4-SHA:!RC4
#SSLCipherSuite ECDH+AESGCM:DH+AESGCM:ECDH+AES256:DH+AES256:ECDH+AES128:DH+AES:ECDH+3DES:DH+3DES:RSA+AESGCM:RS
SSLCipherSuite HIGH:MEDIUM:!aNULL:!MD5::!RC4
</IfModule>
Plesk 11x 12x Bad Gateway Hatası ve Çözümü
/in Linux Hosting, Linux Web Hosting, Linux Web Sunucu Problemleri ve Çözümleri, Plesk Küçük İpuçları, Web Sunucuları/tarafından adminPlesk panele http/8880 veya https/8443 portlarından erişim yapamadığınızda,sunucuya ssh üzerinden giriş yaparak şu logu takibe alın.
/var/log/sw-cp-server/error_log
Bu, plesk panelin kendisinin üzerinde koştuğu nginx web server’ın hata kaydıdır.Web siteler için kullandığınız nginxten farklı olduğunu söylememe gerek yok sanırım.
Eğer yukarıdaki log dosyası içeriğinde ,
recv() failed (104: Connection reset by peer) while reading response header from upstream, client: 123.123.123.123, server: , request: “POST <some url>
şeklinde hata satırları görüyorsanız alltaki dosyada ilgili değişiklikleri yapınız.
/etc/sw-cp-server/config
fastcgi_buffers 16 16k;
fastcgi_buffer_size 32k;
Ardından ilgili servisleri yeniden başlatınız.
# /etc/init.d/sw-cp-server restart
# /etc/init.d/sw-engine restart
Unable to log into Plesk: Access for administrator from address xx.xx.xx.xx is restricted in accordance with IP Access restriction policy currently applied
Eğer yukarıdaki hata satırlarını göremediyseniz muhtemelen ip adresiniz bloklanmış olabilir.Farklı bir ip üzerinden girmeyi deneyin veya yine ssh üzerinden login olarak mysql shell’i açın.
mysql -u admin -p$(cat /etc/psa/.psa.shadow)
use psa;
mysql> select * from cp_access;
mysql> select * from misc where param=’access_policy’;
Engellenmiş ip adreslerini ilk sql cümlesinin çıktısında görebilirsiniz.Bu kayıtları silmek için
mysql> delete from cp_access;
Erişimi heryere açmak için;
mysql> update misc set val=”allow” where param=’access_policy’;
Plesk arayüzünü Nginx üzerinde php-fpm ile beraber çalışan bir sistemde sunar.Benzeri şekilde websitelerinizde de aynı mantıktadır.Tek farkı websitelerin çalıştığı ortamdan ayrılmış,farklı portlardan çalışan yazılımlardır.
Eğer fpm limitleri yetmiyor veya bir başka problem olduğunu düşünüyorsanı şu dosyalar size yardımcı olabilir.
/etc/sw-engine/pool.d/plesk.conf —> Plesk uygulaması için hazırlanmış fpm limitleri,pm,pm_max_children ,max server max request gibi..
/etc/sw-engine/sw-engine-fpm.conf —> Global fpm ayarları (Sadece plesk uygulaması için)
Php 5.6 phpmailer mail gönderme problemi
/in Linux Eğitim, Linux Hosting, Linux Server Kurulumu, Linux Sunucu Kurulumu, Web Sunucuları/tarafından adminPhp 5.6 versiyonunda phpmailer tabanlı scriptleri çalışmaz hale geldi.Problem yaşayanlar için alttaki metin faydalı olabilir.
php 5.6 versiyonunda phpmailer scriptiniz çalışmaz çünkü;
- php 5.6 versiyonundan itibaren ,bağlantı kurulan servisteki ssl sertifkasının geçrli olup olmadığını kontrol etmesi
- phpmailer bağlantı kurduğu eposta sunucusunda tls encryption olduğunu farkettiği anda otomatikman tls doğrulamayı aktif ediyor.bu esnada karşıda geçersiz veya self signed bir sertifika varsa anlaşma sağlanamıyor.
phpmailer bu durum için 5.2.10 sürümünde bunun için bir istisna hazırlamış.alttaki linkte sertifika doğrulaması ile ilgili parametleri alt betikte iptal edebiliyorsunuz.
https://github.com/PHPMailer/PHPMailer/wiki/Troubleshooting#php-56-certificate-verification-failure
bu arada phpmailer sürümü eski olanlarda bu özellik olmayabilir ama zaten şu genel güvenkik açığı sebebiyle phpmailerinizi son sürüme güncellesiniz bence iyi olur.
Ayrıca durumunuza göre aşağıdaki smtpautotls ayarını da değiştirmeniz meseleyi çözüme kavuşturabilir.
https://phpmailer.github.io/PHPMailer/classes/PHPMailer.html#property_SMTPAutoTLS
Proftpd Unable to connect to FTP: unknown configuration directive
/in Centos 7, Linux Dağıtımları, Linux Hosting, Linux Reseller Bayi, Linux Server Kurulumu, Linux Sunucu Kurulumu, Linux Sunucu Yönetimi, Plesk Küçük İpuçları, Ubuntu Linux, Web Sunucuları, Yaşasın Tam Bağımsız Debian ve Türevleri/tarafından adminSize çok tuhaf gelebilecek, pek yaygın olmayan, aslında bizim gibi farklı dil ve bölgesel ayarları kullanan ülkelerde çıkma olasılığı yüksek problemlerden biridir.
Bir linux hosting sunucunuza ftp bağlantısı yapılabilmesi için haliyle bir ftp sunucu kurarsınız ki bu genelde proftp veya pureftp olur.
Ftp servisi çalışmadığında yapacağınız ilk şey proftp hata loguna bakmak olur.Proftp paketiyle beraberinde gelen proftpd.conf dosyasının hemen hemen her satırı hata vermektedir.Satırları kapatıp başınızdan atabilirsiniz veya okumaya devam edip soruna kökten bir çözüm bulabilirsiniz.
Diğer yandan sunucunuzda her paket kurduğunuzda veya bir binary veya perl scripti çalıştırdığınızda ekran şuna benzer hatalar çıkmakta.Son zamanlarda peydahlanan bu hatayı görmezden gelmektesiniz.
perl: warning: Falling back to the standard locale (“C”).
locale: Cannot set LC_CTYPE to default locale: No such file or directory
perl: warning: Setting locale failed.
Locale sözünü gördüğünüzde sizi duyar gibiyim.Evet o problem.Yılların eskitemediği,bitti sandığınız ama asla bitmeyecek olan dil probleminin ta kendisi.Bitmedi.sanırım bitmeyecekte.
Bütün konu,bilgisayarın ilk zamanlarında oluşturulan standartlar,GNU C,POSIX ASCII ve utf8 karakter seti ,farklı diller,yerelleştirme ve hız ile ilgili.Merak eden nette okur araştırır.
Siz bunları merak etmiyorsanız kısaca çözüme geçin
/etc/xinetd.d/ftp_psa dosyasını açın.
ftp{} bölümünde şu satırları ekleyin.
“env = LC_ALL=C LANG=C”
Ardından xinetd servisini yeniden başlatın.Artık proftp ve tüm modülleriyle mutlu mesut yaşayabilirsiniz.
Apache unable to open logs hatası
/in Centos 7, Linux Hosting, Linux Web Hosting, Plesk Küçük İpuçları, Ubuntu Linux, Web Sunucuları/tarafından adminApache web servisini resetlerken “unable to open logs” hatası alıyorsanız bu apache sistem kullanıcısının en fazla açabileceği dosya sayısını aşmışsınız manasına gelir ki sizi tebrik ederiz.Hosting işini büyütmüşsünüz.Artık öntanımlı değerlerler size yetmiyor.
Debian/Ubuntu türevi bir hosting sunucunuz varsa;
/etc/apache2/envvars dosyanızda aşağıdaki parametreyi değiştiriniz.
APACHE_ULIMIT_MAX_FILES=’ulimit -n 131072′
Centos/Redhat tabanlı bir sistem kullanıyorsanız
/usr/sbin/apachectl dosyanızı en sevdiğiniz editorle açınız.
ULIMIT_MAX_FILES= satırını # ile kapatın ve alttaki satır ile yeni tanımlamayı yapın.
ulimit -n 131072
Değerleri deneysel olarak değiştirebilirsiniz.131072 kesmedi 1,5 katına çıkarın mesela.
Benzeri olarak alternatif çözüm nispeten eski sistemlerde init.d altındaki startup scriptleri de olabilir.Örneğin /etc/init.d/http dosyasında ulimit satırını başlangıçta olacak şekilde yerleştirebilirsiniz.