GNU/Linux >> Linux の 問題 >  >> Linux

CoovaChilliを使用してLinuxにキャプティブページ付きのワイヤレスホットスポットをインストールする方法

この記事の目的は、Linuxベースのコンピューターまたはラップトップをワイヤレスホットスポットに変えて、キャプティブポータルページを介してユーザーを認証する方法を示すことです。このタスクでは、プライマリコントローラーソフトウェアはCoovaChilliになります。このソフトウェアは、ホテル、レストラン、スーパーマーケット、公園、およびWiFiインターネットを提供するあらゆる場所に理想的なホットスポット管理ソリューションです。

前提条件
  • Linuxディストリビューション。この記事では、Fedora20を使用します。それ以降のバージョン21/22は正常に動作するはずです。
  • ソースパッケージのコンパイルに必要な開発ライブラリ。
  • 動作しているMySQLサーバーのインストール。
  • インターネットに接続する有線ネットワークデバイス。
  • sudoコマンドを実行する機能。
  • アクセスポイントモードをサポートするワイヤレスネットワークデバイス。ワイヤレスデバイスがAPモードの実行をサポートしているかどうかを確認するには、次のようにします。
    sudo iw phy | grep -A 5-i'サポートされているインターフェイスモード'| grep'*'

CoovaChilliの依存関係をインストールする

yum install libnl3-devel libtalloc-devel iptables

hostapdをインストール

Hostapdを使用すると、コンピューターをアクセスポイント(AP)WPA/WPA2オーセンティケーターとして機能させることができます。その他の機能には、Radius認証サービスが含まれますが、ここでは使用しません。

ほとんどのLinuxディストリビューション(Fedoraを含む)には、hostapdのパッケージ済みバージョンがあり、パッケージ管理ソフトウェアを使用してインストールできます。たとえば、Fedora、CentOS、およびその他のRed-HatベースのLinuxディストリビューションでは、簡単なコマンドでこのパッケージがインストールされます。

yum install hostapd

ただし、最新バージョンのホストパッドをインストールするには、ソースをダウンロードしてコンパイルする必要があります。これは次のように簡単に行うことができます:

cd /usr/src
sudo git clone git://w1.fi/hostap.git

これにより、hostapdサーバーデーモンとwpa_supplicantソースの両方がダウンロードされます。前者に関心があるので、hostapdソースに変更します:

cd hostap/hostapd

Hostapdには「configure」コマンドがないため、hostapdをコンパイルする前に、インストールプレフィックスを変更する必要があります。デフォルトのインストールディレクトリをすばやく簡単に変更するには、sed:

を使用します。
sed -i “s:export BINDIR ?= /usr/local/bin/:export BINDIR ?= /usr/sbin:g” Makefile

次に、デフォルトの構成ファイルをコピーします:

cp -v defconfig .config

構成ファイルのいくつかのデフォルトを変更する必要があります:

vim .config

次のオプションのコメントを解除します:

CONFIG_LIBNL32=y # Use libnl 3.2 libraries
CONFIG_IEEE80211N=y # Enables IEEE 802.11n support
CONFIG_WNM=y # Enables Network Management support
CONFIG_IEEE80211AC=y # Enables IEEE 802.11ac support
CONFIG_DEBUG_FILE=y # Support for writing debug log to file

makeとinstallを実行します:

make
sudo make install

hostapdが正しくインストールされているかどうかを確認するには、次のコマンドを実行します:

hostapd -v

上記のコマンドは、バージョンとクレジットを表示します

hostapdを構成する

サンプルファイルを使用してhostapd構成ファイルを作成します:

sudo mkdir /etc/hostapd
sudo cp -v /usr/src/hostap/hostapd/hostapd.conf /etc/hostapd/
sudo vim /etc/hostapd/hostapd.conf

hostapd.confファイルの次のパラメーターを変更します。

driver=nl80211
interface=wlan0 # Change this to your wireless device
ssid=KAMPALA-3 # Change this to your SSID
hw_mode=g
channel=6 # Enter your desired channel
ieee80211n=1 # Enable IEEE 802.11n
wpa=1
wpa_passphrase=myverysecretpassword
wpa_pairwise=TKIP CCMP
rsn_pairwise=CCMP

hostapdソケット用のディレクトリを作成します:

sudo mkdir /var/run/hostapd

WiFiインターフェースのステータスを「UP」に設定し、ソフトスイッチがオンの場合はWifiのブロックを解除します:

sudo rfkill unblock wifi
sudo ip link set dev wlan0 up

hostapdをテストして開始します:

sudo hostapd -d /etc/hostapd/hostapd.conf

すべてがうまくいけば、hostapdデーモンは起動し、終了しないはずです。

次に、systemdサービスファイルを作成します。今では、ほとんどのLinuxディストリビューションはsystemdを使用してサービスを制御しています:

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

[Install]
WantedBy=multi-user.target

起動時にサービスが自動的に開始するようにします:

sudo systemctl enable hostapd.service

フリーラディウス

インターネットにアクセスする前にクライアントに認証を要求するため、RADIUSサーバーをインストールする必要があります。 FreeRadiusは、オープンソースベースのRADIUSサーバーです。 yumやaptなどのお気に入りのLinuxパッケージマネージャーを使用してインストールすることもできます。ただし、最新バージョンをインストールしたいので、ソースからコンパイルします。

freeradiusをダウンロードする:

cd /tmp/
wget -c ftp://ftp.freeradius.org/pub/freeradius/freeradius-server-3.0.9.tar.bz2

ソースを解凍し、インストール場所に変更します:

sudo tar jxvf freeradius-server-3.0.9.tar.bz2 -C /usr/src/
cd /usr/src/freeradius-server-3.0.9

configureスクリプトを実行して、セットアップに正しいプレフィックスとライブラリパスを使用していることを確認します。

sudo ./configure --prefix=/usr --libdir=/usr/lib64 --sysconfdir=/etc --localstatedir=/var/ --enable-fast-install=no

コンパイルとインストールに進みます:

sudo make
sudo make install

次のエラーが発生した場合

mkdir:ディレクトリ「/ etc / raddb /」を作成できません:ファイルが存在します
make:*** [/ etc /raddb/]エラー1

次のコマンドを実行して修正します:

rmdir /etc/raddb
make install && make install

放射状のグループとユーザーを追加します:

sudo groupadd -r radiusd
sudo useradd -r -M -c "Radius Server User" -g radiusd radiusd -s /sbin/nologin

freeradiusMySQLテーブルを構成します

MySQLサーバーが実行されていない場合は、起動します。上記のように、初期化プロセスはsystemdを介して行われるため、次のようになります。

sudo systemctl -q is-active mysqld.service || sudo systemctl start mysqld.service

起動時でもサービスが開始されることを確認してください:

sudo systemctl enable mysqld.service

半径データベースの作成:

mysqladmin -u root -p[MYSQL_ROOT_PASSWORD] create radius

MySQLスキーマを使用してデータベーステーブルを生成します:

sudo cat /etc/raddb/mods-config/sql/main/mysql/schema.sql | mysql -u root -p[MYSQL_ROOT_PASSWORD] radius

MySQL radiusユーザーを作成し、radiusデータベースに権限を設定します:

mysql -u root -p[MYSQL_ROOT_PASSWORD] radius

GRANT ALL PRIVILEGES ON radius.* to [FREERADIUS_DB_USER]@localhost IDENTIFIED by '[FREERADIUS_DB_PASS]';

SQLradiusモジュールを構成します。

sudo vim /etc/raddb/mods-available/sql

コメントを外すか、次のパラメータを変更します:

driver = "rlm_sql_mysql"
dialect = ”mysql”
server = "localhost"
port = 3306
login = "FREERADIUS_DB_USER"
password = "FREERADIUS_DB_PASS"
read_clients = yes

chillispot SQLカウンターを追加します:

sudo vim /etc/raddb/mods-available/sqlcounter

上記のファイルの最後に次の行を追加します:

$INCLUDE ${modconfdir}/sql/counter/${modules.sql.dialect}/chillispot.conf

次のリンクsql、sqlcounterを使用可能なモジュールにリンクします:

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/sqlcounter

半径クライアントの構成

sudo vim /etc/raddb/clients.conf

パスワードを上記でFreeRadiusMySQLデータベースに使用されているパスワードに変更します。

secret = [FREERADIUS_DB_PASS]

RADIUSサーバーの構成:

sudo vim /etc/raddb/radiusd.conf

[セキュリティ]セクションで、ユーザーとグループをインストール中に作成された名前に変更します。

user = radiusd
group = radiusd
allow_vulnerable_openssl = yes
IMPORTANT: Don't do this. You really should update to recent versions of OpenSSL

インスタンス化セクション(行728の近く)の下に、次のカウンターモジュールを追加します。

chillispot_max_bytes
noresetcounter

サイトでデフォルトの仮想サーバーを構成します-利用可能:

sudo vim /etc/raddb/sites-available/default

承認セクションの下:

次のコメント:

#filter_username

以下のコメントを外します:

auth_log
unix


以下を変更します:

'-sql' to sql

承認セクションの最後に以下を追加します:

chillispot_max_bytes
noresetcounter

次の[会計]セクションで、次のコメントを解除します。

radutmp

以下を変更します:

'-sql' to sql

次のセッションセクションで、次のコメントを解除します。

radutmp
sql

次に、認証後のセクションで、次のコメントを解除します。

reply_log

以下を変更します:

'-sql' to sql

サイトの下にある内部トンネル要求仮想サーバーを構成します-利用可能:

sudo vim /etc/raddb/sites-available/inner-tunnel

[承認]セクションで、以下を変更します。

'-sql' to sql

承認セクションの最後に以下を追加します:

chillispot_max_bytes
noresetcounter

次に、セッションセクションで、次のコメントを解除します。

sql

次に、認証後のセクションで、次のコメントを解除します。

reply_log

以下を変更します:

'-sql' to sql

Chillispot用に次のMySQLカウンターを追加します:

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 = "You have reached your bandwidth limit"
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'"
}

構成ディレクトリとログディレクトリの所有権を変更します:

sudo touch /var/log/radius/radutmp
sudo chown -R radiusd:radiusd /etc/raddb
sudo chown -R radiusd:radiusd /var/log/radius

radius MySQLデータベースに管理者ユーザーを作成します:

echo "INSERT INTO radcheck (UserName, Attribute, Value, Op) VALUES ('[ADMIN_USER]', 'Cleartext-Password', '[ADMIN_PASSWORD]', ':=');" | mysql -u radius -p[FREERADIUS_DB_PASS] radius

初期化とテストのための開始半径

sudo /usr/sbin/radiusd -X

新しいターミナルウィンドウを開いて接続をテストします:

radtest [ADMIN_USER] [ADMIN_PASSWORD] 127.0.0.1 0 [FREERADIUS_DB_PASS]

このようなメッセージが表示された場合は、次の手順に必要な最小限の半径の設定が完了しています。

受信したアクセス-127.0.0.1:1812から0.0.0.0:0の長さ20までのID174を受け入れます

ただし、radiusを脇に置く前に、radiusサーバー用のsystemdサービスファイルを作成します。

sudo vim /etc/systemd/system/radiusd.service

[Unit]
Description=FreeRADIUS high performance 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
[Install]
WantedBy=multi-user.target

起動時にサービスが自動的に開始するようにします:

sudo systemctl enable radiusd.service

Haserlをインストール

CoovaChilliに含まれる組み込みミニポータルにはHaserlが必要です。

haserlをダウンロード:

cd /tmp
wget -c http://superb-dca2.dl.sourceforge.net/project/haserl/haserl-devel/haserl-0.9.35.tar.gz

tarballを解凍します:

sudo tar zxvf haserl-0.9.35.tar.gz -C /usr/src/
cd /usr/src/haserl-0.9.35/

コンパイルしてインストールします:

./configure --prefix=/usr –libdir=/usr/lib64

(正しいライブラリまたは目的のプレフィックスに変更してください)

make
sudo make install

CoovaChilliをインストール

CoovaChilliは、オープンソースベースのキャプティブポータルソフトウェアです。これは、廃止されたチリプロジェクトから始まりました。 coovachilliのインストールと構成が完了すると、WiFiホットスポットクライアントをログインページ、つまりログインしてインターネットにアクセスできるキャプティブポータルにリダイレクトできるようになります。

coovachilliの最新ソースをダウンロードする:

cd /usr/src
sudo git clone https://github.com/coova/coova-chilli.git

coovaの構成とコンパイル:

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

(正しいライブラリまたは目的のプレフィックスに変更してください)

make
sudo make install

CoovaChilliを構成する

すべての構成ファイルは/etc/chilliの下にあります。次のように、サイトを変更した構成ファイルを作成する必要があります。

sudo cp -v /etc/chilli/defaults /etc/chilli/config
sudo vim /etc/chilli/config

環境に合わせて次のパラメータを変更してください:

HS_WANIF=eth0 # WAN Interface toward the Internet
HS_LANIF=wlan0 # Subscriber Interface for client devices
HS_NETWORK=10.1.0.0 # HotSpot Network (must include HS_UAMLISTEN)
HS_NETMASK=255.255.255.0 # HotSpot Network Netmask
HS_UAMLISTEN=10.1.0.1 # HotSpot IP Address (on subscriber network)
HS_RADSECRET=[FREERADIUS_DB_PASS] # Set to be your RADIUS shared secret
HS_UAMSECRET=[FREERADIUS_DB_PASS] # Set to be your UAM secret
HS_ADMUSR=[ADMIN_USER]
HS_ADMPWD=[ADMIN_PASSWORD]

chilliipup.shスクリプトを追加します。これらのスクリプトの目的は、ルーターとして機能するようにシステムを準備することです。他のコマンドを追加することもできます。ゲートウェイの設定。

sudo vim /etc/chilli/ipup.sh

#!/bin/sh
#
# Allow IP masquerading through this box
/usr/sbin/iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
>

重要:インターネットデバイスを正しいものに変更してください。

スクリプトを実行可能にする:

sudo chmod 755 /etc/chilli/ipup.sh

coovachilliを有効にして、起動時に起動するようにします:

sudo systemctl enable chilli

coovachilliを開始します:

sudo systemctl start chilli

キャプティブポータルのテスト

テストを開始する前に、まずローカルでインターネットにアクセスできることを確認してください。


次に、スマートフォンやラップトップなどのワイヤレスクライアントを使用して、お気に入りのWebブラウザを開きます。任意のURL/Webサイトにアクセスします。

上記の手順を実行すると、以下に示すように、キャプティブポータルページにリダイレクトされます。

ユーザー管理

ホットスポットを使用してインターネットにアクセスできるようにユーザーを追加するには、ユーザーごとに次のコマンドを実行します。必要に応じて、スクリプトを使用して自動化できます。

echo "INSERT INTO radcheck (UserName, Attribute, Value, Op) VALUES ('[LOGIN_NAME]', 'Cleartext-Password', '[LOGIN_PASSWORD]', ':=');" | mysql -u radius -p[FREERADIUS_DB_PASS] radius

それは人々です!

@jzikusooka

でフォローしてください
Linux
  1. LinuxにNginxWebサーバーをインストールする方法

  2. LinuxにVagrantをインストールする方法

  3. Linuxでpipを使用してすべてのユーザーにモジュールをインストールするには?

  1. VSFTPDを使用してRockyLinux8にFTPサーバーをインストールする方法

  2. RockyLinux8にFirewalldを使用してFail2banをインストールする方法

  3. SSL を使用して Ubuntu 22.04 に Elasticsearch をインストールする方法

  1. スクリーンショットを使用してMXLinux21をステップバイステップでインストールする方法

  2. Linux Mint 19 / LinuxMint18にApacheSVNをインストールする方法

  3. Linux Mint 19 / LinuxMint18にNginxを使用してphpMyAdminをインストールする方法