เข้าสู่ระบบ MySQL พยายามเข้าสู่ระบบ


25

มีการพยายามเข้าสู่ระบบล้มเหลวเป็นครั้งคราวในเซิร์ฟเวอร์การผลิต MySQL ของเรา (แผงควบคุม MySQL เตือนเรา) มีวิธีการบันทึกทุกความสำเร็จและเข้าสู่เซิร์ฟเวอร์ MySQL ไม่สำเร็จgeneral_logหรือไม่?

เราคิดว่าgeneral_logไม่ใช่ตัวเลือกเนื่องจากเป็นเซิร์ฟเวอร์ที่ใช้งานจริงซึ่งมีโหลดสูง


1
พิจารณาใช้ปลั๊กอินตรวจสอบ MariaDB mariadb.com/resources/blog/… mariadb.com/kb/en/mariadb/about-the-mariadb-audit-plugin
Mersh

ตามที่กล่าวไว้อย่างเป็นทางการของ mysql: As of MySQL 5.5.28, MySQL Enterprise Edition includes MySQL Enterprise Audit, implemented using a server plugin named audit_log. มีเพียงเวอร์ชั่นที่กล้าได้กล้าเสียเท่านั้น
Tiina

คำตอบ:


20

เพียงเพื่อแจ้งให้คนที่อยากรู้อยากเห็น: ขุดในบันทึกข้อผิดพลาดและโอมเพี้ยงของคุณ!

(1) แก้ไข my.cnf (พบเอกสารการตั้งค่าที่นี่ )

[mysqld]

: # ป้อนชื่อไฟล์บันทึกข้อผิดพลาด มิฉะนั้นจะใช้ชื่อเริ่มต้น

log_error = / var / log / mysql / ข้อผิดพลาด

: #defaults ถึง 1 หากค่าคือ> 1 การเชื่อมต่อที่ถูกยกเลิกและข้อผิดพลาดที่ปฏิเสธการเข้าถึงสำหรับความพยายามในการเชื่อมต่อใหม่จะถูกเขียนไปยังบันทึกข้อผิดพลาด

log_warnings = 2

...

(2) ที่รันคำสั่ง

$ sudo cat /var/log/mysql/error.err | egrep '[aA] ccess ถูกปฏิเสธ'

(3) และคุณมีมัน!

(4) หากคุณจำเป็นต้อง จำกัด ผู้ใช้ (การโจมตี DOS หรือความพยายามกู้คืนรหัสผ่านผู้ใช้ mysql ในฐานข้อมูลผู้ใช้หลายคน) จากนั้น ( http://dev.mysql.com/doc/refman/5.5/en/user-resources.html )

mysql> ให้การใช้งานบน * * ถึง 'attacker' @ 'localhost' ด้วย MAX_CONNECTIONS_PER_HOUR 100;

เพื่อ จำกัด การพยายามกู้คืนรหัสผ่านเพียง 100 ครั้งต่อชั่วโมง


2

ฉันคิดว่าบันทึกทั่วไปอาจบันทึกความพยายามในการเข้าสู่ระบบทั้งหมด (สำเร็จและล้มเหลว) ท่ามกลางสิ่งอื่น ๆ มากมาย ปัญหาหลักคือบันทึกทั่วไปจะมีผลต่อประสิทธิภาพของฐานข้อมูลของคุณ คุณสามารถเปิดบันทึกทั่วไปด้วยแบบสอบถาม

SET GLOBAL general_log = 'on'

สำหรับ MySQL เวอร์ชั่นใหม่


นี่เป็นชั่วคราวหรือถาวรหรือไม่ถ้าเป็นชั่วคราวนั่นหมายความว่าฉันต้องแก้ไข/etc/mysql/my.cnfmysql หรือไม่
DarckBlezzer

มันเป็นชั่วคราว วิธีการนั้นสามารถใช้งานได้หรือคุณสามารถเพิ่ม--general-logการตั้งค่าสถานะเมื่อคุณเริ่ม MySQL
rmc00

1

สวัสดีฉันคิดว่ามันเป็นไปไม่ได้

ในฐานะของ mysql 5.1.29 - คุณสามารถระบุตัวเลือกการจัดเก็บ (ตารางหรือไฟล์) และตำแหน่งและบันทึกที่คุณต้องการ - ข้อผิดพลาดทั่วไปการสืบค้นแบบไบนารีหรือแบบช้า เท่าที่ฉันรู้ - คุณไม่สามารถระบุรูปแบบของบันทึกหรือสิ่งที่ได้รับการบันทึก ฉันอาจจะผิด - แต่ฉันคิดว่าการเข้าสู่ระบบทั้งหมดจะถูกบันทึกไว้ในบันทึกทั่วไปไม่ใช่ข้อผิดพลาด

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

หวังว่าจะช่วย


1

หนึ่งสามารถเข้าสู่ระบบconnectและquitคำสั่งโดยใช้ mysql-audit-plugin

  1. ค้นหารุ่นที่เหมาะสมจากการเปิดตัว MySQL การตรวจสอบปลั๊กอินผมใช้ MySQL 5.7 audit-plugin-percona-5.7-1.1.7-805-linux-x86_64.zipดังนั้นผมจึงใช้
  2. ย้ายที่ดาวน์โหลดไฟล์ไปยังสถานที่ที่กำหนดโดยsomysqladmin variables | grep plugin_dir
  3. mysql>install plugin audit soname 'libaudit_plugin.so'
  4. การเปิดฟังก์ชั่นบันทึกmysql>set global audit_json_file=ONโดยค่าเริ่มต้นจะบันทึกการทำงานที่ประสบความสำเร็จทั้งหมด โดยการตั้งค่าset global audit_record_cmds='quit,connect'มันล็อกเชื่อมต่อเท่านั้นและผมคิดว่าลาออกตามMySQL การตรวจสอบการตั้งค่าปลั๊กอิน

นี่คือลักษณะที่ปรากฏในไฟล์สำหรับการเข้าสู่ระบบและออกจากระบบ:

{"msg-type":"activity","date":"1543740612328","thread-id":"1015112","query-id":"3045222","user":"root","priv_user":"skip-grants user","ip":"172.28.15.10","host":"172.28.15.10","connect_attrs":{"_os":"Linux","_client_name":"libmysql","_pid":"11575","_client_version":"5.6.40","_platform":"x86_64","program_name":"mysql"},"cmd":"Quit","query":"Quit"} 

{"msg-type":"activity","date":"1543740724627","thread-id":"1015113","query-id":"0","user":"root","priv_user":"skip-grants user","ip":"172.28.15.10","host":"172.28.15.10","connect_attrs":{"_os":"Linux","_client_name":"libmysql","_pid":"11863","_client_version":"5.6.40","_platform":"x86_64","program_name":"mysql"},"cmd":"Connect","query":"Connect"}
{"msg-type":"activity","date":"1543740724629","thread-id":"1015113","query-id":"3045223","user":"root","priv_user":"skip-grants user","ip":"172.28.15.10","host":"172.28.15.10","connect_attrs":{"_os":"Linux","_client_name":"libmysql","_pid":"11863","_client_version":"5.6.40","_platform":"x86_64","program_name":"mysql"},"rows":"1","status":"0","cmd":"select","query":"select @@version_comment limit 1"}

0

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

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


MySQL ปฏิเสธการเชื่อมต่อจากที่อยู่ IP โดยอัตโนมัติซึ่งไม่มีแถวที่ตรงกันอย่างน้อยหนึ่งแถวใน mysql.user
David M

0

ที่http://www.mysqlperformanceblog.com/2008/11/07/poor-mans-query-logging/ผู้เขียนแสดงวิธีการจับแพ็คเก็ตโดยใช้ tcpdump และกรองเอาต์พุตตามสตริง

วิธีนี้ใช้ได้ผลกับข้อกังวลของคุณเกี่ยวกับ general_log และประสิทธิภาพแม้ว่า tcpdump อาจมีโทษเล็กน้อยจากประสิทธิภาพ โซลูชันนี้จะบันทึกข้อมูลน้อยลงจากนั้นบันทึกการสืบค้นทั่วไป

ฉันไม่ได้ใช้สิ่งนี้ด้วยตัวเอง แต่ฟังดูมีประโยชน์มาก


ฟังดูดี แต่ลิงก์ใช้งานไม่ได้สำหรับฉัน
CarlosH

ลิงค์นี้ใช้ได้สำหรับฉันเมื่อเช้านี้โดยใช้ Firefox mysqlperformanceblog.com/2008/11/07/poor-mans-query-logging
Stefan Lasiewski

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