Çok çeşitli içerik yönetim yazılımı var! (WordPress, Joomla, vs. vs.) Bunların da yüzlerce, belki binlerce eklentileri (plug-in) var. Bunların hepsinin güvenli bir şekilde kullanılabileceğine inanmak sadece aşırı iyimserlik olur. Hatta, içlerinde arka kapı (back-door) yerleştirilmiş olanların bile olduğu söyleniyor-düşünülüyor-biliniyor .
Bu tip hazır paketlerin – ve daha önemlisi eklentilerinin en zayıf tarafı aralarında ziyaretçilerin siteye dosya yüklemelerine izin veren uygulamalar olmasıdır. Bu uygulama ve-veya eklentileri kullanırken çok çok dikkatli olunması gerekmekte; web dosyaları hiyerarşisi içine dosya yüklenmesine ve yüklenen dosyalara doğrudan URL ile (http://site.com/ gallery/resim.png gibi) erişim sağlayan eklentiler kesinlikle kullanılmamalıdır.
Gene de, ziyaretçilerin bir web sitesine yanlızca salt-oku erişimlerine izin vermek; yöneticilerin ise ancak belli IP adreslerinden siteye oku-yaz erişebilmelerini sağlamak güvenlik duvarını kalınlaştıracaktır.
Bunu yapabilmek için benim kullandığım yöntem özetle şu:
- sunucuda web dizini, ikinci bir salt-oku dizine bağlanır (“mount” edilir)
- apache web sunucusu standart 80 portu yanısıra 8080 portunu da dinler.
- apache’de iki sanal sunucu tanımlıdır. Bunlardan biri web kök dizini olarak normal web kök dizinini, diğeri ise salt-oku bağlanmış web kök dizinini sunar. 80 portuna gelen istekler salt-oku dizini sunan sanal web sunucusu tarafından karşılanır; 8080 portuna gelen istekler ise oku-yaz olarak bağlanmış dizini sunan sanal web sunucu tarafından karşılanır.
- iptables ile önceden belirlenmiş yönetim IP adres bloklarından gelen istekler 8080 portuna yönlendirilir. Diğer yerlerden gelen istekler 80 portunda bırakılır.
Bu çalışma koşullarını sağlayan konfigürasyon dosyalarına örnekler:
Sanal Sunucu Tanımları:
/etc/apache2/ports.conf
... Listen 139.179.39.104:8 Listen 139.179.39.104:808 NameVirtualHost 139.179.39.104:80 NameVirtualHost 139.179.39.104:8080 ...
/etc/rc.local
# iptables -t nat -A PREROUTING -s 139.179.0.0/16 \ -p tcp --dport 80 -j DNAT --to 139.179.39.113:8080 # iptables -A INPUT ! -s 139.179.0.0/16 -p tcp --dport 8080 -j DROP # mount --bind /var/www /var/wwwpublic # mount -o remount,ro --bind /var/www /var/wwwpublic
/etc/apache2/sites-enabled/000-default
<VirtualHost *:80> ServerAdmin webmaster@localhost DocumentRoot /var/wwwpublic <Directory /> Options FollowSymLinks AllowOverride None </Directory> <Directory /var/wwwpublic/> Options Indexes FollowSymLinks MultiViews AllowOverride All Order allow,deny allow from all </Directory> . . . </VirtualHost>
/etc/apache2/sites-enabled/private
<VirtualHost *:8080> ServerAdmin webmaster@localhost DocumentRoot /var/www <Directory /> Options FollowSymLinks AllowOverride None </Directory> <Directory /var/www/> Options Indexes FollowSymLinks MultiViews AllowOverride All Order allow,deny allow from all </Directory> . . . </VirtualHost>