TC Kimlik ve SMS Doğrulamalı Hotspot Yapılandırması

Ghost Script, pfSense ile çalışan ve gelişmiş yönetici arayüzüne sahip tamamen ücretsiz bir hotspot projesidir. Bu sayede misafir kullanıcılarının, 5651 sayılı kanuna tabii olarak internet erişimlerine izin vermeniz mümkündür. Kullanıcılar internete SMS doğrulama ile, TC Kimlik doğrulaması ile ya da sistem yöneticisi tarafından oluşturulan fiş ile internete erişebiliyor olacaklardır. Bu yazımda pfSense hotspot yapılandırması hakkında bilgi veriyor olacağım. TC Kimlik ve SMS Doğrulamalı Hotspot Yapılandırması için aşağıdaki yönergeleri takip ediniz.

 

 *SMS Doğrulama  için ayrıca SMS hesabı satın alınmalı ve Ghost yönetim panelinden entegrasyonunun yapılması gerekmektedir. (Ghost Script’te varsayılan olarak desteklenen SMS hizmet sağlayıcısı https://www.iletimerkezi.com/dur.)

 

Teşekkürler:

Devam etmeden önce, Ghost Script’te emeği geçen başta Samet YILMAZ olmak üzere sırasıyla, Uğur DEMİR, Serhat SABUNCU ve Çözümpark’a teşekkürlerimi sunarım.

 

Bilindiği üzere pfSense’in yeni sürümleri ile birlikte php ve mysql’e gelen güncellemeler sonrasında Ghost Script çalışmamaya başlamıştı. Bunun en önemli nedenlerinden birisi php7 artık mysql_connect() ve mysql_query() fonksiyonlarını kullanımdan kaldırmış olmasıdır. pfSense’in şuan için en güncel sürümü olan pfSense 2.4.5 versiyonu için pfSense 2.5.0 versiyonu için Ghost Script’i çalışır hale getirerek sizinle paylaşıyorum.

 

Changelog:

  • Ghost Script php7’e uyumlu hale getirildi.
  • Radius.sql dosyasında bulunan radacct tablosundaki kolonlar yeniden düzenlendi.
  • Radcheck tablosunda olması gereken attribute’ler düzeltildi.
  • Önceki versiyonda TC Kimlik otantikasyonundan sonra kişiye, kullanıcı adı ve şifre oluşturuyordu. Kullanıcı adı TC Kimlik No, Şifre ise doğum yılı olacak şekilde değiştirildi.
  • SMS doğrulaması için operatör kodu validasyonu eklendi.
  • Radacct tablosunda acctinterval kolonunun eksik olması interim update esnasında hata döndürüyordu, ilgili kolon radacct tablosuna eklendi. (09.01.2021)
  • pfSense 2.4.5-Release-P1 sürümünde php72’ye ait bazı paketler (örneğin soap gibi) güvenlik açığı nedeniyle repodan kaldırılmış olmakla beraber php74’e ait paketler ise sistemle uyumlu değildi.  Bu yüzden pfSense 2.4.5-Release-P1 versiyonunda hotspot yapılandırması başarısız oluyordu.  Sorunu gidermek için pfSense 2.5.0 linki aşağıda verilmiştir. Lütfen hotspot yapılandırması için bu iso kalıbını kullanınız. (13.01.2021)

     

     

    Not
    pfSense kurulumu yapmadıysanız pfSense 2.5.0 ISO dosyasına ve kurulum adımlarına aşağıdan ulaşabilirsiniz.

     

    pfSense 2.5.0 ISO

    pfSense Kurulum Adımları

     

    İşlemler sırasında çok fazla kopyala yapıştır kullanıyor olacağımızdan ve de bu işlemleri VMware konsolunda yapamayacağımızdan dolayı sshd servisi enable etmemizde fayda var. Hem de bu sayede daha efektif çalışmış olacağız.  (14 sonrasında y ile onaylıyoruz)

    pfSense Enable SSHD

    pfSense Enable SSHD

     

    Artık SSH (Port 22) ile pfSense komut satırına geçiş yapabiliriz. Web Console’da giriş yaparken varsayılan kullanıcı admin olmasına karşın komut satırında root kullanıcısını kullanıyor olacağız. Şifre ise admin şifresi ile aynıdır. Giriş yaptıktan sonra 8 seçeneği ile komut satırına düşmemiz gerekmektedir. Bu kısımda PuTTY ya da herhangi bir terminal uygulaması kullanabilirsiniz.

     

    pfSense SSH Login

    pfSense SSH Login

     

    FreeBSD Reposunun Aktif Edilmesi:

    Dosya içeriğini düzenlerken “nano” kullanacağım ilk olarak aşağıdaki komutla kurulumunu gerçekleştiriyoruz.

    pkg install nano

     

    Sonrasında FreeBSD reposunu kullanabilmemiz için 2 dosyada düzenleme yapmamız gerekmektedir. Aşağıdaki dosyalarda  FreeBSD: { enabled: no }  parametresini  FreeBSD: { enabled: yes }  olarak değiştiriyoruz.

    nano /usr/local/etc/pkg/repos/pfSense.conf
    nano /usr/local/etc/pkg/repos/FreeBSD.conf

     

    Bilmeyenler olabilir, nano ile düzenlemiş olduğumuz dosyayı  CTRL + X  tuş kombinasyonundan sonra  Y  ve son olarak  Enter  tuşu ile kayıt ediyoruz.

    FreeBSD reposunu aktif ettiğimize göre repoyu  aşağıdaki komut ile güncelliyoruz:

    pkg update

     

    MySQL, Compact, MySQLi ve SOAP Kurulumu:

    Aşağıdaki komutları sırayla çalıştırıyoruz:

    pkg install mysql57-server
    pkg install compat9x-amd64 
    pkg install php74-mysqli
    pkg install php74-soap
    pkg install openssl

     

    Kurulumlar tamamlandıktan sonra pfSense reboot edildiğinde bile MySQL servisinin otomatik olarak başlaması için aşağıdaki komutu giriyoruz:

    echo 'mysql_enable="YES"' > /etc/rc.conf

     

    MySQL servisinin dosya uzantısı *.sh ile bitmeli bu yüzden mysql-server dosyasının adını mysql-server.sh ile değiştiriyoruz.

    mv /usr/local/etc/rc.d/mysql-server /usr/local/etc/rc.d/mysql-server.sh

     

    Her ihtimale karşın mysql-server.sh dosyası içinde bulunan  : ${mysql_enable=”NO”}  parametresini  : ${mysql_enable=”YES”}  olarak değiştiriyoruz. Bunun için de aşağıdaki gibi ilgili dosyayı nano ile düzenlememiz gerekmektedir.

    nano /usr/local/etc/rc.d/mysql-server.sh

     

    pfSense’i  yeniden başlatıyoruz.  Bu kısımı atlarsanız  mysql_secure_installation çalışmayacaktır.  pfSense ayağa kalktığında tekrar konsola bağlantı sağlıyoruz ve 8 ile yine komut satırına düşüyoruz. Aşağıdaki komut ile bizden MySQL root kullanıcısının şifresini değiştirip değiştirmek istemediğimizi soracaktır. y|Y ile değiştiriyoruz. Buraya verdiğiniz şifreyi not alın daha sonra kullanacağız. Geri kalan soruları Enter tuşu ile geçebilirsiniz.

    /usr/local/bin/mysql_secure_installation

     

    MySQL servisi çalışıyor mu konrol etmek için

    service mysql-server.sh status

     

    Şuna benzer bir çıktı ile karşılaşmalısınız, pid değişiklik gösterebilir.

    mysql is running as pid 57047.

     

     

    MySQL Veritabanı / Tablo oluşturma

    Root kullanıcısı ile MySQL’e bağlanıyoruz. Bizden MySQL’deki root kullanıcsının şifresini isteyecek

    mysql -u root -p

     

    Bu arada unutmadan root şifresi password policy’e takılıp expire olabiliyor. MySQL sunucusuna bağlantı sağlanamayınca FreeRadius servisi çalışmıyor. Sorun çıkarmaması adına aşağıdaki SQL sorgusunu çalıştırıyoruz.  ‘Şifreniz’  alanı MySQL root kullanıcısının şifresi ile değişmeli.

    ALTER USER 'root'@'localhost' IDENTIFIED BY 'Şifreniz',
           'root'@'localhost' PASSWORD EXPIRE NEVER;

     

    Sonrasında radius adında bir veritabanı oluşturuyoruz ve çıkıyoruz.

    CREATE DATABASE radius;
    
    exit

     

    Buradaki sql uzantılı dosyayı WinSCP tarzı bir programla pfSense’e gönderdikten sonra, aşağıdaki komutla önceden oluşturmuş olduğumuz radius veritabanına import ediyoruz. Yine root kullanıcımızın şifresini girmemiz gerekecek.

    mysql -u root -p radius < radius.sql

     

    Önemli !
    FreeRadius kurulumuna geçmeden önce, değişiklik yapmış olduğumuz dosyaları eski haline getiriyoruz.  FreeBSD: { enabled: yes }  parametresini  FreeBSD: { enabled: no}  olarak değiştiriyoruz.
    nano /usr/local/etc/pkg/repos/pfSense.conf
    nano /usr/local/etc/pkg/repos/FreeBSD.conf

     

    FreeRadius Kurulumu ve Yapılandırması:

    Bundan sonraki işlemleri Web Console’dan yapacağız. Admin kullanıcımız ve şifremiz ile login oluyoruz.

    pfSense Web Console

    pfSense Web Console

     

    System > Package Manager > Available Packages kısmından freeradius3 paketini install butonu sonrasında Confirm butonu ile kuruyoruz. Kurulum esnasında sayfayı yenilemeyin ya da sayfadan ayrılmayın. Aşağıdaki gibi bir çıktı ile karşılaştığınızda kurulum tamamlanmış demektir.

    Please visit Services > FreeRADIUS menu to configure the package.
    
    EAP certificate configuration is required before using the package.
    Visit System > Cert. Manager and create a CA and a server certificate.
    After that, visit Services > FreeRADIUS > EAP tab and complete
    the 'Certificates for TLS' section (and, optionally, also the 'EAP-TLS' section.)
    >>> Cleaning up cache... done.
    Success

     

     

    FreeRadius Nas / Clients

    Sonra Services > FreeRadius sekmesine gidiyoruz Nas/Clients kısmını aşağıdaki gibi ayarlıyoruz. Client Shared Secret’i not alın sonra bunu kullanıyor olacağız.

    FreeRadius Nas Clients

    FreeRadius Nas Clients

     

     

    FreeRadius Interfaces

    Bu kısımda Authentication ve Accounting Interface’leri tanımlayacağız. 1812 ve 1813 port’undan veri alış verişi olacak.

    Services > FreeRadius sekmesinden Interfaces bölümüne geçiyoruz. Add butonu ile aşağıdaki gibi interface’lerimizi yapılandırıyoruz.

     

    Authentication

    FreeRadius Authentication

    FreeRadius Authentication

     

    Accounting

    FreeRadius Accounting

    FreeRadius Accounting

     

     

    FreeRadius Interface kısmının son hali aşağıdaki gibi olmalıdır. Son kez Save butonuna basarak kayıt ediyoruz.

    Interface Son Görünüm

    Interface Son Görünüm

     

     

    FreeRadius SQL

    Services > FreeRadius > SQL bölümüne geçiyoruz. Yapılandırma aşağıdaki gibi olmalıdır. Database Username root kullanacağız zaten yukarıdaki adımda root için bir şifre tanımlamıştık.

    FreeRadius SQL 1

    FreeRadius SQL

     

    Aşağıda kalan varsayılan değerler bizim için yeterli başka birşey değiştirmeye gerek yok. En altta bulunan Save butonu ile ayarlarımızı kayıt ediyoruz.

     

     

    Authentication Servers Yapılandırması:

    System > User Manager > Authentication Servers yolu izlendikten sonra Add butonu ile Radius ile otantikasyon metodunu ekliyoruz.

    Radius Kimlik Doğrulama Sunucusu

    Radius Kimlik Doğrulama Sunucusu

     

    Bu kısımda yine unutulmaması gereken Shared Secret yerine FreeRadius’ta NAS / Client yapılandırması yaparken kullanmış olduğumuz Secret Key’i girmemiz gerekmektedir. Sonrasında Save butonu ile ayarlarımızı kayıt ediyoruz.

     

     

    Captive Portal Yapılandırması:

    Services > Captive Portal alanından Add butonu ile ilk Captive Portal’ımızı oluşturmaya başlayabiliriz.

    Captive Portal 1

    Captive Portal 1

     

    Save & Continue dedikten sonra Enable Captive Portal kutucuğunu işaretliyoruz.

    Captive Portal 2

    Captive Portal 2

     

    HTML Page Contents kısmına kadar ki seçeneklere dokunmuyorum. İstendiği takdirde değiştirilebilir. Örn: Kullanıcı giriş yaptıktan sonra hangi sayfaya yönlendirilecek gibi.

    Aşağıdaki adıma geçmeden önce buradan GhostPortal Karşılama Sayfası dosyalarını indirmelisiniz. Sıkıştırılmış dosyayı bir yere çıkardıktan sonra captiveportal-config.php dosyasını editlememiz gerekiyor. Sayfanın başında aşağıdaki DB’e bağlanması için gerekli bilgileri doğru bir şekilde girmemiz gerekmektedir. Değişiklikleri kayıt ediyoruz.

    $kullaniciadi="root"; // Veritabanı kullanıcı adınız
    $sifre= "sifreniz"; // Veritabanı kullanıcı şifreniz
    $host="localhost"; // Genelde "localhost"'tur. Eğer mysql sunucunuz başka bir yerdeyse onun IP/Hostname'ini giriniz.
    $veritabani="radius"; // varsayılan olarak "radius". veritabanına başka bir isim verdiysen değiştirmen gerekecek.

     

    Kaldığımız yerden devam ediyoruz. Use custom captive portal login page kutucuğunu işaretledikten sonra ghostportal.rar dosyasından çıkarmış olduğumuz index.html‘i Portal page contents kısmından Choose file diyerek seçiyoruz. Auth error page contents kısmından da choose file dedikten sonra hata.html seçilmelidir. Diğer dosyaları daha sonra File Manager kısmından upload ediyor olacağız.

    Captive Portal 3

    Captive Portal 3

     

    Authentication kısmına indiğimizde ilk authentication sunucumuz FreeRadius ki T.C Kimlik ve SMS doğrulaması için kullanacağız, ikincisini de yerel kullanıcılar ile otantikasyon için Local Database olarak seçebiliriz.

    Captive Portal 4

    Captive Portal 4

     

    Geri kalan ayarları aşağıdaki gibi yaptıktan sonra Save butonuna basıyoruz.

    Captive Portal 5

     

    ghostportal.rar ile gelen dosyaları index.html ve hata.html hariç çünkü onları az önce import ettik. Geri kalan diğer dosyaları aşağıdan (File Manager) upload ediyoruz.

    Captive Portal File Manager 1

    Captive Portal File Manager 1

     

    Son durum aşağıdaki gibi olmalı, özellikle captiveportal-config.php dosyasının veritabanı ile alakalı kısmını kendinize göre düzenlemeden upload etmeyiniz.

    Captive Portal File Manager 2

    Captive Portal File Manager 2

     

     

    Ghost Admin Panel:

    Gelelim Ghost Script’in yönetici paneline buradaki ghostadmin.rar adlı dosyayı indirip sıkıştırılmış dosyadan çıkarıyoruz sonrasında  ghostadmin\inc\db_settings.php  isimli dosyayı aşağıdaki örnekte görüleceği üzere kendi veritabanı bilgilerimize göre düzenliyoruz.

    $kullaniciadi="root"; // Veritabanı kullanıcı adınız
    $sifre= "sifreniz"; // Veritabanı kullanıcı şifreniz
    $host="localhost"; // Genelde "localhost"'tur. Eğer mysql sunucunuz başka bir yerdeyse onun IP/Hostname'ini giriniz.
    $veritabani="radius"; // varsayılan olarak "radius". veritabanına başka bir isim verdiysen değiştirmen gerekecek.

     

    Sonrasında ghostadmin adlı klasörü WinSCP tarzı bir program kullanarak aşağıdaki dizinin altına gönderiyoruz.

    /usr/local/www/

     

    Ghost admin paneline erişmek için web tarayıcınızdan http://pfSenseIP/ghostadmin yolunu izlemeniz yeterlidir. Varsayılan panel bilgileri:

    Kullanici Adi: admin

    Şifre: ghost

    Ghost Admin Panel 1

    Ghost Admin Panel 1

     

    Ghost Admin Panel 2

    Ghost Admin Panel 2

     

     

    pfSense’i son bir kez daha  reboot  ediyorum. pfSense ayağa kalktığında Services > Status sekmesinde radiusd servisini kontrol ediyorum.

    Radiusd OK

    Radiusd OK

     

    Her ihtimale karşın System > Package Manager Available Packages kısmından Service_Watchdog 1.8.6 isimli paketi kuruyorum.

    Sonrasında Service > Service Watcdog kısmından freeradius servisini ekliyoruz ve kayıt ediyoruz. Bu sayede belirli aralıklarla FreeRadius servisinin çalışıp – çalışmadığını kontrol ediyor olacak. Servis durduğu zaman otomatik olarak tekrardan çalıştıracak.

    Watchdog

    Watchdog

     

    Yukarıdaki işlemler LAN bacağına uygulandı siz misafir için ayrıca bir interface tanımlayıp bu işlemleri ilgili interface için tanımlayabilirsiniz.

     

    Misafir Girişi Ekran Görüntüsü:

    TC Kimlik ve SMS Doğrulamalı Hotspot Yapılandırması

    TC Kimlik ve SMS Doğrulamalı Hotspot Yapılandırması

     

     

    Yapılandırmalar pfSense 2.5.0 Development Edition ile yapılmıştır. Hotspot sonraki versiyonlarda çalışır mı garantisi olmadığından dolayı sisteminizi ya da paketlerinizi upgrade etmeden önce bir yedeğinin alınmasını tavsiye ederim.

     

     

     

    Sıkça Sorulan Sorular (SSS)

    S: Kurulum sonrası hotspot çalışıyor fakat bir süre sonra aşağıdaki hatayı alıyoruz:
    Error: Can’t connect to local MySQL server through socket ‘/tmp/mysql.sock’ (2)

    C: Burada Yusuf Bey’e teşekkür ediyorum. Aşağıdaki çözüm yolunu uygulayabilirsiniz:
    “rm -rf /var/db/mysql/*” komutu ile mysql dizini altında bulunan bütün dosyalar silinmeli
    “nano /etc/rc.conf” dosyasının içindeki bulunan bütün girdileri silip yerine aşağıdaki yapılandırma ayarını hostname kısmını kendinize göre düzenleyerek girmelisiniz:

    hostname=”machinehostname”
    ifconfig_bge0=”DHCP”
    mysql_enable=”YES”

    ve son olarak pfSense reboot edilmelidir.

     

    S: İlk karşılama ekranı çok geç geliyor ne yapmalıyım?

    C: Eğer ilk karşılama ekranı çok geç geliyorsa Services > Captive Portal > Allowed Hostnames kısmından  fonts.googleapis.com ,  fonts.gstatic.com  adreslerini ekleyebilirsiniz.

    Walled Garden

    Walled Garden

     

    S: SMS ile  TC Kimlik doğrulamada kullanıcı adı GSM No, şifre ise rastgele üretilsin istiyorum. Bunu nasıl yapabilirim?

    C: Aşağıdaki dosyayı kullanarak SMS kimlik doğrulamada kullanıcıya giden sms’de kullanıcı adı: Telefon No –  şifre: Random olarak gönderilir. Bu dosyayı import ettikten sonra radius database’inde bulunan radcheck tablosundaki bütün kayıtların silinmesi gerekmektedir.

    İndir

     

    S: “You are connected” sorunu ile karşılaşıyorum. Bu sorunu nasıl aşabilirim?

    Konu hakkında Onur Bey’in bir çözüm yolu mevcut aşağıdaki linkten ilgili yoruma ulaşabilirsiniz:

    Çözüm

     

    pfSense


    Abone ol
    Bildir
    guest
    217 Yorum
    Eskiler
    En Yeniler Beğenilenler
    Satır İçi Geri Bildirimler
    Tüm yorumları görüntüle