วิธีการระบุความล่าช้าในการเข้าสู่ระบบใน ssh


11

ฉันต้องการให้ล่าช้าในการเข้าสู่ระบบในขณะที่เข้าสู่ระบบผ่าน ssh ฉันพยายามสองวิธีในการทำเหมือนกัน แต่ไม่พบผลลัพธ์ที่ต้องการ

ฉันลองขั้นตอนที่ได้รับจากลิงก์ที่กำหนด

http://hostingfu.com/article/ssh-dictionary-attack-prevention-with-iptables

iptables -N SSH_CHECK
iptables -A INPUT -p tcp --dport 22 -m state --state NEW -j SSH_CHECK
iptables -A SSH_CHECK -m recent --set --name SSH
iptables -A SSH_CHECK -m recent --update --seconds 60 --hitcount 4 --name SSH -j DROP

ฉันไม่ได้ติดตั้งโมดูล pam บนเครื่องของฉันดังนั้นจึงไม่สามารถทำการแก้ไขใด ๆ ที่เกี่ยวข้องกับไฟล์ pam ได้

ดังนั้นร่างกายใดให้ฉันแนะนำวิธีอื่นทำเช่นเดียวกัน?

ฉันมีเคอร์เนลลินุกซ์เปลือยทำงานบนแพลตฟอร์มที่ฝังตัว


ทำไมคุณต้องการแนะนำการล่าช้า เป้าหมายสูงสุดของคุณคืออะไร
CVn

ฉันต้องการป้องกันความเป็นไปได้ของการโจมตีด้วยกำลังดุร้าย
ราม

3
เพียงแค่แนะนำความล่าช้าในการเชื่อมต่อใหม่จะไม่ป้องกันการโจมตีด้วยกำลัง คุณต้องดูเครื่องมือที่ออกแบบมาเพื่อแก้ปัญหาที่แท้จริงของคุณ ฉันขอแนะนำให้เริ่มต้นด้วยการดูfail2banซึ่งได้รับการออกแบบมาโดยเฉพาะเพื่อตอบสนองต่อรายการบันทึกซ้ำโดยดำเนินการคำสั่งที่กำหนดและมักจะใช้เฉพาะเพื่อป้องกันการพยายามใช้กำลังโดยไม่ได้รับอนุญาต
CVn

นั่นคือไมเคิลดี แต่ฉันต้องทำกับโครงสร้างพื้นฐานที่มีอยู่กับฉันฉันจะแนะนำความล่าช้าในแต่ละครั้งที่ฉันเชื่อมต่อผ่าน ssh
ราม

2
เพื่อนfail2banใช้โครงสร้างพื้นฐานที่แน่นอนที่คุณมี - บันทึก ssh และกฎ iptables
Shadur

คำตอบ:


11

วิธีที่ # 1 - ปิดใช้งานการเข้าสู่ระบบด้วยรหัสผ่าน

หากคุณไม่ต้องการอนุญาตให้ลงชื่อเข้าใช้ด้วยรหัสผ่านเพียงแค่ไม่อนุญาตให้ใช้ก็จะให้ผลตามที่คุณต้องการ เพียงเพิ่มบรรทัดนี้ไปที่/etc/ssh/sshd_config:

PasswordAuthentication     no

นอกจากนี้คุณสามารถ จำกัด การใช้รหัสผ่านให้กับผู้ใช้บางรายที่ใช้Matchโอเปอเรเตอร์ในsshd_config:

Match User root,foo,bar
    PasswordAuthentication no
Match User user1,user2
    PasswordAuthentication yes

วิธีที่ # 2 - iptables

นอกจากนี้คุณยังสามารถใช้iptablesเพื่อติดตามความพยายามในการเข้าสู่ระบบที่ล้มเหลวและวางลงหลังจากเกณฑ์ที่กำหนด นี้คล้ายกับตัวอย่างของคุณจาก hostingfu แต่ง่ายต่อการเข้าใจ

$ sudo iptables -I INPUT -p tcp --dport <YOUR PORT HERE> -i eth0 -m state --state NEW -m recent --set
$ sudo iptables -I INPUT -p tcp --dport <YOUR PORT HERE> -i eth0 -m state --state NEW -m recent --update --seconds 60 --hitcount 4 -j DROP

หมายเหตุ:โดยทั่วไปบรรทัดแรกจะสร้างกฎที่ใช้กับแพ็คเก็ตที่ใช้สำหรับการพยายามเชื่อมต่อใหม่บนพอร์ต ssh เท่านั้น บรรทัดที่สองบอกว่าหากมีมากกว่า 4 ครั้งจาก IP ภายใน 60 วินาทีการรับส่งข้อมูลใด ๆ จาก IP นั้นควรจะเป็นแบล็กโฮลด์ โซลูชันนี้ไม่สนใจว่าจะพยายามใช้บัญชีผู้ใช้อื่นหรือไม่

วิธีที่ # 3 - ใช้ PAM

ฉันรู้ว่าคุณบอกว่าคุณไม่สามารถใช้ PAM ได้ แต่ถ้าคุณทำนี่เป็นวิธีที่คุณสามารถหน่วงเวลาการล็อกอินล้มเหลวได้ หากความตั้งใจของคุณคือการหน่วงเวลาการล็อกอินล้มเหลวของ ssh คุณสามารถใช้โมดูล PAM pam_faildelayได้ โดยทั่วไปโมดูล PAM นี้รวมอยู่ในชุดค่าผสมเริ่มต้น

ในระบบ Fedora 19 ของฉันมันเป็นส่วนหนึ่งของการติดตั้งเริ่มต้น

ตัวอย่าง

pam_faildelayมองหาไฟล์ที่เกี่ยวข้องกับ

$ locate pam|grep -i delay
/usr/lib/security/pam_faildelay.so
/usr/lib64/security/pam_faildelay.so
/usr/share/doc/pam-1.1.6/html/sag-pam_faildelay.html
/usr/share/doc/pam-1.1.6/txts/README.pam_faildelay
/usr/share/man/man8/pam_faildelay.8.gz

ดูสิ่งที่พวกเขาให้ RPM โดย:

$ rpm -qf /usr/share/man/man8/pam_faildelay.8.gz
pam-1.1.6-12.fc19.x86_64
pam-1.1.6-12.fc19.i686

การใช้

หากต้องการสร้างความล่าช้าในความล้มเหลวคุณเพียงเพิ่มบรรทัดเช่นนี้ลงในsshdไฟล์กำหนดค่า pam ของคุณ อีกครั้งใน Fedora / CentOS / ระบบ RHEL /etc/pam.d/sshdแฟ้มนี้อยู่ที่นี่:

วิธีสร้างความล่าช้า 10 วินาที:

       auth  optional  pam_faildelay.so  delay=10000000

ความล่าช้า 60 วินาที:

       auth  optional  pam_faildelay.so  delay=60000000

ตัวอย่าง

ด้วยความล่าช้า 20 วินาทีโดยใช้วิธีการด้านบนฉันเปลี่ยนsshdไฟล์PAM config ดังนี้:

#%PAM-1.0
auth       required     pam_sepermit.so
auth       substack     password-auth
auth       include      postlogin
auth       optional     pam_faildelay.so  delay=20000000
account    required     pam_nologin.so
account    include      password-auth
password   include      password-auth
# pam_selinux.so close should be the first session rule
session    required     pam_selinux.so close
session    required     pam_loginuid.so
# pam_selinux.so open should only be followed by sessions to be executed in the user context
session    required     pam_selinux.so open env_params
session    optional     pam_keyinit.so force revoke
session    include      password-auth
session    include      postlogin

ตอนนี้เมื่อฉันเข้าสู่ระบบ:

$ date
Tue Dec 17 09:16:30 EST 2013

$ ssh blah@localhost
blah@localhost's password: 
Permission denied, please try again.
blah@localhost's password: 

...Control + C....

$ date
Tue Dec 17 09:16:50 EST 2013

อ้างอิง


ขอบคุณ @slm อีกครั้ง แต่ฉันไม่สามารถติดตั้งโมดูลแพมและการตรวจสอบ sshd ของฉันคือไม่ได้มาจาก pam.Would คุณชอบที่จะแนะนำบางวิธีอื่น ๆ
ราม

@AmitSinghTomar - ขอโทษฉันได้ขยายคำตอบของฉัน ฉันกำลังพยายามสร้างคำตอบที่ยอมรับได้สำหรับคำถามของคุณที่ครอบคลุมวิธีการทั้งหมดไม่ใช่เพียงของคุณเท่านั้น
slm

ขอบคุณ @slm อีกครั้งสำหรับคำตอบในรายละเอียดของคุณฉันสนใจที่จะทำตามวิธีที่สองที่คุณแนะนำจะลองและแจ้งให้คุณทราบถึงผลลัพธ์มันทำให้ฉันมีความล่าช้าในการพยายามเข้าสู่ระบบผ่าน ssh เป็นครั้งแรก?
ราม

@AmitSinghTomar - ไม่ควรล่าช้าหลังจาก 4 ครั้ง เมื่อ--hitcount 4เกินกฎแล้วจะทำให้รูดำของที่อยู่ IP ที่ละเมิดเป็นเวลา 60 วินาที
slm

มีอยู่ช่วงหนึ่งที่ฉันอยากรู้จากคุณสำหรับวิธีที่ 3 ในการทำงาน (PAM) มันต้องมีการตรวจสอบความถูกต้อง ssh หรือไม่ผ่าน pam?
ราม

3

ปิดการใช้งานรหัสผ่าน ไม่มีรหัสผ่านไม่มีการโจมตีที่ดุร้าย

คุณสามารถใช้ ssh-keys สำหรับการเข้าสู่ระบบ - ซึ่งควรจะปลอดภัยกว่าและยากกว่าในการแฮ็ค


0

ในการติดตั้ง Ubuntu 16.04 ใหม่ทั้งหมดด้วยopenssh-serverความล่าช้าในการพยายามใช้รหัสผ่านผิดเกินกว่าศูนย์อักขระ ความล่าช้าที่ดูเหมือนว่าจะเกิน 1 วินาที

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

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