Tujuan artikel ini adalah untuk mendemonstrasikan bagaimana Anda dapat mengubah komputer atau laptop berbasis Linux menjadi hotspot nirkabel di mana pengguna dapat diautentikasi melalui halaman captive portal. Untuk tugas ini, perangkat lunak pengontrol utama adalah CoovaChilli. Perangkat lunak ini adalah solusi manajemen hotspot yang ideal untuk hotel, restoran, supermarket, taman, dan tempat mana pun yang menawarkan Internet WiFi.
Prasyarat
- Distribusi Linux. Dalam artikel ini, saya akan menggunakan Fedora 20. Versi 21/22 yang lebih baru akan berfungsi dengan baik.
- Library pengembangan yang diperlukan untuk kompilasi paket sumber.
- Instalasi server MySQL yang berfungsi.
- Perangkat jaringan kabel yang terhubung ke Internet.
- Kemampuan untuk menjalankan perintah sudo.
- Perangkat jaringan nirkabel yang mendukung mode Titik Akses. Untuk melihat apakah perangkat nirkabel Anda mendukung mode AP jalankan:
sudo iw phy |grep -A 5 -i 'Mode antarmuka yang didukung' | grep '*'
Instal dependensi CoovaChilli
yum install libnl3-devel libtalloc-devel iptables
Instal hostapd
Hostapd memungkinkan komputer Anda berfungsi sebagai Access Point (AP) WPA/WPA2 Authenticator. Fungsionalitas lainnya termasuk layanan autentikasi Radius, meskipun kami tidak akan menggunakannya di sini.
Sebagian besar distribusi Linux (termasuk Fedora) memiliki versi pra-paket dari hostapd dan dapat diinstal menggunakan perangkat lunak manajemen paket te. Misalnya di Fedora, CentOS dan distro Linux berbasis Red-Hat lainnya, perintah sederhana akan menginstal paket ini:
yum install hostapd
Namun, untuk menginstal hostpad versi terbaru, kita perlu mengunduh dan mengkompilasi sumbernya. Ini dapat dilakukan dengan mudah sebagai berikut:
cd /usr/src
sudo git clone git://w1.fi/hostap.git
Ini akan mengunduh hostapd server daemon, dan sumber wpa_supplicant. Kami tertarik pada yang pertama, jadi akan berubah ke sumber hostapd:
cd hostap/hostapd
Hostapd tidak memiliki perintah 'configure', jadi sebelum kita mengkompilasi hostapd, kita perlu mengubah awalan install. Cara cepat dan sederhana untuk mengubah direktori instal default adalah dengan menggunakan sed:
sed -i “s:export BINDIR ?=/usr/local/bin/:export BINDIR ?=/usr/sbin:g” Makefile
Selanjutnya, salin file konfigurasi default:
cp -v defconfig .config
kita perlu mengubah beberapa default di file konfigurasi:
vim .config
Batalkan komentar pada opsi berikut:
CONFIG_LIBNL32=y # Gunakan perpustakaan libnl 3.2
CONFIG_IEEE80211N=y # Mengaktifkan dukungan IEEE 802.11n
CONFIG_WNM=y # Mengaktifkan dukungan Manajemen Jaringan
CONFIG_IEEE80211AC=y # Mengaktifkan dukungan IEEE 802.11ac
CONFIG_DEBUG_FILE=y # Dukungan untuk menulis log debug ke file
Jalankan make dan install:
make
sudo make install
Untuk memeriksa apakah hostapd terinstal dengan benar, jalankan:
hostapd -v
Perintah di atas akan menampilkan versi dan kredit
Konfigurasikan hostapd
Buat file konfigurasi hostapd menggunakan file contoh:
sudo mkdir /etc/hostapd
sudo cp -v /usr/src/hostap/hostapd/hostapd.conf /etc/hostapd/
sudo vim /etc/hostapd/hostapd.confUbah parameter berikut di file hostapd.conf:
driver=nl80211
interface=wlan0 # Ubah ini ke perangkat nirkabel Anda
ssid=KAMPALA-3 # Ubah ini ke SSID Anda
hw_mode=g
channel=6 # Masukkan saluran yang Anda inginkan
ieee80211n=1 # Aktifkan IEEE 802.11n
wpa=1
wpa_passphrase=myverysecretpassword
wpa_pairwise=TKIP CCMP
rsn_pairwise=CCMPBuat direktori untuk soket hostapd:
sudo mkdir /var/run/hostapdSetel status antarmuka WiFi ke 'UP' dan buka blokir Wifi jika sakelar lunak aktif:
sudo rfkill buka blokir wifi
sudo ip link set dev wlan0 upUji dan mulai hostapd:
sudo hostapd -d /etc/hostapd/hostapd.confJika semuanya berjalan dengan baik, daemon hostapd akan mulai dan tidak berhenti.
Selanjutnya, buat file layanan systemd. Saat ini, sebagian besar distribusi Linux menggunakan systemd untuk mengontrol layanan:
sudo vim /etc/systemd/system/hostapd.service
[Unit]
Deskripsi=Hostapd IEEE 802.11 AP, IEEE 802.1X/WPA/WPA2/EAP/RADIUS Authenticator
Setelah=dnsmasq.service
[Layanan]
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
[Instal]
WantedBy=multi-user.targetAktifkan layanan untuk memulai secara otomatis saat boot:
sudo systemctl aktifkan hostapd.service
Radius bebas
Karena kami akan meminta klien untuk mengautentikasi sebelum mengakses Internet, instalasi server radius diperlukan. FreeRadius adalah server radius berbasis open source. Itu juga dapat diinstal menggunakan manajer paket Linux favorit Anda seperti yum atau apt. Namun karena kami ingin memasang versi terbaru, kami akan mengompilasinya dari sumber.
Unduh freeradius:
cd /tmp/
wget -c ftp://ftp.freeradius.org/pub/freeradius/freeradius-server-3.0.9.tar.bz2Buka paket sumber dan ubah ke lokasi pemasangan:
sudo tar jxvf freeradius-server-3.0.9.tar.bz2 -C /usr/src/
cd /usr/src/freeradius-server-3.0.9Jalankan skrip konfigurasi untuk memastikan bahwa Anda menggunakan awalan dan jalur pustaka yang benar untuk penyiapan Anda:
sudo ./configure --prefix=/usr --libdir=/usr/lib64 --sysconfdir=/etc --localstatedir=/var/ --enable-fast-install=noLanjutkan untuk mengkompilasi dan menginstal:
sudo make
sudo make installJika Anda mengalami kesalahan berikut
mkdir:tidak dapat membuat direktori ‘/etc/raddb/’:File ada
buat:*** [/etc/raddb/] Kesalahan 1Jalankan yang berikut ini, untuk memperbaikinya:
rmdir /etc/raddb
make install &&make installTambahkan grup dan pengguna radiusd:
sudo groupadd -r radiusd
sudo useradd -r -M -c "Pengguna Server Radius" -g radiusd radiusd -s /sbin/nologin
Konfigurasikan tabel MySQL freeradius
Mulai server MySQL jika tidak berjalan. Seperti disebutkan di atas, proses inisialisasi melalui systemd, jadi:
sudo systemctl -q is-active mysqld.service || sudo systemctl start mysqld.servicePastikan layanan dimulai bahkan saat boot:
sudo systemctl aktifkan mysqld.serviceBuat basis data radius:
mysqladmin -u root -p[MYSQL_ROOT_PASSWORD] buat radiusBuat tabel database menggunakan skema MySQL:
sudo cat /etc/raddb/mods-config/sql/main/mysql/schema.sql | mysql -u root -p[MYSQL_ROOT_PASSWORD] radiusBuat pengguna radius MySQL dan atur hak istimewa pada basis data radius:
mysql -u root -p[MYSQL_ROOT_PASSWORD] radius
GRANT ALL PRIVILEGES ON radius.* to [FREERADIUS_DB_USER]@localhost IDENTIFIED by '[FREERADIUS_DB_PASS]';Konfigurasi modul radius SQL:
sudo vim /etc/raddb/mods-available/sqlBatalkan komentar dan atau ubah parameter berikut:
driver ="rlm_sql_mysql"
dialect =”mysql”
server ="localhost"
port =3306
login ="FREERADIUS_DB_USER"
password ="FREERADIUS_DB_PASS "
read_clients =yaTambahkan penghitung SQL chillspot:
sudo vim /etc/raddb/mods-available/sqlcounterTambahkan baris ini di akhir file di atas:
$INCLUDE ${modconfdir}/sql/counter/${modules.sql.dialect}/chillispot.confTautan berikutnya sql, sqlcounter ke modul yang tersedia:
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/sqlcounterKonfigurasikan klien radius
sudo vim /etc/raddb/clients.confUbah sandi menjadi sandi yang digunakan di atas untuk database MySQL FreeRadius:
rahasia =[FREERADIUS_DB_PASS]Konfigurasikan server radius:
sudo vim /etc/raddb/radiusd.confDi bawah bagian keamanan, ubah pengguna dan grup menjadi nama yang dibuat saat penginstalan:
user =radiusd
group =radiusd
allow_vulnerable_openssl =yes
PENTING:Jangan lakukan ini. Anda benar-benar harus memperbarui ke versi OpenSSL terbaruDi bawah bagian instantiate (Dekat baris 728), tambahkan modul penghitung berikut:
chillispot_max_bytes
noresetcounterKonfigurasikan server virtual default di bawah situs-tersedia:
sudo vim /etc/raddb/sites-available/defaultDi bawah bagian otorisasi:
Komentar berikut ini:#filter_namapenggunaBatalkan komentar berikut:
auth_log
unix
Ubah berikut ini:'-sql' ke sqlTambahkan berikut ini di akhir bagian otorisasi:
chillispot_max_bytes
noresetcounterSelanjutnya di bawah bagian akuntansi, Batalkan komentar berikut:
radutmpUbah berikut ini:
'-sql' ke sqlSelanjutnya di bawah bagian sesi, Batalkan komentar berikut:
radutmp
sqlSelanjutnya di bawah bagian post-auth, Batalkan komentar berikut:
reply_logUbah berikut ini:
'-sql' ke sqlKonfigurasikan permintaan terowongan dalam server virtual di bawah situs-tersedia:
sudo vim /etc/raddb/sites-available/inner-tunnelDi bawah bagian otorisasi, ubah yang berikut:
'-sql' ke sqlTambahkan berikut ini di akhir bagian otorisasi:
chillispot_max_bytes
noresetcounterSelanjutnya di bawah bagian sesi, Batalkan komentar berikut:
sqlSelanjutnya di bawah bagian post-auth, Batalkan komentar berikut:
reply_logUbah berikut ini:
'-sql' ke sqlTambahkan penghitung MySQL berikut untuk Chillispot:
sudo vim /etc/raddb/mods-config/sql/counter/mysql/chillispot.conf
sqlcounter chilispot_max_bytes {
counter_name =Max-Total-Octets
check_name =ChilliSpot-Max-Total-Octets
reply_name =ChilliSpot-Max-Total-Octets
reply_message =" Anda telah mencapai batas bandwidth"
sql_module_instance =sql
key =User-Name
reset =never
query ="SELECT IFNULL((SUM(AcctInputOctets + AcctOutputOctets)),0 ) FROM radacct WHERE username ='%{${key}}' AND UNIX_TIMESTAMP(AcctStartTime) + AcctSessionTime> '%%b'"
}
Ubah kepemilikan direktori konfigurasi dan log:
sudo touch /var/log/radius/radutmp
sudo chown -R radiusd:radiusd /etc/raddb
sudo chown -R radiusd:radiusd /var/log/radiusBuat Pengguna Admin dalam radius database MySQL:
echo "INSERT INTO radcheck (UserName, Attribute, Value, Op) VALUES ('[ADMIN_USER]', 'Cleartext-Password', '[ADMIN_PASSWORD]', ':=');" | mysql -u radius -p[FREERADIUS_DB_PASS] radiusMulai radius untuk tujuan inisialisasi dan pengujian
sudo /usr/sbin/radiusd -XBuka jendela terminal baru untuk menguji koneksi:
tes awal [ADMIN_USER] [ADMIN_PASSWORD] 127.0.0.1 0 [FREERADIUS_DB_PASS]Jika Anda mendapatkan pesan seperti ini, berarti Anda telah menyelesaikan penyiapan radius minimal dan yang diperlukan untuk langkah selanjutnya:
Menerima Access-Accept Id 174 dari 127.0.0.1:1812 hingga 0.0.0.0:0 panjangnya 20
Tetapi sebelum mengesampingkan radius, buat file layanan systemd untuk server radius Anda:
sudo vim /etc/systemd/system/radiusd.service
[Unit]
Description=FreeRADIUS server RADIUS performa tinggi.
After=mysqld.service syslog.target network.target
[Layanan]
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
[Instal]
WantedBy=multi- pengguna.targetAktifkan layanan untuk memulai secara otomatis saat boot:
sudo systemctl aktifkan radiusd.service
Instal Haserl
Haserl diperlukan untuk miniportal tertanam yang disertakan dalam CoovaChilli.
Unduh haserl:
cd /tmp
wget -c http://superb-dca2.dl.sourceforge.net/project/haserl/haserl-devel/haserl-0.9.35.tar.gzKemas tarball:
sudo tar zxvf haserl-0.9.35.tar.gz -C /usr/src/
cd /usr/src/haserl-0.9.35/Kompilasi dan instal:
./configure --prefix=/usr –libdir=/usr/lib64(Pastikan Anda mengubah pustaka yang benar atau awalan yang diinginkan)
make
sudo make install
Instal CoovaChilli
CoovaChilli adalah perangkat lunak portal tawanan berbasis sumber terbuka. Ini dimulai dari proyek cabai yang sudah usang. Setelah instalasi dan konfigurasi coovachilli selesai, Anda akan dapat mengarahkan klien hotspot WiFi Anda ke halaman login, yaitu portal captive di mana mereka dapat login dan mengakses Internet.
Unduh sumber terbaru untuk coovachilli:
cd /usr/src
sudo git clone https://github.com/coova/coova-chilli.gitKonfigurasi dan Kompilasi coova :
cd /usr/src/coova-chilli
sh bootstrap
./configure --prefix=/usr --libdir=/usr/lib64 --localstatedir=/var --sysconfdir=/ dll --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(Pastikan Anda mengubah pustaka yang benar atau awalan yang diinginkan)
make
sudo make installKonfigurasi CoovaChilli
Semua file konfigurasi berada di bawah:/etc/chilli. Anda perlu membuat file konfigurasi dengan modifikasi situs Anda sebagai berikut:
sudo cp -v /etc/chilli/defaults /etc/chilli/config
sudo vim /etc/chilli/configUbah parameter berikut agar sesuai dengan lingkungan Anda:
HS_WANIF=eth0 # Antarmuka WAN menuju Internet
HS_LANIF=wlan0 # Antarmuka Pelanggan untuk perangkat klien
HS_NETWORK=10.1.0.0 # Jaringan HotSpot (harus menyertakan HS_UAMLISTEN)
HS_NETMASK=255.255. 255.0 # Jaringan HotSpot Netmask
HS_UAMLISTEN=10.1.0.1 # Alamat IP HotSpot (pada jaringan pelanggan)
HS_RADSECRET=[FREERADIUS_DB_PASS] # Tetapkan sebagai rahasia bersama RADIUS Anda
HS_UAMSECRET=[FREERADIUS_DB_PASS] # Tetapkan sebagai rahasia UAM Anda
HS_ADMUSR=[ADMIN_USER]
HS_ADMPWD=[ADMIN_PASSWORD]Tambahkan skrip ipup.sh cabai. Tujuan dari skrip ini adalah untuk mempersiapkan sistem untuk bertindak sebagai router. Anda mungkin juga ingin menambahkan perintah lain mis. Menyetel gerbang.
sudo vim /etc/chilli/ipup.sh
#!/bin/sh
#
# Izinkan IP menyamar melalui kotak ini
/usr/sbin/iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADEPENTING:Ubah perangkat Internet ke perangkat yang benar.
Jadikan skrip dapat dieksekusi:
sudo chmod 755 /etc/chilli/ipup.shAktifkan coovachilli agar dapat dijalankan saat boot:
sudo systemctl aktifkan cabaiMulai coovachilli:
sudo systemctl start cabai
Menguji portal tawanan Anda
Sebelum memulai pengujian, pastikan terlebih dahulu Anda dapat mengakses internet secara lokal.
Kemudian menggunakan klien nirkabel seperti smartphone atau laptop, buka browser web favorit Anda. Buka URL/situs web pilihan Anda.
Jika Anda mengikuti langkah-langkah di atas, maka Anda akan diarahkan ke halaman captive portal seperti gambar di bawah ini:
Pengelolaan Pengguna
Untuk menambahkan pengguna agar mereka dapat mengakses Internet menggunakan hotspot Anda, jalankan perintah berikut untuk setiap pengguna. Anda dapat mengotomatiskannya menggunakan skrip jika diinginkan.
echo "INSERT INTO radcheck (UserName, Attribute, Value, Op) VALUES ('[LOGIN_NAME]', 'Cleartext-Password', '[LOGIN_PASSWORD]', ':=');" | mysql -u radius -p[FREERADIUS_DB_PASS] radius
Itu saja!
Ikuti saya di:@jzikusooka
Cara menggabungkan foto menjadi panorama dengan Hugin Panorama Creator di Linux Bagaimana menghubungkan melalui Bluetooth di GNOME di LinuxLinux