เก็บปริมาณการใช้งาน network บนลินุกซ์ด้วย conntrack-tools « SpaLinux.com
เก็บปริมาณการใช้งาน network บนลินุกซ์ด้วย conntrack-tools
Saturday 20 September 2008 @ 12:15 am

ในบทความนี้จะกล่าวถึงวิธีการคอนฟิกลินุกซ์ให้สามารถเก็บปริมาณการใช้งาน network ที่เข้าออกเครื่องได้ โดยจะเป็นรายงาน (log) แบบค่อนข้างละเอียดคือ ดูได้ว่าแต่ละ packet ที่ส่งเข้า/ออกเครื่องนั้นมีประเภทไหนบ้าง มาจาก IP Address ต้นทาง ปลายทาง จากไหน ใช้ protocol เป็น TCP หรือ UDP และใช้ Port อะไร เช่นเป็น Web, Mail, Secure Shell

หมายเหตุ คุณสมบัตินี้จะคล้ายๆ กับการใช้งาน Netflow บนอุปกรณ์ Cisco Router

มีหลายวิธีที่สามารถทำได้ แต่ในที่นี้จะแนะนำการใช้โปรแกรม conntrack-tools จับปริมาณการใช้งาน โดย conntrack-tools ถือว่าเป็นโปรแกรม (userspace tools) ที่ติดต่อกับ Linux kernel ในส่วนของ Connection Tracking System จุดประสงค์หลักๆ ของโปรแกรมนี้จะสามารถนำไปทำเป็น High Availability stateful firewall ได้ แต่ในบทความนี้จะขอไม่กล่าวถึงการใช้งานคุณสมบัตินี้

คุณสมบัติของเครื่องที่จะสามารถคอนฟิกให้ใช้งาน conntrack-tools ได้นั้นมีดังนี้

  • ใช้เวอร์ชั่น Linux kernel มากกว่า 2.6.18
  • ติดตั้ง Library ชื่อ libnfnetlink, libnetfilter_conntrack
  • คอนฟิกและเปิดการใช้งาน connection tracking system, nfnetlink
  • ติดตั้งโปรแกรม conntrack-tools

ตัวอย่างในบทความนี้ทดสอบบน Fedora 9 ซึ่งจะติดตั้ง kernel และ Library ตามข้อกำหนดมาเรียบร้อยแล้ว สิ่งที่ต้องทำเพิ่มคือเปิดการใช้งาน Connection Tracking System และติดตั้งโปรแกรม conntrack-tools เพิ่มเติม

ตรวจสอบเครื่องก่อนลงโปรแกรมเพิ่มเติม

ตัวอย่างการตรวจสอบ kernel และ Library ก่อนลงโปรแกรมเพิ่มเติม

[root@server ~]# uname -a
Linux server.nelisys.com 2.6.25-14.fc9.i686 #1 SMP Thu May 1 06:28:41 EDT 2008 i686 i686 i386 GNU/Linux
[root@server ~]# rpm -q libnfnetlink
libnfnetlink-0.0.33-0.1.svn7211.fc9.i386
[root@server ~]# rpm -q libnetfilter_conntrack
libnetfilter_conntrack-0.0.89-0.1.svn7356.fc9.i386

เปิดการใช้งาน Connection Tracking System

ก่อนที่โปรแกรมจะสามารถจับสถิติการใช้งานได้นั้นจำเป็นต้องเปิดคุณสมบัติ Connection Tracking System โดยในที่นี้จะคอนฟิก iptables ให้ตรวจสอบ state ทุก packet ที่วิ่งเข้าออกจากเครื่อง ดังนี้

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

ตัวอย่างไฟล์คอนฟิกของ iptables

[root@server ~]# cat /etc/sysconfig/iptables
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT  -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
-A OUTPUT -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
COMMIT

ใช้คำสั่ง service เพื่อรัน iptables

[root@server ~]# service iptables start
iptables: Applying firewall rules:                         [  OK  ]

ตรวจสอบ rules ที่ถูกสร้างขึ้น

[root@server ~]# iptables -L -v -n
Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination
   71  5388 ACCEPT     all  --  *      *       0.0.0.0/0            0.0.0.0/0           state NEW,RELATED,ESTABLISHED
Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination
Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination
   64  6204 ACCEPT     all  --  *      *       0.0.0.0/0            0.0.0.0/0           state NEW,RELATED,ESTABLISHED

ใช้คำสั่ง lsmod เพื่อดู kernel module ที่ถูกเรียกใช้งานสำหรับการทำ Connection Tracking System

[root@server ~]# lsmod | grep con
nf_conntrack_ipv4      11396  2
nf_conntrack           49748  2 nf_conntrack_ipv4,xt_state

ติดตั้งโปรแกรม conntrack-tools

สามารถดาวน์โหลดโปรแกรม conntrack-tools สำหรับติดตั้งบน Fedora 9 ได้จาก

http://mirrors.kernel.org/fedora/releases/9/Everything/i386/os/Packages/conntrack-tools-0.9.6-0.1.svn7382.fc9.i386.rpm

ตัวอย่างการติดตั้งโปรแกรม conntrack-tools

[root@server ~]# rpm -ivh conntrack-tools-0.9.6-0.1.svn7382.fc9.i386.rpm
Preparing...                ########################################### [100%]
   1:conntrack-tools        ########################################### [100%]

จากการติดตั้งจะมีอยู่สองโปรแกรมคือ
- conntrackd จะรันเป็น daemon ในการเก็บปริมาณการใช้งาน network
- conntrack เป็นโปรแกรมที่ตรวจสอบไฟล์ /proc/net/ip_conntrack

ในบทความนี้เราจะใช้เฉพาะ conntrackd รันเป็น daemon

สร้างไฟล์คอนฟิกของ conntrackd

ขั้นตอนต่อไปคือการสร้างไฟล์ /etc/conntrackd/conntrackd.conf ซึ่งเป็นไฟล์คอนฟิกของ conntrackd โดยในที่นี้จะคอนฟิกให้รันอยู่ในโหมดการเก็บสถิติการใช้งาน network accounting

ตัวอย่างไฟล์คอนฟิก /etc/conntrackd/conntrackd.conf ในโหมดการเก็บสถิติการใช้งาน

[root@server ~]# cat /etc/conntrackd/conntrackd.conf
#
# General settings
#
General {
    #
    # Number of buckets in the caches: hash table
    #
    HashSize 8192
    #
    # Maximum number of conntracks:
    # it must be >= $ cat /proc/sys/net/ipv4/netfilter/ip_conntrack_max
    #
    HashLimit 65535
    #
    # Logfile: on, off, or a filename
    # Default: on (/var/log/conntrackd.log)
    #
    LogFile off
    #
    # Syslog: on, off or a facility name (daemon (default) or local0..7)
    # Default: off
    #
    Syslog off
    #
    # Lockfile
    #
    LockFile /var/lock/conntrack.lock
    #
    # Unix socket configuration
    #
    UNIX {
        Path /tmp/sync.sock
        Backlog 20
    }
    #
    # Netlink socket buffer size
    #
    SocketBufferSize 262142
    #
    # Increase the socket buffer up to maximum if required
    #
    SocketBufferSizeMaxGrown 655355
}
Stats {
    #
    # If you enable this option, the daemon writes the information about
    # destroyed connections to a logfile. Default is off.
    # Logfile: on, off, or a filename
    # Default file: (/var/log/conntrackd-stats.log)
    #
    LogFile on
    #
    # Enable connection logging via Syslog. Default is off.
    # Syslog: on, off or a facility name (daemon (default) or local0..7)
    # If you set the facility, use the same as in the General clause,
    # otherwise you'll get a warning message.
    #
    Syslog off
}
#
# Ignore traffic for a certain set of IP's: Usually
# all the IP assigned to the firewall since local
# traffic must be ignored, just forwarded connections
# are worth to replicate
#
IgnoreTrafficFor {
    IPv4_address 127.0.0.1 # loopback
}
#
# Do not replicate certain protocol traffic
#
IgnoreProtocol {
#    UDP
#   ICMP
#   IGMP
#   VRRP
    # numeric numbers also valid
}

รันโปรแกรม conntrackd

รันโปรแกรม conntrackd ให้เป็น daemon ของเครื่องตามตัวอย่าง

[root@server ~]# conntrackd -d
[root@server ~]# ps -ef | grep conntrackd
root     17381     1  0 22:19 ?        00:00:00 conntrackd -d

ทดสอบการใช้งานและดูไฟล์ที่ถูกสร้างขึ้น

ไฟล์คอนฟิกด้านบนจะสั่งให้โปรแกรม conntrackd ที่รันเก็บสถิติไว้ในไฟล์ /var/log/conntrackd-stats.log โดยจะเก็บสถิติเมื่อมีการส่งข้อมูลสิ้นสุด (close connection) ในแต่ละ packet ที่เข้าออกเครื่อง

ตัวอย่างไฟล์ที่ถูกสร้างขึ้น

Fri Sep 19 22:24:11 2008        tcp      6 src=192.168.1.1 dst=192.168.1.9 sport=1038 dport=22 packets=15 bytes=1864
                                           src=192.168.1.9 dst=192.168.1.1 sport=22 dport=1038 packets=12 bytes=2984
Fri Sep 19 22:24:21 2008        tcp      6 src=192.168.1.1 dst=192.168.1.9 sport=1039 dport=80 packets=5 bytes=817
                                           src=192.168.1.9 dst=192.168.1.1 sport=80 dport=1039 packets=5 bytes=639
Fri Sep 19 22:24:25 2008        tcp      6 src=192.168.1.1 dst=192.168.1.9 sport=1043 dport=80 packets=6 bytes=917
                                           src=192.168.1.9 dst=192.168.1.1 sport=80 dport=1043 packets=6 bytes=2784
Fri Sep 19 22:24:25 2008        tcp      6 src=192.168.1.1 dst=192.168.1.9 sport=1044 dport=80 packets=5 bytes=718
                                           src=192.168.1.9 dst=192.168.1.1 sport=80 dport=1044 packets=4 bytes=303
Fri Sep 19 22:24:25 2008        tcp      6 src=192.168.1.1 dst=192.168.1.9 sport=1045 dport=80 packets=5 bytes=718
                                           src=192.168.1.9 dst=192.168.1.1 sport=80 dport=1045 packets=5 bytes=342

ข้อมูลอ้างอิง


Comments (0) - Posted in Kernel,Networking by editor  



Leave a comment