• Thứ Năm, 08/01/2004 10:25 (GMT+7)

    Tìm hiểu và cài đặt firewall trong Linux

    Internet phát triển rất nhanh và đã trở thành nhu cầu không thể thiếu cho các văn phòng, cơ quan, doanh nghiệp v.v… Vấn đề đặt ra là phải quản lý người dùng trong cơ quan, hay nói chung là quản lý truy cập của các thành viên trong mạng LAN ra internet. Do vậy việc xây dụng một firewall cho riêng LAN là việc làm không thể thiếu.
    Firewall là bức tường ngăn giữa các mạng với nhau ví dụ như giữa LAN và internet.
    Internet firewall làm nhiệm vụ chống các truy cập trái phép từ internet vào mạng LAN và hạn chế các thành viên cuả mạng LAN truy cập internet.

    Kiểu cấu trúc mạng cơ bản có sử dụng firewall như sau:

    Trong bài viết này tôi sẽ trình bày phương thức cài đặt và cấu hình firewall trên một trạm làm việc sử dụng hệ điều hành Linux (Redhat 6.1).

     Yêu cầut phần cứng: Máy chạy Linux có ít nhất 2 card mạng (hoặc 1 card modem)

     Yêu cầut phần mềm: hệ điều hành Linux và một số tiện ích, nếu phiên bản Linux bạn sử dụng không có sẵn bạn cần phải “build” lại Linux kernel với các tuỳ chọn sau đây:

    Chuyển tới thư mục chứa source Linux, thông thường ở tại thư mục “/usr/src/linux” 

    Sử dụng câu lệnh: “make menuconfig” để lựa chọn các tuỳ chọn.

    <*> Packet socket

    [ ] Kernel/User netlink socket

    [*] Network firewalls

    [ ] Socket Filtering

    <*> Unix domain sockets

    [*] TCP/IP networking

    [ ] IP: multicasting

    [*] IP: advanced router

    [ ] IP: kernel level autoconfiguration

    [*] IP: firewalling

    [?] IP: always defragment (required for masquerading)

    [?] IP: transparent proxy support

    [?] IP: masquerading

    [?] IP: ICMP masquerading

    — Protocol-specific masquerading support will be built as modules.

    [ ] IP: masquerading special modules support

    [*] IP: optimize as router not host

    < > IP: tunneling

    < > IP: GRE tunnels over IP

    [?] IP: aliasing support

    [*] IP: TCP syncookie support (not enabled per default)

    < > IP: Reverse ARP

    [*] IP: Allow large windows (not recommended if <16Mb of memory)

    < > The IPv6 protocol (EXPERIMENTAL)

    < > The IPX protocol

    < > Appletalk DDP

    < > CCITT X.25 Packet Layer (EXPERIMENTAL)

    < > LAPB Data Link Driver (EXPERIMENTAL)

    [ ] Bridging (EXPERIMENTAL)

    [ ] 802.2 LLC (EXPERIMENTAL)

    < > Acorn Econet/AUN protocols (EXPERIMENTAL)

    < > WAN router

    [ ] Fast switching (read help!)

    [ ] Forwarding between high speed interfaces

    [ ] PU is too slow to handle full bandwidth

    Sau khi đã lựa chọn các tuỳ chọn cần thiết “*” bạn phải dịch lại kernel, cài và khởi động lại máy.

    Bạn có thể sử dụng các lệnh sau đây để thực hiện các việc này:

    “make dep;make clean;make bzlilo;make modules;make modules_install;init 6”

    Sau khi khởi động lại máy, bạn cần cấu hình hai card mạng.

    Nếu có hai card mạng trong hệ thống, bạn cần thay đổi trong file /etc/lilo.conf để mô tả IRQ và địa chỉ của hai card này, file lilo.conf sẽ có nội dung tương tụ như:

     append=”ether=12,0x300,eth0 ether=15,0x340,eth1'

    Trong phần trình bày dưới đây tôi sử dụng vùng địa chỉ IP (IP ảo) là 192.168.1.xxx để cho LAN, firewall là phần trung chuyển giữa hai mạng có IP (thực) là 24.94.1.123, mọi truy nhập từ LAN ra ngoài phải thông qua 24.1.2.123.

    Bạn phải thay đổi cấu hình 2 card mạng tại thư mục  /etc/sysconfig/network-scripts/

    Tập ifcfg-eth1 có nội dung như sau:

    DEVICE=eth1

    IPADDR=192.168.1.1

    NETMASK=255.255.255.0

    NETWORK=192.168.1.0

    BROADCAST=192.168.1.255

    GATEWAY=24.94.1.123

    ONBOOT=yes

    Nếu sử dụng gateway là Dial-up PPP thì tệp  ipup-ppp có nội dung:

    DEVICE=”ppp0'

    ONBOOT=”yes”

    USERCTL=”no”

    MODEMPORT=”/dev/modem”

    LINESPEED=”115200'

    PERSIST=”yes”

    DEFABORT=”yes”

    DEBUG=”yes”

    INITSTRING=”ATZ”

    DEFROUTE=”yes”

    HARDFLOWCTL=”yes”

    ESCAPECHARS=”no”

    PPPOPTIONS=””

    PAPNAME=”LoginID”

    REMIP=””

    NETMASK=””

    IPADDR=””

    MRU=””

    MTU=””

    DISCONNECTTIMEOUT=””

    RETRYTIMEOUT=”5'

    BOOTPROTO=”none”

    Sử dụng câu lệnh ifconfig cho kết quả:

    #ifconfig

    lo Link encap:Local Loopback

    inet addr:127.0.0.1 Mask:255.0.0.0

    UP LOOPBACK RUNNING MTU:3924 Metric:1

    RX packets:1620 errors:0 dropped:0 overruns:0

    TX packets:1620 errors:0 dropped:0 overruns:0

    collisions:0 txqueuelan:0

    eth0 Link encap:10Mbps Ethernet HWaddr 00:00:09:85:AC:55

    inet addr:24.94.1.123 Bcast:24.94.1.255 Mask:255.255.255.0

    UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1

    RX packets:1000 errors:0 dropped:0 overruns:0

    TX packets:1100 errors:0 dropped:0 overruns:0

    collisions:0 txqueuelan:0

    Interrupt:12 Base address:0x310

    eth1 Link encap:10Mbps Ethernet HWaddr 00:00:09:80:1E:D7

    inet addr:192.168.1.1 Bcast:192.168.1.255 Mask:255.255.255.0

    UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1

    RX packets:1110 errors:0 dropped:0 overruns:0

    TX packets:1111 errors:0 dropped:0 overruns:0

    collisions:0 txqueuelan:0

    Interrupt:15 Base address:0x350

    Các giá trị của bảng routing là :

    #route -n

    Kernel routing table

    Destination Gateway Genmask Flags MSS Window Use Iface

    24.94.1.0 * 255.255.255.0 U 1500 0 15 eth0

    192.168.1.0 * 255.255.255.0 U 1500 0 0 eth1

    127.0.0.0 * 255.0.0.0 U 3584 0 2 lo

    default 24.94.1.123 * UG 1500 0 72 eth0

    Nếu tất cả các tập đều có nội dung giống như ví dụ trên, bạn có thể thử hệ thống như sau:

     Tạit firewall thử lệnh ping với mạng ngoài hoặc internet, nếu không chạy thì thử ping ngay tới ISP của bạn. Sau đó thử kết nối tới các site ở Internet hay mạng ngoài, yêu cầu ở đây là phải connect thành công.

     Sau đót thử lệnh ping từ trạm trong LAN tới mạng ngoài nếu lệnh ping thành công có nghĩa là mạng của bạn đang ở chế độ IP forward ON cần đưa về trạng thái OFF bằng lệnh:

    echo “0” > /proc/sys/net/ipv4/ip_forward

    Chuyển sang trạng thái ON bằng lệnh:

     echo “1” > /proc/sys/net/ipv4/ip_forward

    Bạn cần thử thành công lệnh ping ở bước này, sau đó hãy đưa về trạng thái OFF, ở trạng thái ON bạn đã  OPEN hệ thống của bạn cho truy cập tự do từ trong ra và từ ngoài vào.

    Khi đã thực hiện các bước trên bạn có thể cài đặt để mạng LAN có khả năng truy cập ra ngoài với một số dịch vụ nhất định.

    Trạng thái mặc định của hệ thống là cấm toàn bộ các dịch vụ bởi tệp:

     /etc/rc.d/init.d/network có nội dụng như sau:

    # setup IP packet Accounting and Forwarding

    #

    # Forwarding

    #

    # By default DENY all services

    ipfwadm -F -p deny

    # Flush all commands

    ipfwadm -F -f

    ipfwadm -I -f

    ipfwadm -O –f

    Để cho phép mạng local được quyền truy nhập ra ngoài, bạn có thể tạo tệp /etc/rc.d/rc.firewall, sau đây là ví dụ về firewall cho phép các dịch vụ email, web and DNS

    #! /bin/sh

    #

    # rc.firewall

    #

    # Source function library.

    . /etc/rc.d/init.d/functions

    # Get config.

    . /etc/sysconfig/network

    # Check that networking is up.

    if [ ${NETWORKING} = “no” ]

    then

    exit 0

    fi

    case “$1” in

    start)

    echo -n “Starting Firewall Services: “

    # Allow email to got to the server

    /sbin/ipfwadm -F -a accept -b -P tcp -S 0.0.0.0/0 1024:65535 -D 192.1.2.10 25

    # Allow email connections to outside email servers

    /sbin/ipfwadm -F -a accept -b -P tcp -S 192.168.1.10 25 -D 0.0.0.0/0 1024:65535

    # Allow Web connections to your Web Server

    /sbin/ipfwadm -F -a accept -b -P tcp -S 0.0.0.0/0 1024:65535 -D 192.168.1.11 80

    # Allow Web connections to outside Web Server

    /sbin/ipfwadm -F -a accept -b -P tcp -S 192.168.1.* 80 -D 0.0.0.0/0 1024:65535

    # Allow DNS traffic

    /sbin/ipfwadm -F -a accept -b -P udp -S 0.0.0.0/0 53 -D 192.1.2.0/24

    ;;

    stop)

    echo -n “Stooping Firewall Services: “

    ipfwadm -F -p deny

    ;;

    status)

    echo -n “Now do you show firewall stats?”

    ;;

    restart|reload)

    $0 stop

    $0 start

    ;;

    *)

    echo “Usage: firewall {start|stop|status|restart|reload}”

    exit 1

    esac

    # Flush the current accounting rules

    ipfwadm -A –f

    Trong ví dụ trên thì server SMTP chạy tại 192.168.1.10 có thể gửi và nhận email thông qua cổng số 25, server WWW chạy trên địa chỉ 192.168.1.11, và cho phép mọi người dùng trên mạng LAN có thể tới các WWW và DNS server ở ngoài LAN.

    Như vậy bạn có thể bảo vệ được mạng LAN và quản lý người dùng trong mạng truy nhập ra internet.


    Phạm Anh Quân - Kỹ sư hệ thống
    Trung Tâm Phát Triển Phần Mềm ALCATEL-VIETNAM
    Email: quan1@ha.cit.alcatel.fr

    ID: A0203_66