pfSense Hotspot 5651 Kurulumu: Adım Adım Kılavuz 2024
pfSense ile 5651 Uyumlu Hotspot Kurulumu: Neden Kritik?
Türkiye'de halka açık internet erişimi sunan her işletme — otel, kafe, AVM, hastane, belediye — 5651 sayılı Kanun'un 6. maddesi uyarınca trafik kayıtlarını saklamak zorundadır. pfSense gibi açık kaynak güvenlik duvarları, düşük maliyetli ve esnek yapısıyla küçük-orta işletmelerin tercihi olsa da, varsayılan captive portal modülü 5651 gereksinimlerini karşılamaz. Erişim loglarını doğru formatta (kullanıcı kimliği, zaman damgası, kaynak/hedef IP, port, URL) tutmak, BTK denetimlerinde ceza riskini ortadan kaldırır. Bu kılavuz, pfSense 2.7.x ve üzeri sürümlerde captive portal'ı devreye alıp, log akışını 5651 uyumlu bir bulut platformuna (NextLog5651 gibi) veya yerel SIEM'e yönlendirme sürecini adım adım açıklar.
Gerçek dünya senaryosu: İstanbul'da 45 odalı bir butik otel, misafir WiFi için pfSense kullanıyor ancak logları yalnızca yerel diske yazıyor ve 90 günden eski kayıtları manuel siliyor. BTK teftiş ekibi, erisim_kayitlari tablosunda eksik zaman damgası ve kullanıcı kimliği tespit etti; 5651 md. 9/A uyarınca 50.000 TL idari para cezası uygulandı. Doğru kurulum ve merkezi log yönetimi bu tür senaryoları önler.
pfSense Captive Portal Modülünün Sınırları ve Çözüm Yolları
pfSense'in yerleşik Captive Portal özelliği, kullanıcıları giriş sayfasına yönlendirir, MAC/IP bazlı kimlik doğrulama yapar ve temel erişim logları tutar. Ancak 5651 uyumluluğu için eksik kalan noktalar:
- Detay seviyesi: Varsayılan log formatı, kaynak IP ve zaman damgasını içerir ama hedef URL, HTTP/HTTPS ayrımı, port numarası gibi kritik alanları kapsamaz.
- Saklama süresi: pfSense logları /var/log altında tutar; disk dolduğunda eski kayıtlar kaybolur. 5651 md. 6, trafik kayıtlarını en az 1 yıl saklamayı zorunlu kılar (BTK Tebliğ 2014/10).
- Merkezi yönetim: Çoklu lokasyonda (otel zinciri, franchise kafe) her cihazdan ayrı log toplamak operasyonel yük getirir.
- Raporlama: BTK talebi geldiğinde, ham syslog dosyalarından kullanıcı bazlı rapor çıkarmak saatler alır.
Çözüm mimarisi: pfSense captive portal + ek paket (freeradius3, squid proxy) veya harici log toplayıcı (NextLog5651, Graylog, Splunk). En yaygın yöntem: pfSense'i syslog sunucusuna yönlendirip, orada 5651 formatında parse etmek ve arşivlemek. Alternatif olarak, pfSense'in arkasına transparent proxy (Squid + ICAP) ekleyerek her HTTP/HTTPS isteğini loglamak mümkündür.
Adım 1: pfSense Captive Portal Temel Kurulumu
pfSense web arayüzüne (genellikle https://192.168.1.1) admin hesabıyla giriş yapın. Services → Captive Portal menüsüne gidin ve yeni bir zone oluşturun:
- Zone Name:
MisafirWiFi(alfanumerik, boşluksuz) - Interface: Misafir ağının bağlı olduğu arayüz (örn. OPT1 veya ayrı VLAN)
- Max Concurrent Connections: Eşzamanlı kullanıcı sayısı (otel için 100-200, AVM için 500+)
- Idle Timeout: 30 dakika (kullanıcı hareketsizse oturumu kapat)
- Hard Timeout: 480 dakika (8 saat — otellerde günlük yenileme için)
Authentication sekmesinde kimlik doğrulama yöntemini seçin:
| Yöntem | Kullanım Senaryosu | 5651 Uygunluğu |
|---|---|---|
| No Authentication | Sadece kullanım şartlarını kabul ettirme (kafe, park WiFi) | Kısıtlı — kullanıcı kimliği yok, sadece MAC adresi |
| Local User Manager | Küçük işletme, manuel kullanıcı ekleme | Orta — kullanıcı adı loglanır ama ölçeklenmez |
| RADIUS | Otel PMS entegrasyonu (Opera, Elektraweb), kurumsal | Yüksek — oda numarası/TC kimlik loglanabilir |
| Voucher | Tek kullanımlık kodlar (etkinlik, konferans) | Orta — voucher ID + MAC adresi |
Otel/AVM gibi yüksek kullanıcı hacminde RADIUS entegrasyonu şarttır. pfSense'e freeradius3 paketini yükleyin (System → Package Manager → Available Packages). RADIUS sunucusunu yapılandırırken, kullanıcı veritabanını otelin PMS'iyle senkronize edin: misafir check-in yaptığında, PMS API'si RADIUS'a oda_numarasi ve telefon bilgisiyle kullanıcı ekler. Böylece her log kaydında gerçek kimlik (oda numarası veya TC kimlik) yer alır.
Giriş Sayfası Özelleştirme ve KVKK Onayı
HTML Portal Page Contents alanına özel giriş sayfanızı yazın. KVKK md. 10 uyarınca, kullanıcıya hangi verilerin toplandığı, ne kadar süre saklanacağı, kiminle paylaşılacağı açıkça bildirilmelidir. Örnek metin:
"Misafir internet erişimi sırasında IP adresi, erişim zamanı, ziyaret edilen siteler 5651 sayılı Kanun kapsamında 1 yıl süreyle saklanır. Verileriniz yalnızca yasal yükümlülük kapsamında yetkili makamlara sunulur. Devam ederek bu koşulları kabul etmiş sayılırsınız."
Onay kutusunu zorunlu kılın (<input type="checkbox" required>) ve kullanıcı "Kabul Et" butonuna basmadan erişim vermeyin. Bu onay kaydı da log'a düşmelidir — captiveportal.log dosyasında user accepted terms satırı arayın.
Adım 2: Syslog Yapılandırması ve Merkezi Log Sunucusu Entegrasyonu
pfSense captive portal logları varsayılan olarak /var/log/captiveportal.log dosyasına yazılır. Bu dosya döngüsel (rotational) olup, eski kayıtlar silinir. 5651 uyumluluğu için logları harici bir sunucuya gönderin:
- Status → System Logs → Settings menüsüne gidin.
- Enable Remote Logging kutusunu işaretleyin.
- Remote Log Servers alanına NextLog5651 bulut IP'sini veya yerel syslog sunucu adresini girin (örn.
log.nextlog5651.com:514veya192.168.10.50:514). - Source Address: pfSense'in WAN IP'sini seçin (log sunucusu bu IP'yi tanıyacak).
- System Events to Log: En azından Authentication, DHCP, Captive Portal seçeneklerini işaretleyin.
Syslog formatı RFC 5424 standardında olmalıdır. NextLog5651 gibi özel platformlar, gelen syslog mesajlarını otomatik parse eder ve erisim_kayitlari tablosuna şu alanları yazar:
| Alan | Örnek Değer | Kaynak |
|---|---|---|
| kullanici_id | oda_305 / TC:12345678901 | RADIUS username |
| kaynak_ip | 192.168.100.42 | Captive portal DHCP lease |
| hedef_ip | 172.217.16.206 (google.com) | Firewall state table / Squid proxy |
| hedef_port | 443 (HTTPS) | Firewall log |
| zaman_damgasi | 2024-06-15T14:23:11+03:00 | Syslog timestamp (ISO 8601) |
| url | https://www.google.com/search?q=... | Squid access.log (HTTPS için SSL Bump gerekir) |
Önemli: pfSense captive portal log'u sadece kimlik doğrulama olaylarını (login, logout) içerir. Gerçek trafik logları için firewall kurallarında loglama aktif olmalıdır. Firewall → Rules → MisafirWiFi sekmesinde, "Pass" kuralının altındaki Log packets that are handled by this rule kutusunu işaretleyin. Böylece her bağlantı /var/log/filter.log'a yazılır ve syslog sunucusuna iletilir.
Adım 3: Squid Proxy ile Detaylı URL Loglama (Opsiyonel ama Önerilen)
HTTPS trafiğinin içeriğini (URL, HTTP başlıkları) loglamak için transparent SSL proxy gereklidir. pfSense'e squid ve squidGuard paketlerini yükleyin:
- System → Package Manager → Available Packages →
squidvesquidGuardara ve kur. - Services → Squid Proxy Server → General Settings:
- Enable Squid Proxy: İşaretle
- Proxy Interface: MisafirWiFi arayüzü
- Transparent HTTP Proxy: İşaretle
- SSL/HTTPS Proxy: İşaretle (SSL Bump)
- Local Cache sekmesinde Hard Disk Cache Size: 2048 MB (SSD varsa 4096 MB)
- Access Control sekmesinde misafir ağ bloğunu (örn. 192.168.100.0/24) Allowed Subnets listesine ekleyin.
SSL Bump (HTTPS İnceleme) Kurulumu:
- Services → Squid Proxy Server → SSL Man In the Middle Filtering sekmesine gidin.
- Enable SSL filtering: İşaretle
- CA: pfSense'in dahili CA'sını seçin veya yeni bir CA oluşturun (
System → Cert Manager → CAs → Add). - SSL Intercept: Splice All yerine Bump All seçin (tüm HTTPS trafiğini incelemek için).
- Certificate Adapt: İşaretle (sertifika uyumsuzluğu hatalarını azaltır).
Kullanıcı cihazlarına pfSense CA sertifikasını yükletin. Captive portal giriş sayfasına sertifika indirme linki ekleyin: <a href="https://192.168.1.1/cert.crt">Güvenli bağlantı için sertifika yükleyin</a>. Mobil cihazlarda (iOS/Android) sertifika yükleme adımlarını resimli talimatla gösterin; aksi halde kullanıcılar "Bağlantı güvenli değil" uyarısı alır.
Squid access.log formatını 5651 uyumlu hale getirin. /usr/local/etc/squid/squid.conf dosyasına şu satırı ekleyin (SSH ile pfSense'e bağlanın):
logformat combined %ts.%03tu %6tr %>a %Ss/%03>Hs %<st %rm %ru %[un %Sh/%<a %mt
access_log /var/squid/logs/access.log combined
Bu format, zaman damgası, kaynak IP, kullanıcı adı, HTTP metod, tam URL, durum kodu içerir. Squid loglarını da syslog sunucusuna göndermek için logfile-daemon kullanın veya tail -f ile canlı akışı logger komutuyla syslog'a yönlendirin:
tail -f /var/squid/logs/access.log | logger -t squid -p local5.info
pfSense'de bu komutu Shellcmd paketiyle sistem başlangıcında otomatik çalıştırın.
Adım 4: RADIUS Sunucusu ve Otel PMS Entegrasyonu
Otel senaryosunda, misafir check-in yaptığında PMS (Opera, Elektraweb, Amonra) otomatik olarak WiFi kullanıcısı oluşturmalıdır. FreeRADIUS'u PMS veritabanıyla entegre edin:
- Services → FreeRADIUS → Users sekmesinde manuel kullanıcı eklemek yerine, SQL Module aktif edin.
- SQL Type: MySQL/MariaDB (PMS veritabanı genellikle MySQL kullanır)
- SQL Server: PMS sunucu IP'si (örn. 192.168.10.20)
- SQL Database: PMS veritabanı adı (örn.
opera_db) - SQL Username/Password: Salt okunur (read-only) bir hesap oluşturun — PMS veritabanında değişiklik yapmayın.
PMS'de misafir tablosunda oda_numarasi, telefon, checkin_tarihi, checkout_tarihi alanları olduğunu varsayın. FreeRADIUS SQL sorgusunu şöyle düzenleyin:
SELECT oda_numarasi AS username, telefon AS password FROM misafirler WHERE checkin_tarihi <= NOW() AND checkout_tarihi >= NOW()
Böylece misafir, oda numarası (kullanıcı adı) ve telefon numarası son 4 hanesi (şifre) ile WiFi'ye bağlanır. RADIUS log'unda oda_305 kullanıcı adı görünür; 5651 talebi geldiğinde, bu kullanıcı adını PMS'deki misafir kimliğiyle (TC kimlik, pasaport) eşleştirirsiniz.
Elektraweb PMS entegrasyonu: Elektraweb, REST API sunar. Alternatif olarak, Elektraweb'in RADIUS modülünü doğrudan aktif edin (Ayarlar → Entegrasyonlar → WiFi/RADIUS). Elektraweb, check-in/check-out olaylarında FreeRADIUS'a otomatik kullanıcı ekler/siler. NextLog5651, Elektraweb API'siyle entegre çalışır; misafir bilgilerini otomatik çeker ve log kayıtlarına ekler.
Adım 5: Test, Doğrulama ve BTK Denetim Hazırlığı
Kurulum tamamlandıktan sonra kapsamlı test yapın:
- Kullanıcı girişi: Test hesabıyla (örn.
test_oda) captive portal'a giriş yapın./var/log/captiveportal.logdosyasındauser 'test_oda' authenticatedsatırını görmelisiniz. - Trafik logu: Tarayıcıda
http://example.comvehttps://www.google.comaçın./var/log/filter.logve Squidaccess.logdosyalarında ilgili kayıtları kontrol edin. - Syslog iletimi: Log sunucusunda (NextLog5651 veya Graylog) pfSense'den gelen mesajları arayın. Inputs → Syslog UDP bölümünde son 5 dakikadaki mesaj sayısını görün.
- Zaman senkronizasyonu:
System → General Setup → Timezoneayarını Europe/Istanbul yapın. NTP sunucularını (tr.pool.ntp.org) ekleyin veStatus → NTPmenüsünde senkronizasyon durumunu kontrol edin. Zaman damgası hatası, BTK denetiminde kayıt geçersiz sayılabilir. - KVKK onay kaydı: Captive portal log'unda
terms accepted by IP 192.168.100.42gibi bir satır arayın. NextLog5651, bu onayıkvkk_onaytablosuna otomatik işler.
BTK Talep Senaryosu Simülasyonu
BTK, belirli bir IP ve zaman aralığı için kayıt talep eder: "15 Haziran 2024, 14:23:11 - 14:45:00 arası 192.168.100.42 IP'sinden yapılan tüm erişimler." NextLog5651 arayüzünde Raporlar → 5651 Sorgu bölümüne gidin, IP ve zaman aralığını girin. Sistem, şu bilgileri içeren Excel/PDF rapor üretir:
| Zaman | Kullanıcı | Kaynak IP | Hedef IP | Hedef Port | URL |
|---|---|---|---|---|---|
| 2024-06-15 14:23:11 | oda_305 | 192.168.100.42 | 172.217.16.206 | 443 | https://www.google.com/search?q=istanbul+hava+durumu |
| 2024-06-15 14:25:03 |
Sık Sorulan Sorular5651 loglama ve hotspot hakkında en çok sorulan konular.
Ağınızın Güvenliğini Şansa BırakmayınNextLog 5651 Loglama ve Hotspot sistemleriyle işletmenizi yasal risklerden koruyun. |