WiFi Enterprise. FreeRadius + FreeIPA + Ubiquiti

WiFi Enterprise. FreeRadius + FreeIPA + Ubiquiti

Beberapa contoh penganjuran WiFi korporat telah pun diterangkan. Di sini saya akan menerangkan cara saya melaksanakan penyelesaian yang sama dan masalah yang saya terpaksa hadapi semasa menyambung pada peranti yang berbeza. Kami akan menggunakan LDAP sedia ada dengan pengguna berdaftar, menaikkan FreeRadius dan mengkonfigurasi WPA2-Enterprise pada pengawal Ubnt. Semuanya nampak mudah. Jom tengok…

Sedikit tentang kaedah EAP

Sebelum meneruskan tugas, kami perlu memutuskan kaedah pengesahan yang akan kami gunakan dalam penyelesaian kami.

Daripada Wikipedia:

EAP ialah rangka kerja pengesahan yang sering digunakan dalam rangkaian wayarles dan sambungan titik ke titik. Format pertama kali diterangkan dalam RFC 3748 dan dikemas kini dalam RFC 5247.
EAP digunakan untuk memilih kaedah pengesahan, lulus kekunci dan memproses kunci tersebut dengan pemalam yang dipanggil kaedah EAP. Terdapat banyak kaedah EAP, kedua-duanya ditakrifkan dengan EAP sendiri dan dikeluarkan oleh vendor individu. EAP tidak mentakrifkan lapisan pautan, ia hanya mentakrifkan format mesej. Setiap protokol yang menggunakan EAP mempunyai protokol enkapsulasi mesej EAP sendiri.

Kaedah itu sendiri:

  • LEAP ialah protokol proprietari yang dibangunkan oleh CISCO. Kerentanan ditemui. Pada masa ini tidak disyorkan untuk digunakan
  • EAP-TLS disokong dengan baik di kalangan vendor wayarles. Ia adalah protokol selamat kerana ia adalah pengganti kepada piawaian SSL. Menyediakan pelanggan agak rumit. Anda memerlukan sijil pelanggan sebagai tambahan kepada kata laluan. Disokong pada banyak sistem
  • EAP-TTLS - disokong secara meluas pada banyak sistem, menawarkan keselamatan yang baik dengan menggunakan sijil PKI hanya pada pelayan pengesahan
  • EAP-MD5 ialah satu lagi standard terbuka. Menawarkan keselamatan yang minimum. Terdedah, tidak menyokong pengesahan bersama dan penjanaan kunci
  • EAP-IKEv2 - berdasarkan Internet Key Exchange Protocol versi 2. Menyediakan pengesahan bersama dan penubuhan kunci sesi antara pelanggan dan pelayan
  • PEAP ialah penyelesaian bersama antara CISCO, Microsoft dan RSA Security sebagai standard terbuka. Tersedia secara meluas dalam produk, memberikan keselamatan yang sangat baik. Sama seperti EAP-TTLS, hanya memerlukan sijil bahagian pelayan
  • PEAPv0/EAP-MSCHAPv2 - selepas EAP-TLS, ini ialah piawaian kedua yang digunakan secara meluas di dunia. Hubungan pelanggan-pelayan terpakai dalam Microsoft, Cisco, Apple, Linux
  • PEAPv1/EAP-GTC - Dicipta oleh Cisco sebagai alternatif kepada PEAPv0/EAP-MSCHAPv2. Tidak melindungi data pengesahan dalam apa jua cara. Tidak disokong pada OS Windows
  • EAP-FAST ialah kaedah yang dibangunkan oleh Cisco untuk membetulkan kelemahan LEAP. Menggunakan Kredensial Akses Terlindung (PAC). Belum selesai sepenuhnya

Daripada semua kepelbagaian ini, pilihannya masih tidak bagus. Kaedah pengesahan diperlukan: keselamatan yang baik, sokongan pada semua peranti (Windows 10, macOS, Linux, Android, iOS) dan, sebenarnya, lebih mudah lebih baik. Oleh itu, pilihan jatuh pada EAP-TTLS bersamaan dengan protokol PAP.
Persoalan mungkin timbul - Mengapa menggunakan PAP? Lagipun, ia menghantar kata laluan dalam teks yang jelas?

Ya betul. Komunikasi antara FreeRadius dan FreeIPA akan berlaku dengan cara ini. Dalam mod nyahpepijat, anda boleh menjejak cara nama pengguna dan kata laluan dihantar. Ya, dan biarkan mereka pergi, hanya anda yang mempunyai akses kepada pelayan FreeRadius.

Anda boleh membaca lebih lanjut tentang cara EAP-TTLS berfungsi di sini

FreeRADIUS

Kami akan menaik taraf FreeRadius kepada CentOS 7.6. Tidak ada yang rumit di sini, kami memasangnya dengan cara biasa.

yum install freeradius freeradius-utils freeradius-ldap -y

Versi 3.0.13 dipasang daripada pakej. Yang terakhir boleh diambil https://freeradius.org/

Selepas itu, FreeRadius sudah pun berfungsi. Anda boleh menyahkomen baris dalam /etc/raddb/users

steve   Cleartext-Password := "testing"

Lancarkan ke pelayan dalam mod nyahpepijat

freeradius -X

Dan buat sambungan ujian dari localhost

radtest steve testing 127.0.0.1 1812 testing123

Dapat jawapan Menerima Access-Accept Id 115 daripada 127.0.0.1:1812 hingga 127.0.0.1:56081 panjang 20, ini bermakna semuanya OK. Teruskan.

Menyambung modul ldap.

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

Dan kami akan mengubahnya dengan segera. Kami memerlukan FreeRadius untuk dapat mengakses FreeIPA

mods-enabled/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}})"
}
...

Mulakan semula pelayan jejari dan semak penyegerakan pengguna LDAP:

radtest user_ldap password_ldap localhost 1812 testing123

Mengedit eap in mods-enabled/eap
Di sini kita akan menambah dua contoh eap. Mereka akan berbeza hanya dalam sijil dan kunci. Saya akan menerangkan mengapa ini benar di bawah.

mods-enabled/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"
           }
}

Suntingan lanjut didayakan tapak/lalai. Bahagian yang membenarkan dan mengesahkan adalah menarik.

didayakan tapak/lalai

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
}

Dalam bahagian kebenaran, kami mengalih keluar semua modul yang tidak kami perlukan. Kami tinggalkan hanya ldap. Tambah pengesahan pelanggan mengikut nama pengguna. Itulah sebabnya kami menambah dua kejadian eap di atas.

Berbilang EAPHakikatnya ialah apabila menyambungkan beberapa peranti, kami akan menggunakan sijil sistem dan menentukan domain. Kami mempunyai sijil dan kunci daripada pihak berkuasa sijil yang dipercayai. Secara peribadi, pada pendapat saya, prosedur sambungan sedemikian lebih mudah daripada membuang sijil yang ditandatangani sendiri pada setiap peranti. Tetapi walaupun tanpa sijil yang ditandatangani sendiri, ia masih tidak berjaya. Peranti Samsung dan Android =< 6 versi tidak boleh menggunakan sijil sistem. Oleh itu, kami mencipta contoh eap-tetamu yang berasingan untuk mereka dengan sijil yang ditandatangani sendiri. Untuk semua peranti lain kami akan menggunakan eap-client dengan sijil yang dipercayai. Nama Pengguna ditentukan oleh medan Tanpa Nama semasa menyambungkan peranti. Hanya 3 nilai dibenarkan: Tetamu, Pelanggan dan medan kosong. Selebihnya semua dibuang. Ini boleh dikonfigurasikan dalam dasar. Saya akan berikan contoh sedikit kemudian.

Mari edit bahagian yang membenarkan dan mengesahkan didayakan tapak/terowong dalam

didayakan tapak/terowong dalam

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
}

Seterusnya, anda perlu menentukan dalam dasar nama yang boleh digunakan untuk log masuk tanpa nama. Mengedit polisi.d/penapis.

Anda perlu mencari baris yang serupa dengan ini:

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

Dan di bawah dalam elsif tambah nilai yang dikehendaki:

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

Sekarang kita perlu beralih ke direktori perakuan. Di sini anda perlu meletakkan kunci dan sijil daripada pihak berkuasa sijil yang dipercayai, yang telah kami miliki dan perlu menjana sijil yang ditandatangani sendiri untuk eap-guest.

Tukar parameter dalam fail 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"

Kami menulis nilai yang sama dalam fail pelayan.cnf. Kita tukar sahaja
nama yang selalu digunakan:

pelayan.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"

Kami mencipta:

make

sedia. Menerima pelayan.crt ΠΈ pelayan.kunci Kami telah pun mendaftar di atas dalam eap-guest.

Dan akhirnya, mari tambah titik akses kami pada fail pelanggan.conf. Saya mempunyai 7 daripadanya. Untuk tidak menambah setiap titik secara berasingan, kami hanya akan menulis rangkaian di mana ia berada (titik akses saya berada dalam VLAN yang berasingan).

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

Pengawal Ubiquiti

Kami menaikkan rangkaian berasingan pada pengawal. Biarkan ia menjadi 192.168.2.0/24
Pergi ke tetapan -> profil. Kami mencipta yang baharu:

WiFi Enterprise. FreeRadius + FreeIPA + Ubiquiti

Kami menulis alamat dan port pelayan jejari dan kata laluan yang ditulis dalam fail pelanggan.conf:

WiFi Enterprise. FreeRadius + FreeIPA + Ubiquiti

Buat nama rangkaian wayarles baharu. Pilih WPA-EAP (Enterprise) sebagai kaedah pengesahan dan tentukan profil jejari yang dibuat:

WiFi Enterprise. FreeRadius + FreeIPA + Ubiquiti

Kami menyimpan segala-galanya, memohon dan teruskan.

Menyediakan pelanggan

Mari kita mulakan dengan yang paling sukar!

Windows 10

Kesukaran datang kepada fakta bahawa Windows belum tahu cara menyambung ke WiFi korporat melalui domain. Oleh itu, kami perlu memuat naik sijil kami secara manual ke kedai sijil yang dipercayai. Di sini anda boleh menggunakan kedua-dua ditandatangani sendiri dan daripada pihak berkuasa pensijilan. Saya akan menggunakan yang kedua.

Seterusnya, anda perlu membuat sambungan baharu. Untuk melakukan ini, pergi ke tetapan rangkaian dan Internet -> Rangkaian dan Pusat Perkongsian -> Buat dan konfigurasikan sambungan atau rangkaian baharu:

WiFi Enterprise. FreeRadius + FreeIPA + Ubiquiti

WiFi Enterprise. FreeRadius + FreeIPA + Ubiquiti

WiFi Enterprise. FreeRadius + FreeIPA + Ubiquiti

Masukkan nama rangkaian secara manual dan tukar jenis keselamatan. Kemudian klik pada tukar tetapan sambungan dan dalam tab Keselamatan, pilih pengesahan rangkaian - EAP-TTLS.

WiFi Enterprise. FreeRadius + FreeIPA + Ubiquiti

WiFi Enterprise. FreeRadius + FreeIPA + Ubiquiti

WiFi Enterprise. FreeRadius + FreeIPA + Ubiquiti

Kami pergi ke parameter, menetapkan kerahsiaan pengesahan - pelanggan. Sebagai pihak berkuasa pensijilan yang dipercayai, pilih sijil yang kami tambahkan, tandai kotak "Jangan keluarkan jemputan kepada pengguna jika pelayan tidak boleh dibenarkan" dan pilih kaedah pengesahan - kata laluan tidak disulitkan (PAP).

WiFi Enterprise. FreeRadius + FreeIPA + Ubiquiti

Seterusnya, pergi ke tetapan lanjutan, letakkan tanda pada "Tentukan mod pengesahan." Pilih "Pengesahan Pengguna" dan klik pada simpan kelayakan. Di sini anda perlu memasukkan username_ldap dan password_ldap

WiFi Enterprise. FreeRadius + FreeIPA + Ubiquiti

WiFi Enterprise. FreeRadius + FreeIPA + Ubiquiti

WiFi Enterprise. FreeRadius + FreeIPA + Ubiquiti

Kami menyimpan segala-galanya, memohon, menutup. Anda boleh menyambung ke rangkaian baharu.

Linux

Saya menguji pada Ubuntu 18.04, 18.10, Fedora 29, 30.

Mula-mula, muat turun sijil untuk diri sendiri. Saya tidak menemui di Linux sama ada ia boleh menggunakan sijil sistem atau sama ada terdapat kedai sedemikian sama sekali.

Kami akan menyambung melalui domain. Oleh itu, kami memerlukan sijil daripada pihak berkuasa pensijilan yang mana sijil kami dibeli.

Semua sambungan dibuat dalam satu tetingkap. Memilih rangkaian kami:

WiFi Enterprise. FreeRadius + FreeIPA + Ubiquiti

anonymous-client
domain - domain yang sijil dikeluarkan

Android

bukan Samsung

Dari versi 7, apabila menyambungkan WiFi, anda boleh menggunakan sijil sistem dengan menyatakan domain sahaja:

WiFi Enterprise. FreeRadius + FreeIPA + Ubiquiti

domain - domain yang sijil dikeluarkan
anonymous-client

Samsung

Seperti yang saya tulis di atas, peranti Samsung tidak tahu cara menggunakan sijil sistem apabila menyambung ke WiFi, dan mereka tidak mempunyai keupayaan untuk menyambung melalui domain. Oleh itu, anda mesti menambah sijil akar pihak berkuasa pensijilan secara manual (ca.pem, kami mengambilnya pada pelayan Radius). Di sinilah ditandatangani sendiri akan digunakan.

Muat turun sijil ke peranti anda dan pasangkannya.

Pemasangan SijilWiFi Enterprise. FreeRadius + FreeIPA + Ubiquiti

WiFi Enterprise. FreeRadius + FreeIPA + Ubiquiti

WiFi Enterprise. FreeRadius + FreeIPA + Ubiquiti

WiFi Enterprise. FreeRadius + FreeIPA + Ubiquiti

Dalam kes ini, anda perlu menetapkan corak buka kunci skrin, kod PIN atau kata laluan, jika ia belum ditetapkan:

WiFi Enterprise. FreeRadius + FreeIPA + Ubiquiti

WiFi Enterprise. FreeRadius + FreeIPA + Ubiquiti

Saya menunjukkan versi rumit untuk memasang sijil. Pada kebanyakan peranti, cuma klik pada sijil yang dimuat turun.

Apabila sijil dipasang, anda boleh meneruskan ke sambungan:

WiFi Enterprise. FreeRadius + FreeIPA + Ubiquiti

sijil - tunjukkan yang anda pasang
pengguna tanpa nama - tetamu

MacOS

Peranti Apple di luar kotak hanya boleh menyambung ke EAP-TLS, tetapi anda masih perlu melemparkan sijil kepada mereka. Untuk menentukan kaedah sambungan yang berbeza, anda perlu menggunakan Apple Configurator 2. Sehubungan itu, anda mesti memuat turunnya ke Mac anda, mencipta profil baharu dan menambah semua tetapan WiFi yang diperlukan.

Configurator AppleWiFi Enterprise. FreeRadius + FreeIPA + Ubiquiti

WiFi Enterprise. FreeRadius + FreeIPA + Ubiquiti

Masukkan nama rangkaian anda di sini
Jenis Keselamatan - WPA2 Enterprise
Jenis EAP yang Diterima - TTLS
Nama Pengguna dan Kata Laluan - biarkan kosong
Pengesahan Dalaman - PAP
Identiti Luar-klien

Tab Amanah. Di sini kami menentukan domain kami

Semua. Profil boleh disimpan, ditandatangani dan diedarkan kepada peranti

Selepas profil sedia, anda perlu memuat turunnya ke Mac anda dan memasangnya. Semasa proses pemasangan, anda perlu menentukan usernmae_ldap dan password_ldap pengguna:

WiFi Enterprise. FreeRadius + FreeIPA + Ubiquiti

WiFi Enterprise. FreeRadius + FreeIPA + Ubiquiti

WiFi Enterprise. FreeRadius + FreeIPA + Ubiquiti

iOS

Prosesnya serupa dengan macOS. Anda perlu menggunakan profil (anda boleh menggunakan yang sama seperti untuk macOS. Cara membuat profil dalam Apple Configurator, lihat di atas).

Muat turun profil, pasang, masukkan bukti kelayakan, sambungkan:

WiFi Enterprise. FreeRadius + FreeIPA + Ubiquiti

WiFi Enterprise. FreeRadius + FreeIPA + Ubiquiti

WiFi Enterprise. FreeRadius + FreeIPA + Ubiquiti

WiFi Enterprise. FreeRadius + FreeIPA + Ubiquiti

WiFi Enterprise. FreeRadius + FreeIPA + Ubiquiti

WiFi Enterprise. FreeRadius + FreeIPA + Ubiquiti

Itu sahaja. Kami menyediakan pelayan Radius, menyegerakkannya dengan FreeIPA, dan memberitahu pusat akses Ubiquiti untuk menggunakan WPA2-EAP.

Soalan yang mungkin

V: bagaimana untuk memindahkan profil/sijil kepada pekerja?

TENTANG: Saya menyimpan semua sijil/profil di ftp dengan akses web. Meningkatkan rangkaian tetamu dengan had laju dan akses hanya ke Internet, kecuali ftp.
Pengesahan berlangsung selama 2 hari, selepas itu ia ditetapkan semula dan pelanggan dibiarkan tanpa Internet. Itu. apabila pekerja ingin menyambung ke WiFi, dia mula-mula menyambung ke rangkaian tetamu, mengakses FTP, memuat turun sijil atau profil yang dia perlukan, memasangnya, dan kemudian boleh menyambung ke rangkaian korporat.

V: mengapa tidak menggunakan skema dengan MSCHAPv2? Dia lebih selamat!

TENTANG: Pertama, skim sedemikian berfungsi dengan baik pada NPS (Sistem Dasar Rangkaian Windows), dalam pelaksanaan kami adalah perlu untuk mengkonfigurasi LDAP (FreeIpa) tambahan dan menyimpan cincang kata laluan pada pelayan. Tambah. adalah tidak digalakkan untuk membuat tetapan, kerana. ini boleh membawa kepada pelbagai masalah untuk menyegerakkan ultrasound. Kedua, cincangan ialah MD4, jadi ia tidak menambahkan banyak keselamatan.

V: adakah mungkin untuk membenarkan peranti dengan alamat mac?

TENTANG: TIDAK, ini tidak selamat, penyerang boleh menukar alamat MAC, dan lebih-lebih lagi kebenaran oleh alamat MAC tidak disokong pada banyak peranti

V: untuk apa secara amnya semua sijil ini digunakan? bolehkah anda menyertai tanpa mereka?

TENTANG: sijil digunakan untuk membenarkan pelayan. Itu. apabila menyambung, peranti menyemak sama ada ia adalah pelayan yang boleh dipercayai atau tidak. Jika ya, maka pengesahan diteruskan, jika tidak, sambungan ditutup. Anda boleh menyambung tanpa sijil, tetapi jika penyerang atau jiran menyediakan pelayan jejari dan titik akses dengan nama yang sama seperti nama kami di rumah, dia boleh memintas kelayakan pengguna dengan mudah (jangan lupa bahawa ia dihantar dalam teks yang jelas). Dan apabila sijil digunakan, musuh akan melihat dalam lognya hanya Nama Pengguna rekaan kami - tetamu atau pelanggan dan ralat jenis - Sijil CA Tidak Diketahui

sedikit lagi tentang macOSBiasanya, pada macOS, pemasangan semula sistem dilakukan melalui Internet. Dalam mod pemulihan, Mac mesti disambungkan ke WiFi dan WiFi korporat kami mahupun rangkaian tetamu tidak akan berfungsi di sini. Secara peribadi, saya membangkitkan rangkaian lain, WPA2-PSK biasa, tersembunyi, hanya untuk operasi teknikal. Atau anda juga boleh membuat pemacu kilat USB boleh boot dengan sistem terlebih dahulu. Tetapi jika popi adalah selepas 2015, anda masih perlu mencari penyesuai untuk pemacu kilat ini)

Sumber: www.habr.com

Tambah komen