ค้นหาเว็บไซต์

วิธีสร้างเซิร์ฟเวอร์บันทึกส่วนกลางด้วย Rsyslog ใน CentOS/RHEL 7


เพื่อให้ผู้ดูแลระบบสามารถระบุหรือแก้ไขปัญหาบนระบบเซิร์ฟเวอร์ CentOS 7 หรือ RHEL 7 ได้ ผู้ดูแลระบบจะต้องทราบและดูเหตุการณ์ที่เกิดขึ้นบนระบบในลักษณะเฉพาะ ระยะเวลาจากไฟล์บันทึกที่จัดเก็บไว้ในระบบในไดเร็กทอรี /var/log

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

ในระบบ CentOS/RHEL 7 Rsyslog daemon เป็นเซิร์ฟเวอร์บันทึกหลักที่ติดตั้งไว้ล่วงหน้า ตามด้วย Systemd Journal Daemon (journald แข็งแกร่ง>)

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

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

เซิร์ฟเวอร์ Syslog ดำเนินการข้อความบันทึกโดยใช้รูปแบบต่อไปนี้:

type (facility).priority (severity)  destination(where to send the log)

ก. สิ่งอำนวยความสะดวก หรือข้อมูลประเภทจะแสดงโดยกระบวนการของระบบภายในที่สร้างข้อความ ในกระบวนการภายใน Linux (สิ่งอำนวยความสะดวก) ที่สร้างบันทึกจะมีการกำหนดมาตรฐานดังนี้:

  • auth = ข้อความที่สร้างโดยกระบวนการตรวจสอบสิทธิ์ (เข้าสู่ระบบ)
  • cron= ข้อความที่สร้างโดยกระบวนการที่กำหนดเวลาไว้ (crontab)
  • daemon = ข้อความที่สร้างโดย daemons (บริการภายใน)
  • เคอร์เนล = ข้อความที่สร้างโดยเคอร์เนล Linux เอง
  • เมล = ข้อความที่สร้างโดยเซิร์ฟเวอร์เมล
  • syslog = ข้อความที่สร้างโดย rsyslog daemon เอง
  • lpr = ข้อความที่สร้างโดยเครื่องพิมพ์ท้องถิ่นหรือเซิร์ฟเวอร์การพิมพ์
  • local0 – local7 = ข้อความที่กำหนดเองที่กำหนดโดยผู้ดูแลระบบ (โดยปกติแล้ว local7 จะกำหนดให้กับ Cisco หรือ Windows)

B. ระดับลำดับความสำคัญ (ความรุนแรง) ยังเป็นมาตรฐานอีกด้วย ลำดับความสำคัญแต่ละรายการจะกำหนดด้วยตัวย่อมาตรฐานและตัวเลขตามที่อธิบายไว้ด้านล่าง ลำดับความสำคัญที่ 7 คือระดับที่สูงกว่าของทั้งหมด

  • ฉุกเฉิน = ฉุกเฉิน – 0
  • การแจ้งเตือน = การแจ้งเตือน – 1
  • ผิดพลาด = ข้อผิดพลาด – 3
  • คำเตือน = คำเตือน – 4
  • ประกาศ = การแจ้งเตือน – 5
  • ข้อมูล = ข้อมูล – 6
  • ดีบัก = การดีบัก – 7

คีย์เวิร์ด Rsyslog พิเศษ:

  • *=สิ่งอำนวยความสะดวกหรือลำดับความสำคัญทั้งหมด
  • ไม่มี=สิ่งอำนวยความสะดวกไม่มีลำดับความสำคัญ เช่น mail.none

C. ส่วนที่สามสำหรับสคีมา syslog จะแสดงด้วยคำสั่ง ปลายทาง Rsyslog daemon สามารถส่งข้อความบันทึกเพื่อเขียนในไฟล์บนระบบไฟล์ในเครื่อง (ส่วนใหญ่อยู่ในไฟล์ในไดเร็กทอรี /var/log/) หรือเพื่อส่งไปยังกระบวนการในเครื่องอื่นหรือส่งไปยัง คอนโซลผู้ใช้ภายในเครื่อง (ไปยัง stdout) หรือส่งข้อความไปยังเซิร์ฟเวอร์ syslog ระยะไกลผ่านโปรโตคอล TCP/UDP หรือแม้แต่ละทิ้งข้อความไปที่ /dev/null

ในการกำหนดค่า CentOS/RHEL 7 เป็นเซิร์ฟเวอร์บันทึกส่วนกลาง ขั้นแรกเราต้องตรวจสอบและให้แน่ใจว่าพาร์ติชัน /var ที่ไฟล์บันทึกทั้งหมดได้รับการบันทึกมีขนาดใหญ่เพียงพอ ( อย่างน้อยสองสาม GB) เพื่อให้สามารถจัดเก็บไฟล์บันทึกทั้งหมดที่อุปกรณ์อื่นจะส่งได้ เป็นการตัดสินใจที่ดีที่จะใช้ไดรฟ์แยกต่างหาก (LVM, RAID) เพื่อเมานต์ไดเร็กทอรี /var/log/

ความต้องการ

  1. ขั้นตอนการติดตั้ง CentOS 7.3
  2. ขั้นตอนการติดตั้ง RHEL 7.3

วิธีกำหนดค่า Rsyslog ในเซิร์ฟเวอร์ CentOS/RHEL 7

1. ตามค่าเริ่มต้น บริการ Rsyslog จะได้รับการติดตั้งโดยอัตโนมัติและควรจะทำงานใน CentOS/RHEL 7 เพื่อตรวจสอบว่า daemon เริ่มทำงานในระบบหรือไม่ ให้ออกคำสั่งต่อไปนี้พร้อมสิทธิ์ root

systemctl status rsyslog.service

หากบริการไม่ได้ทำงานตามค่าเริ่มต้น ให้ดำเนินการคำสั่งด้านล่างเพื่อเริ่ม rsyslog daemon

systemctl start rsyslog.service

2. หากไม่ได้ติดตั้งแพ็คเกจ rsyslog บนระบบที่คุณต้องการใช้เป็นเซิร์ฟเวอร์การบันทึกแบบรวมศูนย์ ให้ออกคำสั่งต่อไปนี้เพื่อติดตั้งแพ็คเกจ rsyslog

yum install rsyslog

3. ขั้นตอนแรกที่เราต้องทำบนระบบเพื่อกำหนดค่า rsyslog daemon เป็นเซิร์ฟเวอร์บันทึกแบบรวมศูนย์ เพื่อให้สามารถรับข้อความบันทึกสำหรับไคลเอ็นต์ภายนอกได้ คือการเปิดและแก้ไข โดยใช้ โปรแกรมแก้ไขข้อความโปรด ซึ่งเป็นไฟล์การกำหนดค่าหลักจาก /etc/rsyslog.conf ดังที่แสดงในข้อความที่ตัดตอนมาด้านล่าง

vi /etc/rsyslog.conf

ในไฟล์การกำหนดค่าหลักของ rsyslog ให้ค้นหาและยกเลิกการใส่เครื่องหมายข้อคิดเห็นในบรรทัดต่อไปนี้ (ลบเครื่องหมายแฮชแท็ก # ที่จุดเริ่มต้นของบรรทัด) เพื่อให้การรับส่งผ่าน UDP ไปยังเซิร์ฟเวอร์ Rsyslog ผ่านทาง 514 ท่าเรือ. UDP เป็นโปรโตคอลมาตรฐานที่ใช้สำหรับการส่งบันทึกโดย Rsyslog

$ModLoad imudp 
$UDPServerRun 514

4. โปรโตคอล UDP ไม่มีค่าใช้จ่าย TCP ซึ่งทำให้ส่งข้อมูลได้เร็วกว่าโปรโตคอล TCP ในทางกลับกัน โปรโตคอล UDP ไม่รับประกันความน่าเชื่อถือของข้อมูลที่ส่ง

อย่างไรก็ตาม หากคุณต้องการใช้โปรโตคอล TCP สำหรับการรับบันทึก คุณต้องค้นหาและไม่แสดงข้อคิดเห็นบรรทัดต่อไปนี้จากไฟล์ /etc/rsyslog.conf เพื่อกำหนดค่า Rsyslog daemon ให้ผูกและฟังซ็อกเก็ต TCP บน 514 ท่าเรือ. ซ็อกเก็ตการฟัง TCP และ UDP สำหรับการรับสัญญาณสามารถกำหนดค่าบนเซิร์ฟเวอร์ Rsyslog ได้พร้อมกัน

$ModLoad imtcp 
$InputTCPServerRun 514 

5. ในขั้นตอนถัดไป อย่าเพิ่งปิดไฟล์ สร้างเทมเพลตใหม่ที่จะใช้สำหรับรับข้อความระยะไกล เทมเพลตนี้จะแนะนำเซิร์ฟเวอร์ Rsyslog ในพื้นที่ให้บันทึกข้อความที่ได้รับซึ่งส่งโดยไคลเอ็นต์เครือข่าย syslog ต้องเพิ่มเทมเพลตก่อนจุดเริ่มต้นของบล็อก GLOBAL DIRECTIVES ดังที่แสดงในข้อความที่ตัดตอนมาด้านล่าง

$template RemoteLogs,"/var/log/%HOSTNAME%/%PROGRAMNAME%.log" 
. ?RemoteLogs & ~

คำสั่ง $template RemoteLogs ข้างต้นสั่งให้ Rsyslog daemon รวบรวมและเขียนข้อความบันทึกที่ได้รับทั้งหมดลงในไฟล์ที่แตกต่างกัน โดยขึ้นอยู่กับชื่อเครื่องไคลเอ็นต์และสิ่งอำนวยความสะดวกไคลเอ็นต์ระยะไกล (แอปพลิเคชัน) ที่สร้างข้อความตาม คุณสมบัติที่กำหนดไว้มีอยู่ในการกำหนดค่าเทมเพลต: %HOSTNAME% และ %PROGRAMNAME%

ไฟล์บันทึกทั้งหมดนี้จะถูกเขียนลงในระบบไฟล์ในเครื่องไปยังไฟล์เฉพาะที่ตั้งชื่อตามชื่อโฮสต์ของเครื่องไคลเอ็นต์ และจัดเก็บไว้ในไดเร็กทอรี /var/log/

กฎการเปลี่ยนเส้นทาง & ~ สั่งให้เซิร์ฟเวอร์ Rsyslog ในเครื่องหยุดการประมวลผลข้อความบันทึกที่ได้รับเพิ่มเติม และละทิ้งข้อความ (ไม่ใช่เขียนลงในไฟล์บันทึกภายใน)

ชื่อ RemoteLogs เป็นชื่อที่กำหนดเองที่กำหนดให้กับคำสั่งเทมเพลตนี้ คุณสามารถใช้ชื่ออะไรก็ได้ที่เหมาะกับเทมเพลตของคุณมากที่สุด

หากต้องการเขียนข้อความที่ได้รับทั้งหมดจากไคลเอนต์ในไฟล์บันทึกเดียวที่ตั้งชื่อตามที่อยู่ IP ของไคลเอนต์ระยะไกล โดยไม่ต้องกรองสิ่งอำนวยความสะดวกที่สร้างข้อความ ให้ใช้ข้อความที่ตัดตอนมาด้านล่าง

$template FromIp,"/var/log/%FROMHOST-IP%.log" 
. ?FromIp & ~ 

อีกตัวอย่างหนึ่งของเทมเพลตที่ข้อความทั้งหมดที่มีการตั้งค่าสถานะการรับรองความถูกต้องจะถูกบันทึกลงในเทมเพลตชื่อ “TmplAuth

$template TmplAuth, "/var/log/%HOSTNAME%/%PROGRAMNAME%.log" 
authpriv.*   ?TmplAuth

ด้านล่างนี้เป็นข้อความที่ตัดตอนมาจากคำจำกัดความเทมเพลตจากเซิร์ฟเวอร์ Rsyslog 7:

template(name="TmplMsg" type="string"
         string="/var/log/remote/msg/%HOSTNAME%/%PROGRAMNAME:::secpath-replace%.log"
        )

ข้อความที่ตัดตอนมาจากเทมเพลตข้างต้นสามารถเขียนได้เป็น:

template(name="TmplMsg" type="list") {
    constant(value="/var/log/remote/msg/")
    property(name="hostname")
    constant(value="/")
    property(name="programname" SecurePath="replace")
    constant(value=".log")
    }

หากต้องการเขียนเทมเพลต Rsyslog ที่ซับซ้อน โปรดอ่านคู่มือไฟล์การกำหนดค่า Rsyslog โดยใช้คำสั่ง man rsyslog.conf หรือปรึกษาเอกสารออนไลน์ของ Rsyslog

6. หลังจากที่คุณแก้ไขไฟล์การกำหนดค่า Rsyslog ด้วยการตั้งค่าของคุณเองตามที่อธิบายไว้ข้างต้น ให้รีสตาร์ท Rsyslog daemon เพื่อใช้การเปลี่ยนแปลงโดยออกคำสั่งต่อไปนี้:

service rsyslog restart

7. ขณะนี้ เซิร์ฟเวอร์ Rsyslog ควรได้รับการกำหนดค่าให้ทำหน้าที่เป็นเซิร์ฟเวอร์บันทึกส่วนกลางและบันทึกข้อความจากไคลเอ็นต์ syslog หากต้องการตรวจสอบซ็อกเก็ตเครือข่าย Rsyslog ให้เรียกใช้คำสั่ง netstat ด้วยสิทธิ์ระดับรูท และใช้ grep เพื่อกรองสตริง rsyslog

netstat -tulpn | grep rsyslog 

8. หากคุณเปิดใช้งาน SELinux ใน CentOS/RHEL 7 ให้ใช้คำสั่งต่อไปนี้เพื่อกำหนดค่า SELinux เพื่ออนุญาตการรับส่งข้อมูล rsyslog ขึ้นอยู่กับประเภทซ็อกเก็ตเครือข่าย

semanage -a -t syslogd_port_t -p udp 514
semanage -a -t syslogd_port_t -p tcp 514 

9. หากไฟร์วอลล์เปิดใช้งานและทำงานอยู่ ให้รันคำสั่งด้านล่างเพื่อเพิ่มกฎที่จำเป็นสำหรับการเปิดพอร์ต rsyslog ใน Firewalld

firewall-cmd --permanent --add-port=514/tcp
firewall-cmd --permanent --add-port=514/udp
firewall-cmd –reload

นั่นคือทั้งหมด! ขณะนี้ Rsyslog ได้รับการกำหนดค่าในโหมดเซิร์ฟเวอร์และสามารถรวมบันทึกจากไคลเอ็นต์ระยะไกลได้ ในบทความถัดไป เราจะดูวิธีกำหนดค่าไคลเอ็นต์ Rsyslog บนเซิร์ฟเวอร์ CentOS/RHEL 7

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