บันทึกการเชื่อมต่อกับโปรแกรม


9

นอกจากนี้สำหรับการใช้ iptables เพื่อบันทึกการเชื่อมต่อขาเข้า ..

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

ฉันรู้ว่าฉันสามารถใช้netstatและเชื่อมต่อกับ cron script แต่นั่นอาจไม่ถูกต้องเนื่องจากสคริปต์สามารถทำงานได้บ่อยเพียงหนึ่งนาที

นี่คือสิ่งที่ฉันคิดตอนนี้:

  • เขียนโปรแกรมที่โพลอย่างต่อเนื่องnetstatโดยมองหาการเชื่อมต่อที่สร้างขึ้นซึ่งไม่ปรากฏในแบบสำรวจก่อนหน้า แนวคิดนี้ดูเหมือนว่าจะทำให้เสียเวลาของ cpu เนื่องจากอาจไม่มีการเชื่อมต่อใหม่ ..
  • เขียนโปรแกรม wrapper ที่ยอมรับการเชื่อมต่อขาเข้าบนพอร์ตใดก็ตามที่เซอร์วิสทำงานอยู่ แต่จากนั้นฉันก็ไม่รู้ว่าจะผ่านการเชื่อมต่อนั้นไปยังบริการจริงได้อย่างไร

แก้ไข: เพิ่งเกิดขึ้นกับฉันว่าคำถามนี้อาจดีกว่าสำหรับ stackoverflow แม้ว่าฉันจะไม่แน่ใจ ขออภัยหากสถานที่นี้ผิด


ทำไมคุณไม่รวมการใช้ iptables แอปพลิเคชันของเราพอร์ตใดที่ฟังอยู่
user9517

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

คุณสามารถใช้ iptables เท่านั้นเพื่อบันทึกการเชื่อมต่อขาเข้าใหม่ไปยังพอร์ตใด ๆ ฉันทำอย่างนั้นสองสามกล่อง ดังนั้นฉันจึงย้ำคำถามที่ยอดเยี่ยมของ Iain: ทำไมคุณถึงไม่ใช้ iptables ล่ะ?
MadHatter

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

คำตอบ:


4

คุณสามารถบันทึกการเชื่อมต่อใหม่ด้วย iptables ได้

iptables -I INPUT -m state --state NEW -j LOG --log-level 1 --log-prefix "New Connection "

นี้จะเพิ่มข้อความเช่นนี้สำหรับการปรุง ssh ใหม่

6 Oct 10:58:23 centos kernel: การเชื่อมต่อใหม่ใน = eth0 OUT = MAC = 00: 0c: 29: 5b: a5: ea: 00: 0c: 29: 2d: 94: a0: 08: 00 SRC = 192.168 1.72 DST = 192.168.254.187 LEN = 52 TOS = 0x00 PREC = 0x00 TTL = 126 ID = 15498 DF PROTO = TCP SPT = 59221 DPT = 22 หน้าต่าง = 8192 RES = 0x00 SYN URGP = 0

หรือเช่นนี้สำหรับการเชื่อมต่อ http ใหม่

6 ตุลาคม 11:03:56 เคอร์เนล centos: การเชื่อมต่อใหม่ใน = eth0 OUT = MAC = 00: 0c: 29: 5b: a5: ea: 00: 0c: 29: d2: 2c: 38: 08: 00 SRC = 192.168 254.188 DST = 192.168.254.187 LEN = 60 TOS = 0x10 PREC = 0x00 TTL = 64 ID = 10345 DF PROTO = TCP SPT = 52488 DPT = 80 WINDOW = 14600 RES = 0x00 SYN URGP = 0

และอื่น ๆ สำหรับการเชื่อมต่อใหม่แต่ละครั้งกับระบบของคุณ จะถูกบันทึกไว้ที่ใดก็ตามที่ syslog ของคุณถูกกำหนดค่าให้ส่งข้อความ kern.warning


หลังจากมองไปรอบ ๆ มากขึ้นวิธีนี้น่าจะเป็นทางออกที่ดีที่สุดของฉัน ฉันจะรวมสิ่งนี้กับ rsyslog เพื่อเข้าสู่ไฟล์แยกต่างหาก ขอบคุณมากสำหรับคำตอบที่ให้ข้อมูลของคุณ Iain!
Zac

0

คุณสามารถใช้ auditd และเมื่อสิ้นสุดวันคำนวณสถิติบางอย่างตาม loglines เหล่านั้น หรือคุณอาจไปที่โซลูชัน snmp แต่คุณอาจจะเขียน mib ของคุณเอง


0

วิธีการเกี่ยวกับ tcpdump หรือ wireshark


โปรดขยายคำตอบของคุณอีกเล็กน้อย บางทีแนะนำให้ผู้ใช้ทราบว่า tcpdump และ wireshark จะได้รับประโยชน์จากการแก้ไขปัญหาอย่างไร
Magellan

คู่มือ tcpdumpโดยที่คุณสามารถบันทึกแพ็กเก็ตแบบเต็มได้ คุณสามารถจับแพ็คเก็ตด้วย tcpdump และวิเคราะห์ใน wireshark tcpdump -i <interface> -s 65535 -w <some-file>นอกจากนี้คุณจะต้องยุติการจับภาพด้วย ^ C เมื่อคุณเชื่อว่าคุณได้จับแพ็คเก็ตเพียงพอ
Guntis
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.