+1

Triển khải Web Auth trên cisco WLC, xác thực bằng external web và freeradius

Ở các bài trước mình đã chia sẻ về cách triển khai Captive portal trên pfsense hay xác thực tài khoản với radius, bài viết này mình sẽ chia sẻ về một giải pháp khác tổng hợp của các bài trên nhưng sử dụng thiết bị Cisco controller và freeradius kết hợp với mysql.

I. Mô hình:

II. Hoạt động: Quá trình xác thực wifi diễn ra như sau:

  1. Người dùng kết nối đến wifi và mở một trang web ( ví dụ: www.yahoo.com )
  2. Thiết bị của người dùng gửi một bản tin request DNS tới DNS server để phân giải tên miền www.yahoo.com
  3. WLC Controller đấy request tới DNS server để phân giải tên miền và gửi trả lại bản tin DNS reply cho client.
  4. Client sẽ thiết lập kết nối với www.yahoo.com bằng cách gửi bản tin TCP SYN tới địa chỉ IP của tên miền www.yahoo.com.
  5. Bản tin TCP SYN khi đi qua WLC sẽ được WLC gửi lại bản tin TCP SYN-ACK cho client với source IP là IP của www.yahoo.com và client khi đó gửi lại bản tin TCP ACK để hoàn thành quá trình bắt tay 3 bước TCP để thiết lập kết nối.
  6. Client gửi một gói tin HTTP GET tới www.google.com, WLC chặn gói tin này và điều hướng client đến trang đăng nhập.
  7. Người dùng sẽ đăng nhập tài khoản và các thông tin tài khoản này sẽ được gửi đến WLC Controller
  8. Từ WLC Controller sẽ gửi tiếp thông tin đăng nhập cho Radius server để kiểm tra tài khoản và Radius server gửi trả lại kết quả cho WLC Controller
  9. Kết quả đúng tài khoản thì WLC Controller sẽ điều hướng người dùng đến đường dẫn web ban đầu ( www.yahoo.com ) , nếu quá trình xác thực tài khoản không thành công, WLC Controller sẽ đẩy lại trang đăng nhập cho client.

III. Cấu hình:

  1. Trên WLC Controller: a. Tạo interface cho Wifi: - Trên giao diện của WLC Controller, chọn Controllers -> Interfaces -> New - Trong phần Interfaces > New điền tên Interface và VLAN id -> Chọn Apply - Trong ví dụ này mình sẽ điền tên là Guess và VLAN id là 2

  • Chọn Guess interface để chỉnh sửa các tham số cho interface
  • Trong mục Interface > Edit, nhập các thông số như IP, subnet mask, và default gateway, sau đó gán interface với 1 port trên WLC Controller

b. Tạo Preauthentication ACL: - Trên giao diện của WLC Controller, chọn Security -> Access Control Lists - Chọn tiếp "New" để tạo ACL mới - Đặt tên cho ACL, ở đây mình để là Guess-ACL -> Chon Apply

  • Chọn "Add new rule"
  • Khai báo các tham số để client có thể kết nối đến web server
  • Chọn "Apply" khi khai báo xong.

c. Cấu hình WLC sử dụng external web server:

  • Trên giao diện của WLC Controller. chọn Security -> Web Auth -> Web Login Page
  • Tại mục "Web Authentication Type", chọn "External ( Redirect to external server ) "
  • Tại mục "External Webauth URL", nhập địa chỉ web đăng nhập.

d. Cấu hình WLC sử dụng external radius server:

  • Trên giao diện của WLC Controller, chọn Security -> Radius -> Authentication
  • Chọn "New"
  • Điền các tham số của radius server: IP, secret password, port
  • Làm tương tự với phần Radius > Accounting

e. Cấu hình WLANs :

  • Trên giao diện của WLC Controller, chọn WLANs -> Create new
  • Khai báo các tham số

  • Chọn edit
  • ở phần General, chọn "Interface/Interface Group(G)" là "Guess", status: Enabled
  • Ở phần security - Layer 2, chọn none
  • Ở phần Security - layer 3, Chọn Web Policy - Authentication, mục "Preauthentication ACL" là Guess.
  • Ở phần AAA Servers, khai báo radius server.
  1. Web server: Cài đặt 1 web server và up lên đó trang đăng nhập, bạn có thể sử dụng web template của cisco rồi chỉnh sửa cho phù hợp.

  2. Radius server:

yum install -y freeradius freeradius-mysql freeradius-utils mysql-server

Giờ ta cần khởi chạy radius và mysql server:

service mysqld start

service radiusd start

Giờ cần cài đặt mật khẩu cho user root của mysql:

mysqladmin -u root password 123456

Giờ tạo database tên là radius:

mysqladmin -u root -p create radius

Giờ tạo 1 user radius và cho phép chỉnh sửa trong database meeting:

mysql -u root -p

GRANT all ON radius.* TO [email protected] IDENTIFIED BY "123456";

exit

Giờ ta cần import dữ liệu cho database meeting:

mysql -u radius -p meeting < /etc/raddb/sql/mysql/cui.sql

mysql -u radius -p meeting < /etc/raddb/sql/mysql/ippool.sql

mysql -u radius -p meeting < /etc/raddb/sql/mysql/nas.sql

mysql -u radius -p meeting < /etc/raddb/sql/mysql/schema.sql

mysql -u radius -p meeting < /etc/raddb/sql/mysql/wimax.sql

Giờ cần chỉnh sửa tham số trong file /etc/raddb/radiusd.conf

Mình bỏ dấu "#" trước dòng có "sql.conf"

Chỉnh sửa tiếp file /etc/raddb/sql.conf

cấu hình các tham số sau:

login = “radius”
password = “123456”
readclients = yes

Sửa tiếp file /etc/raddb/sites-enabled/default

Bỏ dấu "#" trước các dòng có "sql"

Giờ restart mysql và radius

service mysqld restart

service radiusd restart

  • Cài đặt daloradius để quản lý radius server qua web:

Tải file cài đặt từ website http://www.daloradius.com/ và giải nén ra được thư mục daloradius-0.9-9

restore dữ liệu database daloradius

mysql -uradius -p 123456 < daloradius-0.9-9/contrib/db/fr2-mysql-daloradius-and-freeradius.sql

Chỉnh sửa file daloradius-0.9-9/library/daloradius.conf.php

Thêm các tham số DB, user và pass

$configValues['DALORADIUS_VERSION'] = '0.9-9';
$configValues['FREERADIUS_VERSION'] = '2';
$configValues['CONFIG_DB_ENGINE'] = 'mysql';
$configValues['CONFIG_DB_HOST'] = 'localhost';
$configValues['CONFIG_DB_USER'] = 'radius';
$configValues['CONFIG_DB_PASS'] = '123456';
$configValues['CONFIG_DB_NAME'] = 'radius';

copy thư mục daloradius-0.9-9 vào thư mục /var/www/html

mv daloradius-0.9-9 /var/www/html/daloradius

giờ login vào trang quản lý daloradius bằng trình duyệt

https://10.0.1.198/daloradius

sử dụng user/pass mặc định là administrator/radius

Tạo user cho người dùng:

Management - > New user -> user Authentication

Điền các tham số: username, password, Password type để cleartext=Password, phần group để trống cũng được.

Giờ chúng ta thử nghiệm bằng cách kết nối đến wifi Meeting: Khi kết nối đến wifi Guess, sẽ tự động xuất hiện một trang portal bắt nhập tài khoản


All Rights Reserved

Viblo
Let's register a Viblo Account to get more interesting posts.