Linux iptables ile ultrasurf 13.03 engelleme

Önceki ultrasurf versiyonu ile ilgili yazımın güncellenmiş versiyonudur.Anlamadığınız eksik kalan noktalar varsa önce o yazıyı okumanız gerekebilir.

Ultrasurf 13.03 engelleme için güncel iptables kuralları aşağıdadır.

iptables -I FORWARD -m tcp -p tcp –dport 443 -m string –to 256 –hex-string ‘|16030000610100005d0300|’ –algo bm -j DROP

iptables -I FORWARD -m tcp -p tcp –dport 443 -m string –to 256 –hex-string ‘|160301013c010001380303|’ –algo bm -j DROP

iptables -I FORWARD -i eth0 -p tcp –dport 1024:65535 -j DROP

Son yazdığım kuraldan tam emin değilim.İlk iki kuralı sabit tutarak 3.kuralı deneyerek sonucu görebilirsiniz.

Yine 3.kuraldaki -i eth0 benim gw sunucusunun iç bacağı.Yani istemcilerin bulunduğu network.Bunu da kendinize göre uyarlayın.

Sonuç:

3-4 kez ultrasurf’un açmayı denedim.Uzunca bir süre sonra hiç bir sunucuya bağlanamayınca pes ediyor.Umarım bu testler yeterli olmuştur.

Hiç yoktan (yeni versiyon çıktığını bilmiyordum doğrusu ) bu mesele ile tekrar uğraşmama vesile olan okay arkadaşıma ayrıca teşekkürler.

Postfix mail sunucusunda günlük gönderim limiti uygulaması

Cluebringer v2.1

Quata modülü sayesinde ,postfix mail sunucusunda e-mail kullanıcılarının günlük gönderim limitlerini kontrol edebileceğiniz,web arayüzünden ayarları yapabildiğiniz açık kaynak kodlu yazılım.

Detaylı bilgi ve kurulum dökümanı için http://www.policyd.org/

Mail formlardan gönderilen e-maillerin izlenmesi ve kontrolü

Web sayfalarının bir çoğunda mail form kullanılıyor.Bu scriptlerde bulunabilecek bir açık sunucunuz üzerinden onbinlerce spam gönderimine sebep ve sizin karalistelere girmenize sebep olabilir.Aşağıda kurulumu anlatılan script form maillerden gönderilen her mailin logunu yazmakta ve sizin belirteceğiniz alıcı sayısına göre maili engellemektedir.Scriptin bir kısmı anonim alıntıdır,ilaveler bulunmaktadır.

Öncelikle php betiğinin çalışması için gerekli paketleri sistemimize kuruyoruz.Redhat,Centos kullanıyorsanız şu komutla ilgili paketleri kurabilirsiniz;

yum install php-pear-Auth-SASL.noarch php-pear-Mail.noarch php-pear-Mail-Mime.noarch php-pear-Net-SMTP.noarch php-pear-Net-Socket.noarch

Kurulum bittikten sonra aşağıdaki scripti fmmgw.php adıyla sisteminizde uygun bir yere veya /usr/local/bin altına kopyalayın.

#!/usr/bin/php
<?php
ini_set(‘include_path’, ‘/usr/share/pear’);
//—CONFIG
$config = array(
‘host’ => ‘localhost’,
‘port’ => 25,
‘auth’ => FALSE,
);
$logDir      = ‘/var/log’;
$logFile     = ‘mail_proxy.log’;
$failPrefix  = ‘fail_’;
$EOL         = “\n”; // change to \r\n if you send broken mail
$defaultFrom = ‘”hostadresiniz.alanadiniz.com Webserver” <[email protected]>’;
//—END CONFIG

if (!$log = fopen(“{$logDir}/{$logFile}”, ‘a’)) {
die(“ERROR: cannot open log file!\n”);
}

require(‘Mail.php’); // PEAR::Mail
if (PEAR::isError($Mailer = Mail::factory(‘SMTP’, $config))) {
fwrite($log, ts() . “Failed to create PEAR::Mail object\n”);
fclose($log);
die();
}

// get headers/body
$stdin = fopen(‘php://stdin’, ‘r’);
$in = ”;
while (!feof($stdin)) {
$in .= fread($stdin, 1024); // read 1kB at a time
}

list ($headers, $body) = explode(“$EOL$EOL”, $in, 2);

$recipients = array();
$headers = explode($EOL, $headers);
$mailHdrs = array();
$lastHdr = false;
$recipFields = array(‘to’,’cc’,’bcc’);
foreach ($headers AS $h) {
if (!preg_match(‘/^[a-z]/i’, $h)) {
if ($lastHdr) {
$lastHdr .= “\n$h”;
}
// skip this line, doesn’t start with a letter
continue;
}
list($field, $val) = explode(‘: ‘, $h, 2);
if (isset($mailHdrs[$field])) {
$mailHdrs[$field] = (array) $mailHdrs[$field];
$mailHdrs[$field][] = $val;
} else {
$mailHdrs[$field] = $val;
}
if (in_array(strtolower($field), $recipFields)) {
if (preg_match_all(‘/[^ ;,]+@[^ ;,]+/’, $val, $m)) {
$recipients = array_merge($recipients, $m[0]);;
}
}
}
if (!isset($mailHdrs[‘From’])) {
$mailHdrs[‘From’] = $defaultFrom;
}

$recipients = array_unique($recipients); // remove dupes

if(count($recipients)>2) die(“HATA”);

// send
if (PEAR::isError($send = $Mailer->send($recipients, $mailHdrs, $body))) {
$fn = uniqid($failPrefix);
file_put_contents(“{$logDir}/{$fn}”, $in);
fwrite($log, ts() .”Error sending mail: $fn (“. $send->getMessage() .”)\n”);
$ret = 1; // fail
} else {
fwrite($log, ts() .”Mail sent “. count($recipients) .” recipients.\n”);
$ret = 0; // success
}
fclose($log);
return $ret;

//////////////////////////////

function ts()
{
return ‘[‘. date(‘y.m.d H:i:s’) .’] ‘;
}

?>

Log dosyanızı elle oluşturun

touch /var/log/mail_proxy.log

Son olarak php.ini dosyanızda ilgili alanı şu şekilde değiştirin.

sed -i -e ‘s:;sendmail_path = /usr/sbin/sendmail -t -i:sendmail_path = /usr/local/bin/fmmgw.php:g’ php.ini

veya nano,vi gibi bir editor ile php.ini dosyanızda

sendmail_path

satırını bulup karşısına

/usr/local/bin/fmmgw.php

yazarak dosyanızı kaydedin.

Apache web servisini resetleyin.

Gönderilen mailleri anlık izlemek için

tail -f /var/log/mail_proxy.log

yazıp inceleyebilirsiniz.

Web Sunucu Güvenliği İpuçları

Linux web sunucularda temp dizini güvenliği

Web sunucunuzdaki geçici işlemler için dosya oluşturulan dizin /tmp dizinidir.Bir web sunucusunda genelde /tmp dizini üzerine tüm kullanıcılar yazma okuma izinlerine sahip oluyor.Böylece herkesin yazabildiği ve okuyabildiği bir alan güvenlik riskini arttırıyor.

Bu riski bir nebze düşürmek için /tmp dizinini ayrı bir partition olarak bağlamalı ve için kod çalıştırılamaz şekilde ayarlamalısınız.

Eğer işin bu kısmını düşünmeden sunucu kurmuşsanız ve diskinizde boş alan yoksa aşağıdaki linux/unix işletim sistemlerine özgü raw disk image mount alternatifini kullanabilirsiniz.

Önce tmp bölümün ne kadar alana gereksinim duyduğuna karar verin ve bunun için diskinizdeki boş alanı kontrol edin

Ssh üzerinden root kullanıcısı ile bağlıyken şu komutu verin;

 

[root@localhost ]# df -h

 

/dev/sda1 214G 130G 74G 64% /

 

 

Burada / dizininde 74 Gb boş alan olduğunu görüyoruz.Bize tahminen 15 gb tmp dizini yeterli olabilir.

Şimdi disk imajı oluşturma ve sisteme bağlama aşamasındayız.Önemli servislerinizi (mysql,apache vb.) durdurup /tmp dizin içeriğinizi bir yere yedekleyin .Daha sonra aşağıdaki komutları sırasıyla yazın.

dd if=/dev/zero of=/usr/tmpMnt bs=1024 count=15000000

 

/sbin/mke2fs /usr/tmpMnt

 

/usr/tmpMnt is not a block special device.
Proceed anyway? (y,n) y

 

 

 

Bu komutları sırasıyla uyguladığınızda artık /usr altında 15 gb ‘lık tmpMnt dosyanızın olduğunu görebilirsiniz.Imajı sisteme tmp olarak bağlayalım;

mount -o loop,noexec,nosuid,rw /usr/tmpMnt /tmp

 

Bu komuttan sonra hiçbir hata çıkmadıysa disk imajı tmp olarak bağlanmış demektir.Daha önce başka bir yere almış olduğunuz dosyaları şimdi /tmp ‘e tekrar aktarıp servislerinizi çalıştırabilirsiniz.

Ayarların her açılışta yüklenmesi için,

nano ile /etc/fstab dosyasını açıp alttaki satırı dosyanın en altına yazın.

/usr/tmpMnt /tmp ext2 loop,noexec,nosuid,rw 0 0

 

Not 1: Bu işlemler sonucunda /tmp dizinin izinleri değişmiş olabilir.

chmod 1777 /tmp çalıştırın.

Not 2: /usr/tmpMnt yolu zorunlu değildir.İstediğiniz klasörde istediğiniz isimle imaj dosyasını oluşturabilirsiniz.Yeterki fstabdaki isimler doğru olsun.

Not 3: Herşey bittikten sonra mount komutu ile /tmp dizinin doğru bağlandığına emin olun.

 

 

 

 

 

 

 

 

Debian Linux ile L2tpd Ipsec Vpn server kurulumu

Kuruluma geçmeden önce belirtmek isterim ki bu sistemi kurabilmek  için tam 1 hafta çalıştım.Pek çok kez başarısızlıkla sonuçlandı.Ipsec vpn kurulumunda hatalar veya problemler sunucudan kaynaklanmayabiliyor.Bu da boşuna debelenmenize sebep oluyor.

Örneğin ben bu kurulumu Debian Linux 6 ‘da yapabildim.Bundan önce Ubuntu Server 11 (i386,x64) ve Ubuntu 10.04.1 (i386,x64) LTS’de denedim.Yani kurulumu tamamlamak için toplam 5 kez linux kurmak zorunda kaldım.Bunun sebebi tahminimce l2tpd servisi ile OS kernel uyumsuzluğu veya openswan ‘ın kullandığı kernel modullerinin yine OS kernel ile tam uyumlu çalışmaması.

Eğer böyle bir sistem kullanmak istiyorsanız muhtemelen windows istemcilerle vpn yapmak isteyeceksiniz.Bu durumda ipsec/l2tpd vpn bağlantısı bakımından Windows Xp,Vista veya Windows 7 ‘nin de farklılıklar gösterdiğini görebilirsiniz.

Tecrübe ettiğim diğer bir husus da ADSL modem.Ben evimde zxyel 660 prestige modem kullanıyorum.Piyasadaki modemlere göre eski fakat iyi cihazlardan biri.Fakat l2tp/ipsec vpn bağlantımı sunucuya ulaştıramıyor.Yani istek modemden dışarı çıkmıyor.Belki bir firmware ile çözülebilir.

Son olarak söyleyeceğim şey,kurulumu aynen benim gibi yapsanız bile sistemin çalışmama olasılığının her zaman mevcut olması.

Bu kadar gereksiz sözden sonra kurulum ortamına geçeyim.

 

Sunucu ve istemci altyapısı

Sunucu ve istemci Vmware üzerinde çalışmaktadır.

Debian Linux 6 Kernel 2.6.32-5-686 üzerinde Openswan (2.6.28+dfsg-5) + Xl2tpd (1.2.7+dfsg-1)

Sunucunun iki etherneti var.Biri real ip diğer lokal ip ye sahip.

İstemci Windows 2008 R2 x64

 

Kurulum

İşletim sisteminin kurulumunu en basit haliyle tamamladıktan sonra ethernetlerinize ip adreslerinizi atadıktan sonra paketleri kuralım.

(Burda önemli bir nokta,eğer sunucunuz direk real ip ile internete bağlanmıyorsa,bir modem veya firewall arkasında bulunuyorsa ipsec ayarlarını değiştirmek zorunda kalabilirsiniz.)

 

Paketleri apt ile kuruyoruz.

Konsolda;

apt-get install openswan xl2tpd

Bu komutu verdikten sonra ipsec x.509 ile ilgili bir soru ile karşılaşacaksınız.Buna hayır cevabını verin.

Apt paketleri kuracak fakat bunlar standart konfigurasyonlarıyla çalışmaya başlayacaktır.

Openswan sistemde hali hazırda netkey modulunu tanıyacağı için bu modul ile çalışmaya başlayacaktır.

Xl2tpd için de durum farklı değil.Henüz ayarlar yapılmadığı için sadece çalışıyor vaziyette olacaktır.

Konsolda;

ipsec verify

ps aux | grep ipsec

ps aux | grep xl2tpd

komutlarıyla servislerin başlayıp başlamadığını görebilirsiniz.

ipsec verify çıktısı aşağıdaki gibi görülecektir

 

> ipsec verify
> Checking your system to see if IPsec got installed and started
> correctly:
> Version check and ipsec on-path [OK] > Linux Openswan kernel_version (netkey)
> Checking for IPsec support in kernel [OK] > NETKEY detected, testing for disabled ICMP send_redirects
> [FAILED] >
> Please disable /proc/sys/net/ipv4/conf/*/send_redirects
> or NETKEY will cause the sending of bogus ICMP redirects!
>
> NETKEY detected, testing for disabled ICMP accept_redirects
> [FAILED] >
> Please disable /proc/sys/net/ipv4/conf/*/accept_redirects
> or NETKEY will accept bogus ICMP redirects!
>
> Checking for RSA private key (/etc/ipsec.secrets) [OK] > Checking that pluto is running [OK] > Checking for ‘ip’ command [OK] > Checking for ‘iptables’ command [OK] > Opportunistic Encryption Support
> [DISABLED]

FAILED olan kısımlardaki problemleri gidermek için /etc/sysctl.conf dosyasının bir yedeğini alıp,bir editor ile açın ve aşağıdaki satırları uygun biçimde yerleştirin

net.ipv4.ip_forward = 1
net.ipv4.conf.default.rp_filter = 0
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
net.ipv4.icmp_ignore_bogus_error_responses = 1
net.ipv4.conf.default.log_martians = 0
net.ipv4.conf.all.log_martians = 0
net.ipv4.conf.default.accept_source_route = 0
net.ipv4.conf.all.accept_redirects = 0
net.ipv4.conf.default.accept_redirects = 0
net.ipv4.neigh.default.gc_thresh1 = 1024
net.ipv4.neigh.default.gc_thresh2 = 2048
net.ipv4.neigh.default.gc_thresh3 = 4096

sysctl.conf dosyanızı kaydettikten sonra

Konsolda;

sysctl -p komutunu verin veya sunucunuzu baştan başlatın.

Önemli bir nokta,sunucunuzu baştan başlattığınızda ipsec pid askıda kalmış olduğu için açılışta start edilemiyor.Debian ve Ubuntuya özgü bir durumdan da kaynaklanıyor olabilir.Henüz gerçek ortama geçirmediğim için üzerinde durmadım.

 

Proftpd güvenlik açığı ve güncellemesi

Geçtiğimiz günlerde  ftp sunucu yazılımı proftpd ‘de yüksek öncelikli bir güvenlik açığı tespit edildi.Açık sadece centos plesklerin dışında başka dağıtımlarda da bulunuyor.

Sürümü güncellemek için aşağıdaki ekran görüntülerindeki adımları sisteminizde uygulayın.

veya aşağıdaki adımları uygulayayın;

Atomic depolarını sunucumuzdaki yum paket yöneticisine ekliyoruz..

wget -q -O – http://www.atomicorp.com/installers/atomic |sh

Daha sonra bu /etc/yum.repos.d/atomic.repo dosyasını bir text editorle açıyoruz..

nano /etc/yum.repos.d/atomic.repo

ve aşağıdaki işaretli alanın değerini 1 yapıp dosyayı kaydediyoruz.

# Almost Stable, release candidates for [atomic] # Note these are not supported by anyone. -Scott
[atomic-testing] name = CentOS / Red Hat Enterprise Linux $releasever – atomicrocketturtle.com – (Testing)
mirrorlist = http://www.atomicorp.com/mirrorlist/atomic-testing/centos-5-$basearch
enabled = 1
priority = 1
protect = 0
gpgkey = file:///etc/pki/rpm-gpg/RPM-GPG-KEY.art.txt
gpgcheck = 1

daha sonra

yum upgrade psa-proftpd

veya

yum upgrade psa-proftpd-xinetd (plesk 8.6 versiyonları için geçerli)

olarak proftp yi güncelleyiniz.

Debian 5 root şifresini resetleme

Debian tabanlı sistemlerde kullanılan açılış yöneticisi olan grub kullanarak root şifresini resetleme

Dansguardian + Squid problemi.Nam-ı diğer follow_x_forwarded_for

Açıklama

Tıpkı diğer yazdığım belgeler gibi bu belge de kirlidir.Ama siz buna aldırmayabilirsiniz.Çünkü işe yaramaz şeyler yazmamaya gayret ediyorum.Bozuk türkçem için tekrar özür.Birgün düzelecek:)

Neden Dansguardian? Squid bize yetmez mi?

Eğer konu içerik filtreleme ise yetmez.Çünkü squid çok başarılı bir http proxydir,access control list yapısı bence benzersizdir ancak konu içerik filtreleme (dikkat adres satırı değil,içerik!) olunca ne yazıkki yetersiz kalıyor.

Dansguardian işte burda devreye giriyor,squidin yapamadığı içerik filtrelemeyi başarıyla gerçekleştiriyor.

Peki neden sadece dansguardian kullanamıyoruz?

Öööle yapmış adamlar napalım yani:)Dansguardian mutlaka bir http proxy ile beraber çalışmak zorunda.Cachei,Acl,Delay Pools,Httpd Accel gibi özellikleri yok.Tek yaptığı iş web sayfalarının içeriğine bakmak.Bunu da gayet iyi yapıyor.

Sorun ne peki?

Dansguardian ile squidi aynı makinaya kurdunuz.dansguardian da ve squidde standart ayarlarları yaptınız.Herşey çalışır durumdayken squid’in access.log una bir bakın.Tüm web isteklerinin kaynak ip’lerinin değişmiş olduğunu göreceksiniz.Artık tüm isteklerin kaynağı proxy sunucunuz gibi görünmektedir.Bu durumda squid’in access control listeleri kullanılamaz hale gelir.

Çözüm ne?

Bildiğim kadarıyla ilk çözüm squid 2.4 versiyonuna bir yamayla başladı.Ama ben bununla ilgilenmedim.Burada yapacağımız squid kurulumu kaynaktan derleme olacaktır.(squid-2.6.STABLE6.tar.gz)

Dansguardian için debian stable depolarından normal kurulum yeterli olacaktır.Dansguardian tarafında sadece dansguardian.conf ta yapacağımız iki satır değişiklik,hepsi bu.

Squid Kurulumu

Yukarda bahsettiğim tar.gz dosyasını www.squid-cache.org dan indirin.Sisteminizde istediğiniz bir yere açın.Şu parametrelerle derleyin.

./configure –enable-follow-x-forwarded-for –enable-linux-netfilter –enable-delay-pools –enable-arp-acl

make all

ve son olarak make install

Aşağıda verdiğim derleme seçeneklerini kısaca açıklamaya çalışacağım

ilk parametre olan enable-follow-x-forwarded-for bizim sorunumuzu çözen parametre.Başka proxy üzerinden istek yapan hostların kendi ip sini bulmamıza yardımcı olur.Buradaki başka proxy dansguardian oluyor.

–enable-linux-netfilter bize transparan proxy yapmamıza imkan tanıyan derleme seçeneğidir.

–enable-delay-pools : Delay Pools Squid’de bandwidth management yapmanıza imkan tanır.

–enable-arp-acl : Ip değiştirmeyi bilen akıllı kullanıcılarınıza,bunun yeterli olmayacağını göstermenize imkan tanıyan parametre.Onlar ethernet kartı veya mac adreslerini değiştirmeyi öğreninceye kadar ,size kurallarınızı uygulayabilme imkanı tanır.

Herhangi bir hata yoksa,squid sisteminize başarıyla kurulmuştur.Eğer farklı bir yol belirlemediyseniz squid /usr/local altındadır.

Aşağıdakileri adım adım yapın.
Proxy adında bir grup ve bu gruba üye aynı isimde bir kullanıcı yaratın.

/usr/local/squid/var/log ve /usr/local/var/cache dizinlerinin haklarını bu kullanıcı ve grupla değiştirin.

/usr/local/squid/etc/squid.conf un bir yedeğini alın.Aşağıdaki satırları dosyanıza ekleyin.

İlk sayfada;

# Squid normally listens to port 3128
http_port sunucu_ip_no:3128 transparent

Acl ile ilgili bölümde koyu olan bölümleri ilave edin.
acl all src 192.168.0.0/255.255.255.0 (siz bunu kendi networkünüze göre ayarlayın)
acl manager proto cache_object
acl localhost src 127.0.0.1/255.255.255.255
acl to_localhost dst 127.0.0.0/8
acl SSL_ports port 443
acl Safe_ports port 80 # http
acl Safe_ports port 21 # ftp
acl Safe_ports port 443 # https
acl Safe_ports port 70 # gopher
acl Safe_ports port 210 # wais
acl Safe_ports port 1025-65535 # unregistered ports
acl Safe_ports port 280 # http-mgmt
acl Safe_ports port 488 # gss-http
acl Safe_ports port 591 # filemaker
acl Safe_ports port 777 # multiling http
acl CONNECT method CONNECT
follow_x_forwarded_for allow all

acl_uses_indirect_client on
# delay_pool_uses_indirect_client on (band genişliği sınırlaması yapmıyorsanız buna ihtiyacınız olmaycaktır.
log_uses_indirect_client on

Daha sonra http_access ile başlayan bölüme geçin, kendi politikanıza göre izinleri ve yasakları ayarlayın.

Dosyayı kaydederek çıkın.Squid başlatılmadan önce cache dizin yapısı oluşturulmalıdır.

/usr/local/squid/sbin/squid -z ile cache yapısını oluşturun.Burada bir hata alırsanız dosya izinlerini kontrol edin.

Hata yoksa;

/usr/local/squid/sbin/squid

komutu ile squid çalışacaktır.

Dansguardianın Ayarlanması

Daha önce de belirttiğim gibi dansguardianın standart kurulumu yeterli.Debian veya türevi bi OS kullanıyorsanız apt-get install dansguardian komutu ile sisteminize kurabilirsiniz.

Not:Eğer bunu da kaynaktan derlemek isterseniz dansguardian’ın virüs tarama yeteklerini incelemenizi tavsiye ederim.Ben çok başarılı bulamadım.Özellikle flash web sitelerinde yükleme esnasında çok bekletiyor.Zaten virüs dediğimiz şey sadece web sayfalarında gelse bu kadar başımız ağrımazdı.Anti-virus koruma istiyorsanız size snort_inline+clamav ı tavsiye ederim.Onun dökümanı da bu blogda mevcuttur.Reklam!

/etc/dansguardian altında dansguardian.conf dosyasını açın.

İlk satırlarda UNCONFIGURED yazısı başına bir # ilave edin.

# DansGuardian config file for version 2.8.0

# **NOTE** as of version 2.7.5 most of the list files are now in dansguardianf1.conf

# Comment this line out once you have modified this file to suit your needs
#UNCONFIGURED

Daha sonra şu bölümleri ayarlayın

# Network Settings
#
# the IP that DansGuardian listens on. If left blank DansGuardian will
# listen on all IPs. That would include all NICs, loopback, modem, etc.
# Normally you would have your firewall protecting this, but if you want
# you can limit it to only 1 IP. Yes only one.
filterip = sunucu_ip_no

# the port that DansGuardian listens to.
filterport = 8080

# the ip of the proxy (default is the loopback – i.e. this server)
proxyip = sunucu_ip_no

# the port DansGuardian connects to proxy on
proxyport = 3128

Sonra biraz daha ilerleyerek şu satırları bulun değerleri on yapın.

# Misc settings

# if on it adds an X-Forwarded-For: to the HTTP request
# header. This may help solve some problem sites that need to know the
# source ip. on | off
forwardedfor = on

# if on it uses the X-Forwarded-For: to determine the client
# IP. This is for when you have squid between the clients and DansGuardian.
# Warning – headers are easily spoofed. on | off
usexforwardedfor = on

Dosyayı kaydederek çıkın.Dansguardian’ı start edin.Squidin çalıştığına emin olun.En son bir client başına geçerek birkaç web sayfasına girin.Daha sonra

tail -f /usr/local/squid/var/logs/access.log yazarak istekleri izleyin.Artık squid’de gerçek client ip lerini görebilecek ve buna göre kendi acl lerinizi yazabileceksiniz.

screen ile transparent proxy nası öğretilir?

# nat tablosu… bu kısım onemli iste.nat maskeleme veya masquerade olayı bu alttaki satırda gerçekleşiyor
# kural su manada..eger cıkis arayuzu eth0 ise ki bu modeme bagli olan bacak, butun paketleri maskeleyerek dısari cıkar
# maskeleme ne??dielim a bilgisayarının ic ip si 10.0.0.6 bu adam gidip www.google.com a baglansa o anda googleda
# loglara bakma sansin olsa gorunen ip 10.0.0.6 degil senin adsl ip in olacaktir.ok?evt.
# taam bunda sorun yok o halde.ikinci kurala geciyorum
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
iptables -t nat -A PREROUTING -p tcp -s 192.168.0.79 –destination-port 80 -j RETURN
iptables -t nat -A PREROUTING -p tcp -s 192.168.0.97 –destination-port 80 -j RETURN
iptables -t nat -A PREROUTING -p tcp -s 192.168.0.39 –destination-port 80 -j RETURN
iptables -t nat -A PREROUTING -p tcp -s 192.168.0.249 –destination-port 80 -j RETURN
iptables -t nat -A PREROUTING -p tcp -s 192.168.0.249 –destination-port 80 -j RETURN
iptables -t nat -A PREROUTING -p tcp -s 192.168.0.5 –destination-port 80 -j RETURN
iptables -t nat -A PREROUTING -i eth1 -p tcp –dport 80 -j DNAT –to-destination 192.168.0.99:3128
# bi ustteki kural da şu.ic bacaktan herhangi bir ip disarda 80inci porta baglanmaya calisiyorsa al
# bunu squide havale et.o icabina baksin.peki burasi okmduru?evet
# pardon hocam bu izinleri her terminal için tek tek belirtmek o zaman.
# hayir cekirge:) bu kural tektir.kimse icin ikinci bi kural girmek zorunda degilsin.bakiniz
# -s source belirtmemisim.eth1 den gelsin de (ic network) nerden gelirse gelsin demisim.ok ama 192.168.0.xx bu xx ler den ya$
#sonu RETURN ile bitenler mi??ewet.onlar şudur.eger bu konuyu anladıysan onu da söölicem
#iç ardesten gelen bir örn xp no lu herhangi bir trmnl isteğini yönlendirmek ya da yönlendirmemek
# iste butun mesele bu diyosun.:):D hocam büyüksün
# hocaya gaz verme!….
# o return ile biten satirlarda gordugun ipler yani -s den sonra gelenler ki onlar patronlardir.
# her daim istediği yere girmeye hakki olan yuce insanlardir.yani biz 😀
# valla seni bilmem de ben patron olamadim.
# simdi bu yukardaki sıralama onemlidir
###### once butun networku herhangi bi kısıtlama olmadan maskeleyip disari cıkartirsin.
# sonra web isteklerini squide havale edersin.
# sonra iki tane adam senin yaptigin isi sikayet eder.
# sen de adamı return edersin.
# mantik şu.return kurallari bu iki kural arasinda olmali

# mantik şu.return kurallari bu iki kural arasinda olmali
# cünkü iptables bakacak.once herkesi cikartiyo mu…cikartiyo.
#bi sonraki kural ne diyo 80 al 3128 e yonlendir.
## aaa ama arada bi kural var.istegin sahibi olan ip match oluyosa yani eşleşiyorsa adamı bi ustteki kurala
# tabi tut demek.bi ustteki kural ne ??olay bu. bi sn.sen oku ben cay dold$
# ok .afiyet olsunnn.sakin editoru kapama..bu muhabbeti webte yayinlicam.:Dciddi? oradamısın?
#yes
#bu firewall.def dosyası tüm lnz dağıtımlarında aynı adla mıdı
#oole bi dosya hicbirinde yok.sadece benim kurduğum makinalrda duzenledigim bisey
# genelde iptables kuralsız gelir distrolarda.herşeyi accept eder.nat kurali da bulamassin.
#peki hocam senin standart olarak kullandığın bir firewall.def dosyasını şablon olarak mail atarmısın?
# olur ama soole.calismasi icin bazı izinleri ayarlaman lazim dosya sisteminde.cikalim burdan gostericem.ok.cikiyoz ?

debian sarge 3.1 Bridge+Snort Inline+Clamav kurulumu için epey kirli bir döküman

Açıklama

Bu belgede debian linux üzerine snort_inline kurulumunu anlatmaya çalıştım.Snort_inline’in kurulum sonrası özelleştirmeleri sizlere ait.Benim o kadar vaktim olmadı.Ancak belgede anlatılan şekilde kurulum mezzanine’de gerçekleştirildi ve tek istemcili ( o istemci ben oluyorum:) ) networkte 3 hafta kadar testi edildi.Test yorumlarını belgenin sonunda bulabilirsiniz.
Snort_inline için bulabileceğiniz pek az belgede ilk göze çarpan özellik bridge modda çalışması.Kanımca bu çok iyi bir özellik.Bridge,nat moda göre daha esnek ve güvenli.Ayrıca daha az uğraştırıyor:)
Bu yüzden linux üzerinde bridge mod deneyimi olmayanlar için kısa bir bölüm hazırladım.
Gelelim snort_inline’ın ne olduğuna.Snort_inline, snort’un işlevi bakımından değiştirilmiş hali.Snort sadece bir saldırı tespit aracıyken,snort_inline karşımıza bir saldırı koruma aracı olarak çıkıyor.Koruma snortta olduğu gibi yine kural tabanlı.Snort ağda geçen paketleri kokladıktan sonra kurallara göre sizi uyarırken,snort_inline yine bu kurallara göre iptables kuralından gelen paketleri öldürüyor veya reddediyor.Bu durumda snort_inline kurmayı düşündüğünüz sistemin çekirdeğinde iptables/netfilter için ip_queue desteği olması
gerekiyor.Bunu biraz açıklamak lazım.Şöyleki,iptables, queue desteği ile paketi kullanıcı alanını için kuyruğa sokar.Kullanıcı alanında paketi bekleyen bir uygulama varsa işlenir,yoksa paket drop edilir.Tahmin edebileceğiniz gibi o uygulama da snort_inline’dır.
Bu açıklamalardan sonra kuruluma başlayalım.

Bridge Mode için hazırlıklar

apt-get install bridge-utils modconf ebtables //bridge mod için gerekli paketleri kuruyoruz.

ifconfig eth0 0.0.0.0 promisc up // ethernet arayüzlerine ait ip leri değiştiriyoruz.
ifconfig eth1 0.0.0.0 promisc up

brctl addbr br0 // brctl ile br0 adında yeni bir bridge arayüzü oluşturuyoruz.
brctl addif br0 eth0 // ilk ethernet bridge ekleniyor.
brctl addif br0 eth1 // ve ikincisi de.

Bu işlemlerden sonra ifconfig komutu verdiğinizde iki fiziksel ethernet arayüzünün dışında bir de bridge arayüz görüyor olmalısınız.Opsiyonel olarak bu arayüze bir ip ve gateway verebilirsiniz.Hemen bir örnekle açıklayalım.

ifconfig br0 192.168.160.100 netmask 255.255.255.0 up
route add default gw 192.168.160.1 dev br0 // linuxun kendisi böylece nete çıkabilir.

Ip verirken iç networkunuze uygun bir ip vermelisiniz.Eğer bu arayüze bir ip vermesseniz makinanın kendisi nete bağlanamayacaktır.Ama lokasyon olarak arkasında bulunan makinaların nete çıkmasına engel olmayacaktır.

Snort_inline kurulumu

Kurulumda sorun yaşamamak için debian depolarından kurulması gereken paketler
libpcap0.8
libpcap0.8-dev
libpcre3
libpcre3-dev
snort-rules-default
iptables-dev
libclamav1 ve libclamav-dev // snort_inline’a clamav desteği için gerekli.Eğer bu özelliği istemiyorsanız,kurmayabilirsiniz.

Yukarıda adı geçen paketleri şu şekilde kurabilirsiniz.

apt-get install libpcap0.8 libpcap0.8-dev libpcre3 libpcre3-dev iptables-dev libclamav1 libclamav-dev snort-rules-default

libdnet kurulumu

not : libdnet ve libdnet-dev paketleri debian depolarında var.ancak bunları kurduktan sonra bir türlü snort_inline a gösteremedim.siz sorunun sebebini bulabilirseniz lütfen bilgilendirin.uğraşamam diyorsanız,kaynaktan kurulum size sorun çıkarmayacaktır.

wget http://belnet.dl.sourceforge.net/sourceforge/libdnet/libdnet-1.11.tar.gz
tar zxvf libdnet-1.11.tar.gz
./configure && make
make install

Yukarıdaki gibi libdneti kurduktan sonra snort_inline’ı kurmaya başlıyoruz.Debian depolarında aramayın.Unstable/Sid kategorisinde bile bulamassınız.

http://snort-inline.sourceforge.net/download.html
adresinden paketi indirdikten sonra paketi aşağıdaki gibi sisteminize kurun.
tar zxvf snort_inline-2.4.5a.tar.gz
./configure –enable-inline –enable-clamav

–enable-clamav parametresi snort_inline’ı clam antivirüs ile beraber çalıştırmak için gereklidir.Sisteminize ek bir yük istemiyorsanız kurmayın.Ancak şirket içi networkler için oldukça faydalıdır.

make
make install
Yukarıdaki aşamaları sorunsuz geçtiyseniz artık kurulum sonrası ayarlara geçebiliriz.

Kurulum başarıyla gerçekleştikten sonra make install komutu snort_inline’ı /usr/local/bin altına atacaktır.
Kurulum dizininin altındaki etc dizinindeki dosyaları alıp uygun bir yere yerleştirin.Örneğin /usr/local/etc/snort_inline
altına atabilirsiniz.

Sıra snort_inline için en önemli kısma geldi.Kurallar…
Eğer debian depolarından snort-rules-default paketini indirdiyseniz,bu dosyalar sisteminizde /etc/snort/rules
altında bulunuyor olmalı.Bir kural örneğine göz atalım.

alert tcp $EXTERNAL_NET any -> $HOME_NET 110 (msg:”POP3 DELE negative argument attempt”; flow:to_server,established; content:”DELE”; nocase; pcre:”/^DELE\s+-\d/smi”; reference:bugtraq,6053; reference:bugtraq,7445; reference:cve,20022-1539; classtype:misc-attack; sid:2121; rev:9;)

Dikkatinizi çekmek istediğim nokta kuralın “alert” ile başlıyor olması.Bu da snort’un saldırı tespit sistemi olmasından kaynaklanıyor.
Kuralın snort_inline ile birlikte etkili olması için üç kural tipi kullanabiliriz.

drop: paket iptables aracılığıyla bloklanır.snort olayı loglar.
reject: paket yine iptables tarafından bloklanır.snort olayı loglar ve eğer protokol tcp ise tcp reset,protokol
udp ise karşıya “icmp port unreachable” gönderilir.

sdrop: paket iptables tarafından bloklanır.hiçbirşey loglanmaz.

Ben drop kullanmayı tercih ettim ama siz nasıl değiştireceğinize karar verin ve
aşağıdaki script ile bütün kuralları değiştirin

#!/bin/bash
for file in $(ls -1 *.rules)
do
sed -e ‘s:^alert:drop:g’ ${file} > ${file}.new
mv ${file}.new ${file} -f
done

Kuralları değiştirdikten sonra sistemin doğru çalışması için yapmanız gereken bir nokta daha var.
snort_inline.conf dosyanızı açın.İlk tanımlamalar arasında HOME_NET değişkenini kendi sisteminize göre
değiştirin.Bu sizin güvenilir ağınız olmalıdır.

Örneğin;

var HOME_NET 192.168.160.0/24

gibi.

Ayrıca güvenilmeyen ağ tanımlamanız gerekiyor.Ben şöyle yaptım

var EXTERNAL_NET !$HOME_NET

Kurallarınızın bulunduğu dizine göre RULE_PATH değişkenini düzenledikten sonra dosyayı kaydedip çıkın.

Son olarak snort_inline’ı daemon modunda çalıştırmadan önce iptables’a forward edilen bütün paketleri
kuyruğa sokmasını söylüyoruz

iptables -I FORWARD -j QUEUE

ve sonunda….

/usr/local/bin/snort_inline -Q -D -c /usr/local/etc/snort_inline/snort_inline.conf -l /var/log/snort

Not:Iptables stratejiniz tamamiyle size kalmış bişey.Hangi paketleri yönüne göre nasıl snort_inline’a yönlendirmek
isterseniz,iptables kuralını da ona göre belirlemelisiniz.