Anasayfa » PFSense Ghost Hot Spot Modülü Kurulumu ve Ayarları

Makaleyi Paylaş

Güvenlik

PFSense Ghost Hot Spot Modülü Kurulumu ve Ayarları

 

Bu makalemizde PFSense üzerinde Hot Spot hizmetinin nasıl verileceğini anlatacağım ve geliştirmiş olduğumuz Ghost Hot Spot modülünün PFSense sunucusuna nasıl kurulacağı hakkında teknik bilgiler paylaşacağım.

Ghost Freeradius’un veri tabanına hükmeden PHP ile yazılmış basit ve geliştirilebilir bir scripttir. İstediğiniz gibi düzenleyebilir, Değiştirebilir hatta satabilirsiniz. Askere gideceğim için üzerinde çok fazla durmak daha iyi bir şeyler ortaya çıkarmak isterdim ama hem zaman hem de ücretsiz olarak dağıttığım scriptte daha fazla vakit kaybedemedim.


Ghost direk Freeradius ile entegre olarak çalıştığı için Firewall cihazınızın illa PFSense olması gerekmiyor. Freeradius kullanan herhangi bir firewall ile Ghostu sorunsuz çalıştırırsınız. 

Biz bu makalemizde PFSense üzerinde yapılandıracağımız için aşağıdaki konuları size anlatıyor olacağım.

Sponsor

– MySQL Server Kurulumu
– MySQL Veritabanı ve Kullanıcı Oluşturma İşlemleri
– Php Componentleri Kurulumu ve Php.ini Ayarları
– Ghost’un PfSense Public klasörüne kopyalanması ve Veritabanı Ayarları
– Squid,Freeradius 2 Kurulumu ve Ayarları
– Captive Portal Kurulumu ve Freeradius2 ile haberleşmesini sağlamak.
– Freeradius2 ile MYSQL Sunucusunu haberleştirmek
– Ghost İlk Ayarlar
– Freeradius Attribute Mantığı

Özellikler
Karşılma Ekranı
Dört adet Kimlik Doğrulama seçeneği
– Tc kimlik doğrulamalı otomatik giriş sistemi.
– Sms ile üyelik işlemi
– Voucher kodu ile giriş
– Normal giriş
– Mobil Tasarım
Yönetici Paneli Özellikleri
Log Yönetimi
Kullanıcı Giriş Logları
Kullanıcı Detaylı Loglar (Upload,Download,Username,Password,Session Time,IP,MAC)
Sms Logları (Username,Password,Telefon No,Gönderim Durumu (Başarılı,Başarısız)
Kullanıcı Yönetimi
Saatlik, Günlük, Haftalık, Sınırsız Kullanıcı Ekleyebilme, Silme, Düzenleme
Online Kullanıcı Takibi
Genel Ayarlar
SMS Ayarları ve Şifre Limitleri
Ghost şifre değiştirebilme

Resimlerle Ghost

clip_image002

Captive Portal Karşılama Ekranı
clip_image004

Eğer Freeradius2 kurulumunu MySQL Server’den önce yaparsanız Freeradius2 ile beraber gelen MySQL Client ile bizim kuracağımız aynı versiyon olmadığından dolayı Kurulumda hatalarla karşılaşabilirsiniz. Size önerim makaleyi takip etmeniz ve ilk MySQL Sunucusunun kurulumunu tamamlamanız. Eğer Freeradius hali hazırda çalışıyorsa pkg_info komutunu SSH üzerinde koşturup kullanılan MySQL Client yazılımın sürümüne göre MySQL Server versiyon seçimi yapılabilir.

Kurulumu başlatmak için SSH üzerinde aşağıdaki komutu koşturunuz. Bu işlem 2-3 dakika gibi bir zamanınızı alacaktır. (İnternet hızınıza göre değişebilir.)

MySQL Server ve MySQL client yazılımlarını kuruyoruz.

 # pkg_add -r ftp://ftp.freebsd.org/pub/FreeBSD/releases/i386/i386/8.3-RELEASE/packages/databases/mysql-server-5.5.21.tbz
 # /usr/local/bin/mysql_install_db --basedir=/usr/local

Kurulumu başarıyla tamamlamış olmanız geliyor. MySQL dizinlerine yazma izni veriyoruz.

 # chmod 777 /var/db/mysql

Mysql-server dosyamızın başlangıçta çalışması için ismini değiştiriyoruz.

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

mysql-server.sh dosyamızı düzenliyoruz.( Ben editor olarak nano kullanıyorum siz vi kullanıyorsanız aşağıdaki komutu kendinize göre düzenleyiniz.Nano kurmak isterseniz aşağıdaki komutu koşturabilirsiniz. )

Nano Kurulumu

 # pkg_add -r ftp://ftp.freebsd.org/pub/FreeBSD/releases/i386/i386/8.3-RELEASE/packages/editors/nano-2.2.6.tbz

(CTRL + X dosyayı kaydeder. CTRL + W Arama. )

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

Bu satırı bulun

 # : ${mysql_enable="NO"}

Aşağıdaki gibi değiştiriniz.

 #: ${mysql_enable="YES"}

PHP’de mysql kullanabilmemiz için MySQL extension olarak php.ini dosyasına eklememiz gerekiyor.

Php.ini dosyasını düzenliyoruz.(Yedek almanızda fayda var. “cp /usr/local/lib/php.ini /usr/local/lib/php.ini.bak “ komutunu koşturursanız bir kopyasını oluşturmuş olursunuz.)

 # nano /usr/local/lib/php.ini

Extension bölümünü bulun ve aşağıdaki extension’u ekleyiniz.

extension=mysql.so

İşlemleri tamamladıktan sonra MySQL Serverimiz çalışması için aşağıdaki komutu koşturuyoruz.

 # /usr/local/etc/rc.d/mysql-server.sh start

MySQL Server root kullanıcısı için bir şifre belirliyoruz.

 # /usr/local/bin/mysqladmin -u root password  'ghostugur'

Tebrikler.! MySQL Server kurulumunu başarıyla tamamladınız.PFSense sunucunuzu aşağıdaki komutu koşturarak yeniden başlatınız.

 # shuwdown –r now

Şimdi MySQL sunucusu üzerinde Ghost’un kullanacağı veri tabanını ve kullanıcısını oluşturuyoruz. MySQL Konsola bağlanın ve az önce belirlediğiniz şifreye yazıp konsola düşün… (Şifre bilgilerini kendinize göre düzenleyin.)

 # mysql -u root –p

Ghost ve Freeradius için birtane Radius isminde veritabanı oluşturuyoruz.

 # CREATE DATABASE radius;

Ghost ve Freeradius için mysql user oluşturuyoruz

 # CREATE USER 'radius'@'localhost';

Oluşturmuş olduğumuz user için bir şifre belirliyoruz.

 # SET PASSWORD FOR 'radius'@'localhost' = PASSWORD('radpass');

Oluşturmuş olduğumuz kullanıcının MySQL serverdaki Radius veri tabanına erişmesi için izin veriyoruz.

 # GRANT ALL ON radius.* TO 'radius'@'localhost';

Eğer hala bir hatayla karşılaşmadıysanız sizi tebrik ediyorum ve PFSense Package Manager kısmından aşağıdaki paketlerin kurulumlarını sırasıyla yapmanızı istiyorum.

Eğer oluşturduğunuz MySQL Veritabanına dışarıdan ulaşmak isterseniz aşağıdaki komutu koşturmanız gerekir. (3306 portunu PFSense’nin lan bacağına natlamayı unutmayın.)

 # mysql –u root –p
 # GRANT ALL ON radius.* TO 'radius'@'%' IDENTIFIED BY 'radpass';

Eğer yaptığımız işlemleri özetlememiz gerekirse aşağıdaki şekilde bir tablo ortaya çıkıyor.

MySQL Server Kurulumu yaptık ve aşağıdaki bilgileri kapsayan bir veri tabanı oluşturduk.

Database Name : Radius
Database User : Radius
User Password : radpass

 

TC Kimlik doğrulaması ve MySQL için aşağıdaki komutları sırasıyla koşturunuz. Burada dikkat etmeniz gereken bir nokta var yazmış olduğumuz script her PFSense sunucusunda sorunsuzca çalışacaktır. (Freeradius2 veri tabanında köklü bir değişiklik yapmadığı sürece) Ama burada dikkat etmemiz gereken durum TC kimlik doğrulaması için SOAP kurulumu yapıyoruz eğer sizin PFSense sunucunuzda kurulu olan PHP Versiyonuyla SOAP versiyonu arasında çok fazla sürüm farkı varsa PFSense sunucunuzda sorunlar yaşayabilirsiniz. Bu durumda php –v ile php sürümünü öğrenip Freebsd reposundan uygun olan soap paketini yüklemektir. Şuan PFSense 2.1 üzerinde sorunsuzca çalışmaktadır. Eğer SOAP kurduktan sonra PFSense sunucunuzda sorunlar yaşarsanız pkg_info ile paket listesini görüp daha sonrasında pkg_delete –f paketismi şeklinde soap’ı kaldırırsanız sorununuz düzelir.

 # pkg_add -rfi http://ftp-archive.freebsd.org/pub/FreeBSD/ports/i386/packages-8.3-release/All/php5-soap-5.3.10_1.tbz
 # touch /etc/php_dynamodules/mysql
 # touch /etc/php_dynamodules/php-soap

PfSense sunucumuzu yeniden başlatıyoruz.

 # shutdown –r now

İsterseniz buraya kadar yaptığımız adımları yapmamıza gerek duymayabiliriz. Eğer Bir MySQL,Apache veya IIS,MYSQL Kurulu bir sunucunuz varsa Ghostun ve Radius veri tabanın kurulumunu oraya yaparak bu kadar dertten kurtulmuş olursunuz. (Captive Portal dosyaları için soap ve mysql extension işlemlerini yapmak zorundasınız.)

Şimdi Ghost’un dosyalarını PFSense Firewall dosyalarının yanına kopyalıyoruz. Aşağıdaki komutları sırasıyla koşturunuz.

# mkdir /usr/local/www/ghost
# cd /usr/local/www/ghost
# fetch http://sametyilmaz.com.tr/ghost.tar
# tar xvzf ghost.tar

Freeradius’un ve Ghost’un kullanacağı veri tabanı tablolarını oluşturmak için aşağıdaki komutları koşturunuz.

SQL Dosyamızı oluşturduğumuz veri tabanına import ediyoruz. Şifre soracaktır benim yukarıda belirlediğim şifre “ radpass “ olarak geçmektedir.

# mysql –p –u radius radius < /usr/local/www/ghost/ghost.sql

Ghost Yönetici Paneli’nin Veri tabanına bağlantısı sağlayabilmesi için MySQL Bağlantı dosyasındaki bilgileri yukarıda oluşturduğunuz sql veri tabanı ve kullanıcısına göre değiştirmeniz gerekmektedir.

# nano /usr/local/www/ghost/inc/db_settings.php

SSH üzerinde şuanlık yapacağımız işlemler bu kadardır. PFSense ara yüzüne giriş yapın ve System -> Packages menüsüne girin.

clip_image006

Available Packages bölümünden yukarıdaki paketlerin kurulumlarını tamamlayınız.

Kurulum işlemleri tamamlandıktan sonra Captive Portal ayarlarımızı yapılandıralım.

clip_image008

Services -> Captive Portal menüsüne girin ve bir tane Captive Portal zone bölgesi ekleyin.

clip_image010

Zone name: Bir bölge ismi belirtiniz.

Description: Bir açıklama girip Continue ile devam edin.

clip_image012

Eğer siz captive portal üzerinde Bandwith limitleme ve buna benzer kısıtlamalar yapacaksanız kendinize göre ayarlarınızı özelleştirebilirsiniz. Ben standart bir captive portal yapılandırmasının ekran görüntüsün sizlerle paylaşıyorum.

clip_image014

Standart Squid Server yapılandırmasını ekran görüntüsü olarak paylaştım. Ayarlarınızdan bir eksik varsa tamamlamanızda fayda var.

Şimdi Freeradius2 ile Captive Portal Entegrasyonunu tamamlayalım.

Services -> Freeradius menüsüne giriş yapın.

clip_image016

Nas Client bölümüne geçiş yağın ve [+] butonuyla bir adet nas oluşturalım.

clip_image018

Client Shortname olarak Status -> Services bölümünde Captive Portal’ın servis ismini yazın. Bir tane Client Shared secret belirleyin ve Captive Portal Lan interface ip adresini yazıp ayarlarınızı kaydedin.

clip_image020

Captive Portal’dan gelen Accunting ve Authentication paketlerini dinlemek için Interfaces tabından aşağıdaki şekilde 2 tane interface oluşturun.

clip_image022

Interface IP olarak * belirtiyoruz. Port 1812 Interface type olarak Authentication seçip ayarlarımızı kaydedelim.

clip_image024

Interface IP olarak * Port olarak 1813 Interface type olarak Accounting belirtip Save ile ayarlarımızı kaydedelim.

Şimdi Captive Portal ve Freeradius2 entegrasyonunu tamamlamak için Services -> Captive Portal -> Oluşturduğunuz bölgeyi düzenleyin ve ayarlarınızı aşağıdaki şekilde yapılandırın.

clip_image026

Authentication Type olarak Radius Authentication seçin ve Radius Protocol olarak PAP seçimini yapınız.

Radius sunucumuzun bilgilerini ekran gördüğünüz gibi yazınız. IP Address olarak PFSense sunucumuzun LAN Interface ip adresini yazıyoruz.

Authentication olarak belirlediğim 1812 portunu yazıyoruz. (Boşta bırakabilirsiniz default 1812 ‘den haberleşecektir.)

Shared Secret : Freeradius bölümünde NAS Client eklerken oluşturmuş olduğumuz şifreyi burada belirtiyoruz.

clip_image028 

Biraz sayfayı aşağıya indirdiğinizde yukarıdaki resimde gördüğünüz ayarları yapılandırın. Accounting port olarak 1813 belirtiyoruz.

Account güncellemelerinin Radius’a gönderilmesi için Start – Stop accounting seçeneğini işaretliyoruz.

Ayarlarımızı kaydedip çıkıyoruz. Captive Portal ve Freeradius servislerini Status -> Services sekmesinden yeniden başlatıyoruz.

clip_image030

Gördüğünüz gibi servislerimiz başarılı şekilde çalıştı ve herhangi bir problem söz konusu değilmiş gibi duruyor. Test etmek için Services -> Freeradius -> Users segmetinden bir tane standart kullanıcı oluşturup Captive Portal tarafına bakan Clientlardan bir test işlemi gerçekleştirirseniz daha sağlıklı olacaktır.

clip_image032

Kullanıcı Adı samet ve şifresi 1 olarak bir kullanıcı yarattım. Sizlerde bu şekilde Freeradius üzerinden kullanıcılar oluşturabilir detaylı yetkilendirmeler yapabilirsiniz. Bu adıma kadar Freeradius ve Captive portal’ın haberleşmesini sağladık.

Şimdi Freeradius ile MySQL Sunucumuzun entegrasyonunu tamamlayalım.

clip_image034

Services -> Freeradius -> SQL Segmentine gelelim ve resimde gördüğünüz gibi ayarlarımızı yapılandıralım. Bu adımda Authentication, Accounting, Session ve Post Auth loglarının MySQL üzerinde tutulması için seçeneklerin hepsini Enable olarak belirtiyoruz.

clip_image036

Sayfayı biraz aşağıya indirdiğinizde MySQL Sunucumuzun bilgilerini ve Oluşturmuş olduğumuz veri tabanı bilgilerini istemektedir.

Ben makalemizde MySQL Server üzerinde veri tabanı ve kullanıcı bilgilerini aşağıdaki şekilde yapılandırmıştım sizde kendinize göre düzenleyip resimdeki gibi yapınız.

Server IP Address (MySQL Sunucu ip adresi): localhost 

Server Port Address (MySQL Default Port): 3306

Database Username (veritabanı kullanıcısı ): Radius

Database Password (veritabanı kullanıcı şifresi): radpass

Database Table Congiuration (veritabanı ismini yazıyoruz.)=: Radius

clip_image038

Read Client from Database default olarak Yes olarak geliyor. Bunu no olarak değiştiriniz.

Ayarlarınızı kaydedin ve Status -> System Logs menüsüne giriş yapın ve aşağıdaki şekilde SQL ile haberleşip haberleşmediğini kontrol ediniz. Sistem loğlarına aşağıdaki şekilde loğların düşmesi gerekiyor.

clip_image040

Logları gördükten sonra son kez Status -> Services bölümüne girin ve servislerin çalıştığından emin olun.

clip_image042


Gördüğünüz gibi bütün servislerim sorunsuz çalışmaktadır. 
J

Şimdi Captive Portal karşılama ekranı için Ghost Portal dosyalarının yüklemelerini yapalım. Öncelikle aşağıdaki dosyayı bilgisayarınıza indirin.

Ghost Karşılama Ekranı: http://www.sametyilmaz.com.tr/portal.rar

Services -> Captive Portal -> Oluşturduğunuz bölgeyi düzenleyin ve resimdeki bölüme gelin.



clip_image044

Portal page contents: Buraya indirmiş olduğunuz dosyadaki index.html dosyasını yükleyiniz.

Authentication Error page contents : Buraya’da indirmiş olduğunuz dosyadaki hata.html yükleyiniz.

Save diyerek yükleme işlemini tamamlayın. İndirmiş olduğunuz portal.rar dosyasının içindeki captiveportal-config.php dosyasının içeriğindeki veri tabanı bağlantı bilgilerini kendinize göre düzenleyin ve Captive-Portal – Filemanager segmentine gelin

clip_image046

Portal.rar dosyasının içinden çıkan index.html ve hata.html hariç diğer bütün dosyaların yükleme işlemlerini buradan yüklemesini tamamlayın. Bütün işlemlerimizi başarıyla tamamladık .!

clip_image048

Client karşılama ekranımız sağlıklı bir şekilde geldiğini görmekteyiz. Logo’yu değiştirmek isterseniz Captive Portal File Manager bölümünden captiveportal-logo.jpg isimli logonuzu upload ederseniz logonuz değişmiş olur.

Sms veya TC Kimlik girişlerini kapatmak isterseniz  “index.html” dosyasından ilgili divleri silerseniz sildiğiniz bölüm kalkar .



Ghost Yönetim Paneline giriş nasıl yapılır?

http://pfsenseipadresi/ghost adresinden Ghost paneline ulaşabilirsiniz. Eğer PFSense’nin portunu değiştirdiyseniz 
http://pfsenseipadresi:[port]/ghost şeklinde erişebilirsiniz.

Ghost Default Kullanıcı Adı ve Şifresi

Kullanıcı Adı : admin

Şifre : ghost

clip_image050

 

Giriş işlemini tamamladıktan sonra şifrenizi My Account -> Şifre Değiştir bölümünden yapabilirsiniz.

SMS Gateway olarak “ Ileti Merkezi “ kullanılmıştır. SMS Paketi aldıktan sonra size verilen kullanıcı adı ve şifreyi My Account -> Genel Ayarlar sekmesinde belirtip sms gönderme sisteminin çalışmasını sağlayabilirsiniz.

Sms ile gönderilen mesajı değiştirmek isterseniz captiveportal-sms.php dosyasından değişiklik yapabilirsiniz. (Notepad ++ yazılımıyla açın.)

clip_image052

Loglar 

Loglar -> Kullanıcı Giriş Logları

Adı üstünde girişi onaylanmış kullanıcıların ne zaman giriş yaptıklarınız görebilirsiniz.

clip_image054

Loglar -> Detaylı Kullanıcı Logları

Anlık kullanıcıları görebilirsiniz. Sisteme giriş yapmış ve upload, download oturum süresini bu bölümden takip edebilirsiniz. Ayrıca Başlangıc, Bitiş, IP ve MAC gibi loğlarda mevcuttur.



clip_image056

 

Kullanıcılar bölümünden TC Kimlik, SMS ve Ghost üzerinden açılan kullanıcıları listeleyebilir, düzenleyebilir ve silebilirsiniz.

clip_image058

Ghost üzerinden Süreli, Süresiz, Saatlik kullanıcılar ekleyebilirsiniz.

clip_image060

Radreply, Radcheck tablolarına eklenmiş verileri listeleyebilir silebilir düzenleyebilirsiniz.

clip_image062

Attribute Ekleme (RadCheck ve RadReply)

clip_image064



Buradaki geyik aslında veri tabanındaki radreply ve radcheck isimli tablolara veri ekleme. Âmâ bu tablolar Attribute göre hareket eder. Eğer gruplandırma yapmak yazılımı biraz daha geliştirmek isterseniz

radgroupcheck

radgroupreply

rapusergroup

Yukarıdaki isimleri geçen tablolar içinde PHP’de bir form post sayfası yapıp gruplar oluşturabilirsiniz. Örnek Personel diye bir grup oluşturursunuz ve oluşturduğunuz userleri bu gruba üye edersiniz grup bazlı kısıtlamalar limitlemeler yapabilirsiniz. Ben bu bölümü yapma gereği duymadım yani çok ihtiyaç olacağını düşündüğüm bir şey değil. Bilin diye söylemek istedim.

Şimdi biraz Attribute üzerinde biraz duralım.

Attribute Nedir?

Türkçesi özellikler anlamına gelir. Buradan şunu anlıyor olmanız gerekir Kullanıcılara vereceğimiz özelikleri Attribute sütunun vereceğimiz değerlerle belirliyoruz. Âmâ aynı zamanda Attribute ile kullanıcıda oluşturabiliyoruz.

RadCheck Nedir ?

RadCheck Freeradius’un Attribute listesini tutan tablonun ismidir. Ama aynı tablodan bir tane daha RadReply adında vardır. İkisi de aynı işe yarıyor ama bazı Özellikler RadCheck’te çalışıyorken bazıları ise RadReply tablosuna eklemeniz gerekiyor.

Eğer biz yeni bir kullanıcı oluşturmak istersek aşağıdaki şekilde RadCheck bölümünden formu doldurursanız vermiş olduğunuz değerler bir adet internet kullanıcısı oluşturacaktır.

username

attribute

op

value

samet

User-Password

==

şifre

 

username attribute op value

samet User-Password == şifre

Username : Bir kullanıcı ismi belirledik.

Attribute : Bir kullanıcı olduğunu belirttik.

Op : Kullanıcı hesapları için op değerinin == olması gerektiği için == yazdık.

Value : Value değeri olarak kullanıcının şifresinin şifre olmasını sağladık.

Sonuç : Captive Portal login ekranın kullanıcı adına samet şifre bölümüne şifre yazarsanız sınırsız bir internet kullanıcısıyla internete çıkmış olursunuz.

 

Kullanıcıya Süreli İnternet Vermek;

 

 

username

attribute

op

value

samet

Expiration

=

29 Jan 2014

 

Eğer radcheck bölümünden yukarıdaki şekilde kayıt girerseniz 29 Jan 2014 tarihinde kullanıcı hesabı devre dışı olacaktır.

Kullanıcıya Günlük Saat kotası belirlemek

 

username

attribute

op

value

samet

Max-Daily-Session

:=

1800

 

Eğer yukarıdaki şekilde Radcheck bölümünden bir kayıt girerseniz kullanıcıya 30 dk internet özelliği ekler ve 30 dakika dolduktan sonra hesap devre dışı olur.

 

Attribute Listesi : http://freeradius.org/rfc/attributes.html

 

Attribute Kullanımı : http://freeradius.org/radiusd/man/users.html

 



Yönetici Paneli Demo

URL  : 
www.sametyilmaz.com.tr/ghost

Kullanıcı Adı : admin

Şifre : ghost

 

Karşılama Ekranı Demo

URL : 
www.sametyilmaz.com.tr/hotspot

 

Elimden geldiğince size Ghost ve PFSense üzerinde Nasıl Hot Spot hizmeti vereceğinizi anlatmaya çalıştım. Aslında çok karışık gelsede bir kere kurulum yaptıktan sonra artık daha kolay olacak ve kendinize göre yazılıma özellikler ekleyip özelleştirebileceksiniz.1 Haftalık çalışmanın bir eseridir ve 2 hafta son askerim. Elimden geldiğince güzel bir şeyler ortaya çıkarmaya çalıştım. İnşallah beğenirsiniz.

 

Yazılımı Uğur Demir abim için yapmıştım kullanırız diye bir yerlerde. Oda yazılımı sizlerle paylaşmamın daha sağlıklı ve hayır duası alacağımızı söyledi. Adını da bizzat kendisi belirlemiştir. Eğer bir teşekkürü hak ettiysek bu da Uğur Demir’in sayesindedir.

Desteğini benden esirgemeyen Bülent Gür Hocam ve Uğur Demir hatırasına Ghost herkese hayırlı olsun.

 

 

Makaleyi Paylaş

Cevap bırakın