Der Zweck dieses Artikels besteht darin, zu demonstrieren, wie Sie einen Linux-basierten Computer oder Laptop in einen drahtlosen Hotspot verwandeln können, an dem Benutzer über eine Captive-Portal-Seite authentifiziert werden können. Für diese Aufgabe ist CoovaChilli die primäre Controller-Software. Diese Software ist eine ideale Hotspot-Verwaltungslösung für Hotels, Restaurants, Supermärkte, Parks und alle Orte, die WiFi-Internet anbieten.
Voraussetzungen
- Eine Linux-Distribution. In diesem Artikel werde ich Fedora 20 verwenden. Spätere Versionen 21/22 sollten gut funktionieren.
- Entwicklungsbibliotheken für die Kompilierung von Quellpaketen benötigt.
- Eine funktionierende MySQL-Server-Installation.
- Ein kabelgebundenes Netzwerkgerät, das eine Verbindung zum Internet herstellt.
- Fähigkeit, sudo-Befehle auszuführen.
- Ein drahtloses Netzwerkgerät, das den Access Point-Modus unterstützt. Um zu sehen, ob Ihr drahtloses Gerät den AP-Modus unterstützt, führen Sie Folgendes aus:
sudo iw phy |grep -A 5 -i 'Unterstützte Schnittstellenmodi' | grep '*'
Installieren Sie CoovaChilli-Abhängigkeiten
yum installiere libnl3-devel libtalloc-devel iptables
hostapd installieren
Mit Hostapd kann Ihr Computer als Access Point (AP) WPA/WPA2-Authentifikator fungieren. Andere Funktionalitäten umfassen Radius-Authentifizierungsdienste, obwohl wir diese hier nicht verwenden werden.
Die meisten Linux-Distributionen (einschließlich Fedora) haben vorgefertigte Versionen von hostapd und können mit der Paketverwaltungssoftware installiert werden. In Fedora, CentOS und anderen Red-Hat-basierten Linux-Distributionen installiert beispielsweise ein einfacher Befehl dieses Paket:
yum installiere hostapd
Um jedoch die neueste Version von Hostpad zu installieren, müssen wir die Quellen herunterladen und kompilieren. Das geht ganz einfach wie folgt:
cd /usr/src
sudo git clone git://w1.fi/hostap.git
Dadurch werden sowohl hostapd, der Server-Daemon, als auch wpa_supplicant-Quellen heruntergeladen. Ersteres interessiert uns, weswegen wir zu den hostapd-Quellen wechseln:
cd hostap/hostapd
Hostapd hat keinen 'configure'-Befehl, also müssen wir vor dem Kompilieren von hostapd das Installationspräfix ändern. Eine schnelle und einfache Möglichkeit, das Standardinstallationsverzeichnis zu ändern, ist die Verwendung von sed:
sed -i “s:export BINDIR ?=/usr/local/bin/:export BINDIR ?=/usr/sbin:g” Makefile
Kopieren Sie als Nächstes die Standardkonfigurationsdatei:
cp -v defconfig.config
wir müssen einige Voreinstellungen in der Konfigurationsdatei ändern:
vim.config
Kommentieren Sie die folgenden Optionen aus:
CONFIG_LIBNL32=y # libnl 3.2-Bibliotheken verwenden
CONFIG_IEEE80211N=y # Aktiviert die IEEE 802.11n-Unterstützung
CONFIG_WNM=y # Aktiviert die Netzwerkverwaltungsunterstützung
CONFIG_IEEE80211AC=y # Aktiviert die IEEE 802.11ac-Unterstützung
CONFIG_DEBUG_FILE=y # Unterstützung für das Schreiben des Debug-Protokolls in eine Datei
Führen Sie make and install:
ausmake
sudo make install
Um zu überprüfen, ob hostapd richtig installiert ist, führen Sie Folgendes aus:
hostapd -v
Der obige Befehl zeigt Ihnen die Version und die Credits
hostapd konfigurieren
Hostapd-Konfigurationsdatei mit Beispieldatei erstellen:
sudo mkdir /etc/hostapd
sudo cp -v /usr/src/hostap/hostapd/hostapd.conf /etc/hostapd/
sudo vim /etc/hostapd/hostapd.confÄndern Sie die folgenden Parameter in der Datei hostapd.conf:
driver=nl80211
interface=wlan0 # Ändern Sie dies auf Ihr drahtloses Gerät
ssid=KAMPALA-3 # Ändern Sie dies auf Ihre SSID
hw_mode=g
channel=6 # Geben Sie Ihren gewünschten Kanal ein
ieee80211n=1 # IEEE 802.11n aktivieren
wpa=1
wpa_passphrase=myverysecretpassword
wpa_pairwise=TKIP CCMP
rsn_pairwise=CCMPVerzeichnis für Hostapd-Sockets erstellen:
sudo mkdir /var/run/hostapdSetzen Sie den Status der WLAN-Schnittstelle auf „UP“ und entsperren Sie WLAN, wenn der Soft-Schalter eingeschaltet ist:
sudo rfkill unblock wifi
sudo ip link set dev wlan0 upHostapd testen und starten:
sudo hostapd -d /etc/hostapd/hostapd.confWenn alles gut geht, sollte der Hostapd-Daemon starten und nicht beendet werden.
Erstellen Sie als Nächstes eine systemd-Dienstdatei. Inzwischen verwenden die meisten Linux-Distributionen systemd, um Dienste zu steuern:
sudo vim /etc/systemd/system/hostapd.service
[Unit]
Description=Hostapd IEEE 802.11 AP, IEEE 802.1X/WPA/WPA2/EAP/RADIUS Authenticator
After=dnsmasq.service
[Service]
Type=forking
PIDFile=/var/run/hostapd.pid
ExecStartPre=/bin/mkdir -p /var/run/hostapd
ExecStart=/usr/sbin/hostapd /etc/hostapd/hostapd.conf -P /var/run/hostapd.pid -B
[Installieren]
WantedBy=multi-user.targetAktivieren Sie den Dienst so, dass er beim Booten automatisch gestartet wird:
sudo systemctl enable hostapd.service
Freeradius
Da Clients sich vor dem Zugriff auf das Internet authentifizieren müssen, ist die Installation eines Radius-Servers erforderlich. FreeRadius ist ein Open-Source-basierter Radius-Server. Es kann auch mit Ihrem bevorzugten Linux-Paketmanager wie yum oder apt installiert werden. Aber da wir die neuste Version installieren wollen, kompilieren wir aus dem Quellcode.
Freeradius herunterladen:
cd /tmp/
wget -c ftp://ftp.freeradius.org/pub/freeradius/freeradius-server-3.0.9.tar.bz2Quellen entpacken und zum Installationsort wechseln:
sudo tar jxvf freeradius-server-3.0.9.tar.bz2 -C /usr/src/
cd /usr/src/freeradius-server-3.0.9Führen Sie das Konfigurationsskript aus und stellen Sie sicher, dass Sie das richtige Präfix und den richtigen Bibliothekspfad für Ihr Setup verwenden:
sudo ./configure --prefix=/usr --libdir=/usr/lib64 --sysconfdir=/etc --localstatedir=/var/ --enable-fast-install=noFahren Sie mit dem Kompilieren und Installieren fort:
sudo make
sudo make installWenn Sie auf den folgenden Fehler stoßen
mkdir:Verzeichnis „/etc/raddb/“ kann nicht erstellt werden:Datei existiert
make:*** [/etc/raddb/] Fehler 1Führen Sie Folgendes aus, um das Problem zu beheben:
rmdir /etc/raddb
make install &&make installRadiusgruppe und Benutzer hinzufügen:
sudo groupadd -r radiusd
sudo useradd -r -M -c "Radius Server User" -g radiusd radiusd -s /sbin/nologin
Freeradius-MySQL-Tabellen konfigurieren
Starten Sie den MySQL-Server, falls er nicht ausgeführt wird. Wie oben erwähnt, erfolgt der Initialisierungsprozess über systemd, also:
sudo systemctl -q is-active mysqld.service || sudo systemctl mysqld.service startenStellen Sie sicher, dass der Dienst auch beim Booten gestartet wird:
sudo systemctl enable mysqld.serviceUmkreisdatenbank erstellen:
mysqladmin -u root -p[MYSQL_ROOT_PASSWORD] Radius erstellenGenerieren Sie Datenbanktabellen mit dem MySQL-Schema:
sudo cat /etc/raddb/mods-config/sql/main/mysql/schema.sql | mysql -u root -p[MYSQL_ROOT_PASSWORD] RadiusErstellen Sie einen MySQL-Radius-Benutzer und legen Sie Berechtigungen für die Radius-Datenbank fest:
mysql -u root -p[MYSQL_ROOT_PASSWORD] radius
GEWÄHREN SIE ALLE PRIVILEGIEN AUF radius.* an [FREERADIUS_DB_USER]@localhost IDENTIFIED by '[FREERADIUS_DB_PASS]';Konfigurieren Sie das SQL-Radiusmodul:
sudo vim /etc/raddb/mods-available/sqlEntkommentieren Sie die folgenden Parameter und/oder ändern Sie sie:
driver ="rlm_sql_mysql"
dialect ="mysql"
server ="localhost"
port =3306
login ="FREERADIUS_DB_USER"
password ="FREERADIUS_DB_PASS "
read_clients =jaChilispot-SQL-Zähler hinzufügen:
sudo vim /etc/raddb/mods-available/sqlcounterFügen Sie diese Zeile am Ende der obigen Datei hinzu:
$INCLUDE ${modconfdir}/sql/counter/${modules.sql.dialect}/chillispot.confNächster Link sql, sqlcounter zu den verfügbaren Modulen:
sudo ln -s /etc/raddb/mods-available/sql /etc/raddb/mods-enabled/sql
sudo ln -s /etc/raddb/mods-available/sqlcounter /etc/raddb/ mods-enabled/sqlcounterRadius-Clients konfigurieren
sudo vim /etc/raddb/clients.confÄndern Sie das Passwort in das oben verwendete Passwort für die FreeRadius MySQL-Datenbank:
secret =[FREERADIUS_DB_PASS]Radiusserver konfigurieren:
sudo vim /etc/raddb/radiusd.confÄndern Sie im Abschnitt Sicherheit den Benutzer und die Gruppe in den Namen, der während der Installation erstellt wurde:
user =radiusd
group =radiusd
allow_vulnerable_openssl =yes
WICHTIG:Tun Sie dies nicht. Sie sollten wirklich auf die neuesten Versionen von OpenSSL aktualisierenFügen Sie unter dem Instantiate-Abschnitt (in der Nähe von Zeile 728) die folgenden Zählermodule hinzu:
chillispot_max_bytes
noresetcounterKonfigurieren Sie den standardmäßigen virtuellen Server unter „sites-available:
“.sudo vim /etc/raddb/sites-available/defaultUnter Autorisierungsabschnitt:
Kommentieren Sie Folgendes:#filter_usernameKommentieren Sie Folgendes aus:
auth_log
unix
Ändern Sie Folgendes:'-sql' zu sqlFügen Sie am Ende des Autorisierungsabschnitts Folgendes hinzu:
chillispot_max_bytes
noresetcounterEntkommentieren Sie als Nächstes im Abschnitt "Buchhaltung" Folgendes:
radutmpÄndern Sie Folgendes:
'-sql' zu sqlEntkommentieren Sie als Nächstes im Sitzungsbereich Folgendes:
radutmp
sqlEntkommentieren Sie als Nächstes im Post-Auth-Abschnitt Folgendes:
reply_logÄndern Sie Folgendes:
'-sql' zu sqlKonfigurieren Sie den virtuellen Server für innere Tunnelanfragen unter „sites-available:
“.sudo vim /etc/raddb/sites-available/inner-tunnelÄndern Sie im Autorisierungsabschnitt Folgendes:
'-sql' zu sqlFügen Sie am Ende des Autorisierungsabschnitts Folgendes hinzu:
chillispot_max_bytes
noresetcounterEntkommentieren Sie als Nächstes im Sitzungsabschnitt Folgendes:
sqlEntkommentieren Sie als Nächstes im Post-Auth-Abschnitt Folgendes:
reply_logÄndern Sie Folgendes:
'-sql' zu sqlFügen Sie die folgenden MySQL-Zähler für Chillispot hinzu:
sudo vim /etc/raddb/mods-config/sql/counter/mysql/chillispot.conf
sqlcounter chillispot_max_bytes {
counter_name =Max-Total-Octets
check_name =ChilliSpot-Max-Total-Octets
reply_name =ChilliSpot-Max-Total-Octets
reply_message =" Sie haben Ihr Bandbreitenlimit erreicht"
sql_module_instance =sql
key =User-Name
reset =never
query ="SELECT IFNULL((SUM(AcctInputOctets + AcctOutputOctets))),0 ) FROM radacct WO Benutzername ='%{${key}}' UND UNIX_TIMESTAMP(AcctStartTime) + AcctSessionTime> '%%b'"
}
Eigentümerschaft von Konfigurations- und Protokollverzeichnissen ändern:
sudo touch /var/log/radius/radutmp
sudo chown -R radiusd:radiusd /etc/raddb
sudo chown -R radiusd:radiusd /var/log/radiusErstellen Sie einen Admin-Benutzer in der Radius-MySQL-Datenbank:
echo "INSERT INTO radcheck (UserName, Attribute, Value, Op) VALUES ('[ADMIN_USER]', 'Cleartext-Password', '[ADMIN_PASSWORD]', ':=');" | mysql -u Radius -p[FREERADIUS_DB_PASS] RadiusStartradius für Initialisierungs- und Testzwecke
sudo /usr/sbin/radiusd -XÖffnen Sie ein neues Terminalfenster, um Verbindungen zu testen:
radtest [ADMIN_USER] [ADMIN_PASSWORD] 127.0.0.1 0 [FREERADIUS_DB_PASS]Wenn Sie eine Meldung wie diese erhalten, sind Sie mit der Einrichtung des minimalen und erforderlichen Radius für die nächsten Schritte fertig:
Access-Accept-ID 174 von 127.0.0.1:1812 bis 0.0.0.0:0 Länge 20 erhalten
Aber bevor Sie den Radius beiseite lassen, erstellen Sie eine systemd-Dienstdatei für Ihren Radius-Server:
sudo vim /etc/systemd/system/radiusd.service
[Unit]
Description=FreeRADIUS Hochleistungs-RADIUS-Server.
After=mysqld.service syslog.target network.target
[Service]
Type=forking
ExecStartPre=-/bin/mkdir /var/log/radius
ExecStartPre=-/bin/mkdir /var/run/radiusd
ExecStartPre=-/bin/chown -R radiusd.radiusd /var/ log/radius
ExecStartPre=-/bin/chown -R radiusd.radiusd /var/run/radiusd
ExecStartPre=/usr/sbin/radiusd -C
ExecStart=/usr/sbin/ radiusd -d /etc/raddb
ExecReload=/usr/sbin/radiusd -C
ExecReload=/bin/kill -HUP $MAINPID
[Installieren]
WantedBy=multi- user.targetAktivieren Sie den Dienst so, dass er beim Booten automatisch gestartet wird:
sudo systemctl enable radiusd.service
Haserl installieren
Haserl wird für das in CoovaChilli enthaltene eingebettete Miniportal benötigt.
haserl herunterladen:
cd /tmp
wget -c http://superb-dca2.dl.sourceforge.net/project/haserl/haserl-devel/haserl-0.9.35.tar.gzEntpacke den Tarball:
sudo tar zxvf haserl-0.9.35.tar.gz -C /usr/src/
cd /usr/src/haserl-0.9.35/Kompilieren und installieren:
./configure --prefix=/usr –libdir=/usr/lib64(Stellen Sie sicher, dass Sie zur richtigen Bibliothek oder zum gewünschten Präfix wechseln)
make
sudo make install
Installieren Sie CoovaChilli
CoovaChilli ist eine Open-Source-basierte Captive-Portal-Software. Es begann mit dem veralteten Chili-Projekt. Nachdem die Installation und Konfiguration von coovachilli abgeschlossen ist, können Sie Ihre WLAN-Hotspot-Clients auf eine Anmeldeseite umleiten, d. h. ein Captive-Portal, wo sie sich anmelden und auf das Internet zugreifen können.
Laden Sie die neuesten Quellen für Coovachilli herunter:
cd /usr/src
sudo git clone https://github.com/coova/coova-chilli.gitcoova konfigurieren und kompilieren :
cd /usr/src/coova-chilli
sh bootstrap
./configure --prefix=/usr --libdir=/usr/lib64 --localstatedir=/var --sysconfdir=/ etc --enable-miniportal --with-openssl --enable-libjson --enable-useragent --enable-sessionstate --enable-sessionid --enable-chilliredir --enable-binstatusfile --enable-statusfile --disable- static --enable-shared --enable-largelimits --enable-proxyvsa --enable-chilliproxy --enable-chilliradsec --with-poll(Stellen Sie sicher, dass Sie zur richtigen Bibliothek oder zum gewünschten Präfix wechseln)
make
sudo make installCoovaChilli konfigurieren
Alle Konfigurationsdateien befinden sich unter:/etc/chilli. Sie müssen eine Konfigurationsdatei mit den Änderungen Ihrer Website wie folgt erstellen:
sudo cp -v /etc/chilli/defaults /etc/chilli/config
sudo vim /etc/chilli/configÄndern Sie die folgenden Parameter entsprechend Ihrer Umgebung:
HS_WANIF=eth0 # WAN-Schnittstelle zum Internet
HS_LANIF=wlan0 # Teilnehmerschnittstelle für Client-Geräte
HS_NETWORK=10.1.0.0 # HotSpot-Netzwerk (muss HS_UAMLISTEN enthalten)
HS_NETMASK=255.255.255. 255.0 # HotSpot-Netzwerk-Netzmaske
HS_UAMLISTEN=10.1.0.1 # HotSpot-IP-Adresse (im Abonnentennetzwerk)
HS_RADSECRET=[FREERADIUS_DB_PASS] # Als Ihr gemeinsames RADIUS-Geheimnis festlegen
HS_UAMSECRET=[FREERADIUS_DB_PASS] # Als Ihr UAM-Geheimnis festlegen
HS_ADMUSR=[ADMIN_USER]
HS_ADMPWD=[ADMIN_PASSWORD]Fügen Sie das Chili-Skript ipup.sh hinzu. Der Zweck dieser Skripte besteht darin, das System darauf vorzubereiten, als Router zu fungieren. Möglicherweise möchten Sie auch andere Befehle hinzufügen, z. Einstellen des Gateways.
sudo vim /etc/chilli/ipup.sh
#!/bin/sh
#
# IP-Masquerading über dieses Feld zulassen
/usr/sbin/iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADEWICHTIG:Ändern Sie das Internetgerät auf das richtige.
Skript ausführbar machen:
sudo chmod 755 /etc/chilli/ipup.shCoovachilli aktivieren, damit es beim Booten startet:
sudo systemctl enable ChiliCoovachilli starten:
sudo systemctl start chili
Testen Ihres Captive-Portals
Bevor Sie mit dem Testen beginnen, stellen Sie sicher, dass Sie zunächst lokal auf das Internet zugreifen können.
Öffnen Sie dann mit einem drahtlosen Client wie Smartphone oder Laptop Ihren bevorzugten Webbrowser. Gehen Sie zu einer beliebigen URL/Website Ihrer Wahl.
Wenn Sie die obigen Schritte befolgt haben, werden Sie wie unten gezeigt auf die Captive-Portalseite weitergeleitet:
Benutzerverwaltung
Um Benutzer hinzuzufügen, damit sie über Ihren Hotspot auf das Internet zugreifen können, führen Sie den folgenden Befehl für jeden Benutzer aus. Sie können es mit einem Skript automatisieren, wenn Sie möchten.
echo "INSERT INTO radcheck (UserName, Attribute, Value, Op) VALUES ('[LOGIN_NAME]', 'Cleartext-Password', '[LOGIN_PASSWORD]', ':=');" | mysql -u Radius -p[FREERADIUS_DB_PASS] Radius
Das war's, Leute!
Folgen Sie mir unter:@jzikusooka