เซิร์ฟเวอร์ของฉันถูกโจมตีอย่างต่อเนื่อง [ปิด]


32

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

Feb 14 04:07:20 foodwiz3 sshd[1264]: error: Could not load host key: /etc/ssh/ssh_host_ed25519_key
Feb 14 04:07:21 foodwiz3 sshd[1264]: reverse mapping checking getaddrinfo for coenamor.columbiansabbatical.com [23.249.167.223] failed - POSSIBLE BREAK-IN ATTEMPT!
Feb 14 04:07:21 foodwiz3 sshd[1264]: pam_unix(sshd:auth): authentication failure; logname= uid=0 euid=0 tty=ssh ruser= rhost=23.249.167.223  user=root
Feb 14 04:07:23 foodwiz3 sshd[1264]: Failed password for root from 23.249.167.223 port 32997 ssh2
Feb 14 04:07:23 foodwiz3 sshd[1264]: Received disconnect from 23.249.167.223: 11: Bye Bye [preauth]
Feb 14 04:13:04 foodwiz3 sshd[1289]: error: Could not load host key: /etc/ssh/ssh_host_ed25519_key
Feb 14 04:13:05 foodwiz3 sshd[1289]: reverse mapping checking getaddrinfo for coenamor.columbiansabbatical.com [23.249.167.223] failed - POSSIBLE BREAK-IN ATTEMPT!
Feb 14 04:13:05 foodwiz3 sshd[1289]: pam_unix(sshd:auth): authentication failure; logname= uid=0 euid=0 tty=ssh ruser= rhost=23.249.167.223  user=root
Feb 14 04:13:07 foodwiz3 sshd[1289]: Failed password for root from 23.249.167.223 port 41562 ssh2

นี่เป็นสิ่งที่ค่อนข้างปกติหรือฉันควรกังวล / ทำอะไรกับมันบ้าง?


3
ลองเปลี่ยนหมายเลขพอร์ตและดูว่ายังมีอยู่หรือไม่ หากพวกเขาไม่ได้กำหนดเป้าหมายคุณโดยเฉพาะมันอาจจะไม่
goldilocks

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


3
@Willem - ไม่การปิดใช้งานการตรวจสอบรหัสผ่านจะไม่หยุดการโจมตี มันจะทำให้พวกเขาประสบความสำเร็จเท่านั้น (ผู้โจมตีจะไม่ตระหนักว่าการรับรองความถูกต้องรหัสผ่านถูกปิดใช้งานและจะพยายามต่อไป)
Martin Vegter

คำตอบ:


59

ยินดีต้อนรับสู่โลกมหัศจรรย์ของอินเทอร์เน็ต ... คุณ:

แต่คำตอบที่แท้จริงคือ: ใช่นี่เป็นเรื่องปกติ : BotNet Maffia สามารถใช้เซิร์ฟเวอร์ที่ได้รับการป้องกันไม่ดีเป็นพิเศษเสมอ ...


1
ฉันชอบที่จะไม่มี SSH ในอินเทอร์เน็ตป่าที่ดุร้าย +1
Rui F Ribeiro

2
ข้างเปลี่ยนพอร์ตเริ่มต้นสำหรับ SSH เรายังมีพอร์ตเคาะ
Pablo A

15

เป็นเรื่องปกติที่จะมีการเข้าสู่ระบบเพียงพอที่จะทำการบันทึก

การเปลี่ยนพอร์ต SSH เป็นวิธีการแก้ปัญหา 'รักษาความปลอดภัยด้วยความคลุมเครือ' มากขึ้น แต่ช่วยแก้ไขปัญหาน้ำท่วมได้ ฉันเน้นว่ามันไม่หรูหรามาก มีพอร์ตสำหรับการบริการด้วยเหตุผล

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

PermitRootLogin no

นอกจากนี้ให้ดูfail2banที่การตรวจสอบบันทึก sshd สำหรับผู้ที่กระทำผิดซ้ำ ตัวอย่างเช่นการเข้าสู่ระบบล้มเหลว 5 ครั้งใน 3 นาทีจาก IP ที่แน่นอนจะทำให้ IP นั้นถูกบล็อกเป็นเวลา 10 นาที ฉันเพิ่มเวลาที่ห้ามเป็น 24 ชั่วโมงเพื่อลดการบันทึกสแปม - สำเร็จ :)


1
apt-get install fail2ban จะช่วยให้คุณได้รับการคุ้มครองโดยทั่วไป
วิลเล็ม

7
"ฉันเพิ่มเวลาที่ห้ามเป็น 24 ชั่วโมงเพื่อลดสแปมไฟล์บันทึกเพิ่มเติม" เชื่อฉันสิ หากคุณไม่สามารถเข้าถึงเซิร์ฟเวอร์ได้วันหนึ่งคุณจะต้องเสียใจอย่างยิ่ง ;)
Daniel

8

ฉันขอแนะนำให้คุณทำบางสิ่ง:

  1. เปลี่ยนพอร์ต ssh กำลังฟังที่ (เป็นอะไรที่สูงกว่า 1024) และตรวจสอบให้แน่ใจว่าคุณไม่ใช้โปรโตคอลรุ่น 1:

/ etc / SSH / sshd_config

# What ports, IPs and protocols we listen for
Port 50022
# Use these options to restrict which interfaces/protocols sshd will bind to
#ListenAddress ::
#ListenAddress 0.0.0.0
Protocol 2
  1. อินสแตนซ์fail2ban- จะตรวจสอบไฟล์บันทึกและห้ามที่อยู่ที่เสี่ยงต่อความล้มเหลวชั่วคราวหรือถาวรโดยการอัปเดตกฎไฟร์วอลล์ที่มีอยู่ ( iptables)

  2. ตรวจสอบให้แน่ใจว่าคุณอยู่ในรายการที่ตั้งที่เชื่อถือได้ของคุณ


7

ใช่เป็นห่วง คุณอาจไม่เคยถูกไฟไหม้ แต่คุณควรปฏิบัติตามแนวทางปฏิบัติด้านไอทีที่ดีที่สุด ปลอดภัยกว่าดีกว่าขออภัย

ฉันเป็นผู้ดูแลระบบเครือข่ายที่โรงพยาบาล เป็นความคิดที่ดีเสมอในการเชื่อมต่อกล่องเข้ากับอินเทอร์เน็ตโดยตรง สิ่งที่คุณเห็นคือสแกนเนอร์อัตโนมัตินับพันที่สแกนหาช่องโหว่บนอินเทอร์เน็ต ฉันเห็นสิ่งต่าง ๆ เหล่านี้ (การสแกนพอร์ตการทดสอบช่องโหว่ที่รู้จักกันดี) สำหรับซอฟท์แวร์ทุกชนิด (ssh, telnet, ftp, ฯลฯ ) ปรากฏขึ้นในกล่องรหัสของเรา
เครื่องของคุณควรอยู่หลังไฟร์วอลล์ / NAT และคุณควร พอร์ตส่งต่อพอร์ตที่ต้องการไปยังอินเทอร์เน็ต (80, 443 เป็นต้น) มันค่อนข้างง่ายที่จะทำ
มีบางสิ่งที่คุณสามารถใช้สำหรับ managemnt (SSH telnet) เป็นความคิดที่ดีที่จะเผชิญกับอินเทอร์เน็ตเพราะถ้า - ด้วยเหตุผลใดก็ตาม - มีข้อผิดพลาดในซอฟต์แวร์ SSH / telnet บนเซิร์ฟเวอร์นั้นบอทอัตโนมัติจะตรวจจับมันในการเต้นของหัวใจ และคุณจะเมา ข้อบกพร่องในซอฟต์แวร์เกิดขึ้นตลอดเวลาและอาจใช้เวลาสักครู่เพื่อให้โปรแกรมแก้ไขได้รับการปล่อยตัวหรือเพื่อให้คุณจำได้ว่าต้องทำการแก้ไข

หากคุณต้องการจัดการจากระยะไกลให้ดูการตั้งค่าบางอย่างเช่นโซลูชัน VPN หรือหากคุณใช้ Windows ตั้งค่าเกตเวย์บริการเทอร์มินัลสำหรับเดสก์ท็อประยะไกล ฉันรู้ว่าคุณสามารถใช้กล่องแยก Linux หรือ Windows ที่มี 2 NIC เพื่อตั้งค่าการกำหนดเส้นทางและการเข้าถึงระยะไกลสำหรับ VPN และ NAT หากคุณเป็นเพียงร้านค้าเล็ก ๆ มิฉะนั้นผู้ขายเช่น Cisco จะมีฮาร์ดแวร์ไฟร์วอลล์ / โซลูชัน NAT (Cisco ASA)

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

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


7
ที่จริงแล้วโซลูชัน VPN นั้นมีความปลอดภัยไม่น้อยกว่าเซิร์ฟเวอร์ SSH พวกเขาทั้งสองพึ่งพาโปรโตคอลการเข้ารหัสลับที่ถูกนำมาใช้อย่างถูกต้องและบริการกำหนดค่าอย่างเหมาะสม ด้วยวิธีการต่าง ๆ ฉันจะบอกว่าพวกเขาให้ระดับความปลอดภัยที่แน่นอน ถ้าฉันเข้าใจคุณดีแล้วคุณเอา SSH ไว้เบื้องหลัง VPN แล้วใช่ว่าจะปลอดภัยกว่าระดับหนึ่ง
lgeorget

ใช่คุณถูกต้องนั่นคือสิ่งที่ฉันหมายถึงใช้ vpn เพื่อผ่านไฟร์วอลล์ / nat จากนั้น ssh ลงในเซิร์ฟเวอร์
คน

1
fwiw การตั้งค่า VPN ส่วนใหญ่ผ่านการรับรองความถูกต้องของไคลเอนต์หลายชั้นรวมทั้งให้การรับส่งข้อมูลภายนอกจุดเดียวสามารถเข้าถึงเครือข่ายภายใน เมื่อเทียบกับการมีโหนดจำนวนมาก VPN concentrators มักไม่ได้เป็นเป้าหมายที่น่าสนใจทั้งในและตัวเองเมื่อเทียบกับเซิร์ฟเวอร์ที่อาจเป็นที่อยู่อาศัยของsshdอินสแตนซ์ ssh jumpbox นั้นมีความปลอดภัยเทียบเท่ากับการกำหนดค่า VPN ส่วนใหญ่ แต่โดยทั่วไปนั่นไม่ใช่วิธีการทำงาน
Bratchley

5

คุณสามารถกำหนดค่าไฟร์วอลล์ภายในของเคอร์เนลโดยiptables เพื่อให้มีเพียงไม่กี่เครื่องเท่านั้นที่สามารถ ssh ไปยังเซิร์ฟเวอร์ของคุณและปล่อยให้แพ็คเกจ IP อื่น ๆ หล่นลงมา ดูman iptablesข้อมูลเพิ่มเติม

ตัวอย่างเช่นถ้า 192.168.1.67 เป็นโฮสต์ที่คุณ ssh จากนั้นในประเภทเซิร์ฟเวอร์:

sudo iptables -A INPUT -p tcp --dport ssh -s 192.168.1.67 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport ssh -j DROP
sudo iptables-save

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

3

คุณต้องการเซิร์ฟเวอร์ของคุณบนอินเทอร์เน็ตหรือไม่? หากคุณต้องการมีไว้บนอินเทอร์เน็ตจริงๆให้แน่ใจว่ามันปลอดภัยก่อนที่คุณจะวางไว้ที่นั่น

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

บางสิ่งที่ได้กล่าวไปแล้วที่ฉันแนะนำยัง:

  1. ฉันเห็นด้วยกับ Fail2Ban และการกำหนดค่าอย่างเหมาะสมจะทำให้สคริปต์และแฮ็กเกอร์ที่มีความซับซ้อนที่สุดเข้ามา
  2. ตั้งค่า PermitRootLogin เป็น no เป็นสิ่งจำเป็น
  3. กำหนดค่าไฟร์วอลล์ ฉันมักจะแก้ไขกฎ iptables แต่สิ่งที่คล้ายกันเช่น UFW หรือ firehol ก็ใช้ได้เช่นกัน

ฉันเพิ่งเข้าร่วมชุมชนนี้เพราะมีสองสิ่งที่ฉันไม่คิดว่าได้รับการแก้ไขอย่างเพียงพอ

  • ในการกำหนดค่าไฟร์วอลล์บล็อก / ปิดการใช้งานทุกอย่างที่ไม่จำเป็นอย่างสมบูรณ์ ก่อนที่คุณจะเปิดพอร์ตถามตัวเองว่า "ฉันต้องการบริการนี้จากอินเทอร์เน็ตจริง ๆ หรือไม่" ทุกพอร์ต / บริการที่คุณเปิดจะกลายเป็นเวกเตอร์ที่มีศักยภาพที่ใครบางคนอาจใช้ประโยชน์ได้ หากมีข้อผิดพลาดในบริการนั้นที่อนุญาตให้พวกเขาเข้าถึงรูทไปยังเซิร์ฟเวอร์พวกเขาอาจเข้าถึงทุกอย่างในนั้น ความปลอดภัยของคุณนั้นแข็งแกร่งพอ ๆ กับลิงก์ที่อ่อนแอที่สุด
  • ตอนนี้สำหรับสิ่งสุดท้ายและเนื้อหาที่สำคัญที่สุด สคริปต์ที่คุณเห็นการพยายามเข้าถึง ssh อาจเดารหัสผ่านของคุณได้ตลอดเวลา Fail2Ban จะทำให้ช้าลงมาก แต่พวกเขายังคงเดาได้ ถ้าเป็นเช่นนั้นคุณต้องการการรับรองความถูกต้อง 2ระดับสำหรับบริการที่สามารถเข้าถึงได้ เพื่อที่ฉันแนะนำบัญชีฟรีกับ Duo Security https://www.duosecurity.com/docs/duounix

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

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

2

อีกตัวอย่างของคำตอบ @cff หากคุณตั้งใจจะห้าม "พยายาม" ต่อเนื่องบนเซิร์ฟเวอร์ SSH ของคุณ:

sudo iptables -A INPUT -p tcp -m tcp --dport ssh -m state --state NEW -m recent --update --seconds 600 --hitcount 4 --name DEFAULT --mask 255.255.255.255 --rsource -j DROP
sudo iptables -A INPUT -p tcp -m tcp --dport ssh -m state --state NEW -m recent --set --name DEFAULT --mask 255.255.255.255 --rsource
sudo iptables-save

ความพยายามในการเชื่อมต่อ 'แท็ก' อันนี้และหากเกิดขึ้นมากกว่า 4 ครั้งใน 600s (10mn) แสดงว่าเริ่มต้นแล้ว 'แบน' ใช้สิ่งนี้แทนโซลูชัน @cff เพราะปลอดภัยกว่า (หากคุณล็อคตัวเองให้รอ 10mn แล้วลองอีกครั้ง)

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