웹사이트 검색

CoovaChilli를 사용하여 Linux에서 캡티브 페이지로 무선 핫스팟을 설치하는 방법


이 페이지에서

  1. 전제 조건
  2. CoovaChilli 종속성 설치
  3. hostapd 설치
  4. hostapd 구성
  5. 자유 반경
  6. freeradius MySQL 테이블 구성
  7. Haserl 설치
  8. CoovaChilli 설치
  9. CoovaChilli 구성
  10. 포로 포털 테스트
  11. 사용자 관리

이 문서의 목적은 Linux 기반 컴퓨터 또는 랩톱을 캡티브 포털 페이지를 통해 사용자를 인증할 수 있는 무선 핫스팟으로 전환하는 방법을 보여 주는 것입니다. 이 작업을 위해 기본 컨트롤러 소프트웨어는 CoovaChilli입니다. 이 소프트웨어는 호텔, 레스토랑, 슈퍼마켓, 공원 및 WiFi 인터넷을 제공하는 모든 장소에 이상적인 핫스팟 관리 솔루션입니다.

전제 조건

  • Linux 배포판. 이 기사에서는 Fedora 20을 사용할 것입니다. 이후 버전 21/22에서는 잘 작동합니다.\n
  • 소스 패키지 컴파일에 필요한 개발 라이브러리.\n
  • 작동하는 MySQL 서버 설치.\n
  • 인터넷에 연결되는 유선 네트워크 장치입니다.
  • sudo 명령 실행 기능.\n
  • 액세스 포인트 모드를 지원하는 무선 네트워크 장치. 무선 장치가 AP 모드를 지원하는지 확인하려면 다음을 실행하십시오.
    sudo iw phy |grep -A 5 -i 지원되는 인터페이스 모드 | 그렙 *

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

그러나 최신 버전의 hostpad를 설치하려면 소스를 다운로드하고 컴파일해야 합니다. 이는 다음과 같이 쉽게 수행할 수 있습니다.

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

이렇게 하면 hostapd 서버 데몬과 wpa_supplicant 소스가 모두 다운로드됩니다. 우리는 전자에 관심이 있으므로 hostapd 소스로 변경할 것입니다.

cd hostap/hostapd

Hostapd에는 구성 명령이 없으므로 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를 실행하고 설치합니다.

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는 오픈 소스 기반 반경 서버입니다. yum 또는 apt와 같이 선호하는 Linux 패키지 관리자를 사용하여 설치할 수도 있습니다. 하지만 우리는 최신 버전을 설치하고 싶기 때문에 소스에서 잘 컴파일하십시오.

자유 반경 다운로드:

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

freeradius MySQL 테이블 구성

실행 중이 아니면 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]';

SQL 반경 모듈을 구성합니다.

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

FreeRadius MySQL 데이터베이스에 대해 위에서 사용된 비밀번호로 비밀번호를 변경합니다.

secret = [FREERADIUS_DB_PASS]

반경 서버 구성:

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]

다음과 같은 메시지가 표시되면 다음 단계에 필요한 최소 반경 설정이 완료된 것입니다.

접근 허용 ID 174를 127.0.0.1:1812에서 0.0.0.0:0 길이 20으로 수신

그러나 Radius를 떠나기 전에 Radius 서버에 대한 시스템 서비스 파일을 생성하십시오.

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이 필요합니다.

하셀 다운로드:

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

타르볼을 압축합니다.

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]

칠리 ipup.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

포로 포털 테스트

테스트를 시작하기 전에 먼저 로컬에서 인터넷에 액세스할 수 있는지 확인하십시오.


그런 다음 스마트폰이나 노트북과 같은 무선 클라이언트를 사용하여 원하는 웹 브라우저를 엽니다. 원하는 URL/웹사이트로 이동합니다.

위의 단계를 따른 경우 아래와 같이 포로 포털 페이지로 리디렉션됩니다.

사용자 관리

핫스팟을 사용하여 인터넷에 액세스할 수 있도록 사용자를 추가하려면 각 사용자에 대해 다음 명령을 실행하십시오. 원하는 경우 스크립트를 사용하여 자동화할 수 있습니다.

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

그게 다야!

나를 팔로우하세요: @jzikusooka