การป้องกันการโจมตีแบบไม่ใช้กำลังบน MySQL หรือไม่


9

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

ฉันจะหยุดสิ่งนี้ไม่ให้เกิดขึ้นได้อย่างไร?

สำหรับ SSH ฉันใช้ denyhosts ซึ่งทำงานได้ดี มีวิธีทำให้ denyhosts ทำงานกับ MySQLd หรือไม่?

ฉันยังคิดว่าการเปลี่ยนพอร์ต MySQL ทำงานอยู่ แต่นี่ก็น้อยกว่าอุดมคติและเป็นเพียงโซลูชันหยุดช่องว่าง (ถ้าพวกเขาค้นพบพอร์ตใหม่)

ไม่มีใครมีความคิดอื่น ๆ อีกบ้าง?

ถ้ามันเปลี่ยนไปฉันกำลังรัน MySQL 5.x บน FreeBSD 6.x

คำตอบ:


9

ฉันไม่รู้แพคเกจซอฟต์แวร์ที่เหมือน denyhosts สำหรับ MySQL แต่ฉันมีวิธีแก้ไขปัญหาสองสามข้อ:

  • จำกัด การลงชื่อเข้าใช้เฉพาะที่อยู่ IP ห้ามใช้% เพื่ออนุญาตให้โฮสต์ทั้งหมดเชื่อมต่อกับเซิร์ฟเวอร์
  • ปลอดภัยยิ่งขึ้นตั้งค่า iptables เพื่ออนุญาตการเข้าถึง 3306 จากที่อยู่ IP ที่ได้รับอนุญาตเท่านั้น
  • อุโมงค์การรับส่งข้อมูลของคุณไปยังกล่องด้วย ssh แล้วเชื่อมต่อผ่าน localhost
  • ปรับเปลี่ยนสคริปต์ Denyhosts หรือ BFD เพื่อวิเคราะห์บันทึกการเข้าถึง mysql และบล็อกการพยายามบังคับเดรัจฉานที่ไฟร์วอลล์

แก้ไข :

เพื่อตอบความคิดเห็นของคุณลองนี้ :

iptables -A INPUT -p tcp -s 202.54.1.50 --sport 1024:65535 -d 202.54.1.20 --dport 3306 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -p tcp -s 202.54.1.20 --sport 3306 -d 202.54.1.50 --dport 1024

โดยที่. 20 คือ MySQL ของคุณและ. 50 คือที่อยู่ IP สำหรับเชื่อมต่อระยะไกล


หมายเหตุเล็กน้อย: ฉันจะ จำกัด การเข้าถึงพอร์ต 3306 เฉพาะชุดที่อยู่ IP ที่ระบุได้อย่างไร เพียงแค่ จำกัด ผู้ใช้ MySQL ไม่ทำงานเนื่องจากเครื่องระยะไกลสามารถเชื่อมต่อและบังคับรหัสผ่านได้ อุโมงค์ SSH ดูเหมือนไม่สะดวกในการตั้งค่าสำหรับผู้ใช้ปลายทาง ... คุณมีตัวอย่าง IPTables ในการทำเช่นนี้หรือไม่?
Keith Palmer Jr.

2

1: เปลี่ยนพอร์ตจาก 3306 ไม่ใช่เพื่อความปลอดภัยที่ดีกว่า แต่เพื่อโหลดเซิร์ฟเวอร์เพื่อจัดการกับการเข้าสู่ระบบที่ผิดพลาด

2: สร้างใบรับรอง SSL และเปิดใช้งานบนเซิร์ฟเวอร์ MySQL ของคุณ (ต้องมีการเข้ารหัสการเชื่อมต่อไคลเอนต์เซิร์ฟเวอร์ของคุณ)

3: สร้างใบรับรองไคลเอ็นต์หนึ่งรายการขึ้นไป (ไคลเอนต์ทั้งหมดต้องมีใบรับรองและต้องกำหนดค่าซอฟต์แวร์ไคลเอ็นต์เพื่อใช้งาน) หากลูกค้าของคุณคือ. Netคุณจำเป็นต้องแปลงใบรับรองไคลเอ็นต์เป็นรูปแบบ pkcs12 แต่ทำได้ง่ายดูคู่มือนี้ ..

4: ตั้งค่าบัญชีผู้ใช้ MySQL ให้ต้องใช้ใบรับรองไคลเอ็นต์ x509 จากนั้นผู้โจมตีทั้งสองต้องใช้ข้อมูลรับรองการเข้าสู่ระบบและใบรับรองลูกค้า (คุณสามารถใส่รหัสผ่านในใบรับรองลูกค้าได้

ฉันใช้คำแนะนำนี้เพื่อสร้างใบรับรองและไฟล์คีย์ แต่มีคำแนะนำมากมายอยู่ที่นั่น

ฉันต้องการเพียงใช้การเชื่อมต่อ SSH ของฉันเพื่อเข้าถึงกล่อง linux ของฉันเพื่อวัตถุประสงค์ในการบริหารไม่ใช่เพื่อการเข้าถึงของลูกค้า


ขอบคุณสำหรับคำตอบ. ฉันใช้คำแนะนำนี้เพื่อทำ # 2, 3 และ 4: digitalocean.com/community/tutorials/…
ofri cofri

1

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

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

โดยรวมแล้วเป็นไปได้ในทางเทคนิค แต่ฉันจะให้คำแนะนำอื่น ๆ เกี่ยวกับการส่งสัญญาณผ่าน SSH หรือ VPN ไปยังช่วง IP ทั่วไปที่ได้รับอนุญาต (ผ่าน FW หรือวิธีการอื่น ๆ )


1 ยังใช้งานอื่น ๆ สำหรับ MySQL พร็อกซี :)
แอนดี้

0

ทำไมไม่อนุญาตให้ acces ไปยังพอร์ต mysqld จากโฮสต์ที่ปลอดภัยเท่านั้น?


ฉันพิจารณาสิ่งนี้ แต่นั่นหมายความว่าฉันต้องตรวจสอบการเปลี่ยนแปลงที่อยู่ IP สำหรับลูกค้าที่มีมากกว่า 1,000 ราย นั่นจะเป็นความเจ็บปวดครั้งใหญ่ในก้น ... ฉันจะทำยังไงต่อไป? มันไม่ได้ช่วยในการล็อคพวกเขาออกภายใน MySQL เพราะพวกเขายังสามารถเชื่อมต่อกับเซิร์ฟเวอร์ MySQL เพียงไม่จริงเลือกฐานข้อมูลใด ๆ ...
คี ธ พาลเมอร์จูเนียร์

1
อ้าง dave Drager ข้างต้น: "ปรับเปลี่ยน Denyhosts หรือ BFD สคริปต์เพื่อวิเคราะห์บันทึกการเข้าถึง MySQL และป้องกันการใด ๆ ที่พยายามบังคับเดรัจฉานที่ไฟร์วอลล์" ดูเหมือนว่าคิดที่ดีที่สุดหรือใช้รหัสผ่าน hierogliphic บาง :)
quaie

0

ในขณะที่นี่ไม่ใช่คำตอบที่ "จริง" - ฉันไม่รู้ว่าทำไมคุณต้องเปิดเผยกับโลกภายนอกโดยตรง

คุณไม่สามารถเปิดใช้งาน ssh บนกล่องนั้นและใช้การทันเนลเพื่อเข้าถึงเอ็นจิน db หรือไม่?

หรือโซลูชัน VPN อื่น ๆ เพื่อเข้าถึง (openvpn คำนึงถึง)


0

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


-1 เพื่อความปลอดภัยโดยความคลุมเครือ
thepocketwade

@thepocketwade - ซึ่งเป็นสาเหตุที่ฉันบอกว่ามันไม่ใช่ทางออกที่แท้จริงของปัญหา แต่มันก็ยังคงมีประโยชน์
Eric Petroelje

0

ฉันเชื่อว่าการเชื่อมต่อควรมีไฟร์วอลล์: รวดเร็วและดี มีบทเรียนมากมายสำหรับ iptables และอะไรก็ตาม :)

นอกจากนี้คุณสามารถติดตั้ง cronjob บนโฮสต์ของลูกค้าที่จะเรียกใช้ smth บนเซิร์ฟเวอร์เพื่อป้องกันไม่ให้ไฟร์วอลล์ปิดกั้นโฮสต์ที่รู้จัก


0

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


0

ข้อเสนอแนะเพื่อพิจารณาส่วน my.cnf-ini [mysqld] ของคุณ

max_connect_errors=10  # to limit hacker/cracker attempts to guess a password.

เพื่อหลีกเลี่ยงการพยายามนับร้อยครั้งใน 90 วินาที ตัดออกเมื่อพยายาม 10 ครั้ง

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

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