2009-04-09

มาทำ Linux firewall แบบง่ายๆ กัน

คืนนี้มีโอกาสสวิทช์มา Linux เลยเอาของเก่ามาเขียนบอกเล่ากันดีกว่า สาเหตุเนื่องจากการเชื่อมต่อ

กับ Internet ที่บ้านใช้ ADSL modem ธรรมดา ทำให้ลักษณะการเชื่อมต่อเป็น แบบโปร่งพอสมควร ( bridge)

คนอื่นสามารถเข้าถึงได้ เลยต้องมานั่งเขียน shell script แบบ ง่าย ๆ คอนโทรลทราฟฟิก พอแก้ขัดไปไดบ้าง



iptables เป็น state-full firewall ในระบบปฏิบัติการ Linux ไม่ต้องไปซื้อหากัน อาจลำบากหน่อย

ที่ตัว iptables ไม่ได้มีความสามารถเรียนรู้ เหมือนกันกับ commercial หรือ free personal firewall

ที่ใช้กันใน ระบบปฏิบัติการ windows ที่เห็นได้ชัด ความมั่นและคงทนของมัน ( ลองง่ายๆ เอาเครื่อง

ที่ติดตั้ง presonal firewall ไปรัน production service ต่างๆ ผ่านไปสักพัก คงมีค้างให้ได้เห็นกัน



งานที่ต้องทำและทูลที่เกี่ยวข้อง







  • หาแอพพลิเคชั่นพอร์ทที่เราใช้ เพื่อท่จะเจารู firewall

  • iptables-save สำหรับทำการ save-rule iptables เพื่อที่ หลังจาก reboot เครื่องหรือ

    ไฟดับเครื่องสามารถใช้ firewall-rules ได้

  • vi ไว้เขียน







    port ที่เกี่ยวข้อง





  • 110 พอร์ท POP3

  • icmp เอาไว้ ping ออกข้างนอก

  • 1863 พอร์ท MSN

  • 5222 พอร์ท google talk , jabber protocol

  • 21/20 พอร์ท FTP data/command

  • 22 พอร์ท secure shell

  • 6667 พอร์ท IRC

  • 53 พอร์ท DNS

  • 80 พอร์ท http

  • 443 พอร์ท https ( secure web ) ใช้กับ บรรดา hotmail หรือ เวบที่มีรูปกุญแจโผล่

  • 2628 พอร์ท dict ( dictionary server online )





    นอกนั้นใครอยากจะเพิ่ม app ตัวเองเข้าไปก็ไปหา พอร์ท ที่ใช้งานมาแล้วมาเพิ่มเข้าไป

    หลังจากนั้น เปิด vi เอาโค้ดตามนี้ แปะแล้ว save เป็นในชื่อที่ท่านต้องการ





    #!/bin/bash







    case "$1" in



    on)

    echo "ONLine Firewall on ADSL-"

    iptables-restore < /etc/network/firewall-rules/Firewall-ADSL

    ;;



    off)

    echo "Offline Firewall on ADSL_"

    iptables -F

    ;;

    update)

    echo "update firewall rules..."

    iptables-save tee /etc/network/firewall-rules/Firewall-ADSL

    ;;

    list)

    echo "List Firewall rules.."

    iptables -L -nv

    ;;

    *)

    echo "Use fwall ( on off update list )"

    esac



    ออปชั่น update คือ หลังจากเพิ่ม rule เข้าไปทีหลังก็สั่ง update มันก็จะ save

    ให้เองเลย



    เนื่องจากทำแบบง่ายๆ เพราะฉะนั้นไม่ได้มีการ check state ของ package รวมถึงการกำหนด

    default rules เป็นแบบ accept คงต้องมีการปรับเพิ่ม เนื่องจากตัวผมไม่ advance พอเกี่ยว

    กับ iptables เลยออกมาแบบนี้ ต้องขออภัยด้วยครับ :-) วันหลังจะเขียนเพิ่มใหม่ เอาใจ

    newbie



    ข้างล่างนี้เป็น rule เริ่มต้น ให้ save เก็บไว้ตาม path ที่จะ restore จากข้างต้นคือ



    /etc/network/firewall-rules/Firewall-ADSL



    ท่านอยากจะเปลี่ยนเป็นอะไร ทำได้ตามสบายเลยครับ





    # Generated by iptables-save v1.3.3

    *filter tcp -- anywhere anywhere tcp spt:www

    :INPUT ACCEPT [206:51250]ere anywhere tcp spt:dict

    :FORWARD ACCEPT [0:0]nywhere anywhere tcp spt:666

    :OUTPUT ACCEPT [2160:776374] anywhere tcp spt:https

    -A INPUT -i ppp0 -p tcp -m tcp --sport 110 -j ACCEPT

    -A INPUT -i ppp0 -p icmp -m icmp --icmp-type 0 -j ACCEPT

    -A INPUT -i ppp0 -p tcp -m tcp --sport 1863 -j ACCEPT

    -A INPUT -s 72.14.253.125 -i ppp0 -p tcp -m tcp --sport 5222 -j ACCEPT

    -A INPUT -i ppp0 -p tcp -m tcp --sport 21 -j ACCEPT

    -A INPUT -i ppp0 -p tcp -m tcp --sport 20 -j ACCEPT

    -A INPUT -i ppp0 -p tcp -m tcp --sport 22 -j ACCEPT

    -A INPUT -i ppp0 -p tcp -m tcp --sport 6667 -j ACCEPT

    -A INPUT -i ppp0 -p udp -m udp --sport 53 -j ACCEPT

    -A INPUT -i ppp0 -p tcp -m tcp --sport 80 -j ACCEPT

    -A INPUT -i ppp0 -p tcp -m tcp --sport 2628 -j ACCEPT

    -A INPUT -i ppp0 -p tcp -m tcp --sport 443 -j ACCEPT

    -A INPUT -i ppp0 -j DROP

    -A OUTPUT -p udp -m udp --dport 53 -j ACCEPT

    COMMIT







    สนใจดูเพิ่มเติม



    เอกสาร iptables
  • No comments: