ตัวอย่างสร้าง Firewall Script บน Ubuntu

โดย อดิศร  ขาวสังข์
เขียนเมื่อ 18/03/49
อ้างอิง : http://pykeylogger.sourceforge.net/wiki/index.php/Ubuntu:Chronicles


บทนำ
เป็นตัวอย่างการสร้าง Firewall Script ง่าย ๆ บน ubuntu ครับ ซึ่งโดย default แล้วบน ubuntu จะไม่มีการคอนฟิก Firewall มาให้
  แต่ก็มีการรัน iptables (Firewall) ไว้เป็นที่เรียบร้อยแล้วเป็น default ที่เป็นการอนุญาตให้ทุกอย่างสามารถผ่านไปได้   ซึ่งเป็นสิ่งที่ไม่ดีแน่นอน  สิ่งที่คุณควรทำืคือการค้นหา iptables config file จากเว็บเพื่อนำมาประยุกต์ใช้งานให้เหมาะสมกับเครือข่ายของคุณ  แต่ในที่นี้ก็เป็นหนึ่ง Firewall ที่ทางเว็บไซต์ตามที่ได้อ้างอิงไว้ได้นำมาใช้ ดังต่อไปนี้ :

#!/bin/sh
#
# a simple iptables ruleset

# iptables="/sbin/iptables"

# flush any existing chains and set default policies
$iptables -F INPUT
$iptables -F OUTPUT
$iptables -F FORWARD

# set default parameters
$iptables -P INPUT DROP
$iptables -P OUTPUT ACCEPT
$iptables -P FORWARD DROP

# this is our main rule, to allow established connections in
$iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

# allow all packets on the loopback interface (so that gnome can function)
$iptables -A INPUT -i lo -j ACCEPT
$iptables -A OUTPUT -o lo -j ACCEPT

จาก Script ข้างบน เป็นการสร้าง outbound connection และยอมรับแพ็กเกตการเชื่อมต่อที่ถูกสร้างไว้แล้ว (established) ทั้งหมด  นอกจากนั้นยังยอมรับการสื่อสารบน loopback device ทั้งหมด  ต้องมีการ make sure ว่ามีการอนุญาตให้สำหรับ loopback เพราะถ้าไม่อนุญาต GNOME จะถูก Freeze ในขณะ startup และ shutdown เพราะจะมีโปรเซสที่ GNOME รันสำหรับสื่อสารผ่าน loopback ซึ่งถ้า loopback ถูกบล็อค ก็จะทำให้เกิด bam! dead GNOME

ถ้าคุณต้องการอนุญาต connection อื่นที่ตามมา (เช่น bittorrent) หรือถ้าคุณต้องการอนุญาต ssh server หรือ web server คุณควรจะสร้างกฎดังนี้ :

$iptables -A INPUT -p tcp --dport 22 -j ACCEPT


โดยส่วนของ "-p tcp" เป็นการระบุโปรโตคอลที่จะอนุญาตให้ผ่านได้ (แอพพลิเคชันส่วนใหญ่จะเป็น tcp แต่ bittorrent จะใช้ทั้ง tcp และ udp) และส่วนของ "--dport 22" เป็นการระบุพอร์ตที่อนุญาตให้มีการเชื่อมต่อ (พอร์ต 22 เป็น default port สำหรับ ssh server)

จากนั้นให้บันทึก ruleset ดังกล่าวโดยตั้งชื่อให้สื่อความหมายที่ดี  ซึ่งในที่นี้ตั้งชื่อเป็น "firewall.iptables" ไว้ในไดเร็คทอรี  "/etc/init.d" และก็กำหนดให้สามารถ execute ได้โดยใช้คำสั่ง chmod ดังนี้ :


sudo chmod 755 /etc/init.d/firewall.iptables


and then you load it up into the firewall by executing it (again, as root, using sudo).

การทำ initialize firewall ให้เป็น default ตอน startup คุณต้องมีการสร้าง link ไปยังไดเร็คทอรี่ /etc/rc2.d (โดย default แล้ว ubuntu จะรันที่ runlevel 2) ดังตัวอย่างต่อไปนี้ :


sudo ln -s /etc/init.d/firewall.iptables /etc/rc2.d/S13firewall

หรืออีกทางเลือกหนึ่งที่น่าจะถูกต้องกว่าคือการใช้คำสั่ง update-rc.d ในการสร้าง link แบบอัตโนมัติเพื่อเชื่อมโยงไปยัง firewall script ดังตัวอย่างดังนี้ :

sudo update-rc.d /etc/init.d/firewall.iptables defaults 13

ซึ่งคำสั่งข้างบนนี้เป็นการสร้าง symlinks ไปยัง firewall script ของคุณใน  runlevel 2.5 (the "default")

ทางเลือกนอกจากนี้คุณสามารถติดตั้ง package ที่ชื่อว่า "firestarter" ซึ่งจะช่วยคอนฟิก firewall ของคุณผ่าน graphical interface ครับ


จบครับ