Captive Portal Admin Girşi Olmadan User Acmak



  • Merhabalar. Devamlı ofiste olmamdığımdan cative portaldan gelen müşterilerimize  şifre açmamız gerekiyor.
    Ancan  kullanıcı adı ve şifre acan kişiye pfsensenin admin şifresi ile giriş yapmaktadır. yanlızca kullanıcıya user açma kapatma yetkisi vere bileceğim bir kullanıcı oluştura bilirmiyim kolay gleisn.



  • bende çpk denedim fakat olmadı. illa admin hesabı ile girmemizi istemekte. bunun için yardımlarınızı bekliyoruz arkadaşlar.



  • pfsense hangi versiyon kullanıyorsunuz



  • Merhaba

    Yaklaşık 15 gündür pfsense ile ilgileniyorum. Direkt 2.0 İle Başladım İşe.

    1.2.3 Varmı Bilmiyorum ama 2.0 da System Menüsünün Altında User Manager Var. Burdan Yeni Kullanıcı Tanımlayabilirsiniz. Bu Kullanıcıya Ulaşılabileği Menüleri Tek Tek Atayabilirsiniz



  • fakat tam admin  yetki olmadan user mensüsüne giremiyorsun.



  • 2.0 versiyonu



  • Arkadaşlar bi yerlerden bişeyler yaptılar ne yaptılar bilmiyorum ama iş yeri ev vs ip adresini browsera giriyorsun ve lokalden giriş yaptığın ekran geliyor. Gerekli user ı kendin girebilirsin. Bu şekilde bişey yapmayı denesen olmaz mı ??? Ben öyle yapıyorum yeterki ulaşabileceğim bi bilgisayar olsun. Eğer böyle bişey olur dersen ve nasıl olduğunu bulamazsan ben arkadaşlara sorarım



  • Selamlar…

    PfSense 1.2.3 üzerinde, benzer istekler olmuştu hazırda bir çözüm bulamadığımız için oturup bir şeyler yazmam ve sistemi modifiye etmem gerekmişti. Bu çalışma sırasında aşağıdaki özellikler sisteme eklenmişti...

    • Captive Portal da kullanıcı hesapları açabilen ancak sistemin geri kalan ayarlarına ulaşamayan bir sınırlı kullanıcı hesabı.
    • Saat sınırlamalı kullanıcı hesabı açılabilmesi ve süresi dolan kullanıcının oturumunun sonlandırılarak hesabın devre dışı bırakılması.
    • Kullanıcının bir formdan kayıt olması ve hesap bilgilerinin SMS ile cep telefonuna gönderilmesi.
    • Kullanıcın bir form üzerinden kimlik bilgileriyle kayıt olması ve TC Kimlik Numarasının nvi.gov.tr den kontrol edildikten sonra hesabın otomatik olarak açılması.
    • SMS ve TC Kimlik no ile kimlik doğrulamanın birlikte kullanılması.
    • Kullanıcıların parola değiştirebilmesi ve ilk oturum açışlarında parola değiştirmeye zorlanması.
    • Parolamı Unuttum seçeneği ile parola sıfırlama ve yeni parolanın SMS ile cep telefonuna gönderilmesi.
    • Üçüncü parti yazılımların Captive Portal üzerinde kullanıcı hesabı açıp kapatabilmeleri için bir API.
    • Multiwan ağlarda kullanıcının hangi WAN üzerinden çıkacağının seçilebilmesi.
    • tarih, kullanıcı adı, ip, mac gibi bilgilerin olduğu özelleştirilmiş log tutma sistemi.

    Bunları bir şeylerin yapılabildiğini, biraz uğraşırsanız özgür yazılımların size pek çok nimet sunduğunu ama bu nimetlerin her zaman hazır olarak önünüze konmayacağını örneklemek için yazıyorum. Özetle; elleriniz kirletmekten korkmuyorsanız pek çok şeyi yapmanız mümkün olabilir...

    Saygılarımla...



  • @seker
    Eger boyle bir sistem yaptıysanız lütfen birkaç kod paylaşarak sisteme siz de katkıda bulununuz.

    @leventates58
    Kullanıcı açabilmesi için extra bir user oluşturmaya sistem müsaade etmemektedir fakat amacınız admin yetkilerine sahip olmadan kullanıcı açılmasına izin vermek ise biraz php bilgisi ile bunu sağlayabilirsiniz, size bu konuya başlayabilmeniz için gerekli doneleri vereyim, aşağıdaki kodları yeni_kayit.php adıyla /usr/local/www içerisine kaydediniz. Deneme fırsatım olmadı, birkaç gün önce yazdığım sistemden istediğiniz yapıya göre uyarlandı. Üye kayıt formu basit şekilde örnek olması amacıyla hazırlandı, oraya kendi özelleştirilmiş ve görselleştirilmiş formunuzu ekleyebilirsiniz. Herhangi bir hata alırsanız yine bu konuya yazabilirsiniz.

    
    /**
    * Captive Portal'dan bagimsiz olarak kullanici eklenebilmesi icin hazirlanmistir.
    * Test edilmedi, mevcut bir sistemden orneklenmistir. Kullanim icin PHP bilgisi gerekmektedir.
    * 
    * 2011.08.13
    * Aydin Yakar
    */
    require("guiconfig_user.inc"); //guiconfig.inc dosyasi auth kaldirilarak guiconfig_user.inc isimle kaydedildi.
    
        if($_POST) {
    
            //kullanici adi ve sifreyi kucuk harf yapalim
            $_username = strtolower($_POST['username']);
            $_password = strtolower($_POST['password']);
            $_bitistar = $_POST['bitistarihi'];
            $_adsoyad  = $_POST['adisoyadi'];
    
            if (!is_array($config['captiveportal']['user']))
            {
                $config['captiveportal']['user'] = array();
            }
    
            captiveportal_users_sort();
            $a_user = &$config['captiveportal']['user'];
    
            //suresi dolan hesaplari sil
            $changed = false;
            for ($i = 0; $i < count($a_user); $i++) {
                if ($a_user[$i]['expirationdate'] && (strtotime("-1 day") > strtotime($a_user[$i]['expirationdate']))) {
                    unset($a_user[$i]);
                    $changed = true;
                }
            }
    
            if ($changed) {
                write_config();
            }
    
            foreach ($a_user as $userent) {
                if ($userent['name'] == $_username && $userent['password'] == md5($_password)) {
                    // login Ok, oturum ac
                    $loginok = true;
                    $loginDetay = $userent;
                    break;
                }
            }
    
            //kullanici ve sifre var ayni zamanda dogru
            if($loginok) 
            {
                // Login
                $orig_host = $_ENV['HTTP_HOST'];
                $orig_request = $_POST['redirurl'];
                $clientip = $_SERVER['REMOTE_ADDR'];
    
                $clientmac = arp_get_mac_by_ip($clientip);
                $macfilter = !isset($config['captiveportal']['nomacfilter']);
                if (!$clientmac && $macfilter) {
                    captiveportal_logportalauth("unauthenticated","noclientmac",$clientip,"ERROR");
                    echo "An error occured.  Please check the system logs for more information.";
                    log_error("Captive portal could not deterimine clients MAC address.  Disable MAC address filtering in captive portal if you do not needs this functionality.");
                    exit;
                }
                captiveportal_logportalauth($loginDetay['name'],$clientmac,$clientip,"LOGIN");
                portal_allow($clientip, $clientmac,$loginDetay['name']);
                header("Location: $orig_request");
    
            }  
            else
            {
                $userent['name']           = $_username;
                $userent['fullname']       = $_adsoyad;
                $userent['expirationdate'] = date("m/d/Y", strtotime($_bitistar));
                $userent['password']       = md5($_password);
    
                $a_user[] = $userent;
    
                write_config();
    
                // Login
                $orig_host = $_ENV['HTTP_HOST'];
                $orig_request = $_POST['redirurl'];
                $clientip = $_SERVER['REMOTE_ADDR'];
    
                $clientmac = arp_get_mac_by_ip($clientip);
                $macfilter = !isset($config['captiveportal']['nomacfilter']);
                if (!$clientmac && $macfilter) {
                    captiveportal_logportalauth("unauthenticated","noclientmac",$clientip,"ERROR");
                    echo "An error occured.  Please check the system logs for more information.";
                    log_error("Captive portal could not deterimine clients MAC address.  Disable MAC address filtering in captive portal if you do not needs this functionality.");
                    exit;
                }
                captiveportal_logportalauth($userent['name'],$clientmac,$clientip,"LOGIN");
                portal_allow($clientip, $clientmac,$userent['name']);
            }
    
        }
        else
        {
            /**
            * Yeni kullanici olusturulmasi icin gerekli kayit formunu olusturunuz.
            *     username = kullanici adi.
            *     password = sifresi
            *     bitistarihi = kullanicinin kullanim suresi
            *     adisoyadi = adi ve soyadi
            * 
            * Form POST methodu ile gonderilmelidir.
            */
            ?>
    
    <form name="yeniUyelik" action="uye_kayit.php" method="post">
                    Kulllanici Adi: 
    
                    Sifre: 
    
                    Ad Soyad: 
    
                    Uye Bitis Tarihi: 
    
                </form>
    
                }
    
    ?>
    
    


  • şimdi sizin dediğiniz gibi yeni_kayit.php dosyasını oluşturdum atılmasını istediğiniz yere attım daha sonra değiştirilmesi gereken dosya adını değiştirdim. ama php bilgim hiç olmadığı için o sayfayı açma girişimim başarız oldu diyebilirim. yani portal ip si ve portunu yazın ardına da yeni_kayit.php dedim olmadı. acaba dedim dosya izinlerinden mi kaynaklanıyor onu da 755 e çektim olması gerektiği gene ulaşamadım gene ulaşamadım :) sonra port adresini yazmadan denedim ve valaaaa açıldı… sonra pfsense in captive portalı üzerinde bir değişiklik yapayım dedim ama aşağıdaki hatayı aldım oda adını değiştirdiğimiz dosyadan kaynaklanıyordu.efendim sonra onu /usr/local/www/services_captiveportal.php dosyasının içinden editledim o bölümde çalıştı. sonra bütün hatalı dosyaları düzenledim ve yeni_kayit.php sayfası boş gelmeye başladı. ve kayıt edilen kullanıcı ile de giriş yapamadım.ama yeni_kayit.php kayıt edildikten sonra uye_kayit.php adında bir sayfaya yönlendi. şimdi bu sayfa bizde yok :) onu da bizimle paylaşır mısınız ve bu konuyla ilgili sizden tam bir paylaşım alabilmemiz mümkün mü? çünkü bu kadar şahane paylaşımın ardından o eksik kalırsa balı ağzımıza çalmış ama kaseyi götürmüş olacaksınız :) çok deyimsel oldu ama umarım özetlemişimdir. hemde hatalarla karşılacak olan arkadaşlara yardımcı olabilmişimdir.

    Warning: require(guiconfig.inc): failed to open stream: No such file or directory in /usr/local/www/services_captiveportal.php on line 44 Fatal error: require(): Failed opening required 'guiconfig.inc' (include_path='.:/etc/inc:/usr/local/www:/usr/local/captiveportal:/usr/local/pkg') in /usr/local/www/services_captiveportal.php on line 44



  • Merhaba, services_captiveportal.php ile bu yazdıklarım arasında herhangi bir bağlantı yok. uye_kayit ile yeni_kayit.php aslında aynı sayfalar sadece form kısmında yanlışlıkla "uye_kayit.php" adını kullanmışım, dosya adını hangisi yaptıysanız onu da o şekilde değiştirmeniz yeterli. Sıfır php bilgisi ile bunları yapmanız malesef biraz zor olacak çünkü yazdığım dosyayı test etme şansım olmadı ufak tefek hatalar olma ihtimali yüksek, bilgisayarımda kurulu pfSense olmadığı için hafta içerisinde yine yazacaklarınıza test ettikten sonra cevap verme şansım olur. Kolay gelsin..

    NOT: guiconfig.inc dosyasını kopyaladıktan sonra bahsettiğim düzenlemeyi yapmanız gerekiyor aksi halde o dosyayı kullanan birçok dosya hata verecek ve "captive portal" yapısını bozmuş olacaksınız.



  • Anlamadığım birşey var, madem her önüne gelen rahatlıkla kullanıcı adı alabilecek ve nete cıkab,lecek, o zaman captive portalın ne anlamı kaldı???
    ben normalde local sitemden kullanıcılara verğim user ların şifresini değiştirmeleri için bir forum hazırladım, bu normal ama k,ş,lerin serbestce üyelik alması pek kullanışlı değil gibi, ve dedğiniz  olayda mümkündür bu arada



  • @ZeuQma:

    Merhaba, services_captiveportal.php ile bu yazdıklarım arasında herhangi bir bağlantı yok. uye_kayit ile yeni_kayit.php aslında aynı sayfalar sadece form kısmında yanlışlıkla "uye_kayit.php" adını kullanmışım, dosya adını hangisi yaptıysanız onu da o şekilde değiştirmeniz yeterli. Sıfır php bilgisi ile bunları yapmanız malesef biraz zor olacak çünkü yazdığım dosyayı test etme şansım olmadı ufak tefek hatalar olma ihtimali yüksek, bilgisayarımda kurulu pfSense olmadığı için hafta içerisinde yine yazacaklarınıza test ettikten sonra cevap verme şansım olur. Kolay gelsin..

    NOT: guiconfig.inc dosyasını kopyaladıktan sonra bahsettiğim düzenlemeyi yapmanız gerekiyor aksi halde o dosyayı kullanan birçok dosya hata verecek ve "captive portal" yapısını bozmuş olacaksınız.

    nasıl services_captiveportal.php ile yok diyorsunuz? benim hatamın içinde satırı bile belli denemeden vermiş olduğunuz dosya için bu kadar emin konuşmayın isterseniz benimki tecrübe ile sabit.hatayı tekrardan aşağıya yazdım "services_captiveportal.php" 'ın içindeki 44 cü satır "require(guiconfig.inc)" bu dosyayı istiyor diyor. belki php bilgim olmayabilir ama okuma yazmam var. bilmiyorum ben mi yalnış okuyorum. yalnışım varsa düzeltin.

    Warning: require(guiconfig.inc): failed to open stream: No such file or directory in /usr/local/www/services_captiveportal.php on line 44 Fatal error: require(): Failed opening required 'guiconfig.inc' (include_path='.:/etc/inc:/usr/local/www:/usr/local/captiveportal:/usr/local/pkg') in /usr/local/www/services_captiveportal.php on line 44



  • @ercev
    Öncelikle yazımın tamamını okumanızı tavsiye ederim, bir önceki mesajımda da belirttiğim gibi guiconfig.inc dosyasının kopyasını almalı ve daha sonra aldığınız kopyanın adını guiconfig_user.inc olarak değiştirmelisiniz. Son olarak guiconfig_user.inc olarak değiştirdiğiniz dosyanın içerisinde require("auth.inc"); veya require_once("auth.inc"); ile üst kısımda yer alan satırın önüne // ekleyin. Böylelikle php dosyasına erişmek istediğiniz de sizden portal şifresi istemeyecektir.

    Form içerisinde action="uye_kayit.php" olarak belirttiğim kısmı da action="yeni_kayit.php" olarak değiştirin. Dosyaya http://pfsense_ip/yeni_kayit.php ile ulaşarak formu doldurup portaldan bağımsız kayıt işlemi yapabilirsiniz.

    services_captiveportal.php'nin hata vermesinin sebebi ise "guiconfig.inc" dosyasının kopyasını almak yerine direkt adını değiştirmeniz ile ilgili çünkü guiconfig.inc dosyasının web panelin hemen hemen bütün dosyaları kullanıyor ve adını değiştirmeniz veya içerisinde değişiklik yapmanız durumunda tüm panel fonksiyonları/işlevleri etkilenecektir.



  • Aydın bey merhaba
    yazınızdaki işlemleri sırasıyla yaptım ancak sayfayı actığımda " Fatal error: Call to undefined function is_subsystem_dirty() in /usr/local/www/guiconfig_user.inc on line 89" hatası veriyor.

    87 /* Some ajax scripts still need access to GUI */
    88 if(!$ignorefirmwarelock) {
    89        if (is_subsystem_dirty('firmwarelock')) {
                    if (!$d_isfwfile) {
                            header("Location: system_firmware.php");
                            exit;
                    } else {
                            return;
                    }
            }
    }
    guiconfig_user.inc  içeriği bu şekilde  89 da bu satır var : if (is_subsystem_dirty('firmwarelock')) {

    yardımcı olabilirseniz sevinirim



  • pfSense v2.0 ile kullanıcıya sadece kullanıcı açma yetkisi verilebilmekte fakat bana göre tek sorun Group Memberships kısmında. Çünkü kullanıcıya sadece kullanıcı açma yetkisi verilse bile Group Memberships adı altındaki herhangi bir grubu herhangi bir kullanıcıya atayabilmekte. Ör: admin grubunu kendisine kolayca atayabilir. Sonrası malum.



  • aydın beyin bahsettiği yeni_kayıt.php dosyasını oluşturdum guiconfig_user.inc dosyasını oluşturdum require auth kısmını kaldırdım. pencere açıldı sorunsuz yalnız bilgileri yazdıktan sonra kaydet e bastığımızda "Parse error: syntax error, unexpected $end in /usr/local/www/guiconfig_user.inc on line 1094" hatasını veriyor ilgili satıra baktığımda ?> işaretiyle kodlamayı bitirmiş bu problemi nasıl aşabilirim



  • @fubuta:

    Aydın bey merhaba
    yazınızdaki işlemleri sırasıyla yaptım ancak sayfayı actığımda " Fatal error: Call to undefined function is_subsystem_dirty() in /usr/local/www/guiconfig_user.inc on line 89" hatası veriyor.

    87 /* Some ajax scripts still need access to GUI */
    88 if(!$ignorefirmwarelock) {
    89        if (is_subsystem_dirty('firmwarelock')) {
                    if (!$d_isfwfile) {
                            header("Location: system_firmware.php");
                            exit;
                    } else {
                            return;
                    }
            }
    }
    guiconfig_user.inc  içeriği bu şekilde  89 da bu satır var : if (is_subsystem_dirty('firmwarelock')) {

    yardımcı olabilirseniz sevinirim

    Merhaba,

    Bu sistem 2.0 RC için yazılmıştı, yeni versiyonlarda fonksiyonlar farklı dosyalara alınmış olabilir. Auth dosyasında veya onun dahil ettiği bir dosya "util.inc" dosyasını dahil ediyordur.

    require("guiconfig_user.inc"); satırının altına require("util.inc"); satırını da ekleyiniz.

    Bu gibi durumlarda izlenmesi gereken yöntem öncelikle pfSense dosyalarının bilgisayara alınıp text arama editörleri (örn: notepad++) ile ilgili fonksiyonu aramak ve bulunduğu dosyayı projeye dahil etmektir.

    İyi çalışmalar.



  • merhaba pfsense de kullanıcı hesabı acıyoruz. peki bu açtıgımız kullanıcı hesaplarında kullanıcılar kendi profil bilgilerini görebiliyorlar mı.

    şifrelerini değiştirebilir mi kotalarını vb profil bilgi istatistiklerini görebilirler mi ?

    mikrotik te bunu yapabiliyorum ama pfsense de bilmiyorum.



  • @eXcitinG:

    merhaba pfsense de kullanıcı hesabı acıyoruz. peki bu açtıgımız kullanıcı hesaplarında kullanıcılar kendi profil bilgilerini görebiliyorlar mı.

    şifrelerini değiştirebilir mi kotalarını vb profil bilgi istatistiklerini görebilirler mi ?

    mikrotik te bunu yapabiliyorum ama pfsense de bilmiyorum.

    Bu özelliklerin hiçbiri pfSense'de yok, sonradan yazılması gereken özelliklerdir..


Log in to reply