close

關於hostapd

https://wireless.wiki.kernel.org/en/users/Documentation/hostapd

hostapd是IEEE 802.11 AP和IEEE 802.1X / WPA / WPA2 / EAP / RADIUS身份驗證器本頁面專門介紹其實現和使用的Linux文檔。有關其他操作系統的信息,請參閱hostapd主頁。

要與內核驅動程序通信,hostapd必須使用某些接口。所有新的實現AP功能cfg80211(和mac80211)的驅動程序使用支持nl80211接口。

對於內核驅動程序,hostapd包含單獨的驅動程序。就Linux而言,您可以使用其他3種驅動程序:

mac80211子系統將主模式的所有方面移動到用戶空間。它依賴於hostapd來處理身份驗證客戶端,設置加密密鑰,建立密鑰輪換策略以及無線基礎結構的其他方面。因此,發布'iwconfig <wireless interface> mode master'的舊方法不再有效。這也意味著像hostapd這樣的用戶空間程序需要一種發送/接收管理幀的方法。

nl80211的詳細資料

在過去,接收和發送管理幀需要一個監控模式界面。您需要一個以主模式運行的接口用於標準流量,另一個接口用於身份驗證,密鑰管理等。第二個接口不需要任何特定的API ; 它是使用標準Linux套接字訪問的。nl80211驅動程序仍支持此方法作為後備。

之後,nl80211實現了用於發送管理幀(NL80211_CMD_FRAME)和訂閱它們(NL80211_CMD_REGISTER_FRAME)的特殊命令。這允許用戶空間僅使用單個接口來處理無線基礎設施。這是目前首選的方法,可以與所有實現AP模式的mac80211驅動程序一起使用。

獲取hostapd

 

使用您的發行版的hostapd

建議您在花時間編譯和安裝自己的副本之前嘗試發行版的hostapd。這將使未來的維護更容易,因為您將能夠使用發行版提供的init腳本,並且hostapd也將由它更新。如果你的發行版是0.6.8或更高版本,你可以通過創建文件hostapd-minimal.conf來測試這個最小配置:

#change wlan0 to your wireless device
interface=wlan0
driver=nl80211
ssid=test
channel=1

如果該配置錯誤,例如:

hostapd $ sudo hostapd ./hostapd-minimal.conf
Configuration file: ./hostapd-minimal.conf
Line 2: invalid/unknown driver 'nl80211'
1 errors found in configuration file './hostapd-minimal.conf'

這意味著您的發行版不提供帶有nl80211驅動程序支持的hostapd,您需要按照後面的構建說明進行操作。如果可行,您可以跳到配置hostapd部分。如果沒有,繼續。

下載並編譯hostapd

使用帶有nl80211的hostapd要求你至少擁有libnl-1.0 pre8,因為這個版本引入了nl80211依賴的genl,通用Netlink。大多數發行版現在發布此版本或更高版本。要在Fedora或其他將二進製文件中的標題分開的發行版上進行編譯,您需要libnl-devel包。

在本節中,版本將被引用:xyz

例如:hostapd-0.6.8.tar.gz將被稱為hostapd-xyztar.gz

您可以從git存儲庫獲取最新的hostapd開發版本:

git clone git://w1.fi/srv/git/hostap.git
cd hostap/hostapd

或者您可以通過從http://w1.fi/hostapd/下載tarball獲得穩定版本(推薦0.6.8或更高版本),如下所示:

wget http://w1.fi/releases/hostapd-xyztar.gz
tar xzvf hostapd-xyztar.gz
cd hostapd-xyz / hostapd

或者 直接下載
apt-get install -y hostapd

 

接下來,我們需要配置hostapd構建以啟用nl80211驅動程序支持。將defconfig複製到.config,然後在首選文本編輯器中打開它。此外,您可能還需要啟用其他選項,例如,如果您的硬件可以支持802.11n支持。大多數應用程序不需要大多數其他加密類型和功能,因此如果您在質疑是否需要啟用它,則可能不需要。

cp defconfig .config
vi .config

現在找到這一行:

#CONFIG_DRIVER_NL80211 = Y

並通過刪除“#”符號取消註釋。重複您可能感興趣的其他設置。基本配置(僅取消註釋此行)足以使hostapd啟動並運行WPA / WPA2身份驗證和加密。

接下來,編譯hostapd:

make

如果失敗,則出現以下錯誤:

driver_nl80211.c:21:31: warning: netlink/genl/genl.h: No such file or directory
driver_nl80211.c:22:33: warning: netlink/genl/family.h: No such file or directory
driver_nl80211.c:23:31: warning: netlink/genl/ctrl.h: No such file or directory
driver_nl80211.c:24:25: warning: netlink/msg.h: No such file or directory
driver_nl80211.c:25:26: warning: netlink/attr.h: No such file or directory

你需要安裝/更新libnl-1.0pre8(或更高版本)。如果一切順利並且編譯完成,請再次嘗試最小的hostapd,請參閱上面的使用您的發行版的hostapd部分

hostapd # ./hostapd ./hostapd-minimal.conf
Configuration file: ./hostapd-minimal.conf
Using interface wlan1 with hwaddr 00:0d:0b:cf:04:40 and ssid 'test'

如果以此處顯示的示例開始,則可以繼續配置hostapd。如果無法啟動並提供有關未找到驅動程序的錯誤,請查看上面列出的步驟以再次編譯hostapd。如果收到錯誤消息:

Hardware does not support configured mode
wlan0: IEEE 802.11 Hardware does not support configured mode (2)
Could not select hw_mode and channel. (-2)
wlan0: Unable to setup interface.
rmdir[ctrl_interface]: No such file or directory

那麼這意味著配置文件中的hw_mode(a,b或g)被設置為硬件不支持的值。

配置hostapd

 

建立配置基準

在配置hostapd之前,您需要了解將使用它的客戶端的功能。並非所有客戶端都支持您可能要實現的所有方法,因此需要建立基準配置。您還需要對您的區域進行調查,以找到其中包含最少其他AP的頻道。在選擇使用哪個頻道時,重要的是要記住頻道與20MHz以內的任何頻道重疊。

您可能建立的基準示例:

Encryption: wpa-psk + tkip
Wireless Mode: g
Normal for an environment that has to support semi-legacy devices, that don't support CCMP or WPA2
Encryption: wpa2-psk + ccmp
Wireless Mode: g+n
Normal for an environment that has only up-to-date hardware and software
Encryption: wep
Wireless Mode: b
This is the worst-case scenario, as WEP is broken and can be trivially cracked.  Don't consider this as anything more than keeping casual freeloaders out.

找到基線後,就可以編輯hostapd.conf了。配置選項將分為3個部分:

常用選項:您可能想要設置的選項
附加選項:至少知道您有用的選項
額外選項:大多數設置可能不需要的選項

常見選項

將hostapd與nl80211驅動程序一起使用的最基本選項集已作為hostapd-minimal.conf提供。如果您不關心在同一頻道上,不需要/想要加密,並且不需要華而不實的名稱,那就是您所需要的。然而,這在現實世界中並不是一個現實的想法。

首先,我們將設置無線接口設置,然後設置無線環境設置,最後設置身份驗證和加密。

無線接口

設置摘要:

  • interface:告訴hostapd使用什麼無線接口。
  • bridge:如果使用的無線接口是網橋接口的一部分,則設置為網橋。
  • 驅動程序:為了我們的目的,總是nl80211。如果您只有1個無線接口,並且它將通過有線接口進行橋接,那麼一個很好的示例設置將是:
interface=wlan0
bridge=br0
driver=nl80211

無線環境

設置摘要:

ssid:設置網絡的名稱(SSID =服務集標識符)。請注意,無線擴展/ iwconfig錯誤地調用此“ essid ”。
hw_mode:設置接口的工作模式和允許的通道。有效值取決於硬件,但始終是a,b,g的子集。
channel:設置hostapd運行的通道。必須是hw_mode中設置的模式支持的頻道,以及您所在國家/地區的無線監管規則所允許的頻道。SSID只是為了便於配置。它是掃描結果中顯示的內容,可以幫助您配置客戶端。檢查您所在地區的掃描結果並選擇名稱。
 

hw_mode需要是所有硬件支持的東西。將其設置為“g”可能是最常見的設置,並且還可以向後兼容802.11b設備。請注意,這不是啟用802.11n支持的地方,因為802.11n在802.11a或802.11g的功能之上運行。

應選擇通道,使其與您所在地區的其他AP或其他網絡保持最小重疊。802.11信道總寬度為20mhz(4個信道),每側寬度為10mhz(2個信道)。這意味著通道3上的接入點將乾擾通道1或通道5上的接入點。使用此接入點選擇通道。大多數消費者AP默認為頻道6,因此在大多數情況下您可以使用頻道1或頻道11以獲得最佳效果。另請注意,您可以使用的渠道完全取決於當地的監管規則。

良好的正常設置示例如下:

ssid=MyNetwork
hw_mode=g
channel=1

802.11n設置摘要

802.11n基於上述設置構建,並添加了其他功能。如果您的硬件不支持802.11n,或者您不打算使用它,則可以忽略這些。

  • ieee80211n:設置為1以啟用802.11n支持,設置為0以禁用它。
    ht_capab:設備支持的802.11n功能列表。示例配置文件中對這些設置的解釋非常有用,因此我建議您閱讀這些設置。您可以使用命令'iw list'查找設備功能的簡短列表。

示例設置:

wme_enabled = 1
ieee80211n = 1
ht_capab = [HT40+] [SHORT-GI-40] [DSSS_CCK-40]

- 40MHz的HT DSSS / CCK模式:將/可以使用40 MHz的 DSSS / CCK

身份驗證和加密

hostapd中的身份驗證和加密選項有很多。本節將介紹WEP / WPA / WPA2的基礎知識,以及一些其他常用選項。

設置摘要:

  • macaddr_acl:控制MAC地址過濾。MAC地址很容易被欺騙,因此只考慮使用它來增強您已有的其他安全措施。
  • auth_algs:這是一個位字段,其中第一位(1)用於開放式驗證,第二位(2)用於共享密鑰驗證(WEP),兩者都是(3)。
  • ignore_broadcast_ssid:啟用/禁用廣播SSID。
  • wpa:這是一個像auth_algs這樣的字段。第一位啟用WPA1(1),第二位啟用WPA2(2),兩者都啟用(3)
  • wpa_psk / wpa_passphrase:這些用於確定WPA身份驗證的預共享密鑰。
  • wpa_key_mgmt:它控制客戶端可以使用哪些密鑰管理算法進行身份驗證。
  • wpa_pairwise:它控制WPA的數據加密。
  • rsn_pairwise:它控制WPA2的數據加密。首先,從優先級中劃分macaddr_acl和ignore_broadcast_ssid,因為它們只增強了安全性(即便如此,也只是略微提高)。此外,WEP現在已被有效破解,因此除非您必須支持WEP,否則請從列表中刪除。這就離開了WPA / WPA2。根據標準草案,802.11n需要WPA2,並且由於現在已知對WPA的攻擊,WPA2是推薦的身份驗證和加密套件。幸運的是,您可以同時啟用這兩個功能。如果要將Windows客戶端連接起來,則應將CCMP加密保留在wpa_pairwise選項之外,因為某些Windows驅動程序在啟用它的系統中存在問題。

WPA和WPA2啟用接入點的良好起點是:

macaddr_acl = 0
auth_algs = 1
ignore_broadcast_ssid = 0
WPA = 3
wpa_passphrase = YourPassPhrase
wpa_key_mgmt = WPA-PSK
wpa_pairwise = TKIP
rsn_pairwise = CCMP

或者,如果您只想支持WPA2,可以使用以下內容:

macaddr_acl = 0
auth_algs = 1
ignore_broadcast_ssid = 0
WPA = 2
wpa_passphrase = YourPassPhrase
wpa_key_mgmt = WPA-PSK
wpa_pairwise = TKIP
rsn_pairwise = CCMP

這應該是使用帶有AP啟用的mac80211驅動程序的hostapd為基本安全訪問點更改的所有設置。

動態VLAN標記

hostapd可以配置為根據RADIUS隧道屬性將STA移動到單獨的VLAN中(如RFC3580,http//tools.ietf.org/html/rfc3580#section-3.31中所述):

Tunnel-Type=VLAN (13)
Tunnel-Medium-Type=802
Tunnel-Private-Group-ID=VLANID

要啟用動態VLAN標記,需要在hostapd.conf中設置以下選項:

dynamic_vlan=1
vlan_file=/etc/hostapd.vlan

值0表示禁用動態VLAN標記,值1表示允許動態VLAN標記,如果RADIUS服務器未提供相應的隧道屬性,則值2將拒絕驗證。

此外,hostapd需要知道如何命名VLAN接口。這是通過vlan_file中指定的附加配置文件完成的。

示例/etc/hostapd.vlan:

1 wlan0.1
* wlan0。#

這將在wlan0之上創建一個wlan0.1接口,並將所有帶有RADIUS提供的vlantag 1的STA移動到該接口。第二個條目用於在wlan0之上動態創建VLAN接口; hostapd將為RADIUS服務器提供的每個不同的vlantag創建一個接口wlan0.vlantag。例如,如果STA(站,也稱為設備)關聯,並且RADIUS服務器屬性包含,則vlantag 100然後hostapd將創建wlan0.100接口並將STA映射到該新接口。

IEEE 802.11i / RSN / WPA2預認證

通過在實際與新AP關聯之前預先驗證完整RSN認證和密鑰握手的IEEE 802.1X / EAP部分,可以增強IEEE 802.11漫遊體驗。要啟用RSN預身份驗證,您將需要啟用hostapd的RSN預身份驗證以及還支持和啟用RSN預身份驗證的STA請求者。在本節中,我們將簡要介紹如何啟用rsn_preauthentication,以及如何啟用它,以及如何在OpenWrt上啟用RSN預身份驗證以及在wpa_supplicant 啟用RSN預身份驗證以便對其進行測試。

首先,您需要確保所有AP都使用相同的SSID。

為了確保您的AP和RADIUS在同一網絡/交換機上並且可以相互通信,您可以互相ping並查看arp -a輸出,您應該在HW地址上看到彼此的AP橋接接口的MAC 地址列,以及RADIUS服務器的MAC地址。

例如,假設我們有兩個AP和一個RADIUS服務器:

  • ap136:192.168.4.120
  • db120:192.168.4.139
  • Radius服務器:192.168.4.149

在ap136:

root@ap136 ~ # arp -a
IP address       HW type     Flags       HW address            Mask     Device
192.168.4.139    0x1         0x2         00:03:7f:11:20:00     *        br-lan
192.168.4.1      0x1         0x2         68:7f:74:3b:b1:0d     *        br-lan
192.168.4.149    0x1         0x2         c8:60:00:da:57:a7     *        br-lan
192.168.4.109    0x1         0x2         00:27:10:49:c6:44     *        br-lan

在db120上:

root@db120 ~ # arp -a
IP address       HW type     Flags       HW address            Mask     Device
192.168.4.109    0x1         0x2         00:27:10:49:c6:44     *        br-lan
192.168.4.149    0x1         0x2         c8:60:00:da:57:a7     *        br-lan
192.168.4.1      0x1         0x2         68:7f:74:3b:b1:0d     *        br-lan
192.168.4.120    0x1         0x2         a2:69:db:89:44:88     *        br-lan

假設在此示例中RADIUS服務器位於192.168.4.149上,在hostapd.conf中,您需要啟用:

auth_server_addr=192.168.4.149
auth_server_port=1812
auth_server_shared_secret=testing123
wpa_key_mgmt=WPA-EAP
disable_pmksa_caching=1
okc=0
nas_identifier=
eapol_key_index_workaround=1
ieee8021x=1
wpa_key_mgmt=WPA-EAP
wpa_group_rekey=2000
auth_algs=1
wpa=2
wpa_pairwise=CCMP
wpa_group_rekey=2000
ssid=mcgrof-ap136-01
bridge=br-lan
rsn_preauth=1
rsn_preauth_interfaces=br-lan

OpenWrt AA發布的 完整示例conf文件

注意:必須使用相同的SSID進行RSN預身份驗證。

如果使用OpenWrt,只需啟用rsn_preauth即可,OpenWrt會自動為您添加rsn_preauth_interfaces。這通常是您的橋接界面。您需要在同一網絡/交換機上的兩個獨立設備上運行兩個hostapd實例。您還需要在同一網絡/交換機上的服務器上安裝RADIUS。FreeRADIUS是安裝的示例RADIUS解決方案,請閱讀如何安裝和配置FreeRADIUS以驗證802.11用戶

務必測試RADIUS服務器。您可以使用eapol_test程序(hostapd代碼的一部分)來完成此操作。

cd wpa_supplicant/
cp defconfig .config
make eapol_test

然後編輯一個名為eapol-config的文件,僅用於RADIUS服務器的這個簡單測試:

network={
eap=TTLS
eapol_flags=0
key_mgmt=IEEE8021X
identity="testuser"
password="testpassword"
ca_cert="/home/mcgrof/server.pem"
phase2="auth=TTLS"
}

您現在應該能夠按如下方式測試此用戶:

./eapol_test -c eapol-config -a 192.168.xx -p 1812 -s testing123 -r1

如果您有兩個正確配置了rsn_preauth的AP,如上所述並且在同一網絡上,您現在應該能夠為RSN預身份驗證配置客戶端。有關詳細信息,請參閱wpa_supplicant RSN預身份驗證文檔部分

在RADIUS服務器上,您希望看到如下內容:從STA到第二個AP的第二個身份驗證將在與之關聯的第一個AP上通過已建立的網絡。確切地說,當STA決定嘗試對另一個AP進行預認證時,需要由每個實現來決定。這取決於駕駛員行為以及報告掃描結果或PMKSA候選人的方式。今天,wpa_supplicant在關聯後和第一次掃描完成後執行此操作。

root@radius:~# radsniff| grep ^Access
Access-Request Id 0     192.168.4.120:51442 -> 192.168.4.149:1812       +0.000
Access-Challenge Id 0   192.168.4.149:1812 -> 192.168.4.120:51442       +0.000
Access-Request Id 1     192.168.4.120:51442 -> 192.168.4.149:1812       +0.009
Access-Challenge Id 1   192.168.4.149:1812 -> 192.168.4.120:51442       +0.012
Access-Request Id 2     192.168.4.120:51442 -> 192.168.4.149:1812       +0.017
Access-Challenge Id 2   192.168.4.149:1812 -> 192.168.4.120:51442       +0.018
Access-Request Id 3     192.168.4.120:51442 -> 192.168.4.149:1812       +0.065
Access-Challenge Id 3   192.168.4.149:1812 -> 192.168.4.120:51442       +0.066
Access-Request Id 4     192.168.4.120:51442 -> 192.168.4.149:1812       +0.077
Access-Challenge Id 4   192.168.4.149:1812 -> 192.168.4.120:51442       +0.078
Access-Request Id 5     192.168.4.120:51442 -> 192.168.4.149:1812       +0.083
Access-Accept Id 5      192.168.4.149:1812 -> 192.168.4.120:51442       +0.083
Access-Request Id 0     192.168.4.139:35038 -> 192.168.4.149:1812       +2.162
Access-Challenge Id 0   192.168.4.149:1812 -> 192.168.4.139:35038       +2.162
Access-Request Id 1     192.168.4.139:35038 -> 192.168.4.149:1812       +2.168
Access-Challenge Id 1   192.168.4.149:1812 -> 192.168.4.139:35038       +2.171
Access-Request Id 2     192.168.4.139:35038 -> 192.168.4.149:1812       +2.174
Access-Challenge Id 2   192.168.4.149:1812 -> 192.168.4.139:35038       +2.175
Access-Request Id 3     192.168.4.139:35038 -> 192.168.4.149:1812       +2.216
Access-Challenge Id 3   192.168.4.149:1812 -> 192.168.4.139:35038       +2.217
Access-Request Id 4     192.168.4.139:35038 -> 192.168.4.149:1812       +2.222
Access-Challenge Id 4   192.168.4.149:1812 -> 192.168.4.139:35038       +2.223
Access-Request Id 5     192.168.4.139:35038 -> 192.168.4.149:1812       +2.225
Access-Accept Id 5      192.168.4.149:1812 -> 192.168.4.139:35038       +2.225

這些日誌顯示STA首先使用ap136進行身份驗證,然後使用ap136在網絡上連接後再使用db120秒進行身份驗證。

假設您可以登錄STA,您應該能夠看到兩個 PMKSA條目:

root@android:/data/local # wpa_cli -i wlan0 pmksa                                                                                                            
Index / AA / PMKID / expiration (in seconds) / opportunistic
1 00:03:7f:47:20:a5 eb25d3d579742c0384230fa66748f857 43042 0
2 00:03:7f:42:10:09 a99081d41e18f4632994b59b50bb2447 43044 0

第一個應該對應於ap136的WLAN接口的BSSID / MAC地址,因此例如對於ap136,這將是wlan1的MAC地址。第二個對應於db120的WLAN接口的BSSID / MAC地址,在本例中為wlan0。為了測試PMKSA緩存,您可以從一個AP的STA漫游到另一個AP,並在重新關聯到第一個AP 時驗證STA是否仍然存在相同的PMKID(上面的第三個字段,或者從網絡中嗅探它)。

出於RSN預身份驗證的測試目的,您希望禁用機會密鑰緩存,否則AP派生的PMKSA可能來自機會密鑰緩存而不是RSN預身份驗證。機會密鑰緩存使PMKSA條目能夠在配置的接口和BSS之間共享(即,單個hostapd進程中的所有配置)。

入場控制強制性設置

如果實施了准入控制但是今天沒有在hostapd中實現, 則可以使用准入控制強制(ACM)來限制對更高優先級AC的訪問以進行流量控制可以為4個AC啟用ACM,但默認情況下應在hostapd.conf中禁用ACM:

wmm_ac_bk_acm = 0
wmm_ac_be_acm = 0
wmm_ac_vi_acm = 0
wmm_ac_vo_acm = 0

默認情況下應禁用ACM。在mac80211中,我們有一個解決方法來處理已配置所有AC的奇怪接入點,要求接入控制使用AC_BK傳輸幀。將所有AC設置為需要准入控制將是一個非常奇怪的配置,永遠不應該使用。

使用任何基於mac80211的驅動程序設置wmm_ac_ [option] _acm = 1是沒有意義的,因為它們無論如何都不支持准入控制。使用不支持准入控制的驅動程序的唯一用途是用於測試目的。

自動頻道選擇

這是一個正在進行的工作。補丁尚未包含在主線hostapd中。

有關更多詳細信息,請參閱ACS子頁面

arrow
arrow
    文章標籤
    hostapd
    全站熱搜
    創作者介紹
    創作者 立你斯 的頭像
    立你斯

    立你斯學習記錄

    立你斯 發表在 痞客邦 留言(0) 人氣()