linux 802.1x บนเครือข่ายแบบมีสายของ windows


11

ฉันต้องการใช้เวิร์กสเตชัน linux ของฉันในเครือข่าย บริษัท ของเรา แต่ฉันพบปัญหาเล็กน้อยโดยเฉพาะ 802.1xi ที่เชื่อ

ฉันรูทเครื่องของฉันและผู้ดูแลระบบโดเมน windows ดังนั้นฉันควรจะสามารถเข้าถึงสิ่งที่ฉันต้องการเพื่อให้ทำงานได้ ปัจจุบันเครื่อง linux ของฉันมีการเชื่อมต่อที่ จำกัด ซึ่งทำให้ฉันเชื่อว่ามันถูกใส่เข้าไปใน vlan เริ่มต้นสำหรับลูกค้าที่ไม่ใช่ 802.1x

ฉันเดาว่าคำถามโดยรวมของฉันคือฉันจะทำให้เครื่อง linux ของฉันใช้ 802.1x บนเครือข่าย windows แบบมีสายได้อย่างไร เครือข่ายเป็นโดเมน windows ทั่วไปและใช้บัญชีเครื่องรวมถึงบัญชีผู้ใช้

นี่คือสิ่งที่ฉันรู้และได้ลองมาแล้ว:

ฉันเชื่อว่าฉันจะต้องได้รับใบรับรองเครื่องไคลเอนต์ที่ถูกต้องสำหรับเครื่องใบรับรอง CA สำหรับโดเมนและคีย์ส่วนตัวสำหรับลูกค้า

แนวคิด 1 หยิบกุญแจที่ถูกต้องออกจากเครื่อง windows / เครื่อง ca โดเมนฉันใช้ windows VM บนเครื่อง linux และเข้าร่วมกับโดเมนโดยคิดว่าสิ่งนี้จะสร้างใบรับรองลูกค้าที่ถูกต้องฉันสามารถจับเครื่อง linux ได้ - ไปยังจุดสิ้นสุดฉันจากนั้นส่งออกใบรับรองไคลเอ็นต์และใบรับรอง ca จากเซิร์ฟเวอร์ windows ca จากนั้นแปลงเป็นรูปแบบ PEM พร้อมสำหรับผู้จัดการเครือข่ายบน linux (สมมติว่าต้องการ PEM ไม่ใช่ DER) - จากนั้นฉันพยายามส่งออกคีย์ส่วนตัวบน Windows VM เองโดยใช้ certmgr แต่ถูกทำเครื่องหมายว่าไม่สามารถส่งออกได้ :-(

แนวคิด 2 คือ powerbroker ... - ฉันใช้ powerbroker open (อย่างเป็นทางการเช่นเดียวกัน) เพื่อเข้าร่วมเครื่อง linux กับโดเมนตอนนี้ getent passwd จะแสดงผู้ใช้โดเมนทั้งหมด - ความคิดของฉันคือสิ่งนี้จะทำให้ใบรับรองลูกค้าและคีย์ส่วนตัวในระบบบางแห่ง (/ etc / ssl / certs?) แต่ฉันไม่สามารถหาอะไร

แนวคิด 3 ถามคนที่รู้ว่ากำลังทำอะไรอยู่

ฉันควรชี้ให้เห็นว่าเดิมทีเครื่อง linux นี้มี windows อยู่ (ซึ่งฉันติดตั้งบน linux p2v) ดังนั้นฉันจึงรู้ว่าสวิตช์เครือข่ายติดตั้งถูกต้องและ MAC ฯลฯ นั้นเป็นที่ยอมรับในเครือข่าย ฉันค่อนข้างแน่ใจว่ามันเป็นเพียงปัญหา 802.1x

แก้ไข: ลืมพูดถึง fedora 21 xfce spin, 64bit อย่างสิ้นเชิง


คุณกำลังใช้ผู้ขออะไร Xsupplicant, wpa_supplicant หรือกลิ้งเอง?
Brian

fedora 21 ของมันออกมาดูเหมือนว่าจะติดตั้งเฉพาะ wpa_supplicant ฉันใช้ตัวจัดการเครือข่ายเพื่อลองและเชื่อมต่อ (กับ xfce desktop)
Sirex


ใช่แล้วผลรวมนั้นมากหรือน้อยนั้นฉันได้ไปแล้ว ดูที่เครื่อง windows พวกเขาดูเหมือนจะใช้ PEAP กับ MSCHAP v2 ดังนั้นนั่นคือสิ่งที่ฉันได้ลองกับเครื่อง linux ส่วนใหญ่ฉันคิดว่าฉันกำลังดิ้นรนที่จะทราบว่า / วิธีการรับใบรับรองที่ถูกต้องและชื่อผู้ใช้ของฉันควรมีลักษณะอย่างไร ('bob' 'bob@domain.com' 'domain \ bob') ฉันลองหลายวิธีแล้ว ทำให้มันใช้งานได้ แต่ยังไม่ประสบความสำเร็จมันแค่ขอรหัสผ่านของฉันอีกครั้ง
Sirex

ฉันลองส่งออกใบรับรอง CA (ใน 'ความคิดที่ 1') แต่ฉันยังได้รับรหัสผ่านใหม่และฉันไม่แน่ใจว่าฉันจะไปเส้นทางที่ถูกต้องด้วยรูปแบบ PEM หรือไม่ นอกจากนี้ยังมีช่องทำเครื่องหมาย 'ไม่ต้องใช้ใบรับรอง CA' ด้วย แต่ฉันไม่รู้ว่าโฆษณาต้องการเช่นนั้นหรือไม่ (ฉันสมมติว่าเป็นเพียงการตัดสินใจของลูกค้าที่จะทำการตรวจสอบ CA แต่อย่างใด)
Sirex

คำตอบ:


10

ข่าวร้ายทุกคน! มันดูเหมือนว่ามีข้อผิดพลาดไม่เจาะจงใน Fedora 21: การเชื่อมต่อแบบมีสาย 802.1x PEAP / MSCHAPv2 ไม่ทำงาน ดังนั้นในขณะที่คำตอบด้านล่างอาจใช้งานได้กับผู้อื่น distros, ผู้ใช้ Fedora 21 ไม่โชคดี


ไม่เคยลองด้วยตัวเอง แต่โพสต์นี้ดูเหมือนจะมีคำแนะนำอย่างละเอียดสำหรับการตั้งค่า 802.1x ระหว่างไคลเอนต์ Linux และโดเมน Windows หมายเหตุส่วนคำขอใบรับรอง: ควรแก้ปัญหาของใบรับรองที่ไม่สามารถส่งออกได้ เวอร์ชันซอฟต์แวร์ค่อนข้างเก่า ( Ubuntuคือ 8.04 และPower Broker ของ Beyond Trustยังคงเหมือนเดิม ) แต่แนวคิดพื้นฐานนั้นดูแข็งแกร่งสำหรับฉัน

ฉันจัดรูปแบบโพสต์ข้างต้นเพื่อให้อ่านง่ายขึ้น การอ้างอิงทำให้กล่องรหัสเป็นสีเทาบนสีเทาดังนั้นฉันจึงนำออกมาขอโทษ:


คำเตือน:คู่มือนี้เขียนจากมุมมองของการแจกจ่าย Linux Ubuntu 8.04 เพื่อให้สามารถใช้งานกับลีนุกซ์หรือลีนุกซ์อื่น ๆ , จำเป็นต้องทำการเปลี่ยนแปลงบางอย่าง

สองสิ่งสำคัญที่จำเป็นสำหรับเครื่อง Linux ของคุณในการตรวจสอบความถูกต้องมากกว่า 802.1x คือใบรับรองไคลเอ็นต์และบัญชีในโดเมน Windows ในระหว่างกระบวนการตรวจสอบสิทธิ์ไคลเอนต์ Linux จะแสดงใบรับรองคอมพิวเตอร์ของสวิตช์ซึ่งจะแสดงให้กับเซิร์ฟเวอร์ RADIUS ที่ตรวจสอบใบรับรองและตรวจสอบบัญชีคอมพิวเตอร์ที่ใบรับรองถูกกำหนดให้ใน Active Directory หากใบรับรองและบัญชีคอมพิวเตอร์นั้นถูกต้องเซิร์ฟเวอร์ RADIUS จะอนุมัติคำขอการตรวจสอบสิทธิ์ที่ส่งกลับไปที่สวิตช์ซึ่งจะตรวจสอบสิทธิ์พอร์ตที่เชื่อมต่อกับกล่อง Linux

สิ่งแรกที่ต้องทำคือการเข้าร่วมคอมพิวเตอร์ Linux ของคุณกับโดเมน Windows เนื่องจาก Linux ไม่สามารถเข้าร่วมโดเมน Windows ได้เราจึงต้องดาวน์โหลดซอฟต์แวร์ที่จำเป็นเพื่อให้เราสามารถทำได้ ในทำนองเดียวกันซอฟต์แวร์จะทำให้เราสามารถทำสิ่งนี้ได้ หากต้องการติดตั้งบน Ubuntu มันง่ายมากเพียงทำตามขั้นตอนเหล่านี้:

  1. sudo apt-get update
  2. sudo apt-get install เช่นเดียวกัน
  3. sudo domainjoin-CLI เข้าร่วมคุณอาจจะใช้รูปแบบenter the FQDN of your domain here enter your admin account here user@domain.comคุณควรจะสามารถใช้เวอร์ชัน GUI ได้โดยไปที่System → Administration → Likewise.
  4. sudo update-rc.d เป็นค่าเริ่มต้นเช่นเดียวกัน
  5. sudo /etc/init.d/likewise-open start

ถ้าคุณไม่ได้ใช้ Ubuntu คุณสามารถดาวน์โหลดซอฟแวร์ที่นี่http://www.likewisesoftware.com/products/likewise_open ตอนนี้คุณสามารถออกจากระบบและลงชื่อกลับเข้าใช้บัญชีโดเมนของคุณ ฉันเชื่อว่าทั้งฟอร์แมตuser@domain.comและโดเมน \ user ทำงานได้ทั้งคู่ ฉันจะทดสอบในภายหลัง

มีสามไฟล์ที่อยู่บนเครื่อง Linux ที่ต้องกำหนดค่าอย่างถูกต้องเพื่อให้การรับรองความถูกต้องเกิดขึ้น สามไฟล์เหล่านี้คือ:

  1. /etc/wpa_supplicant.conf
  2. / etc / เครือข่าย / อินเตอร์เฟซ
  3. /etc/openssl/openssl.cnf

ก่อนอื่นเราจะกำหนดค่าซอฟต์แวร์เพื่อให้เครื่อง Linux ของเราใช้ใบรับรองไคลเอ็นต์เพื่อรับรองความถูกต้องกับเครือข่ายที่เปิดใช้งาน 802.1x; wpa_supplicantจะถูกใช้สำหรับสิ่งนี้

ทำตามขั้นตอนเหล่านี้เพื่อกำหนดค่าไฟล์ wpa_supplicant.conf ของคุณ:

  1. sudo gedit /etc/wpa_supplicant.conf
  2. วางสิ่งต่อไปนี้ลงในไฟล์และบันทึก:

    # Where is the control interface located? This is the default path:
    ctrl_interface=/var/run/wpa_supplicant
    
    # Who can use the WPA frontend? Replace "0" with a group name if you
    # want other users besides root to control it.
    # There should be no need to chance this value for a basic configuration:
    ctrl_interface_group=0
    
    # IEEE 802.1X works with EAPOL version 2, but the version is defaults 
    # to 1 because of compatibility problems with a number of wireless
    # access points. So we explicitly set it to version 2:
    eapol_version=1
    
    # When configuring WPA-Supplicant for use on a wired network, we don't need to
    # scan for wireless access points. See the wpa-supplicant documentation if you
    # are authenticating through 802.1x on a wireless network:
    ap_scan=0
    
    network={ 
        ssid="<enter any name here, it doesn't matter>" 
        key_mgmt=IEEE8021X 
        eap=TLS 
        identity="<FQDN>/computers/<Linux computer name>" 
        client_cert="/etc/ssl/certs/<your authentication certificate name>.pem" 
        private_key="/etc/ssl/private/<your private key name>.pem" 
    }
    

ตอนนี้เราต้องแก้ไขไฟล์อินเตอร์เฟสของคุณ ทำตามขั้นตอนเหล่านี้เพื่อกำหนดค่าไฟล์อินเตอร์เฟสของคุณ:

  1. sudo gedit / etc / network / interfaces
  2. วางสิ่งต่อไปนี้ลงในไฟล์ภายใต้eth0อินเตอร์เฟสและบันทึก:

    # Configure the system to authenticate with WPA-Supplicant on interface eth0
    wpa-iface eth0
    
    # In this case we have a wired network:
    wpa-driver wired
    
    # Tell the system we want to use WPA-Supplicant with our configuration file:
    wpa-conf /etc/wpa_supplicant.conf
    

ขั้นตอนต่อไปคือการสร้างและติดตั้งใบรับรองของคุณ เราจะต้องสร้างใบรับรองที่ลงนามเองแล้วสร้างคำขอใบรับรองตามใบรับรองที่ลงนามด้วยตนเองที่เราสร้างขึ้นจากนั้นติดตั้งใบรับรอง

หมายเหตุ:เมื่อสร้างใบรับรองของคุณทุกครั้งที่ขอชื่อคุณต้องระบุชื่อคอมพิวเตอร์ที่จะตรวจสอบสิทธิ์ เพื่อความปลอดภัยฉันขอแนะนำให้ตั้งชื่อให้ตรงกับที่กำหนดไว้ในคอมพิวเตอร์รวมทั้งคำนึงถึงตัวพิมพ์เล็กและตัวพิมพ์ใหญ่ หากคุณไม่แน่ใจว่าคอมพิวเตอร์ได้รับมอบหมายให้เปิดเทอร์มินัลแล้วพิมพ์ชื่อโฮสต์

ทำตามขั้นตอนเหล่านี้:

  1. sudo OpenSSL req -x509 -nodes -Days enter in days how long you want the cert valid for-newkey RSA 1024 -keyout enter a name for your private key/certificate here.pem ท์enter a name for your private key/certificate here.pem

    ตัวอย่าง: sudo openssl req -x509 -nodes -days 365 -newkey rsa: 1024 -keyout privcert.pem -out privcert.pem

  2. OpenSSL req ใหม่ -newkey RSA 1024 -nodes -keyout enter a name for your private key here.pem - ออกenter a name for your certificate request here.pem

    ตัวอย่าง: sudo openssl req -new -newkey rsa: 1024 -nodes -keyout privkey.pem -out certreq.pem

ใบรับรองทั้งหมดที่สร้างขึ้นจะอยู่ในไดเรกทอรีหลักของคุณ ( /home/<username>) ส่วนถัดไปคือการขอใบรับรองจาก CA ของคุณโดยใช้การร้องขอใบรับรองที่สร้างขึ้นในขั้นตอนก่อนหน้า สิ่งนี้จะต้องทำบนเครื่อง Windows เพราะด้วยเหตุผลบางประการ Linux และ Windows ก็ไม่เข้ากันได้ดีเมื่อขอและดาวน์โหลดใบรับรอง ฉันเพิ่งพบว่าการส่งคำร้องขอใบรับรองทางอีเมลนั้นง่ายกว่าและดำเนินการบนเครื่อง Windows

ทำตามขั้นตอนเหล่านี้เพื่อทำคำขอใบรับรองให้เสร็จสมบูรณ์:

  1. ไปที่โฮมไดเร็กตอรี่ของคุณบนเครื่อง Linux และค้นหาไฟล์คำขอใบรับรองของคุณ
  2. ส่งอีเมลไฟล์ถึงคุณเองหรือเปิดไฟล์ด้วยโปรแกรมแก้ไขข้อความ (เช่น gedit) และคัดลอกและวางคำขอลงในอีเมลและส่งให้กับตัวคุณเอง
  3. บนไคลเอนต์ Windows ให้เปิดเว็บเพจโดยใช้ IE ไปยังเว็บไซต์ของ CA (เช่นhttp://caname/certsrv)
  4. เลือกร้องขอใบรับรอง
  5. การร้องขอใบรับรองขั้นสูง
  6. ตอนนี้เปิดอีเมลของคุณและรับคำขอใบรับรองที่คุณส่งอีเมลถึงตัวเอง
  7. หากคุณส่งไฟล์ด้วยตัวคุณเองให้เปิดด้วย notepad แล้วคัดลอกและวางเนื้อหาลงในกล่องร้องขอใบรับรองที่เข้ารหัส Base-64 หากคุณส่งอีเมลเนื้อหาของไฟล์คำขอใบรับรองแทนไฟล์เองให้เพียงคัดลอกและวางคำขอจากที่นั่นลงในช่องร้องขอใบรับรองที่เข้ารหัส Base-64
  8. คลิกส่งและดาวน์โหลดใบรับรองในแบบฟอร์ม Base-64 ไม่ใช่ DER
  9. บันทึกใบรับรองไปยังเดสก์ท็อปของคุณและตั้งชื่อเป็นyour Linux machine name. pem ระบบจะผนวกส่วนท้ายโดยอัตโนมัติ.cerดังนั้นเพียงแค่ลบออก Linux ใช้. pem สำหรับส่วนขยายใบรับรอง
  10. นำไฟล์นี้แล้วส่งกลับไปที่อีเมลของคุณ
  11. ในตอนนี้บนเครื่อง Linux ของคุณรับใบรับรองและบันทึกไว้ที่ไหนสักแห่ง (โดยเฉพาะโฟลเดอร์บ้านของคุณเพื่อจัดระเบียบและร่วมกัน)
  12. ตอนนี้เราจำเป็นต้องคัดลอกใบรับรองที่คุณเพิ่งได้รับไปยัง/etc/ssl/certsโฟลเดอร์ของคุณและเราจำเป็นต้องคัดลอกคีย์ส่วนตัว / ใบรับรองและคีย์ส่วนตัวที่สร้างไว้ก่อนหน้าใน/etc/ssl/privateโฟลเดอร์ของคุณ ตอนนี้รากเท่านั้นที่มีสิทธิ์ในการทำเช่นนี้เพื่อให้คุณสามารถทำเช่นนี้โดยบรรทัดคำสั่งโดยการพิมพ์หรือsudo cp /home/<username>/<certificate>.pem /etc/ssl/private /etc/ssl/certsสิ่งนี้สามารถทำได้จาก GUI โดยการคัดลอกและวางโดยใช้คำสั่ง gksudo และพิมพ์ใน nautilus Nautilus เป็นเบราว์เซอร์ไฟล์ GUI ที่ Ubuntu ใช้และมันจะเรียกใช้เป็นรูทช่วยให้คุณสามารถคัดลอกและวางไปยังไดเรกทอรีที่รูทเท่านั้นที่เข้าถึงได้

ตอนนี้ใบรับรองของเราพร้อมใช้งานแล้วเราต้องบอก openssl ว่าเราต้องการใช้ใบรับรองอย่างไร ในการทำเช่นนี้เราจะต้องแก้ไขไฟล์ openssl.cnf และบอกให้พิสูจน์ตัวตนเครื่องลีนุกซ์ของเราในฐานะไคลเอนต์แทนที่จะเป็นผู้ใช้

โดยทำตามขั้นตอนต่อไปนี้:

  1. sudo gedit /etc/ssl/openssl.cnf
  2. [usr_cert]เลื่อนลงไปประมาณครึ่งทางและคุณจะเห็นส่วนที่เรียกว่า ในส่วนนี้เราต้องการตำแหน่งที่nsCertTypeถูกกำหนดเป็น"สำหรับลูกค้าทั่วไปใช้สิ่งนี้เป็นเรื่องปกติ"และมันควรจะมีnsCertType = client, emailและมันจะถูกใส่ความคิดเห็น uncomment nsCertType = clientบรรทัดนี้และลบอีเมลเพื่อที่จะแสดงให้เห็นว่า ตอนนี้บันทึกไฟล์

ตอนนี้คุณควรมีทุกสิ่งที่คุณต้องการกำหนดค่าอย่างเหมาะสมเพื่อให้เครื่อง Linux ทำงานในสภาพแวดล้อมโดเมน Windows และรับรองความถูกต้องโดยใช้ 802.1x

สิ่งที่เหลืออยู่ในตอนนี้คือการรีสตาร์ทบริการเครือข่ายของคุณเพื่อให้ Linux จะใช้wpa_supplicant.confไฟล์ที่เชื่อมโยงกับeth0ส่วนต่อประสานและพิสูจน์ตัวตนของคุณ sudo service networking restartดังนั้นเพียงแค่เรียกใช้ หากคุณไม่ได้รับที่อยู่ IP หลังจากที่อินเตอร์เฟซของคุณกลับมาคุณสามารถขอใช้ IP จากเซิร์ฟเวอร์ DHCP sudo dhclientของคุณโดยการพิมพ์



ฉันเพิ่งลองสิ่งนี้และฉันลองตอนที่ฉันพบบทความนั้นครั้งแรกด้วยตัวเอง ฉันจะลองอีกครั้งแม้ว่าคำต่อคำในกรณี
Sirex

ไม่สามารถทำงานนี้ได้ ฉันคิดว่าคำขอการเซ็นชื่อที่แนะนำจะเป็นประเภท 'เวิร์กสเตชัน' แต่ฉันมีเพียง 'ผู้ใช้' และ 'เว็บเซิร์ฟเวอร์' เท่านั้น
Sirex

โอเคบางทีเราไปตามเส้นทางอื่นได้ มีวิธีหนึ่งคือแฮ็กบิตเพื่อส่งออก certs ที่ทำเครื่องหมายว่าไม่สามารถส่งออกได้: github.com/iSECPartners/jailbreakหรือblog.gentilkiwi.com/mimikatz ( stackoverflow.com/questions/3914882/ … ) คุณลองหยิบใบรับรองจาก Windows p2v ของคุณและใช้เพื่อการรับรองความถูกต้องได้หรือไม่?
beatcracker

แอพพลิเคชั่นแหกคุกให้ฉันได้รับกุญแจส่วนตัว มันไม่ทำงานสำหรับฉันในโหมด TLS โหมด PEAP ต้องการเพียงแค่ใบรับรอง CA - ซึ่งฉันสามารถลงจากเซิร์ฟเวอร์ ca / ​​certsrv / url แต่ปริมาณที่ใช้งานได้ บางทีมันอาจไม่ชอบ 'ตัวตนที่ไม่ระบุตัวตน' ประเภทชื่อผู้ใช้และรหัสผ่านฉันกำลังสมมติว่าเป็น 'ชื่อผู้ใช้' หรือ 'ชื่อผู้ใช้งาน' ชื่อผู้ใช้งาน 'แต่ไม่ได้ผลสำหรับฉัน ฉันจะวางบันทึกข้อความ
Sirex

1
ข่าวร้ายทุกคน! มันดูเหมือนว่ามันเป็นข้อผิดพลาดใน Fedora 21: การเชื่อมต่อแบบมีสาย 802.1x PEAP / MSCHAPv2 ไม่ทำงาน
beatcracker
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.