pfSense CaptivePortal bypass Patch

pfSense üzerinde eğer CaptivePortal bacağında Tranparent Proxy hizmeti sunuyorsanız (squid2) sistemi bypass edebilecekleri bir bug ortaya çıkıyor.Kullanıcılar karşılama ekranına uğramadan direk Proxy server üzerinden internet’e erişebiliyorlar.Bu durum’da yaptığınız hotspot’un hiçbir geyiği kalmıyor ve dışarıdan ağınıza kolayca erişebilen kullanıcılar elde etmiş oluyorsunuz.(En son isteyeceğiniz bir durum sanırım.)

Çözümü için squid3 veya squid3 dev paketlerini kurarak çözebilirsiniz.Ama bu squid sürümleri şuan pfSense üzerinde stabil olmadığına ınandığım için veya inanmadığımız için squid2 kurup karşıya geçiyoruz.Bu durumlarda squid2’e aşağıdaki patch’i uygulayarak bu bug’tan kurtulabilirsiniz.

Not : Squid3-dev versiyonundaki Patch özelliğini squid2’ye göre uyarladım..Patch’i sadece pfSense 2.1.3 64 bit sürümünde test edilmiştir.Real pfSense makinenize kurmadan önce Sanal’da test etmenizi öneririm.

Patch’i uygulamak için Putty ile sanal makinenize bağlanın.Shell’e düşün ve aşağıdaki komutları sırasıyla koşturun.

fetch -a -o /usr/local/pkg http://sametyilmaz.com.tr/patch.tar.gz
tar -zxf /usr/local/pkg/patch.tar.gz -x
rm -rf patch.tar.gz

İşlemi tamamladıktan sonra PfSense Gui açın. Pfsense -> Proxy Server -> Patch captive portal seçeneğini işaretleyin.
pfsensebypass1
Ardından Services -> CaptivePortal ayarlarını tekrar save ediniz.

Son olarak Squid ve CaptivePortal servislerini restart ediniz.

Peki bypass işlemi nasıl oluyordu ?

Browser özelliklerinizde Proxy bilgisini manual olarak pfSense sunucunuzu gösterirseniz karşılama ekranı gelmeden proxy server üzerinden direk internete çıkarsınız. (Not: pfSense sunucusunda squid2 kurulu olması gerekir.Yalnız Squid’in default portunu değiştirmişse port scanner yapıp squid’in çalıştığı portu bulmanız gerekebilir.Nmap fazlasiyla işinizi görür.)

bypass

 

Eğer manual fixlemek isterseniz aşağıdaki dosyalarda değişiklik yapmanız gerekir.

/usr/local/pkg/squid.inc  açın.

bulun :

function squid_generate_rules($type) {
	global $config;

	$squid_conf = $config['installedpackages']['squid']['config'][0];

	if (($squid_conf['transparent_proxy'] != 'on') || ($squid_conf['allow_interface'] != 'on')) {
		return;
	}

değiştirin :

/* CaptivePortal Patch baslangic - Samet YILMAZ  */

function squid_generate_rules($type) {
	global $config,$pf_version;
	$squid_conf = $config['installedpackages']['squid']['config'][0];
	//check captive portal option
	$cp_file='/etc/inc/captiveportal.inc';
	$pfsense_version=preg_replace("/\s/","",file_get_contents("/etc/version"));
	$port = ($settings['proxy_port'] ? $settings['proxy_port'] : 3128);
		$cp_inc = file($cp_file);
		$new_cp_inc="";
		$found_rule=0;
		foreach ($cp_inc as $line){
			$new_line=$line;
			//remove applied squid patch
			if (preg_match('/skipto 65314 ip/',$line)){
				$found_rule++;
				$new_line ="";
				}
				
			if (substr($pfsense_version,0,3) > 2.0){
				if (preg_match('/255.255.255.255/',$line) && $squid_conf['patch_cp']){
					$found_rule++;
					$new_line .= "\n\t".'$cprules .= "add {$rulenum} skipto 65314 ip from any to {$ips} '.$port.' in\n";'."\n";
					$new_line .= "\t".'$cprules .= "add {$rulenum} skipto 65314 ip from {$ips} '.$port.' to any out\n";'."\n";
					}
			}
			else{
				//add squid patch option based on current config	            
				if (preg_match('/set 1 pass ip from any to/',$line) && $squid_conf['patch_cp']){
					$found_rule++;
					$new_line = "\t".'$cprules .= "add {$rulenum} set 1 skipto 65314 ip from any to {$ips} '.$port.' in\n";'."\n";
					$new_line .= $line;
					}
				if (preg_match('/set 1 pass ip from {/',$line) && $squid_conf['patch_cp']){
					$found_rule++;
					$new_line = "\t".'$cprules .= "add {$rulenum} set 1 skipto 65314 ip from {$ips} '.$port.' to any out\n";'."\n";
					$new_line .= $line;
					}
				}
			$new_cp_inc .= $new_line;
			}
		if (!file_exists('/root/'.$pfsense_version.'.captiveportal.inc.backup')) {
			copy ($cp_file,'/root/'.$pfsense_version.'.captiveportal.inc.backup');
			}
		if($found_rule > 0){
			file_put_contents($cp_file,$new_cp_inc, LOCK_EX);
			}
			
				//normal squid rule check
	if (($squid_conf['transparent_proxy'] != 'on') || ($squid_conf['allow_interface'] != 'on')) {
		return;
	}
/* CaptivePortal Patch bitis - Samet YILMAZ  */

/usr/local/pkg/squid.xml açın.

bulun :

		

			Allow users on interface
			allow_interface
			If this field is checked, the users connected to the interface selected in the 'Proxy interface' field will be allowed to use the proxy, i.e., there will be no need to add the interface's subnet to the list of allowed subnets. This is just a shortcut.
			checkbox
			
			on
		

Altına ekleyin.

		


			Patch captive portal
			patch_cp
			
						NOTE: You may need to reapply captive portal config after changing this option.]]>
			checkbox
		
		

Başka bir makale’de görüşmek üzere…

Benzer Yazılar

Yorumlar

  • Ali Sen , 19 Haziran 2014 - 13:59

    Sadece proxy’nin calisitigi porta direk erisimi engelleyen bir kural eklersek yeterli olur.
    Firewall: Rules : Lan (yada hangi interface ise) : Add new rule
    action :block
    Source : any yada Lan net yada kimi engelleyecek isek
    Destination : Lan address (yada hangi interface ise)
    Destination port range: 3128 (squid portu)

    etc..
    bu kuralı en tepeye koy ohh mis.

    Cevapla
    • Samet YILMAZ , 19 Haziran 2014 - 14:35

      Merhaba,

      Bu tamamen sizin keyfinize kalmış bir durum ama sadece kuralı lan bacağında yazmanız yetmeyebilir.Ekstra captiveportal.inc dosyasındada bu kurala benzer bir kural yazmanız gerekebilir.Zaten bu konudaki amaç Firewall Kurallarıyla cebellesmemek için yazılmıştır.

      Teşekkürler

      Cevapla
  • Hasip , 19 Haziran 2014 - 19:52

    Hocam takipteyim 🙂 Ancak https problemi sanırım halen devam ediyor 🙁

    Cevapla
  • Adem , 31 Temmuz 2014 - 22:23

    Merhaba Samet,
    Bu pach olayı 64 ve 32 bit sürümlerinde çalışmıyor bilgin olsun
    SQUİD bolumune girdigim zaman
    Parse error: syntax error, unexpected ‘;’ in /usr/local/pkg/squid.inc on line 1344
    hatası almaktayım
    Saygılarımla.

    Cevapla
  • Mustafa , 03 Ağustos 2014 - 09:27

    Merhaba Emeğiniz için teşekür ederim.
    Patch dosyasını shell’den koşturdum fakat Web’den Prox Servere Pathc Captive Portal checkbox’ı gelmedi yardımcı olabilir misiniz?

    Cevapla

Yorum Yazın

Su elementleri kullanabilirsiniz : <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>


üç + = dört

Arama
RSS
Beni yukari isinla