Cấu hình xác thực có dây 802.1X trên Linux với hostapd: Thắt chặt bảo mật cổng Switch và Bridge

Networking tutorial - IT technology blog
Networking tutorial - IT technology blog

Sự cố thực tế: Cảnh báo MAC lạ lúc 2:15 sáng

Vào lúc 2:15 sáng thứ Ba tuần trước, hệ thống SIEM của chúng tôi kích hoạt cảnh báo mức độ 1 (severity-one). Một địa chỉ MAC lạ đang quét subnet quản trị 10.100.40.0/24 với tốc độ khoảng 450 gói tin ARP mỗi giây. Mười phút trước đó, interface Gi1/0/24 trên switch core stack (SW-CORE-02) đã chuyển trạng thái từ down sang up. Cổng mạng đó dẫn đến một phòng họp không có người giám sát ở tầng ba.

Ai đó đã vượt qua hệ thống tường lửa biên đơn giản bằng cách cắm cáp Ethernet vào một ổ cắm mạng RJ45 mở trên tường. Đó có thể là một nhân viên vệ sinh thuê ngoài mang theo drop plug hoặc một nhà thầu cắm chiếc laptop chưa được phê duyệt. Chỉ trong vòng 45 giây, client trái phép này đã nhận được địa chỉ IP qua DHCP và bắt đầu quét các máy chủ nội bộ.

Các mạng văn phòng có dây thường mắc phải sai lầm là đặt niềm tin mù quáng. Trong khi mạng Wi-Fi SSID đòi hỏi WPA3-Enterprise và xác thực đa yếu tố (MFA) nghiêm ngặt, thì các cổng cắm Ethernet vật lý tại phòng họp và bàn làm việc trống lại thường xuyên để ngỏ hoàn toàn. Cứ cắm dây vào là switch lập tiếp chuyển tiếp các frame dữ liệu của bạn.

Phân tích nguyên nhân gốc rễ: Vì sao Port Security và MAC Filtering thất bại

Khi đội ngũ của chúng tôi phân tích cách cỗ máy lạ đó lọt qua các chốt kiểm soát vành đai, những lỗ hổng lộ rõ ngay lập tức:

  • MAC Filtering thất bại ngay tức khắc: Chúng tôi từng dùng cơ chế gán MAC tĩnh trên các cổng edge. Kẻ tấn công chỉ cần chạy Wireshark hoặc tcpdump để bắt các frame hợp lệ rồi sao chép (clone) một địa chỉ MAC đã được ủy quyền trong 10 giây bằng lệnh ip link set dev eth0 address 00:1a:2b:3c:4d:5e.
  • Sticky MAC không xác thực được gì: Sticky MAC ở cấp switch chỉ đếm số lượng địa chỉ, chứ không bao giờ xác thực danh tính bằng mật mã hay kiểm tra tình trạng an toàn của máy trạm. Một khi đã học được địa chỉ, nó sẽ chấp nhận bất kỳ máy nào gửi header đó.
  • Các Linux Access Bridge không được quản lý: Các thiết bị biên, hypervisor và software bridge thường thiếu các agent xác thực tập trung. Chúng bridge lưu lượng Ethernet qua các interface mà không hề kiểm tra thông tin xác thực trước.

Nếu không có cơ chế bắt tay thử thách – phản hồi (challenge-response) chủ động tại Layer 2, các Ethernet bridge sẽ lắng nghe ARP, cho qua các yêu cầu DHCP và phơi bày toàn bộ cấu trúc định tuyến của bạn cho bất kỳ thiết bị lạ nào.

So sánh các giải pháp: Khóa chặt cổng vật lý

Chúng tôi đã thử nghiệm ba phương pháp để kiểm soát cổng vật lý trên Linux bridge trước khi chốt kiến trúc cuối cùng:

Lựa chọn 1: Gán MAC tĩnh và Dynamic ARP Inspection (DAI)

DAI kết hợp DHCP snooping ngăn chặn được tấn công đầu độc ARP (ARP poisoning), nhưng không thể ngăn kẻ xấu clone địa chỉ MAC và đặt IP tĩnh để nghe lén các broadcast frame. Việc quản lý danh sách MAC tĩnh cho 350 chiếc laptop nhân viên thay đổi liên tục cũng là một cơn ác mộng về mặt vận hành.

Lựa chọn 2: Captive Portal

Captive portal hoạt động ở Layer 3 và Layer 4. Cổng mạng phải online sẵn và cấp phát địa chỉ IP trước. Kẻ quét mạng vẫn có thể làm tràn ngập broadcast domain hoặc khai thác các lỗ hổng network stack cục bộ trước khi có ai đó mở trình duyệt lên để xác thực.

Lựa chọn 3: Kiểm soát truy cập mạng dựa trên cổng IEEE 802.1X (PNAC)

802.1X hoạt động trực tiếp tại Layer 2. Cổng switch ban đầu sẽ ở trạng thái unauthorized, âm thầm loại bỏ toàn bộ gói tin IPv4, IPv6, ARP và DHCP. Interface chỉ chấp nhận duy nhất các frame EAPOL (Extensible Authentication Protocol over LAN). Cho đến khi máy kết nối xác thực thành công với thư mục RADIUS phía trên, cổng dữ liệu vẫn sẽ bị khóa chặt.

Giải pháp: Xác thực mạng có dây 802.1X thông qua hostapd

Các kỹ sư thường liên tưởng hostapd với các access point Wi-Fi. Tuy nhiên, nó cũng tích hợp sẵn driver authenticator 802.1X cho mạng có dây đạt chuẩn production. Nếu bạn đang vận hành một access switch chạy Linux, một edge gateway hoặc một software bridge, hostapd có thể quản lý trạng thái xác thực của cổng đồng thời chuyển tiếp quá trình bắt tay EAP tới FreeRADIUS hoặc Microsoft NPS.

Trong mô hình của chúng tôi, quá trình bắt tay 802.1X có dây hoàn tất trong vòng chưa đầy 90 mili giây, giữ cho các thiết bị chưa được cấp quyền hoàn toàn bị cô lập khỏi bridge.

Bước 1: Cài đặt hostapd và Bridge Utilities

Cài đặt các gói mạng cần thiết trên máy chủ Debian hoặc Ubuntu của bạn:

sudo apt-get update
sudo apt-get install -y hostapd bridge-utils

Bước 2: Cấu hình Bridge và Interface thô

Tạo một bridge chuyên dụng (ví dụ: br0) và gắn cổng vật lý (eth1) vào. Interface kết nối này không được gán địa chỉ IP. Hãy giữ nó ở dạng thô (raw) để hostapd có thể chặn bắt trực tiếp các frame EAPOL:

# Tạo bridge và gắn eth1 vào
sudo ip link add name br0 type bridge
sudo ip link set dev eth1 master br0
sudo ip link set dev eth1 up
sudo ip link set dev br0 up

# Đặt eth1 sang chế độ promiscuous để bắt frame thô
sudo ip link set dev eth1 promisc on

Bước 3: Cấu hình hostapd cho 802.1X có dây

Tạo file /etc/hostapd/wired-8021x.conf. Khai báo driver=wired, liên kết với bridge và bật quyền kiểm soát 802.1X:

# /etc/hostapd/wired-8021x.conf

# Interface nối với ổ cắm tường hoặc patch panel
interface=eth1
bridge=br0

# Sử dụng driver có dây thay vì nl80211
driver=wired

# Bật 802.1X và địa chỉ MAC nhóm PAE chuẩn (01:80:c2:00:00:03)
ieee8021x=1
use_pae_group_addr=1

# Máy chủ FreeRADIUS / NPS phía trên
auth_server_addr=192.168.10.50
auth_server_port=1812
auth_server_shared_secret=RadSecretKey987!

# RADIUS Accounting
acct_server_addr=192.168.10.50
acct_server_port=1813
acct_server_shared_secret=RadSecretKey987!

# Bộ đếm thời gian bắt tay (tính bằng giây)
quiet_period=30
reauth_period=3600

Đối với các môi trường lab độc lập không có RADIUS server, bạn có thể xác thực cục bộ bằng file người dùng nội bộ:

# Phương án dự phòng cho lab độc lập
eap_user_file=/etc/hostapd/hostapd.eap_user

Điền thông tin xác thực cho bài lab vào /etc/hostapd/hostapd.eap_user:

# Tài khoản kiểm tra PEAP-MSCHAPv2
"sec_audit"    PEAP
"sec_audit"    MSCHAPV2    "Sup3rS3cur3P@ss!"    [2]

Bước 4: Chạy hostapd ở Foreground để Debug

Trước khi khởi chạy hostapd như một daemon chạy nền, hãy chạy nó với chế độ debug chi tiết (verbose) để theo dõi các gói tin EAP gửi đến:

sudo hostapd -dd -t /etc/hostapd/wired-8021x.conf

Khi có một client kết nối, quan sát quá trình trao đổi EAP-Request/Identity ngay trên terminal:

eth1: IEEE 802.1X: Received EAPOL packet (34 bytes) from 00:1a:2b:3c:4d:5e
eth1: IEEE 802.1X: EAPOL-Start from 00:1a:2b:3c:4d:5e
eth1: IEEE 802.1X: Sending EAP-Request/Identity to 00:1a:2b:3c:4d:5e
eth1: IEEE 802.1X: Received EAP-Response/Identity (sec_audit)
eth1: Sending RADIUS Access-Request to 192.168.10.50:1812
eth1: Received RADIUS Access-Accept
eth1: IEEE 802.1X: 00:1a:2b:3c:4d:5e authorized

Sau khi hostapd xác thực thông tin đăng nhập thành công, nó sẽ chuyển trạng thái cổng bridge sang forwarding. Các frame bắt đầu lưu thông bình thường qua br0.

Bước 5: Cấu hình Supplicant phía Client

Trên laptop Linux thử nghiệm kết nối vào mạng, cấu hình wpa_supplicant để xác thực qua mạng dây. Ghi profile cấu hình vào file /etc/wpa_supplicant/wired-client.conf:

# /etc/wpa_supplicant/wired-client.conf
ctrl_interface=/var/run/wpa_supplicant
ap_scan=0

network={
    key_mgmt=IEEE8021X
    eap=PEAP
    identity="sec_audit"
    password="Sup3rS3cur3P@ss!"
    phase2="auth=MSCHAPV2"
}

Khởi chạy supplicant trên card mạng (NIC) của client:

sudo wpa_supplicant -i eth0 -D wired -c /etc/wpa_supplicant/wired-client.conf -B

Sau khi thông báo xác thực xác nhận thành công, hãy xin cấp phát IP từ DHCP pool:

sudo dhclient eth0

Nếu ai đó cắm một thiết bị chưa được quản lý mà không có supplicant 802.1X hoạt động, hostapd sẽ hủy bỏ các frame của họ. Các gói tin DHCP discovery không bao giờ tới được server, và các yêu cầu ARP bị chặn đứng ngay tại cổng. Liên kết vật lý vẫn hiển thị up, nhưng kẻ xâm nhập hoàn toàn không nhận được phản hồi nào.

Bước 6: Kích hoạt Systemd Service

Lưu lại cấu hình để hostapd tự động khởi chạy cùng hệ thống khi khởi động:

sudo systemctl unmask hostapd
sudo systemctl enable hostapd
sudo systemctl restart hostapd

Cấu hình 802.1X tại vùng biên sẽ biến các cổng cắm Ethernet vật lý thành các endpoint có xác thực. Ngay cả khi kẻ tấn công tiếp cận được một ổ cắm mạng trống trong văn phòng, interface đó vẫn sẽ bị cô lập hoàn toàn cho đến khi vượt qua được bước xác thực bằng mật mã.

Share: