無線網絡企業。 FreeRadius + FreeIPA + Ubiquiti

無線網絡企業。 FreeRadius + FreeIPA + Ubiquiti

已經描述了一些組織企業 WiFi 的示例。 這裡我將描述我是如何實現這樣的解決方案以及在不同設備上連接時遇到的問題。 我們將使用現有的 LDAP 和已建立的用戶,安裝 FreeRadius 並在 Ubnt 控制器上配置 WPA2-Enterprise。 一切看起來都很簡單。 讓我們來看看…

關於 EAP 方法的一些知識

在繼續執行任務之前,我們需要決定在解決方案中使用哪種身份驗證方法。

來自維基百科:

EAP 是一種常用於無線網絡和點對點連接的身份驗證框架。 該格式首先在 RFC 3748 中描述,並在 RFC 5247 中更新。
EAP 用於選擇身份驗證方法、傳輸密鑰並通過稱為 EAP 方法的插件處理這些密鑰。 EAP 方法有很多種,既有 EAP 本身定義的,也有個別供應商發布的。 EAP不定義鏈路層,它只定義消息格式。 每個使用 EAP 的協議都有自己的 EAP 消息封裝協議。

方法本身:

  • LEAP 是 CISCO 開發的專有協議。 發現漏洞。 目前不建議使用
  • EAP-TLS 在無線供應商中得到了很好的支持。 它是一種安全協議,因為它是 SSL 標準的後繼者。 設置客戶端相當複雜。 除了密碼之外,您還需要客戶端證書。 許多系統都支持
  • EAP-TTLS - 在許多系統上得到廣泛支持,通過僅在身份驗證服務器上使用 PKI 證書來提供良好的安全性
  • EAP-MD5 是另一個開放標準。 提供最低限度的安全性。 存在漏洞,不支持相互認證和密鑰生成
  • EAP-IKEv2 - 基於互聯網密鑰交換協議版本 2。提供客戶端和服務器之間的相互身份驗證和會話密鑰建立
  • PEAP 是 CISCO、Microsoft 和 RSA Security 的聯合解決方案,作為開放標準。 廣泛應用於產品中,提供了非常好的安全性。 與EAP-TTLS類似,只需要服務器端的證書
  • PEAPv0/EAP-MSCHAPv2 - 繼 EAP-TLS 之後,這是世界上第二個廣泛使用的標準。 在 Microsoft、Cisco、Apple、Linux 中使用客戶端-服務器關係
  • PEAPv1/EAP-GTC - 由 Cisco 創建,作為 PEAPv0/EAP-MSCHAPv2 的替代方案。 不以任何方式保護身份驗證數據。 Windows 操作系統不支持
  • EAP-FAST是Cisco為了糾正LEAP的缺點而開發的一種方法。 使用受保護的訪問憑證 (PAC)。 完全未完成

在所有這些品種中,選擇仍然不是很多。 所需的身份驗證方法:良好的安全性,支持所有設備(Windows 10、macOS、Linux、Android、iOS),而且實際上越簡單越好。 因此,選擇落在了EAP-TTLS 與PAP 協議的結合上。
可能會出現問題 - 為什麼要使用 PAP? 因為他以明文形式傳輸密碼?

恩,那就對了。 FreeRadius 和 FreeIPA 之間的通信將通過這種方式進行。 在調試模式下,您可以跟踪用戶名和密碼的發送方式。 是的,讓他們走吧,只有您有權訪問 FreeRadius 服務器。

您可以閱讀有關 EAP-TTLS 工作原理的更多信息 這裡

自由半徑

我們將把 FreeRadius 升級到 CentOS 7.6。 這裡沒有什麼複雜的,我們按照通常的方式安裝即可。

yum install freeradius freeradius-utils freeradius-ldap -y

版本 3.0.13 從軟件包中安裝。 後者可以採取 https://freeradius.org/

在此之後,FreeRadius 就已經開始工作了。 您可以取消註釋 /etc/raddb/users 中的行

steve   Cleartext-Password := "testing"

以調試模式啟動服務器

freeradius -X

並從本地主機建立測試連接

radtest steve testing 127.0.0.1 1812 testing123

我們收到了答复 收到從 115:127.0.0.1 到 1812:127.0.0.1 長度 56081 的訪問接受 ID 20,這意味著一切正常。 前進。

我們連接模塊 LDAP.

ln -s /etc/raddb/mods-available/ldap /etc/raddb/mods-enabled/ldap

我們會立即更改它。 我們需要 FreeRadius 才能訪問 FreeIPA

啟用 mods/ldap

ldap {
server="ldap://ldap.server.com"
port=636
start_tls=yes
identity="uid=admin,cn=users,dc=server,dc=com"
password=**********
base_dn="cn=users,dc=server,dc=com"
set_auth_type=yes
...
user {
base_dn="${..base_dn}"
filter="(uid=%{%{Stripped-User-Name}:-%{User-Name}})"
}
...

重新啟動radius服務器並檢查LDAP用戶的同步:

radtest user_ldap password_ldap localhost 1812 testing123

編輯 eap 中 啟用 mods/eap
這裡我們添加了兩個 eap 實例。 它們僅在證書和密鑰方面有所不同。 下面我就來解釋一下為什麼會這樣。

啟用 mods/eap

eap eap-client {                                                                                                                                                                                                                           default_eap_type = ttls                                                                                                                                                                                                                 timer_expire = 60                                                                                                                                                                                                                       ignore_unknown_eap_types = no                                                                                                                                                                                                          cisco_accounting_username_bug = no                                                                                                                                                                                                      max_sessions = ${max_requests}
           tls-config tls-common {
           private_key_file = ${certdir}/fisrt.key
           certificate_file = ${certdir}/first.crt
           dh_file = ${certdir}/dh
           ca_path = ${cadir}
           cipher_list = "HIGH"
           cipher_server_preference = no
           ecdh_curve = "prime256v1"
           check_crl = no
           }
                                                                                                                                                                                                                                                                                                                                                                                                                                                 
           ttls {
           tls = tls-common
           default_eap_type = md5
           copy_request_to_tunnel = no
           use_tunneled_reply = yes
           virtual_server = "inner-tunnel"
           }
}
eap eap-guest {
default_eap_type = ttls                                                                                                                                                                                                                 timer_expire = 60                                                                                                                                                                                                                       ignore_unknown_eap_types = no                                                                                                                                                                                                          cisco_accounting_username_bug = no                                                                                                                                                                                                      max_sessions = ${max_requests}
           tls-config tls-common {
           private_key_passwotd=blablabla
           private_key_file = ${certdir}/server.key
           certificate_file = ${certdir}/server.crt
           dh_file = ${certdir}/dh
           ca_path = ${cadir}
           cipher_list = "HIGH"
           cipher_server_preference = no
           ecdh_curve = "prime256v1"
           check_crl = no
           }
                                                                                                                                                                                                                                                                                                                                                                                                                                                 
           ttls {
           tls = tls-common
           default_eap_type = md5
           copy_request_to_tunnel = no
           use_tunneled_reply = yes
           virtual_server = "inner-tunnel"
           }
}

進一步編輯 站點啟用/默認。 我對授權和驗證部分感興趣。

站點啟用/默認

authorize {
  filter_username
  preprocess
  if (&User-Name == "guest") {
   eap-guest {
       ok = return
   }
  }
  elsif (&User-Name == "client") {
    eap-client {
       ok = return 
    }
  }
  else {
    eap-guest {
       ok = return
    }
  }
  ldap
  if ((ok || updated) && User-Password) {
    update {
        control:Auth-Type := ldap
    }
  }
  expiration
  logintime
  pap
  }

authenticate {
  Auth-Type LDAP {
    ldap
  }
  Auth-Type eap-guest {
    eap-guest
  }
  Auth-Type eap-client {
    eap-client
  }
  pap
}

在授權部分,我們刪除所有不需要的模塊。 我們只留下ldap。 添加通過用戶名進行客戶端驗證。 這就是我們在上面添加兩個 eap 實例的原因。

多EAP事實上,當連接某些設備時,我們將使用系統證書並指定域。 我們擁有來自受信任的證書頒發機構的證書和密鑰。 就我個人而言,我認為這種連接過程比在每個設備上拋出自簽名證書更簡單。 但即使沒有自簽名證書,仍然沒有成功。 Samsung 設備和 Android =< 6 版本無法使用系統證書。 因此,我們使用自簽名證書為他們創建一個單獨的 eap-guest 實例。 對於所有其他設備,我們將使用帶有受信任證書的 eap-client。 連接設備時,用戶名由匿名字段確定。 只允許使用 3 個值:Guest、Client 和空字段。 其他一切都被丟棄。 它將在政治家中配置。 稍後我會舉一個例子。

讓我們編輯授權和驗證部分 站點啟用/內部隧道

站點啟用/內部隧道

authorize {
  filter_username
  filter_inner_identity
  update control {
   &Proxy-To-Realm := LOCAL
  }
  ldap
  if ((ok || updated) && User-Password) {
    update {
        control:Auth-Type := ldap
    }
  }
  expiration
  digest
  logintime
  pap
  }

authenticate {
  Auth-Type eap-guest {
    eap-guest
  }
  Auth-Type eap-client {
    eap-client
  }
  Auth-Type PAP {
    pap
  }
  ldap
}

接下來,您需要在策略中指定哪些名稱可以用於匿名登錄。 編輯 策略.d/過濾器.

您需要找到與此類似的行:

if (&outer.request:User-Name !~ /^(anon|@)/) {
  update request {
    Module-Failure-Message = "User-Name is not anonymized"
  }
  reject
}

下面在 elsif 中添加所需的值:

elsif (&outer.request:User-Name !~ /^(guest|client|@)/) {
  update request {
    Module-Failure-Message = "User-Name is not anonymized"
  }
  reject
}

現在我們需要移動到目錄 證書。 在這裡,您需要輸入來自受信任證書頒發機構的密鑰和證書,我們已經擁有該證書頒發機構,並且需要為 eap-guest 生成自簽名證書。

更改文件中的參數 ca.cnf.

ca.cnf


...
default_days = 3650
default_md = sha256
...
input_password = blablabla
output_password = blablabla
...
countryName = RU
stateOrProvinceNmae = State
localityNmae = City
organizationName = NONAME
emailAddress = [email protected]
commonName = "CA FreeRadius"

我們在文件中寫入相同的值 服務器.cnf。 我們只改變
通用名:

服務器.cnf


...
default_days = 3650
default_md = sha256
...
input_password = blablabla
output_password = blablabla
...
countryName = RU
stateOrProvinceNmae = State
localityNmae = City
organizationName = NONAME
emailAddress = [email protected]
commonName = "Server Certificate FreeRadius"

我們創造:

make

準備好。 已收到 服務器.crt и 服務器密鑰 上面我們已經在 eap-guest 中註冊了。

最後,讓我們將訪問點添加到文件中 客戶端配置文件。 我有 7 個,為了不單獨添加每個點,我們將僅註冊它們所在的網絡(我的接入點位於單獨的 VLAN 中)。

client APs {
ipaddr = 192.168.100.0/24
password = password_AP
}

泛快控制器

我們在控制器上建立一個單獨的網絡。 讓它成為192.168.2.0/24
轉到設置 -> 個人資料。 讓我們創建一個新的:

無線網絡企業。 FreeRadius + FreeIPA + Ubiquiti

我們記下radius服務器的地址和端口以及寫入文件中的密碼 客戶配置文件:

無線網絡企業。 FreeRadius + FreeIPA + Ubiquiti

創建新的無線網絡名稱。 選擇 WPA-EAP(企業)作為身份驗證方法並指定創建的半徑配置文件:

無線網絡企業。 FreeRadius + FreeIPA + Ubiquiti

我們保存一切,申請並繼續前進。

設置客戶端

讓我們從最難的部分開始吧!

窗戶10

困難在於 Windows 還不知道如何通過域連接到企業 WiFi。 因此,我們必須手動將證書上傳到受信任的證書存儲區。 在這裡您可以使用自簽名和來自證書頒發機構的簽名。 我將使用第二個。

接下來,您需要創建一個新連接。 為此,請轉至網絡和 Internet 設置 -> 網絡和共享中心 -> 創建並配置新的連接或網絡:

無線網絡企業。 FreeRadius + FreeIPA + Ubiquiti

無線網絡企業。 FreeRadius + FreeIPA + Ubiquiti

無線網絡企業。 FreeRadius + FreeIPA + Ubiquiti

我們手動輸入網絡名稱並更改安全類型。 我們點擊之後 更改連接設置 然後在“安全”選項卡中,選擇網絡身份驗證 - EAP-TTLS。

無線網絡企業。 FreeRadius + FreeIPA + Ubiquiti

無線網絡企業。 FreeRadius + FreeIPA + Ubiquiti

無線網絡企業。 FreeRadius + FreeIPA + Ubiquiti

我們進入參數,規定身份驗證的機密性 - 客戶。 作為受信任的證書頒發機構,選擇我們添加的證書,選中“如果服務器無法授權,則不要向用戶發出邀請”框,然後選擇身份驗證方法 - 未加密的密碼(PAP)。

無線網絡企業。 FreeRadius + FreeIPA + Ubiquiti

接下來,進入高級設置,勾選“指定身份驗證模式”。 選擇“用戶身份驗證”並點擊 保存憑證。 在這裡您需要輸入用戶名_ldap和密碼_ldap

無線網絡企業。 FreeRadius + FreeIPA + Ubiquiti

無線網絡企業。 FreeRadius + FreeIPA + Ubiquiti

無線網絡企業。 FreeRadius + FreeIPA + Ubiquiti

我們保存所有內容,應用,關閉。 您可以連接到新網絡。

Linux

我在 Ubuntu 18.04、18.10、Fedora 29、30 上進行了測試。

首先,讓我們下載我們的證書。 我沒有發現Linux中是否可以使用系統證書以及是否有這樣的商店。

我們將通過域連接。 因此,我們需要購買證書的認證機構頒發的證書。

所有連接均在一個窗口中完成。 選擇我們的網絡:

無線網絡企業。 FreeRadius + FreeIPA + Ubiquiti

匿名客戶
域 - 為其頒發證書的域

Android

非三星

從版本 7 開始,連接 WiFi 時,您可以通過僅指定域來使用系統證書:

無線網絡企業。 FreeRadius + FreeIPA + Ubiquiti

域 - 為其頒發證書的域
匿名客戶

Samsung

正如我上面所寫,三星設備在連接 WiFi 時不知道如何使用系統證書,並且它們不具備通過域連接的能力。 因此,您必須手動添加證書頒發機構的根證書(ca.pem,我們在Radius服務器上獲取)。 這裡將使用自簽名。

將證書下載到您的設備並安裝。

證書安裝無線網絡企業。 FreeRadius + FreeIPA + Ubiquiti

無線網絡企業。 FreeRadius + FreeIPA + Ubiquiti

無線網絡企業。 FreeRadius + FreeIPA + Ubiquiti

無線網絡企業。 FreeRadius + FreeIPA + Ubiquiti

在這種情況下,您需要設置屏幕解鎖圖案、PIN 碼或密碼(如果尚未設置):

無線網絡企業。 FreeRadius + FreeIPA + Ubiquiti

無線網絡企業。 FreeRadius + FreeIPA + Ubiquiti

我展示了安裝證書的複雜選項。 在大多數設備上,只需單擊下載的證書即可。

安裝證書後,您可以繼續連接:

無線網絡企業。 FreeRadius + FreeIPA + Ubiquiti

證書 - 表明已安裝的證書
匿名用戶-來賓

MacOS

開箱即用的 Apple 設備只能連接到 EAP-TLS,但您仍然需要向它們提供證書。 要指定不同的連接方法,您需要使用 Apple Configurator 2。因此,您必須首先將其下載到您的 Mac,創建新的配置文件並添加所有必要的 WiFi 設置。

Apple配置器無線網絡企業。 FreeRadius + FreeIPA + Ubiquiti

無線網絡企業。 FreeRadius + FreeIPA + Ubiquiti

在此輸入您的網絡名稱
安全類型 - WPA2 企業版
接受的 EAP 類型 - TTLS
用戶名和密碼 - 留空
內部驗證-PAP
外部身份——客戶

信任選項卡。 這裡我們指定我們的域

全部。 配置文件可以保存、簽名並分發到設備

配置文件準備好後,需要將其下載到poppy並安裝。 在安裝過程中,您需要指定用戶的usernmae_ldap和password_ldap:

無線網絡企業。 FreeRadius + FreeIPA + Ubiquiti

無線網絡企業。 FreeRadius + FreeIPA + Ubiquiti

無線網絡企業。 FreeRadius + FreeIPA + Ubiquiti

iOS

該過程與 macOS 類似。 您需要使用一個配置文件(您可以使用與 macOS 相同的配置文件。如何在 Apple Configurator 中創建配置文件,請參閱上文)。

下載配置文件,安裝,輸入憑據,連接:

無線網絡企業。 FreeRadius + FreeIPA + Ubiquiti

無線網絡企業。 FreeRadius + FreeIPA + Ubiquiti

無線網絡企業。 FreeRadius + FreeIPA + Ubiquiti

無線網絡企業。 FreeRadius + FreeIPA + Ubiquiti

無線網絡企業。 FreeRadius + FreeIPA + Ubiquiti

無線網絡企業。 FreeRadius + FreeIPA + Ubiquiti

就這樣。 我們設置了一個 Radius 服務器,將其與 FreeIPA 同步,並告訴 Ubiquiti AP 使用 WPA2-EAP。

可能的問題

在: 如何將個人資料/證書轉移給員工?

關於: 我將所有證書/配置文件存儲在具有 Web 訪問權限的 ftp 上。 提高了訪客網絡的速度限制,並且只能訪問 Internet(FTP 除外)。
身份驗證持續 2 天,之後身份驗證將被重置,客戶端將無法連接互聯網。 那。 當員工想要連接WiFi時,他首先連接到訪客網絡,訪問FTP,下載他需要的證書或配置文件,安裝它,然後可以連接到公司網絡。

在: 為什麼不將架構與 MSCHAPv2 一起使用? 她更安全了!

關於: 首先,該方案在NPS(Windows網絡策略系統)上運行良好,在我們的實現中,需要額外配置LDAP(FreeIpa)並在服務器上存儲密碼哈希值。 添加。 不建議進行設置,因為這可能會導致超聲系統的同步出現各種問題。 其次,散列是MD4,所以它並沒有增加太多的安全性

在: 是否可以使用 MAC 地址對設備進行授權?

關於: 不,這不安全,攻擊者可以更改 MAC 地址,更重要的是,許多設備不支持通過 MAC 地址進行授權

在: 這些證書一般有什麼用途? 沒有他們你可以加入嗎?

關於: 證書用於對服務器進行授權。 那些。 連接時,設備會檢查其是否是可信任的服務器。 如果是,則繼續進行身份驗證;如果不是,則關閉連接。 您可以在沒有證書的情況下進行連接,但是如果攻擊者或鄰居在家裡設置了一個Radius 服務器和一個與我們同名的接入點,他可以輕鬆攔截用戶的憑據(不要忘記它們是以明文形式傳輸的) 。 當使用證書時,敵人只會在他的日誌中看到我們的虛構用戶名 - 訪客或客戶端以及類型錯誤 - 未知的 CA 證書

有關 macOS 的更多信息通常在 macOS 上,重新安裝系統是通過互聯網完成的。 在恢復模式下,Mac 必須連接到 WiFi,我們的公司 WiFi 和訪客網絡都無法在此處工作。 我個人提出了另一個網絡,通常的WPA2-PSK,隱藏的,僅用於技術操作。 或者你也可以提前製作一個隨系統啟動的U盤。 但如果罌粟是 2015 年之後的,您仍然需要為該閃存驅動器找到適配器)

來源: www.habr.com

添加評論