關於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
無線環境
設置摘要:
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子頁面。
留言列表