SlideShare a Scribd company logo
CREATED BY NHA PHAM (ZAZXXX) - 1
Access WIFI with AD user and dynamic VLAN
(by Nha Pham – zazxxx)
Tổng quan
Tài liệu này được tạo ra với mục đích hướng dẫn System Admin cách để người dùng join vào WIFI mà sử dụng
giao thức bảo mật WPA2-Enterprise, tức là khi join WIFI, người dùng phải đăng nhập bằng tài khoản Domain.
Hơn nữa, trong trường hợp có nhiều hơn 1 vLan tồn tại trong hệ thống, bài viết này cũng sẽ cung cấp cách
thực thi để chuyển người dùng sang đúng vLan mà họ được assgin. vLan sẽ được xác nhận bởi 1 trong 2 giá trị.
• department
• description
Hai giá trị trên tồn tại trong AD và được set mặc định là rỗng, người quản trị cần điền thông tin vào các giá trị
trên là ta có thể so sánh với danh sách trong hệ thống, từ đây người dùng sẽ được chỉ định vào đúng vLan.
Chuẩn bị.
Trước khi thực hiện việc cài đặt và cấu hình FreeRadius, thì những bước sau phải được chuẩn bị để có thể
thực hiện
Thông số cơ bản.
Trong tài liệu này có những thông số cơ bản như sau.
• Forest: EXAMPLE.COM hoặc example.com
• Domain: SANDOM.EXAMPLE.COM hoặc sandom.example.com
• Server or KDC: DC1.SANDOM.EXAMPLE.COM hoặc dc1.sandom.example.com
• Server IP: 10.99.0.1
Cài đặt Linux OS.
Ở tài liệu này, chúng ta sẽ sử dụng OS họ Debian làm chủ đạo. Tài liệu cho việc cài đặt OS hiện nay rất nhiều
trên mạng nên mình sẽ không đề cập cụ thể ở mục này.
Cài đặt Samba và join máy chủ hiện tại vào AD sử dụng Samba.
Tổng quan.
Việc cho phép máy chủ tham gia domain thì có hơn một cách thực hiện, tại bài viết này chúng ta sẽ sử dụng
SAMBA để tham gia vào domain.
Sử dụng SAMBA ở đây là để samba lấy thông tin người dùng đang có trên Domain, từ đây chúng ta có thể
dùng Radius để xác thực người dùng.
Việc thực hiện tham gia domain là cần thiết để thực hiện bước tiếp theo là xác thực người dùng thông qua
Radius.
Tiến hành cài đặt.
Kiểm tra DNS, Để đảm bảo việc kết nối không xảy ra trục trặc gì, hãy đảm bảo là server hiện tại có thể thấy
server đang chạy domain chính, việc kiểm tra sẽ bằng câu lệnh.
$ nslookup <domain.com>
VD: ở đây sẽ đặt domain có tên là sandom.example.com là domain chính, vì vậy với câu lệnh -> $ nslookup
sandom.example.com sẽ cho ra kết quả.
CREATED BY NHA PHAM (ZAZXXX) - 2
Trước tiên, tiến hành cài đặt Samba và những gói liên quan, câu lệnh.
$ sudo apt-get install -y acl attr samba winbind libpam-winbind libnss-winbind
krb5-config krb5-user dnsutils python3-setproctitle
Phần kế tiếp là cấu hình kết nối Kerberos, Kerberos là giao thức xác thực mạng máy tính, có nghĩa là nó giúp
xác mình danh tính của người dùng và dịch vụ trên mạng.
$ sudo mv /etc/krb5.conf /etc/krb5.orig
$ sudo bash -c “cat << EOF > /etc/krb5.conf
[libdefaults]
default_realm = SAMDOM.EXAMPLE.COM
dns_lookup_realm = false
dns_lookup_kdc = true
EOF”
Tại đây chúng ta cấu hình Kerberos để thông báo rằng domain chính mà chúng ta sử dụng sẽ là
“SAMDOM.EXAMPLE.COM” và máy chủ hiện tại sẽ tìm kiếm máy chủ KDC dựa trên DNS.
KDC (Key Distribution Center) thường tồn tại chung với Domain server chính, trường hợp KDC ko phải là
server domain chính và DNS cũng không thể xác định vị trí của KDC server, lúc này tập tin trên nên được sửa lại
để chỉ đích danh KDC server đang ở đâu
$ sudo /mv /etc/krb5.conf /etc/krb5.orig
$ sudo bash -c “cat << EOF > /etc/krb5.conf
[libdefaults]
default_realm = SAMDOM.EXAMPLE.COM
[realms]
SAMDOM.EXAMPLE.COM = {
kdc = 10.99.0.1 # <IP của server>
admin_server = 10.99.0.1 # <IP của server>
}
Kế tiếp, tuỳ chỉnh thông số của samba. Trước tiên, tập tin mặc định sẽ không thể sử dụng do các thông số
trong đó được thiết lập sao cho samba là dịch vụ chia sẻ bình thường, ở đây Samba được sử dụng như là thành
viên của domain, do đó file sẽ được tinh chỉnh như sau.
$ sudo mv /etc/samba/smb /etc/samba/smb.orig
$ sudo bash -c “cat << EOF > /etc/samba/smb.conf
[global]
workgroup = SANDOME.EXAMPLE
security = ads
realm = SANDOME.EXAMPLE.COM
EOF"
Sau khi hoàn tất, chúng ta yêu cầu máy chủ hiện tại tham gia domain. Tuy nhiên, trước tiên là phải đảm bảo
là người dùng có quyền tham gia domain hoàn toàn xác thực, câu lệnh:
$ sudo kinit <domain admin account>
Thay thế“domain admin account” bằng account cho phép tham gia vào domain. VD:
$ sudo kinit admin
Sau đó điền vào password, nếu trên màn hình không trả về lỗi gì thì đồng nghĩa là đã thành công.
Câu lệnh trên có nhiệm vụ là dùng tên đăng nhập cộng với domain lấy trong file krb5.conf để kết nối tới máy
chủ domain.
Tuy nhiên cũng nên đảm bảo là user đã được xác thực, câu lệnh.
CREATED BY NHA PHAM (ZAZXXX) - 3
$ sudo klist
Câu lệnh này sẽ hiện ra danh sách các kết nối đã được tin tưởng. Sau đó, yêu cầu hệ thống join domain
bằng.
$ sudo net ads -k join
Sau khi hoàn tất, hãy restart các service có liên quan
$ sudo systemctl restart smbd.servcie nmbd.service winbind.service
Cuối cùng là kiếm tra xem thông tin người dùng đã có trên hệ thống hiện tại hay không.
$ sudo wbinfo -u
Câu lệnh trên sẽ liệt kê toàn bộ người dùng và group của samba.
Kế tiếp là kiểm tra xem chúng ta đã có thể xác thực tên người dùng bằng cách sử dụng mschapv2.
$ ntlm_auth --request-nt-key --allow-mschapv2 --domain=sandom.example.com --
username=<user> --password=<password>
Kết quả trả về tương đương như dưới đây thì đồng nghĩa là thành công.
NT_STATUS_OK: The operation completed successfully. (0x0)
Tới đây là đã hoàn thành việc dùng samba để tham gia domain.
Cài đặt FreeRadius
Tổng quan.
Đây là phần hướng dẫn cài đặt dịch vụ FreeRadius, ở đây chúng ta sẽ sử dụng phiên bản 3.0.26 vì bản này hỗ
trợ giao thức TLS1.3, giao thức này tiêu chuẩn cho việc kết nối từ hệ điều hành Windows.
Tiến hành cài đặt.
Trước tiên, đổi người dùng hiện tại lên quyền hạn root
$ sudo -i
Kế tiếp là tiến hành thêm thư viện mới vào, đầu tiền là GPG key từ network radius.
# install -d -o root -g root -m 0755 /etc/apt/keyrings
# curl -s 'https://packages.networkradius.com/pgp/packages%40networkradius.com' |
tee /etc/apt/keyrings/packages.networkradius.com.asc > /dev/null
Sau đó add thư viện vào.
# echo "deb [arch=amd64 signed-
by=/etc/apt/keyrings/packages.networkradius.com.asc]
http://packages.networkradius.com/freeradius-3.0/debian/buster buster main" |
tee /etc/apt/sources.list.d/networkradius.list > /dev/null
Sau đó tiến hành cài đặt dịch vụ.
# apt-get update
# apt-get install -y freeradius
Cuối cùng là kiểm tra xem dịch vụ đã được cài đặt đầy đủ hay không.
# freeradius -v
Chuẩn bị Certificate cho việc sử dụng EAP trên các máy client.
Tổng quan.
Đây là một phần trong bài viết dành cho bạn nào muốn sử dụng xác thực bằng domain account khi kết nối
tới WIFI.
CREATED BY NHA PHAM (ZAZXXX) - 4
Certificate, hay còn gọi là Chứng chỉ số, là một tài liệu số được sử dụng để xác minh quyền sở hữu của một
khóa công khai trong giao tiếp mạng.
Trong WPA2-Enterprise, các certificate được sử dụng để xác thực danh tính của các máy chủ RADIUS đến
các thiết bị client (như laptop, điện thoại thông minh) khi chúng cố gắng kết nối tới mạng Wi-Fi.
Tiến hành cài đặt.
Đầu tiên, copy tập tin root CA của mạng nội bộ vào server.
$ sudo mkdir /etc/freeradius/ssl
$ sudo cp ~/example_CA.* /etc/freeradius/ssl
Kế tiếp, chúng ta tạo nên key riêng cho WIFI.
$ sudo openssl genrsa -out /etc/freeradius/ssl/wifi.example.com.key 2048
Sau đó, tạo ra tập tin mô tả những option dành riêng cho certificate của WIFI như là PEAP, clientAuth v.v…
$ sudo bash -c "cat << EOF > /etc/freeradius/ssl/config.conf
[ PEAP ]
extendedKeyUsage = 1.3.6.1.5.5.7.3.2
extendedKeyUsage = 1.3.6.1.5.5.7.3.1
[ clientAuth ]
extendedKeyUsage = 1.3.6.1.5.5.7.3.2
[ serverAuth ]
extendedKeyUsage = 1.3.6.1.5.5.7.3.1
[ req ]
distinguished_name = req_distinguished_name
req_extensions = v3_req
prompt = no
[ req_distinguished_name ]
C = VN
ST = Hochiminh
L = Hochiminh
O = Example
OU = IT_Dept
CN = example.com
[ v3_req ]
keyUsage = keyEncipherment, dataEncipherment
subjectAltName = @alt_names
[ alt_names ]
DNS.1 = wifi.example.com
EOF"
Sau khi tạo xong file config.conf, chúng ta tạo ra file CSR (certificate signing request).
$ sudo openssl req -new
-key /etc/freeradius/ssl/wifi.example.key
-out /etc/freeradius/ssl/wifi.example.csr
-extensions PEAP
-config /etc/freeradius/ssl/config.conf
Tới đây thì tạo file CRT với kết hợp của example_CA cùng với file CSR mới được tạo ở trên.
$ sudo openssl x509 -req -in /etc/freeradius/ssl/wifi.example.com.csr
-CA /etc/freeradius/ssl/example_CA.crt
-CAkey /etc/freeradius/ssl/example_CA.key
-CAcreateserial
-out /etc/freeradius/ssl/wifi.example.com.crt
-days 365
File CRT sau khi được tạo thì sẽ được gắn vào FreeRadius, tuy nhiên nên đảm bảo là quyền hạn của các file
certificate là chính xác. Câu lệnh sau có tác dụng chỉ lại permission của các file trên.
$ sudo chmod 600 /etc/freeradius/ssl/*
$ sudo chown -R freerad:freerad /etc/freeradius/ssl
Cuối cùng, kiểm tra xem file CRT có đúng không bằng câu lệnh
$ sudo openssl x509 -in /etc/freeradius/ssl/wifi.example.com.crt -text -noout
CREATED BY NHA PHAM (ZAZXXX) - 5
Tiến hành cài đặt.
Cấu hình FreeRadius
Đầu tiên là cấu hình module có tên là mschap để chạy xác thực user bằng ntml_auth, cụ thể.
$ sudo rm /etc/freeradius/mods-enabled/mschap
$ sudo bash -c "cat << EOF > /etc/freeradius/mods-enabled/mschap
mschap {
use_mppe = yes
require_encryption = yes
require_strong = yes
ntlm_auth = '/usr/bin/ntlm_auth --request-nt-key --allow-mschapv2 --
username=%{%{Stripped-User-Name}:-%{%{User-Name}:-None}} --
challenge=%{mschap:Challenge:-00} --nt-response=%{mschap:NT-Response:-00}'
}
EOF"
Kế tiếp là loại bỏ site default của freeradius và thay thế bằng file như dưới đây.
$ sudo rm /etc/freeradius/sites-enabled/default
$ sudo bash -c "cat << EOF > /etc/freeradius/sites-enabled/mydefault
server default {
listen {
ipaddr = *
type = auth
port = 1812
}
listen {
ipaddr = *
type = acct
port = 1813
}
authorize {
suffix
eap
pap
mschap
if (!control:Auth-Type) {
ldap
if ((ok || updated) && User-Password) {
update { control:Auth-Type := ldap }
}
}
expiration
logintime
}
authenticate {
Auth-Type PAP {
pap
}
Auth-Type EAP {
eap
}
Auth-Type MS-CHAP {
mschap
}
Auth-Type LDAP {
ldap
}
}
preacct {
preprocess
acct_unique
}
accounting {
CREATED BY NHA PHAM (ZAZXXX) - 6
detail
radutmp
exec
attr_filter.accounting_response
}
session {
radutmp
}
post-auth {
exec
update {
&reply: += &session-state:
}
Post-Auth-Type REJECT {
attr_filter.access_reject
}
}
pre-proxy {
}
post-proxy {
eap
}
}
EOF"
File trên có quy định trong mục “authorize” rẳng mỗi user sau khi gởi username và password sẽ phải đi qua
các bước
• suffix -> tách ký tự, tên nếu có ký tự @, cái này mình có thể tùy biến.
• eap -> gọi module đầu tiên là eap để xác thực, trường hợp mà eap mà không thỏa thì radius sẽ yêu cầu
đi tới module kế.
• pap -> đây là module xác thực cơ bản PAP, nếu không thỏa.
• mschap -> dùng mschap để xác thực user dựa trên ntlm_auth.
• ldap -> nếu cả 4 module đều không thỏa thì ldap sẽ được gọi để xác thực.
• expiration -> ghi lại khi nào thì cần phải xác thực lại lần nữa.
• logintime -> ghi lại thời gian vào log.
Vì chúng ta sẽ sử dụng WPA2-enterprise là giao thức chính, nên phải tinh chỉnh lại module có tên là eap
trong /etc/freeradius/mods-enabled.
$ sudo rm /etc/freeradius/mods-enabled/eap
$ sudo bash -c "cat << EOF > /etc/freeradius/mods-enabled/eap
eap {
default_eap_type = peap
timer_expire = 60
ignore_unknown_eap_types = no
cisco_accounting_username_bug = no
max_sessions = ${max_requests}
tls-config tls-common {
private_key_file = /etc/freeradius/ssl/wifi.example.com.key
certificate_file = /etc/freeradius/ssl/wifi.example.com.crt
ca_file = /etc/freeradius/ssl/example_CA.crt
dh_file = ${certdir}/dh
random_file = /dev/urandom
ca_path = ${cadir}
cipher_list = "DEFAULT"
cipher_server_preference = no
tls_min_version = "1.0"
tls_max_version = "1.3"
ecdh_curve = "prime256v1"
}
peap {
tls = tls-common
default_eap_type = mschapv2
CREATED BY NHA PHAM (ZAZXXX) - 7
copy_request_to_tunnel = no
virtual_server = "inner-tunnel"
}
}
EOF"
Sau đó bật site có tên inner-tunnel để xài chung với eap.
$ sudo ln -s /etc/freeradius/sites-available/inner-tunnel /etc/freeradius/sites-
enabled/inner-tunnel
Kế tiếp là add các thiết bị wifi vào danh sách cho phép truy cập Radius.
$ sudo mv /etc/freeradius/clients.conf /etc/freeradius/clients.orig
$ sudo bash -c "cat << EOF > /etc/freeradius/clients.conf
client localhost {
ipaddr = 127.0.0.1
netmask = 32
secret = samba4
shortname = localhost
}
client unifi_1 {
ipaddr = 10.99.0.13
netmask = 32
secret = 123456789
shorname = unifi_13
}
client unifi_2 {
ipaddr = 10.99.0.14
netmask = 32
secret = 123456789
shorname = unifi_14
}
EOF"
Tới đây, chúng ta thêm file script với nhiệm vụ là đọc attribute có tên là “department” hoặc “description” rồi
so sánh với file dữ liệu có sẵn.
$ sudo mkdir /etc/freeradius/scripts
$ sudo bash -c "cat << EOF > /etc/freeradius/scripts/adQuery.py
import sys
import ldap3
import os
# Current directory path
PATH = os.path.dirname(os.path.abspath(__file__))
# Active directory info
HOST = "dc01.sandom.example.com"
USER = “cn=Admin,cn=Users,dc=sandome,dc=example,dc=com"
PASS = "<Admin’s password>"
BASE = " cn=Users,dc=sandome,dc=example,dc=com "
def main():
# return erroe when there is no agrument
if len(sys.argv) < 1:
sys.exit("There is no user")
# set variable from agrument
SAM = sys.argv[1]
# Process to query with variable
try:
SERVER = ldap3.Server(HOST, port=389, use_ssl=False)
CONNECT = ldap3.Connection(SERVER, USER, PASS, auto_bind=True)
except:
sys.exit("Unable to connect AD server")
# Process to search for user $SAM
try:
CONNECT.search(BASE,'(&(objectclass=user)(sAMAccountName=%s))' %
SAM,attributes=['department','description'])
except:
sys.exit("User %s does not exists" %SAM)
CREATED BY NHA PHAM (ZAZXXX) - 8
if len(CONNECT.entries) == 0:
sys.exit("User %s does not exists" %SAM)
result = str(CONNECT.entries[0].department.value) if
CONNECT.entries[0].department else str(CONNECT.entries[0].description.value)
# Read and add vlan information into dictionary
data = {}
with open(PATH + "/info.txt") as f:
for line in f:
(k,v) = line.split(",")
data[k] = v
try:
VLAN = data[result]
except:
VLAN = '10'
# Close the CONNECT
CONNECT.unbind()
# Return VLAN and Group_ID
print('Tunnel-Type = VLAN')
print('Tunnel-Medium-Type = 6')
print('Tunnel-Private-Group-Id = ' + VLAN)
sys.exit()
if __name__ == "__main__":
main()
EOF"
Kế tiếp là tạo file có tên là info.txt, nơi chứa vLan dựa trên Department, script sẽ đọc file này và trả về vLan dự
trên department.
$ sudo bash -c "cat << EOF > /etc/freeradius/scripts/info.txt
LAN,10
Guest,11
Accountant,12
Team1,13
Team2,14
Team3,15
Team5,16
IT,0
EOF"
Sau đó, chúng ta yêu cầu freeradius chạy file script trên.
$ sudo bash -c "cat << EOF > /etc/freeradius/mods-enabled/adQuery
exec ad_query {
wait = yes
program = '/usr/bin/python3 /etc/freeradius/scripts/adQuery.py %{User-Name}'
input_pairs = request
output_pairs = reply
shell_escape = yes
timeout = 10
}
EOF"
Trước khi đóng lại phần scritping, hãy đảm bảo là bạn đã cài module có tên là ldap3 được cài đặt.
$ sudo python3 -m pip install ldap3
Chúng ta phải đảm bảo là quyền hạng chính xác trên những file đã tạo.
$ sudo chown -R freerad:freerad /etc/freeradius/sctipts
$ sudo chown -R freerad:freerad /etc/freeradius/mods-enabled
$ sudo chown -R freerad:freerad /etc/freeradius/sites-enabled
Cuối chùng, restart lại freeradius.service
$ sudo systemctl restart freeradius.service
Kiểm tra và debug
Để chạy debug freeradius, tạm dựng dịch vụ freeradius.
$ sudo systemctl stop freeradius
CREATED BY NHA PHAM (ZAZXXX) - 9
Và kích hoạt tính năn debug của radius.
$ sudo freeradius -X
Với câu lệnh trên, mọi thứ sẽ diễn ra trên màn hình chính, tại đây bạn bắt đầu gọi test để xem log trả về như
thế nào trên màn hình.
Để test xác thực user, sử dụng câu lệnh như sau.
# radtest -t mschap <User> <Password> localhost 1812 <Client secret>
Trong đó:
• User và Password là tài khoản domain của bạn.
• Client secret là secret nằm trong file /etc/freeradius/clients.conf
VD: Chúng ta có domain account là djohn và pass la 1029384756 và client secret là samba4, câu lệnh sẽ
thành.
# radtest -t mschap djohn 1029384756 localhost 1812 samba4
Kết quả trả về.
Cấu hình trên AP và Switch
Ở bài viết này, Unifi AP được sử dụng cho WIFI, để bật tính năng dynamic vlan, hãy vào trang quản lý của
Unifi rồi tìm “Settings” ở thanh bên trái.
Sau khi vào mục“Settings”, tiếp tục tìm “Profiles” cũng ở cột bên trái.
Ở trang “Profile”, chọn tab có tên “RADIUS”
Kế tiếp là nhấn “Create New” và điển vào thông tin như sau.
CREATED BY NHA PHAM (ZAZXXX) - 10
Sau đó, mở SSID nào mà muốn sử dụng RADIUS, kéo xuống dưới và thay đổi như sau.
Lưu lại và hoàn tất.

More Related Content

DOCX
Cấu hình windows server 2008 làm radius server
PDF
TỰ HỌC LPI 2
DOC
Báo cáo thực tập giữa kỳ
PDF
Decuong version1
DOC
Lab 2 phân loại dùng mô hình mqc
 
PDF
Linux thietlaphethongmangubunt-45879
DOC
Báo cáo thực tập giữa kỳ
DOC
Các thiết lập TCPIP nâng cao trong Windows 2003.doc
Cấu hình windows server 2008 làm radius server
TỰ HỌC LPI 2
Báo cáo thực tập giữa kỳ
Decuong version1
Lab 2 phân loại dùng mô hình mqc
 
Linux thietlaphethongmangubunt-45879
Báo cáo thực tập giữa kỳ
Các thiết lập TCPIP nâng cao trong Windows 2003.doc

Similar to Join WIFI with AD and dynamic VLAN internetpdf (20)

DOC
Báo cáo thực tập giữa kỳ
PDF
Part 29 domain name system - dns -www.key4_vip.info
DOCX
DOCX
Cài đặt và cấu hình kerio winroute
PDF
Lab linux phần iv- Internet Services
PDF
Radius server 1205
DOCX
Báo cáo thực tập
DOCX
Bao cao thuc tap-Huynh Anh Tuan
DOC
Vpn authenticate via radius srv
PDF
Báo cáo thực tập
DOC
Triển khai load balancing và failover cho nhiều line adsl bằng kerio winroute
PPTX
Cài đặt và cấu hình căn bản hệ điều hành.pptx
PPTX
Khái quát Kerberos
PDF
đTkh.an ninh của các hđh họ microsft windows sun solaris và linux ts.nguyễ...
PDF
Báo cáo thực tập
PDF
Báo cáo thực tập
PDF
Lab linux phan iv
PDF
Quản trị mạng linux full
PPT
Lohong Buoi34
PPT
Lohong Buoi34
Báo cáo thực tập giữa kỳ
Part 29 domain name system - dns -www.key4_vip.info
Cài đặt và cấu hình kerio winroute
Lab linux phần iv- Internet Services
Radius server 1205
Báo cáo thực tập
Bao cao thuc tap-Huynh Anh Tuan
Vpn authenticate via radius srv
Báo cáo thực tập
Triển khai load balancing và failover cho nhiều line adsl bằng kerio winroute
Cài đặt và cấu hình căn bản hệ điều hành.pptx
Khái quát Kerberos
đTkh.an ninh của các hđh họ microsft windows sun solaris và linux ts.nguyễ...
Báo cáo thực tập
Báo cáo thực tập
Lab linux phan iv
Quản trị mạng linux full
Lohong Buoi34
Lohong Buoi34
Ad

Join WIFI with AD and dynamic VLAN internetpdf

  • 1. CREATED BY NHA PHAM (ZAZXXX) - 1 Access WIFI with AD user and dynamic VLAN (by Nha Pham – zazxxx) Tổng quan Tài liệu này được tạo ra với mục đích hướng dẫn System Admin cách để người dùng join vào WIFI mà sử dụng giao thức bảo mật WPA2-Enterprise, tức là khi join WIFI, người dùng phải đăng nhập bằng tài khoản Domain. Hơn nữa, trong trường hợp có nhiều hơn 1 vLan tồn tại trong hệ thống, bài viết này cũng sẽ cung cấp cách thực thi để chuyển người dùng sang đúng vLan mà họ được assgin. vLan sẽ được xác nhận bởi 1 trong 2 giá trị. • department • description Hai giá trị trên tồn tại trong AD và được set mặc định là rỗng, người quản trị cần điền thông tin vào các giá trị trên là ta có thể so sánh với danh sách trong hệ thống, từ đây người dùng sẽ được chỉ định vào đúng vLan. Chuẩn bị. Trước khi thực hiện việc cài đặt và cấu hình FreeRadius, thì những bước sau phải được chuẩn bị để có thể thực hiện Thông số cơ bản. Trong tài liệu này có những thông số cơ bản như sau. • Forest: EXAMPLE.COM hoặc example.com • Domain: SANDOM.EXAMPLE.COM hoặc sandom.example.com • Server or KDC: DC1.SANDOM.EXAMPLE.COM hoặc dc1.sandom.example.com • Server IP: 10.99.0.1 Cài đặt Linux OS. Ở tài liệu này, chúng ta sẽ sử dụng OS họ Debian làm chủ đạo. Tài liệu cho việc cài đặt OS hiện nay rất nhiều trên mạng nên mình sẽ không đề cập cụ thể ở mục này. Cài đặt Samba và join máy chủ hiện tại vào AD sử dụng Samba. Tổng quan. Việc cho phép máy chủ tham gia domain thì có hơn một cách thực hiện, tại bài viết này chúng ta sẽ sử dụng SAMBA để tham gia vào domain. Sử dụng SAMBA ở đây là để samba lấy thông tin người dùng đang có trên Domain, từ đây chúng ta có thể dùng Radius để xác thực người dùng. Việc thực hiện tham gia domain là cần thiết để thực hiện bước tiếp theo là xác thực người dùng thông qua Radius. Tiến hành cài đặt. Kiểm tra DNS, Để đảm bảo việc kết nối không xảy ra trục trặc gì, hãy đảm bảo là server hiện tại có thể thấy server đang chạy domain chính, việc kiểm tra sẽ bằng câu lệnh. $ nslookup <domain.com> VD: ở đây sẽ đặt domain có tên là sandom.example.com là domain chính, vì vậy với câu lệnh -> $ nslookup sandom.example.com sẽ cho ra kết quả.
  • 2. CREATED BY NHA PHAM (ZAZXXX) - 2 Trước tiên, tiến hành cài đặt Samba và những gói liên quan, câu lệnh. $ sudo apt-get install -y acl attr samba winbind libpam-winbind libnss-winbind krb5-config krb5-user dnsutils python3-setproctitle Phần kế tiếp là cấu hình kết nối Kerberos, Kerberos là giao thức xác thực mạng máy tính, có nghĩa là nó giúp xác mình danh tính của người dùng và dịch vụ trên mạng. $ sudo mv /etc/krb5.conf /etc/krb5.orig $ sudo bash -c “cat << EOF > /etc/krb5.conf [libdefaults] default_realm = SAMDOM.EXAMPLE.COM dns_lookup_realm = false dns_lookup_kdc = true EOF” Tại đây chúng ta cấu hình Kerberos để thông báo rằng domain chính mà chúng ta sử dụng sẽ là “SAMDOM.EXAMPLE.COM” và máy chủ hiện tại sẽ tìm kiếm máy chủ KDC dựa trên DNS. KDC (Key Distribution Center) thường tồn tại chung với Domain server chính, trường hợp KDC ko phải là server domain chính và DNS cũng không thể xác định vị trí của KDC server, lúc này tập tin trên nên được sửa lại để chỉ đích danh KDC server đang ở đâu $ sudo /mv /etc/krb5.conf /etc/krb5.orig $ sudo bash -c “cat << EOF > /etc/krb5.conf [libdefaults] default_realm = SAMDOM.EXAMPLE.COM [realms] SAMDOM.EXAMPLE.COM = { kdc = 10.99.0.1 # <IP của server> admin_server = 10.99.0.1 # <IP của server> } Kế tiếp, tuỳ chỉnh thông số của samba. Trước tiên, tập tin mặc định sẽ không thể sử dụng do các thông số trong đó được thiết lập sao cho samba là dịch vụ chia sẻ bình thường, ở đây Samba được sử dụng như là thành viên của domain, do đó file sẽ được tinh chỉnh như sau. $ sudo mv /etc/samba/smb /etc/samba/smb.orig $ sudo bash -c “cat << EOF > /etc/samba/smb.conf [global] workgroup = SANDOME.EXAMPLE security = ads realm = SANDOME.EXAMPLE.COM EOF" Sau khi hoàn tất, chúng ta yêu cầu máy chủ hiện tại tham gia domain. Tuy nhiên, trước tiên là phải đảm bảo là người dùng có quyền tham gia domain hoàn toàn xác thực, câu lệnh: $ sudo kinit <domain admin account> Thay thế“domain admin account” bằng account cho phép tham gia vào domain. VD: $ sudo kinit admin Sau đó điền vào password, nếu trên màn hình không trả về lỗi gì thì đồng nghĩa là đã thành công. Câu lệnh trên có nhiệm vụ là dùng tên đăng nhập cộng với domain lấy trong file krb5.conf để kết nối tới máy chủ domain. Tuy nhiên cũng nên đảm bảo là user đã được xác thực, câu lệnh.
  • 3. CREATED BY NHA PHAM (ZAZXXX) - 3 $ sudo klist Câu lệnh này sẽ hiện ra danh sách các kết nối đã được tin tưởng. Sau đó, yêu cầu hệ thống join domain bằng. $ sudo net ads -k join Sau khi hoàn tất, hãy restart các service có liên quan $ sudo systemctl restart smbd.servcie nmbd.service winbind.service Cuối cùng là kiếm tra xem thông tin người dùng đã có trên hệ thống hiện tại hay không. $ sudo wbinfo -u Câu lệnh trên sẽ liệt kê toàn bộ người dùng và group của samba. Kế tiếp là kiểm tra xem chúng ta đã có thể xác thực tên người dùng bằng cách sử dụng mschapv2. $ ntlm_auth --request-nt-key --allow-mschapv2 --domain=sandom.example.com -- username=<user> --password=<password> Kết quả trả về tương đương như dưới đây thì đồng nghĩa là thành công. NT_STATUS_OK: The operation completed successfully. (0x0) Tới đây là đã hoàn thành việc dùng samba để tham gia domain. Cài đặt FreeRadius Tổng quan. Đây là phần hướng dẫn cài đặt dịch vụ FreeRadius, ở đây chúng ta sẽ sử dụng phiên bản 3.0.26 vì bản này hỗ trợ giao thức TLS1.3, giao thức này tiêu chuẩn cho việc kết nối từ hệ điều hành Windows. Tiến hành cài đặt. Trước tiên, đổi người dùng hiện tại lên quyền hạn root $ sudo -i Kế tiếp là tiến hành thêm thư viện mới vào, đầu tiền là GPG key từ network radius. # install -d -o root -g root -m 0755 /etc/apt/keyrings # curl -s 'https://packages.networkradius.com/pgp/packages%40networkradius.com' | tee /etc/apt/keyrings/packages.networkradius.com.asc > /dev/null Sau đó add thư viện vào. # echo "deb [arch=amd64 signed- by=/etc/apt/keyrings/packages.networkradius.com.asc] http://packages.networkradius.com/freeradius-3.0/debian/buster buster main" | tee /etc/apt/sources.list.d/networkradius.list > /dev/null Sau đó tiến hành cài đặt dịch vụ. # apt-get update # apt-get install -y freeradius Cuối cùng là kiểm tra xem dịch vụ đã được cài đặt đầy đủ hay không. # freeradius -v Chuẩn bị Certificate cho việc sử dụng EAP trên các máy client. Tổng quan. Đây là một phần trong bài viết dành cho bạn nào muốn sử dụng xác thực bằng domain account khi kết nối tới WIFI.
  • 4. CREATED BY NHA PHAM (ZAZXXX) - 4 Certificate, hay còn gọi là Chứng chỉ số, là một tài liệu số được sử dụng để xác minh quyền sở hữu của một khóa công khai trong giao tiếp mạng. Trong WPA2-Enterprise, các certificate được sử dụng để xác thực danh tính của các máy chủ RADIUS đến các thiết bị client (như laptop, điện thoại thông minh) khi chúng cố gắng kết nối tới mạng Wi-Fi. Tiến hành cài đặt. Đầu tiên, copy tập tin root CA của mạng nội bộ vào server. $ sudo mkdir /etc/freeradius/ssl $ sudo cp ~/example_CA.* /etc/freeradius/ssl Kế tiếp, chúng ta tạo nên key riêng cho WIFI. $ sudo openssl genrsa -out /etc/freeradius/ssl/wifi.example.com.key 2048 Sau đó, tạo ra tập tin mô tả những option dành riêng cho certificate của WIFI như là PEAP, clientAuth v.v… $ sudo bash -c "cat << EOF > /etc/freeradius/ssl/config.conf [ PEAP ] extendedKeyUsage = 1.3.6.1.5.5.7.3.2 extendedKeyUsage = 1.3.6.1.5.5.7.3.1 [ clientAuth ] extendedKeyUsage = 1.3.6.1.5.5.7.3.2 [ serverAuth ] extendedKeyUsage = 1.3.6.1.5.5.7.3.1 [ req ] distinguished_name = req_distinguished_name req_extensions = v3_req prompt = no [ req_distinguished_name ] C = VN ST = Hochiminh L = Hochiminh O = Example OU = IT_Dept CN = example.com [ v3_req ] keyUsage = keyEncipherment, dataEncipherment subjectAltName = @alt_names [ alt_names ] DNS.1 = wifi.example.com EOF" Sau khi tạo xong file config.conf, chúng ta tạo ra file CSR (certificate signing request). $ sudo openssl req -new -key /etc/freeradius/ssl/wifi.example.key -out /etc/freeradius/ssl/wifi.example.csr -extensions PEAP -config /etc/freeradius/ssl/config.conf Tới đây thì tạo file CRT với kết hợp của example_CA cùng với file CSR mới được tạo ở trên. $ sudo openssl x509 -req -in /etc/freeradius/ssl/wifi.example.com.csr -CA /etc/freeradius/ssl/example_CA.crt -CAkey /etc/freeradius/ssl/example_CA.key -CAcreateserial -out /etc/freeradius/ssl/wifi.example.com.crt -days 365 File CRT sau khi được tạo thì sẽ được gắn vào FreeRadius, tuy nhiên nên đảm bảo là quyền hạn của các file certificate là chính xác. Câu lệnh sau có tác dụng chỉ lại permission của các file trên. $ sudo chmod 600 /etc/freeradius/ssl/* $ sudo chown -R freerad:freerad /etc/freeradius/ssl Cuối cùng, kiểm tra xem file CRT có đúng không bằng câu lệnh $ sudo openssl x509 -in /etc/freeradius/ssl/wifi.example.com.crt -text -noout
  • 5. CREATED BY NHA PHAM (ZAZXXX) - 5 Tiến hành cài đặt. Cấu hình FreeRadius Đầu tiên là cấu hình module có tên là mschap để chạy xác thực user bằng ntml_auth, cụ thể. $ sudo rm /etc/freeradius/mods-enabled/mschap $ sudo bash -c "cat << EOF > /etc/freeradius/mods-enabled/mschap mschap { use_mppe = yes require_encryption = yes require_strong = yes ntlm_auth = '/usr/bin/ntlm_auth --request-nt-key --allow-mschapv2 -- username=%{%{Stripped-User-Name}:-%{%{User-Name}:-None}} -- challenge=%{mschap:Challenge:-00} --nt-response=%{mschap:NT-Response:-00}' } EOF" Kế tiếp là loại bỏ site default của freeradius và thay thế bằng file như dưới đây. $ sudo rm /etc/freeradius/sites-enabled/default $ sudo bash -c "cat << EOF > /etc/freeradius/sites-enabled/mydefault server default { listen { ipaddr = * type = auth port = 1812 } listen { ipaddr = * type = acct port = 1813 } authorize { suffix eap pap mschap if (!control:Auth-Type) { ldap if ((ok || updated) && User-Password) { update { control:Auth-Type := ldap } } } expiration logintime } authenticate { Auth-Type PAP { pap } Auth-Type EAP { eap } Auth-Type MS-CHAP { mschap } Auth-Type LDAP { ldap } } preacct { preprocess acct_unique } accounting {
  • 6. CREATED BY NHA PHAM (ZAZXXX) - 6 detail radutmp exec attr_filter.accounting_response } session { radutmp } post-auth { exec update { &reply: += &session-state: } Post-Auth-Type REJECT { attr_filter.access_reject } } pre-proxy { } post-proxy { eap } } EOF" File trên có quy định trong mục “authorize” rẳng mỗi user sau khi gởi username và password sẽ phải đi qua các bước • suffix -> tách ký tự, tên nếu có ký tự @, cái này mình có thể tùy biến. • eap -> gọi module đầu tiên là eap để xác thực, trường hợp mà eap mà không thỏa thì radius sẽ yêu cầu đi tới module kế. • pap -> đây là module xác thực cơ bản PAP, nếu không thỏa. • mschap -> dùng mschap để xác thực user dựa trên ntlm_auth. • ldap -> nếu cả 4 module đều không thỏa thì ldap sẽ được gọi để xác thực. • expiration -> ghi lại khi nào thì cần phải xác thực lại lần nữa. • logintime -> ghi lại thời gian vào log. Vì chúng ta sẽ sử dụng WPA2-enterprise là giao thức chính, nên phải tinh chỉnh lại module có tên là eap trong /etc/freeradius/mods-enabled. $ sudo rm /etc/freeradius/mods-enabled/eap $ sudo bash -c "cat << EOF > /etc/freeradius/mods-enabled/eap eap { default_eap_type = peap timer_expire = 60 ignore_unknown_eap_types = no cisco_accounting_username_bug = no max_sessions = ${max_requests} tls-config tls-common { private_key_file = /etc/freeradius/ssl/wifi.example.com.key certificate_file = /etc/freeradius/ssl/wifi.example.com.crt ca_file = /etc/freeradius/ssl/example_CA.crt dh_file = ${certdir}/dh random_file = /dev/urandom ca_path = ${cadir} cipher_list = "DEFAULT" cipher_server_preference = no tls_min_version = "1.0" tls_max_version = "1.3" ecdh_curve = "prime256v1" } peap { tls = tls-common default_eap_type = mschapv2
  • 7. CREATED BY NHA PHAM (ZAZXXX) - 7 copy_request_to_tunnel = no virtual_server = "inner-tunnel" } } EOF" Sau đó bật site có tên inner-tunnel để xài chung với eap. $ sudo ln -s /etc/freeradius/sites-available/inner-tunnel /etc/freeradius/sites- enabled/inner-tunnel Kế tiếp là add các thiết bị wifi vào danh sách cho phép truy cập Radius. $ sudo mv /etc/freeradius/clients.conf /etc/freeradius/clients.orig $ sudo bash -c "cat << EOF > /etc/freeradius/clients.conf client localhost { ipaddr = 127.0.0.1 netmask = 32 secret = samba4 shortname = localhost } client unifi_1 { ipaddr = 10.99.0.13 netmask = 32 secret = 123456789 shorname = unifi_13 } client unifi_2 { ipaddr = 10.99.0.14 netmask = 32 secret = 123456789 shorname = unifi_14 } EOF" Tới đây, chúng ta thêm file script với nhiệm vụ là đọc attribute có tên là “department” hoặc “description” rồi so sánh với file dữ liệu có sẵn. $ sudo mkdir /etc/freeradius/scripts $ sudo bash -c "cat << EOF > /etc/freeradius/scripts/adQuery.py import sys import ldap3 import os # Current directory path PATH = os.path.dirname(os.path.abspath(__file__)) # Active directory info HOST = "dc01.sandom.example.com" USER = “cn=Admin,cn=Users,dc=sandome,dc=example,dc=com" PASS = "<Admin’s password>" BASE = " cn=Users,dc=sandome,dc=example,dc=com " def main(): # return erroe when there is no agrument if len(sys.argv) < 1: sys.exit("There is no user") # set variable from agrument SAM = sys.argv[1] # Process to query with variable try: SERVER = ldap3.Server(HOST, port=389, use_ssl=False) CONNECT = ldap3.Connection(SERVER, USER, PASS, auto_bind=True) except: sys.exit("Unable to connect AD server") # Process to search for user $SAM try: CONNECT.search(BASE,'(&(objectclass=user)(sAMAccountName=%s))' % SAM,attributes=['department','description']) except: sys.exit("User %s does not exists" %SAM)
  • 8. CREATED BY NHA PHAM (ZAZXXX) - 8 if len(CONNECT.entries) == 0: sys.exit("User %s does not exists" %SAM) result = str(CONNECT.entries[0].department.value) if CONNECT.entries[0].department else str(CONNECT.entries[0].description.value) # Read and add vlan information into dictionary data = {} with open(PATH + "/info.txt") as f: for line in f: (k,v) = line.split(",") data[k] = v try: VLAN = data[result] except: VLAN = '10' # Close the CONNECT CONNECT.unbind() # Return VLAN and Group_ID print('Tunnel-Type = VLAN') print('Tunnel-Medium-Type = 6') print('Tunnel-Private-Group-Id = ' + VLAN) sys.exit() if __name__ == "__main__": main() EOF" Kế tiếp là tạo file có tên là info.txt, nơi chứa vLan dựa trên Department, script sẽ đọc file này và trả về vLan dự trên department. $ sudo bash -c "cat << EOF > /etc/freeradius/scripts/info.txt LAN,10 Guest,11 Accountant,12 Team1,13 Team2,14 Team3,15 Team5,16 IT,0 EOF" Sau đó, chúng ta yêu cầu freeradius chạy file script trên. $ sudo bash -c "cat << EOF > /etc/freeradius/mods-enabled/adQuery exec ad_query { wait = yes program = '/usr/bin/python3 /etc/freeradius/scripts/adQuery.py %{User-Name}' input_pairs = request output_pairs = reply shell_escape = yes timeout = 10 } EOF" Trước khi đóng lại phần scritping, hãy đảm bảo là bạn đã cài module có tên là ldap3 được cài đặt. $ sudo python3 -m pip install ldap3 Chúng ta phải đảm bảo là quyền hạng chính xác trên những file đã tạo. $ sudo chown -R freerad:freerad /etc/freeradius/sctipts $ sudo chown -R freerad:freerad /etc/freeradius/mods-enabled $ sudo chown -R freerad:freerad /etc/freeradius/sites-enabled Cuối chùng, restart lại freeradius.service $ sudo systemctl restart freeradius.service Kiểm tra và debug Để chạy debug freeradius, tạm dựng dịch vụ freeradius. $ sudo systemctl stop freeradius
  • 9. CREATED BY NHA PHAM (ZAZXXX) - 9 Và kích hoạt tính năn debug của radius. $ sudo freeradius -X Với câu lệnh trên, mọi thứ sẽ diễn ra trên màn hình chính, tại đây bạn bắt đầu gọi test để xem log trả về như thế nào trên màn hình. Để test xác thực user, sử dụng câu lệnh như sau. # radtest -t mschap <User> <Password> localhost 1812 <Client secret> Trong đó: • User và Password là tài khoản domain của bạn. • Client secret là secret nằm trong file /etc/freeradius/clients.conf VD: Chúng ta có domain account là djohn và pass la 1029384756 và client secret là samba4, câu lệnh sẽ thành. # radtest -t mschap djohn 1029384756 localhost 1812 samba4 Kết quả trả về. Cấu hình trên AP và Switch Ở bài viết này, Unifi AP được sử dụng cho WIFI, để bật tính năng dynamic vlan, hãy vào trang quản lý của Unifi rồi tìm “Settings” ở thanh bên trái. Sau khi vào mục“Settings”, tiếp tục tìm “Profiles” cũng ở cột bên trái. Ở trang “Profile”, chọn tab có tên “RADIUS” Kế tiếp là nhấn “Create New” và điển vào thông tin như sau.
  • 10. CREATED BY NHA PHAM (ZAZXXX) - 10 Sau đó, mở SSID nào mà muốn sử dụng RADIUS, kéo xuống dưới và thay đổi như sau. Lưu lại và hoàn tất.