จำกัด การเข้าถึง SSH เฉพาะลูกค้าตามที่อยู่ IP


22

เราจะอนุญาตให้ชุด IP ส่วนตัวบางอย่างสามารถป้อนผ่านการเข้าสู่ระบบ SSH (คู่คีย์ RSA) ใน Linux Server ได้อย่างไร


3
กฎไฟร์วอลล์เป็นเรื่องปกติของการกระทำ
Raman Sailopal

2
ไฟร์วอลล์หรือ /etc/hosts.allow หาก ssh รวบรวม w / TCP wrappers หรือกฎไฟล์ / etc / ssh / sshd_config
Rui F Ribeiro

มีมากกว่าหนึ่งวิธีในการทำอ้างถึงlinux.die.net/man/5/sshd_configซึ่งจะอธิบายทุกอย่างใน/etc/ssh/sshd_config
ron

คำตอบ:


42

คุณสามารถ จำกัด ซึ่งเป็นเจ้าภาพสามารถเชื่อมต่อโดยการกำหนดค่าห่อ TCP  หรือกรองเครือข่ายการจราจร (ไฟร์วอลล์) โดยใช้iptables หากคุณต้องการใช้วิธีการรับรองความถูกต้องที่แตกต่างกันขึ้นอยู่กับที่อยู่ IP ของลูกค้าให้กำหนดค่า SSH daemon แทน (ตัวเลือก 3)

ตัวเลือกที่ 1: การกรองด้วย IPTABLES

กฎ Iptables ได้รับการประเมินตามลำดับจนกระทั่งการแข่งขันนัดแรก

ตัวอย่างเช่นเพื่ออนุญาตการรับส่งข้อมูลจากเครือข่าย 192.168.0.0/24 และปล่อยการรับส่งข้อมูล (ไปยังพอร์ต 22) DROPกฎไม่จำเป็นถ้านโยบายเริ่มต้นของคุณ iptables DROPมีการกำหนดให้

iptables -A INPUT -p tcp --dport 22 --source 192.168.0.0/24 -j ACCEPT
iptables -A INPUT -p tcp --dport 22 -j DROP

คุณสามารถเพิ่มกฎเพิ่มเติมก่อนกฎการปล่อยเพื่อจับคู่เครือข่าย / โฮสต์เพิ่มเติม หากคุณมีเครือข่ายหรือที่อยู่โฮสต์จำนวนมากคุณควรใช้โมดูลipset นอกจากนี้ยังมีโมดูลiprangeซึ่งอนุญาตให้ใช้ช่วงที่อยู่ IP ตามอำเภอใจ

Iptables ไม่คงอยู่ตลอดการบู๊ต คุณต้องกำหนดค่ากลไกบางอย่างเพื่อกู้คืน iptables เมื่อบู๊ต

iptablesใช้กับการรับส่งข้อมูล IPv4 เท่านั้น ระบบที่มีฟัง SSH ไปยังที่อยู่ IPv6 ip6tablesการตั้งค่าที่จำเป็นสามารถทำได้ด้วย

ตัวเลือกที่ 2: การใช้ TCP wrappers

คุณสามารถกำหนดค่าโฮสต์ที่สามารถเชื่อมต่อโดยใช้ TCP wrappers ด้วย TCP wrappers นอกเหนือจากที่อยู่ IP คุณยังสามารถใช้ชื่อโฮสต์ในกฎ

โดยค่าเริ่มต้นปฏิเสธโฮสต์ทั้งหมด

/etc/hosts.deny:

sshd : ALL

จากนั้นแสดงรายการโฮสต์ที่อนุญาตใน hosts.allow ยกตัวอย่างเช่นการอนุญาตให้เครือข่าย192.168.0.0/24และlocalhost

/etc/hosts.allow:

sshd : 192.168.0.0/24
sshd : 127.0.0.1
sshd : [::1]

ตัวเลือก 3: การกำหนดค่า SSH daemon

คุณสามารถกำหนดค่า ssh daemon ใน sshd_config เพื่อใช้วิธีการพิสูจน์ตัวตนที่แตกต่างกันขึ้นอยู่กับที่อยู่ / ชื่อโฮสต์ของไคลเอ็นต์ ถ้าคุณต้องการบล็อกโฮสต์อื่นจากการเชื่อมต่อคุณควรใช้ iptables หรือ TCP wrappers แทน

ก่อนอื่นให้ลบวิธีการตรวจสอบสิทธิ์เริ่มต้น:

PasswordAuthentication no
PubkeyAuthentication no

จากนั้นเพิ่มวิธีการตรวจสอบความถูกต้องที่ต้องการหลังจากMatch Addressท้ายไฟล์ การวางMatchในตอนท้ายของไฟล์มีความสำคัญเนื่องจากบรรทัดการกำหนดค่าทั้งหมดหลังจากวางไว้ในบล็อกที่มีเงื่อนไขจนถึงMatchบรรทัดถัดไป ตัวอย่างเช่น:

Match Address 127.0.0.*
    PubkeyAuthentication yes

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

ตรงกับข้อโต้แย้งและได้รับอนุญาตตัวเลือกการกำหนดเงื่อนไขการบันทึกไว้ใน หน้าคน sshd_config รูปแบบการแข่งขันจะได้รับการบันทึกไว้ในหน้าคน ssh_config


สิ่งที่เกี่ยวกับการเพิ่มคำสั่ง ListenAddress ใน / etc / ssh / sshd_config
jerome

เป็นไปได้ในบางสถานการณ์ (ตัวอย่างเช่นการฟังที่อยู่เครือข่ายส่วนตัว) ขึ้นอยู่กับการกำหนดค่าเครือข่ายของคุณและโฮสต์ที่คุณต้องการอนุญาต
sebasth

2
นอกจากนี้ sshd_config สามารถตั้งค่าการกรองด้วยคำสั่ง AlowUsers และยังสามารถตั้งค่า authorized_keys ด้วย 'จาก IP หรือ subnet "เพื่อกรองด้วย
tonioc

@tonioc ทางออกที่ดีสำหรับกรณีการใช้งานของฉัน โปรดขยายคำแนะนำนี้เป็นคำตอบ
simlev

ถ้าคุณมี NIC 4 พอร์ตแต่ละไปกับเครือข่ายที่แตกต่างกันแล้วเริ่มต้น#ListenAddress ::ในการ/etc/ssh/sshd_configที่จะบอกเซิร์ฟเวอร์ SSH จะยอมรับเข้ามาจากส่วนใดของเครือข่ายเหล่านั้น มิฉะนั้นทำListenAddress <ip address>ที่<ip address>พอร์ต NIC เหล่านั้นที่คุณต้องการได้รับอนุญาต ฉันeth0เป็น192.168.3.4ดังนั้นจึงListenAddress 192.168.3.4ส่งผลให้ SSH เท่านั้นที่ทำงานบนเครือข่าย 192.168.3.4 ซึ่งอยู่บน eth0; และ eth1 eth2 eth3 ถูกปฏิเสธ
ron

5

นี่คือการกำหนดค่าเพิ่มเติมบางอย่างสำหรับ SSH daemon เพื่อขยายคำตอบก่อนหน้า:

  • เพิ่มการกรองผู้ใช้พร้อมAllowUsersตัวเลือกในsshd_configไฟล์:

    AllowUsers johndoe@192.168.1.* admin2@192.168.1.* otherid1 otherid2
    

    สิ่งนี้อนุญาตให้johndoeและadmin2เท่านั้นจาก192.168.1.*ที่อยู่และotherid1 , otherid2จากที่ใดก็ได้

  • จำกัด คีย์ ssh หรือคีย์ที่ใช้ ca เป็นชุดของที่อยู่ใน.ssh/authorized_keysไฟล์ของโฮมไดเรกทอรีของผู้ใช้ที่กำหนด:

    from="192.168.1.*,192.168.2.*" ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABA...etc...mnMo7n1DD useralias
    

    ในตัวอย่างนี้รหัสสาธารณะสำหรับ useralias จะมีผลเฉพาะที่อยู่ที่ให้ไว้

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.