"Panduan Lengkap Setup Hotspot & PPPoE Server dengan Billing dan Otomatisasi di Debian"

 

BAB 1: Pendahuluan dan Arsitektur

Deskripsi lengkap mengenai arsitektur jaringan:

  • WAN masuk ke satu interface Debian

  • LAN menggunakan bridge (br0) untuk distribusi layanan

  • Di atas bridge tersebut berjalan PPPoE dan Hotspot

  • Semua distribusi akses menggunakan FreeRADIUS sebagai backend autentikasi

  • Billing menggunakan PHP berbasis Radius Manager open source atau custom

  • Tidak ada akses IP statik, semua user harus melalui autentikasi

BAB 2: Instalasi Dasar Debian

  1. Pasang Debian minimal (CLI Only)

  2. Konfigurasi IP statik untuk WAN (misal eth0)

  3. Instalasi tools dasar: apt install sudo net-tools iproute2 curl wget nano

  4. Update system: apt update && apt upgrade -y

BAB 3: Setup Bridge LAN + Interface

Instal bridge-utils:

apt install bridge-utils -y

Edit /etc/network/interfaces atau gunakan systemd-networkd/Netplan tergantung versi Debian. Contoh (interfaces):

auto lo
iface lo inet loopback

auto eth0
iface eth0 inet static
  address 192.168.88.2
  netmask 255.255.255.0
  gateway 192.168.88.1

auto br0
iface br0 inet static
  address 172.16.0.1
  netmask 255.255.252.0
  bridge_ports eth1 eth2 wlan0

BAB 4: Instalasi dan Konfigurasi PPPoE Server

  1. Instalasi PPPoE Server:

apt install pppoe ppp -y
  1. Konfigurasi /etc/ppp/pppoe-server-options

require-pap
login
lcp-echo-interval 10
lcp-echo-failure 2
ms-dns 172.16.0.1
asyncmap 0
auth
crtscts
lock
hide-password
modem
mtu 1492
mru 1492
  1. File /etc/ppp/chap-secrets (gunakan radius nantinya)

  2. Aktifkan dengan:

pppoe-server -I br0 -L 172.16.0.1 -R 172.16.1.2 -N 100

BAB 5: Setup Hotspot dengan CoovaChilli

  1. Instalasi CoovaChilli:

apt install coova-chilli -y
  1. Edit /etc/chilli/defaults

HS_WANIF=eth0
HS_LANIF=br0
HS_NETWORK=172.16.100.0
HS_NETMASK=255.255.252.0
HS_UAMLISTEN=172.16.100.1
HS_UAMPORT=3990
HS_RADIUS=127.0.0.1
HS_RADIUS2=127.0.0.1
HS_RADSECRET=testing123
HS_UAMALLOW=www.google.com
HS_UAMSECRET=testing123
  1. Aktifkan dan jalankan coova:

systemctl enable chilli
systemctl start chilli

BAB 6: Billing dan Autentikasi

  1. Instalasi FreeRADIUS:

apt install freeradius freeradius-mysql -y
  1. Setup database MySQL dan integrasikan dengan FreeRADIUS

  2. Gunakan billing berbasis PHP seperti:

    • DaloRADIUS (open source)

    • RadiusDesk (open source)

    • Custom PHP + Bootstrap

  3. Semua user harus login via PPPoE atau Hotspot, tanpa IP statik langsung

BAB 7: Pengamanan dan Pemantauan

7.1 Proteksi Dasar Firewall

Konfigurasi awal firewall dengan iptables atau UFW untuk membatasi akses hanya pada port yang dibutuhkan (misalnya, port 22, 80, 443, 1812 untuk FreeRADIUS).

7.2 IDS/IPS dengan Suricata

Instalasi Suricata dan konfigurasi rule set untuk mendeteksi dan mencegah serangan pada port publik dan servis penting seperti FreeRADIUS, CoovaChilli, dan antarmuka web.

7.3 Tambahan Pengamanan Server

a. Instalasi dan Konfigurasi Fail2Ban

Fail2Ban melindungi dari brute force login:

apt install fail2ban -y

Salin konfigurasi default:

cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local

Aktifkan untuk SSH dan Freeradius:

[sshd]
enabled = true

[freeradius-auth]
enabled = true
port = 1812
protocol = udp
logpath = /var/log/freeradius/radius.log

Restart service:

systemctl restart fail2ban
systemctl enable fail2ban

b. Konfigurasi UFW (Uncomplicated Firewall)

Instal dan konfigurasi UFW:

apt install ufw -y
ufw default deny incoming
ufw default allow outgoing

Buka port penting:

ufw allow ssh
ufw allow 80
ufw allow 443
ufw allow 1812/udp    # Freeradius
ufw allow 3990/tcp    # CoovaChilli UAM
ufw allow 3000/tcp    # AdGuard Home UI (opsional)

Aktifkan UFW:

ufw enable

c. Hardening SSH

Edit /etc/ssh/sshd_config:

PermitRootLogin no
PasswordAuthentication no
PermitEmptyPasswords no
AllowUsers adminuser

Restart SSH:

systemctl restart ssh

Gunakan login SSH dengan SSH key:

ssh-keygen -t rsa -b 4096
ssh-copy-id user@server_ip

BAB 8: Konfigurasi DNS: BIND dan AdGuard Home

8.1 Instalasi dan Setup DNS BIND untuk Cache Resolver

  1. Instalasi paket:

apt install bind9 dnsutils -y
  1. Konfigurasi named.conf.options:

options {
    directory "/var/cache/bind";

    recursion yes;
    allow-query { any; };

    forwarders {
        8.8.8.8;
        1.1.1.1;
    };

    dnssec-validation auto;
};
  1. Restart layanan BIND:

systemctl restart bind9
systemctl enable bind9

8.2 Instalasi dan Setup AdGuard Home untuk Blokir Konten Dewasa

  1. Unduh dan instal AdGuard Home:

curl -s -S -L https://static.adguard.com/adguardhome/release/AdGuardHome_linux_amd64.tar.gz | tar xz
cd AdGuardHome
./AdGuardHome -s install
  1. Akses antarmuka web di http://IP:3000 dan selesaikan wizard

  2. Tambahkan filter:

    • Gunakan filter blokir konten dewasa dari AdGuard atau EasyList

    • Tambahkan rule blokir manual jika diperlukan

  3. Setup redirect konten dewasa:

    • Arahkan DNS domain tertentu ke IP lokal, misal 172.16.0.5

    • Jalankan web server (nginx/lighttpd) di 172.16.0.5 untuk menampilkan halaman peringatan atau edukasi

  4. Integrasi DNS AdGuard dan BIND:

    • BIND sebagai resolver internal dan caching

    • Forward DNS dari BIND ke AdGuard Home untuk filtering:

Edit named.conf.options:

forwarders {
    127.0.0.1 port 5353;
};

AdGuard Home bisa dikonfigurasi listen di port 5353 agar tidak konflik dengan BIND.

BAB 8,2: Isolasi Otomatis dan Pembukaan Otomatis PPPoE

Fitur ini memungkinkan pelanggan diisolasi secara otomatis pada saat jatuh tempo, dan akan dibuka kembali secara otomatis 1 menit setelah melakukan pembayaran yang tervalidasi oleh sistem billing.

Konsep dan Mekanisme:

  • Sistem billing (misalnya DaloRADIUS atau custom PHP) mencatat tanggal jatuh tempo setiap user.

  • Setiap hari atau setiap jam, cron job mengecek user yang jatuh tempo.

  • Sistem menghapus akun PPPoE atau memindahkan user ke profil terbatas (jika menggunakan MikroTik).

  • Setelah pembayaran terverifikasi, akun diaktifkan kembali, dan sistem mengirim sinyal ke Mikrotik/Server PPPoE untuk reconnect.

Implementasi dengan Skrip Otomatis:

Skrip isolasi otomatis (isolasi_pppoe.py):

#!/usr/bin/env python3

import mysql.connector

import os

import datetime


conn = mysql.connector.connect(

    host="localhost",

    user="radius",

    password="password_db",

    database="radius"

)

cursor = conn.cursor()


today = datetime.date.today().isoformat()

query = "SELECT username FROM users WHERE expire_date <= %s AND active = 1"

cursor.execute(query, (today,))

users = cursor.fetchall()


for (username,) in users:

    os.system(f"radclient -x localhost:3799 disconnect secret <<EOF\nUser-Name = \"{username}\"\nEOF")

    cursor.execute("UPDATE users SET active = 0 WHERE username = %s", (username,))

    print(f"Isolated: {username}")


conn.commit()

conn.close()

Skrip buka otomatis setelah pembayaran (open_pppoe.py):

#!/usr/bin/env python3
import mysql.connector
import os

conn = mysql.connector.connect(
    host="localhost",
    user="radius",
    password="password_db",
    database="radius"
)
cursor = conn.cursor()

query = "SELECT username FROM users WHERE paid = 1 AND active = 0"
cursor.execute(query)
users = cursor.fetchall()

for (username,) in users:
    cursor.execute("UPDATE users SET active = 1 WHERE username = %s", (username,))
    print(f"User reactivated: {username}")

conn.commit()
conn.close()

Tambahkan ke crontab:

# Isolasi user setiap jam
0 * * * * /usr/bin/python3 /opt/scripts/isolasi_pppoe.py

# Buka user setiap 5 menit
*/5 * * * * /usr/bin/python3 /opt/scripts/open_pppoe.py

Integrasi dengan Billing PHP:

  • Tambahkan kolom expire_date, active, dan paid ke tabel users.

  • Pastikan sistem billing otomatis mengubah paid=1 saat pembayaran berhasil.

  • Tambahkan opsi untuk mengatur tanggal jatuh tempo pada saat registrasi atau pembayaran.


0 Comments:

Posting Komentar

 
Design by Free WordPress Themes | Bloggerized by Lasantha - Premium Blogger Themes | coupon codes