2020年12月14日 星期一

WPA_supplicant的設定方式


ifconfig wlan0 192.168.1.200

wpa_passphrase "ASUS AC87U 5G"  "1234567890" > /etc/wpa_supplicant.conf

route add default gw 192.168.1.10

wpa_supplicant -B -i wlan0 -c /etc/wpa_supplicant.conf

echo “nameserver 8.8.8.8” >> /etc/resolv.conf

echo “nameserver 10.233.174.254” >> /etc/resolv.conf


killall wpa_supplicant


wpa_supplicant設定檔大致分成三個區塊,這邊的例子主要介紹網路設定區塊
1. 全域設定 (Global configuration)
2. 驗證設定區塊 (credential block)
3. 網路設定區塊 (network block)

驗證方式
目前常用的驗證方式有 兩種 : WPA和WPA2(RSN)
一般WPA會配合TKIP加密
而WPA2會配合AES(CCMP)加密
有些高級的AP可以混搭使用,如WPA2使用TKIP加密

注 : 全域設定要有這兩行,最好是放在最上面
ctrl_interface=/var/run/wpa_supplicant #讓supplicant可以建立行程pid
update_config=1 #讓wpa_cli程式可以更新控制wpa_supplicant

例子1 使用WPA/TKIP,密碼是用PSK的方式
network={
ssid="你的SSID名稱,限英文"
proto=WPA                     #要用WPA或WPA2
key_mgmt=WPA-PSK    #要用PSK或EAP
pairwise=TKIP                #要用AES(CCMP)或TKIP加密
group=TKIP                    #廣播和群播在用的加密
psk=無線網路的密碼          #psk的密碼,如果用key_mgmt=WPA-PSK,就必須要有
}

例子2 使用WPA2/AES,密碼是用PSK的方式
network={
ssid="example"
proto=RSN
key_mgmt=WPA-PSK
pairwise=CCMP
group=CCMP
psk=無線網路的密碼
}

例子3 使用WPA/WPA2,加密都支援,密碼是用PSK的方式
network={
ssid="example"
proto=RSN WPA
key_mgmt=WPA-PSK
pairwise=CCMP TKIP
group=CCMP TKIP
psk=無線網路的密碼
}

例子4 使用WPA2/AES,密碼是用PSK的方式,並且SSID沒有被廣播
network={
ssid="example"
scan_ssid=1                    #如果SSID沒有被廣播就要加上這行
proto=RSN
key_mgmt=WPA-PSK
pairwise=CCMP
group=CCMP
psk=無線網路的密碼
}

例子5 使用WPA2/AES,PSK,SSID沒有廣播,範圍內有多的可以用的SSID時,會優先使用這個SSID
network={
ssid="example"
scan_ssid=1
proto=RSN
key_mgmt=WPA-PSK
pairwise=CCMP
group=CCMP
psk=無線網路的密碼
priority=2                       #優先權,越高越優先,預設是0
}

例子7 使用WPA2/AES,使用EAP驗證,而驗證的機制是用TLS
network={
ssid="example"
proto=RSN
key_mgmt=WPA-EAP
pairwise=CCMP
group=CCMP
eap=TLS
ca_cert="/etc/cert/ca.pem"           #公司的CA憑證(根憑證)
client_cert="/etc/cert/user.pem"   #client的公鑰
private_key="/etc/cert/user.prv"  #client的私鑰
priority=1
}

例子8 使用WPA2/AES,EAP,使用PEAP驗證機制(通常要打帳號和密碼)
network={
ssid="example"
proto=RSN
key_mgmt=WPA-EAP
eap=PEAP
pairwise=CCMP
group=CCMP
identity="user@example.com"      #帳號
password="foobar"                        #密碼
ca_cert="/etc/cert/ca.pem"             #公司的CA憑證(根憑證)
phase1="peaplabel=1"                   #使用新式的label
phase2="auth=MSCHAPV2"        #第二段驗證方式用微軟的MSCHAPV2
priority=10
}

例子9 將自己變為ad-hoc,並嘗試加入一樣的ad-hoc,並指定使用channel 1
# IBSS/ad-hoc network with RSN
network={
ssid="ibss-rsn"
key_mgmt=WPA-PSK
proto=RSN
psk="12345678"
mode=1
frequency=2412         #指定無線網路的發射頻道,只有ad-hoc才有用
pairwise=CCMP
group=CCMP
}

全域設定

For UNIX domain sockets

DIR=路徑 GROUP=群組名稱或GID

建立socket file的目錄,建議使用官方預設值/var/run/wpa_supplicant

GROUP是可以用外部程式(如wpa_cli)控制這個設定檔的使用者群組,如果要給非root使用者使用可以使用預設的設定

DIR=/var/run/wpa_supplicant GROUP=wheel  (預設值)

再把使用者加到這個群組內就可以用外部程式控制設定檔

(因為一般這個設定檔的權限是root的readonly)

如果要多個群組可以操控可以用以下方式

DIR=/var/run/wpa_supplicant GROUP=wheel

DIR=/var/run/wpa_supplicant GROUP=1000

ctrl_interface

讓supplicant可以建立行程pid

ctrl_interface=/var/run/wpa_supplicant

IEEE 802.1X/EAPOL 的版本

eapol_version=1或2 (預設是1)

設定802.1X的版本號

因為wpa_supplicant是依照IEEE Std 802.1X-2004所撰寫,而802.1X-2004是第2版

但是作者發現有些AP不太支援第2版,因此預設值為1

AP的掃描和選擇

ap_scan=1或0或2

設定AP在掃描完畢後的行為

1 會先進行掃描,掃描完後會選擇適合的AP,如果都找不到適合的AP,則自己會嘗試當一個AP(IBSS或AP mode)(前提是要先設定好如何當一個AP)(預設)

0 會進行完整的掃描,但不會連接AP,也不可以用外部程式強制連接AP。適合用在有線的環境下

2 功能類似0(完整掃描),但是會進行AP的連接,不過僅限於有設定安全規則(security policy)和SSID(不是BSSID)的情況下。

在這模式下,網路設定區塊的設定,回逐個進行連結測試,直到成功連結,而且每個網路設定都必須有精確的安全原則設定(就是不要有兩個以上的安全設定出現,如WPA-TKIE和WPA-CCM)

peer的憑證紀錄

cert_in_cb=1 預設值

EAP快速重新驗證

fast_reauth=1 預設值

如果支援EAP re-authentication  protocol(ERP),可以減少再次進行EAP驗證的時間

freeRADIUS如果要使用這個功能要在eap.conf裡面啟用TLS session

國碼

country=TW

ISO/IEC的兩碼國家代碼,可以讓設備準確的運作

PMKSA的最大lifetime(單位 秒)

dot11RSNAConfigPMKLifetime=43200 (預設值)

重新驗證的門檻(單位 PMK lifetime的百分比)

dot11RSNAConfigPMKReauthThreshold=70 (預設值)

協商安全性連結的逾期時間 (單位 秒)

dot11RSNAConfigSATimeout=60 (預設值)

記憶體能儲存的最大BSS數量

bss_max_count=200 (預設值)

如果設定ap_scan=1(預設),會將掃描的結果儲存到記憶體中,如果環境內有超多的(AP),或許需要更大的數字

網路設定

disabled

是否取消此設定

0 : 可以使用  (預設值)

1 : 取消,但可用控制介面啟用,如wpa_cli

id_str

給外部腳本(script)使用的參數,透由wpa_cli把此參數的值存到環境變數WPA_ID_STR,以方便讓外部腳本進行網路環境的設定

ssid (必要參數)

SSID的名稱,用以下三種方式的其中一種格式命名

前後用 " 符號包住的ASCII格式的名字,如"thessid"

16進位數字的SSID(two characters per octet,兩個數字為一組)

a printf-escaped ASCII string P"<escaped string>"

scan_ssid

0 : 預設值,藉由AP發出的probe(AP自動廣播自己的SSID)來尋找SSID,而不會發送特定的SSID probe去尋找這個SSID的存在

1 : 如果AP不廣播SSID時可用這個選項,會發送特定的SSID probe 尋找SSID的存在。會增加連結的時間。建議有需要才設定

bssid (選填)

發送訊號的AP的MAC位置

如果設定了就只會嘗試用連結這個MAC位置的AP

priority

priority group (用整數)

預設每個網路設定區塊的priority都是 0 ,數字越高的設定,會越早被比對。可以使用此方式改變優先使用哪個SSID

如果是相同的priority,則會用訊號強度、安全原則等方式去選擇

如果設定ap_scan=2和ssid=1,會忽略priority的設定,而是依照設定檔按的順序,由上到下確認每個網路設定區塊的設定

mode

0 : infrastructure,預設值,會嘗試連結AP

1 : IBSS,ad-hoc, peer to peer

2 : AP

frequency

IBSS要使用的頻道,在infrastructure模式會被忽略

2412代表2.4G的第一個頻道

scan_freq

要掃描的頻道列表

如果知道環境內設定的AP所發送的頻道,可以用這個功能最佳化掃描

如,scan_freq=2412 2437 2462

freq_list

允許的頻率

選擇一個BSS連結時,所參考的頻率,如果BSS的頻率不在設定內,則不考慮連結

bgscan

背景掃描

設定在背景掃描訊號強度的行為,主要做為漫遊用,在相同ESS下掃描訊號的強度

這個設定也可以設定在全域設定下

格式為,bgscan="<掃描的模組>:<參數>"

掃描的模組有兩個,simple和learn(實驗階段)

simple : 周期性的觀察訊號強度

bgscan="simple:<最短掃描周期>:<訊號強度門檻>:<最長掃描周期>"

bgscan="simple:30:-70:60"

learn : 學習無線網路的頻道被使用的程度

bgscan="learn:<最短掃描周期>:<訊號強度門檻>:<最長掃描周期>:資料儲存的位置"

bgscan="learn:30:-40:60:/var/wpa_supplicant/network1.bgscan"

關閉bgscan的行為

bgscan=""

proto

允許接受的協定

WPA = WPA/IEEE 802.11i/D3.0

RSN = WPA2/IEEE 802.11i (RSN是WPA2的另一種稱呼)(預設)

key_mgmt

驗證金鑰的方法

預設是,WPA-PSK WPA-EAP

WPA-PSK = WPA pre-shared key (需要再設定 'psk' 欄位)

WPA-EAP = WPA using EAP authentication

IEEE8021X = IEEE 802.1X using EAP authentication and (optionally) dynamically generated WEP keys (WEP 802.1X)

NONE = WPA is not used; plaintext or static WEP could be used (無密碼)

WPA-PSK-SHA256 = Like WPA-PSK but using stronger SHA256-based algorithms

WPA-EAP-SHA256 = Like WPA-EAP but using stronger SHA256-based algorithms

auth_alg

驗證演算法

OPEN = Open System authentication (必須是WPA/WPA2)

SHARED = Shared Key authentication (必須再設定static WEP keys)

LEAP = LEAP/Network EAP (only used with LEAP)

# If not set, automatic selection is used (Open System with LEAP enabled if

# LEAP is allowed as one of the EAP methods).

pairwise (unicast)

WPA的加密方式,專門針對unicast封包的加密方式,也是一般在選擇SSID時的加密方式

預設是,CCMP TKIP

CCMP = AES in Counter mode with CBC-MAC (WPA2一般會搭配這個)

TKIP = Temporal Key Integrity Protocol (WPA一般會搭配這個)

NONE = Use only Group Keys (無密碼)

group (broadcast/multicast)

WPA的加密方式,專門針對廣播封包或群播封包的加密方式 (一般unicast和broadcast應該是一樣)

預設是,CCMP TKIP WEP104 WEP40

CCMP = AES in Counter mode with CBC-MAC [RFC 3610, IEEE 802.11i/D7.0]

TKIP = Temporal Key Integrity Protocol [IEEE 802.11i/D7.0]

WEP104 = WEP (Wired Equivalent Privacy) with 104-bit key

WEP40 = WEP (Wired Equivalent Privacy) with 40-bit key [IEEE 802.11]

psk

WPA的preshared key

mem_only_psk

只允許PSK儲存在記憶體

0 : 允許PKS存在設定檔內 (預設)

1 : 不允許PKS存在設定檔內

eapol_flags

給WEP 802.1X使用的旗標(flag)

(1)bit0 : 需要動態產生 unicast 的WEP KEY 

(2)bit1 : 需要動態產生 broadcast和multicast 的WEP KEY

(3)不使用此功能 : 需要兩者都動態產生WEP KEY(預設)

作者註記 : 環境中有使用「有線網路」的驗證(包括MACsec),這個功能必須設定為,eapol_flags=bit0

peerkey (IEEE 802.11e DLS)

限WPA2時才有用

Whether PeerKey negotiation for direct links (IEEE 802.11e DLS) is allowed.

0 : 取消 (預設)

1 : 啟用

wpa_ptk_rekey (單位 秒)

PTK的lifetime,可強制AP更換WPA的KEY

group_rekey

Group rekeying time in seconds. This value, if non-zero, 

is used as the dot11RSNAConfigGroupRekeyTime parameter 

when operating in Authenticator role in IBSS.

接下來的是EAP相關的參數

eap

接受哪幾種EAP的機制

如果沒有設定代表全部都接受

MD5 = EAP-MD5 用在AP-PEAP或EAP-TTLS的第2階段驗證(Phase 2)(不安全,無法用在WPA)

MSCHAPV2 = EAP-MSCHAPv2 用在AP-PEAP或EAP-TTLS的第2階段驗證(必須和WPA一起使用)

OTP = EAP-OTP 用在AP-PEAP或EAP-TTLS的第2階段驗證(必須和WPA一起使用)

GTC = EAP-GTC 用在AP-PEAP或EAP-TTLS的第2階段驗證(必須和WPA一起使用)

TLS = EAP-TLS (client and server certificate)

PEAP = EAP-PEAP (with tunnelled EAP authentication)

TTLS = EAP-TTLS (with tunnelled EAP or PAP/CHAP/MSCHAP/MSCHAPV2 authentication)

identity

類似帳號

anonymous_identity

匿名驗證

password

帳號的密碼,可以使用明碼或NtPasswordHash(windows在用的,密碼的16-byte MD4 hash)

使用NtPasswordHash時,格式為,hash:<32 hex digits>

NtPasswordHash只能用在MSCHAPv2或MSCHAP (EAP-MSCHAPv2, EAP-TTLS/MSCHAPv2, EAP-TTLS/MSCHAP, LEAP)

也可以指向外部用來儲存密碼的檔案,格式為,ext:<name of external password field>

ca_cert

CA憑證的檔案路徑(PEM或DER),可以指向多個檔案

如果沒有設定ca_cert和ca_path,將不會驗證驗證伺服器的憑證 (無條件允許任何伺服器憑證)

如果是運作在windows上,可以用windows的專用格式,ca_cert="cert_store://<name>" (wpa_supplicant只會讀取使用者憑證)

如,ca_cert="cert_store://CA" 或 ca_cert="cert_store://ROOT"

ca_path

功能是指向專門放置CA憑證的資料夾,如/etc/ssl/certs

檔案的格式必須是PEM,可以用OpenSSL編碼

client_cert

用戶憑證的檔案路徑(PEM或DER)

private_key

用戶憑證的祕鑰的檔案路徑(PEM/DER/PFX)

如果是使用PKCS#12/PFX格式的憑證(windows在用的格式),絕對不能使用client_cert

另外windows可以使用hash://certificate_thumbprint_in_hex格式指定包含秘鑰的憑證

如,private_key="hash://63093aa9c47f56ae88334c7b65a4"

private_key_passwd

用戶憑證的祕鑰的密碼,如果需要但沒設定會由控制介面顯示出提示訊息

subject_match

比對伺服器憑證的subject,格式為/C=US/ST=CA/L=SanFrancisco/CN=Test/emailAddress=test@example.com

如果有設定這個並比對成功,則domain(CN)名稱的比對方式將會被忽略,如domain_suffix_match或domain_match

如果有設定,比對不成功就不會使用這個網路設定區塊

altsubject_match

使用TYPE:VALUE的格式比對其他的標題

EMAIL:server@example.com

DNS:server.example.com;DNS:server2.example.com

如果有設定,比對不成功就不會使用這個網路設定區塊

domain_suffix_match

如果有dNSName,只會比對此欄位

如果沒有dNSName,則會比對subject_match的CN欄位

domain_match

功能跟domain_suffix_match一樣,只是在比對上屬於完整比對

phase1

TLS通道的外層的驗證(EAP-TTLS或EAP-PEAP)

會同時使用底下的各種參數,如phase1="peapver=0"或phase1="peapver=1 peaplabel=1"

peapver : 強制使用PEAP的版本 (0 或 1)

peaplabel=1 : 強制使用新的標題"client PEAP encryption",舊的標題是"client EAP encryption" (預設是peapver=1 peaplabel=1)

peap_outer_success=0

This is required with some RADIUS servers that implement draft-josefsson-pppext-eap-tls-eap-05.txt (e.g.,Lucent NavisRadius v4.4.0 with PEAP in "IETF Draft 5" mode)

include_tls_length=1 : 強制增加TLS Message Length的欄位在每個驗證訊框中

sim_min_num_chal=3 : 設定EAP-SIM需要3因素驗證,數值可以是2或3

result_ind=1

allow_canned_success=1 : 總是驗證成功,不需要經過驗證步驟就回傳驗證成功訊息

phase2

TLS通道的內層的驗證

會同時使用底下的參數

auth=MSCHAPV2 : 給EAP-PEAP使用

autheap=MSCHAPV2或autheap=MD5 : 給EAP-TTLS使用

mschapv2_retry=0 : 如果發生MSCHAPV2驗證失敗會取消再次嘗試驗證的動作

TLS相關參數,可用於控制TLS驗證時的動作

tls_allow_md5=1 : 允許MD5驗證,需要TLS函示庫(TLS library)支援

tls_disable_time_checks=1 : 不去確認伺服器的憑證有效時間,不管憑證已經過期還是尚未生效都可以使用

tls_disable_tlsv1_0=1 : 不使用TLS1.0

tls_disable_tlsv1_1=1 : 不使用TLS1.1

tls_disable_tlsv1_2=1 : 不使用TLS1.2

tls_ext_cert_check=0 : 不允許使用外部驗證伺服器 (預設)

tls_ext_cert_check=1 : 使用外部驗證伺服器,當控制介面(如wpa_cli)收到CTRL-RSP-EXT_CERT_CHECK時,要有一個外部程式可以執行外部驗證伺服器的驗證,並且回傳CTRL-RSP_EXT_CERT_CHECK

底下的功能是給phase2使用EAP-TTLS 或 EAP-PEAP時才有用

ca_cert2 : 用來驗證phase2的CA憑證,功能同 ca_cert,只是這個是專門給phase2使用

ca_path2 : 底下同上面所述,只是這個是專門給phase2使用

client_cert2

private_key2

private_key2_passwd

dh_file2

subject_match2

altsubject_match2

domain_suffix_match2

fragment_size

EAP訊框的最大大小 (預設是1398)

ocsp

使用OCSP協定驗證伺服器憑證

0 : 不使用

1 : 嘗試使用,不依定需要回應

2 : 強制使用,而且要收到回應

3 : 強制使用,但只對不受信任的伺服器憑證使用 

資料來源: http://bigpxuan.blogspot.com/2016/12/wpasupplicant.html

沒有留言: