การติดตั้ง ipfw ( Firewall ของ Freebsd ) และวิธีการใช้งาน ipfw เบื้องต้น
รายละเอียด
IPFIREWALL (IPFW) เป็น Firewall ง่าย ๆ ของทางผู้ผลิต Freebsd เอง ซึ่งสามารถติดตั้ง ได้ง่าย และมีประสิทธิภาพสูง
การเปิดใช้งาน การติดตั้ง ipfw ของ freebsd
1 ) ต้องทำการ compile kernel ของ freebsd เพื่อเปิดใช้งาน ipfw โดยให้ตรวจสอบว่า เราใช้ kernel ไฟล์ไหนอยู่ ด้วยคำสั่ง
uname -a
ซึ่งเมื่อ พิมพ์คำสั่ง นี้แล้ว จะได้ ตัวอย่างการแสดงผล สังเกตายประโยคจะเห็นดังนี้
:/usr/src/sys/amd64/compile/GENERIC amd64
จากตัวอย่างนี้ นั้นหมายความว่า ระบบเราทำงานแบบ 64 bit ( สังเกตุจาก amd 64 ) ถ้าเราทำงานแบบ 32bit จะแสดงเป็น i386 และให้สังเกตุตัว สีแดง นั้น คือไฟล์ที่เรา รัน kernel ปัจจุบันอยู่
จากนั้น ให้เราเข้าไปที่ path ดังนี้
สำหรับ Freebsd 64 bit
cd /usr/src/sys/amd64/conf/
สำหรับ Freebsd 32 bit
cd /usr/src/sys/i386/conf/
ให้เราทำการ copy ไฟล์ kernel ปัจจุบัน เป็นไฟล์ใหม่ เพื่อที่จะทำการ update ไฟล์ kernel ให้มี options firewall ดังนี้
cp GENERIC GENERIC-IPFW
vi GENERIC-IPFW
ให้เพิ่ม OPTIONS ของไฟล์วอร์ ลงไปดังนี้
# Firewall
จากนั้น ให้ save ออกมาจากไฟล์ แล้วเริ่มทำการ compile kernel ipfw ดังนี้
options IPFIREWALL
options IPFIREWALL_VERBOSE
options IPFIREWALL_VERBOSE_LIMIT=15
options IPFIREWALL_DEFAULT_TO_ACCEPT # ให้ Default Firewall เป็น Open โดย default ( Open คือ เปิด port ทุก port )
config GENERIC-IPFW
cd ../compile/GENERIC-IPFW
make cleandepend && make depend
make
make install clean
เมื่อทำการติดตั้ง เสร็จแล้ว ให้ทำการเพิ่ม บรรทัด ที่ไฟล์ /etc/rc.conf เพื่อบอก ให้ firewall รันทุกครั้งเมื่อเปิดเครื่อง
echo 'firewall_enable="YES"' >> /etc/rc.conf
จากนั้นให้เราสร้าง Rules ไฟล์ Firewall ไว้ที่ไฟล์ /etc/ipfw.rules โดยมี ข้อมูล ดังนี้
echo 'firewall_type="open"' >> /etc/rc.conf
echo 'firewall_script="/etc/ipfw.rules"' >> /etc/rc.conf
IPF="ipfw -q add"
ipfw -q -f flush
#loopback
$IPF 10 allow all from any to any via lo0
$IPF 20 deny all from any to 127.0.0.0/8
$IPF 30 deny all from 127.0.0.0/8 to any
$IPF 40 deny tcp from any to any frag
# statefull
$IPF 50 check-state
$IPF 60 allow tcp from any to any established
$IPF 70 allow all from any to any out keep-state
$IPF 80 allow icmp from any to any
# open port ftp (20,21), ssh (22), mail (25)
# http (80), dns (53) etc
$IPF 90 allow tcp from any to any 20 in
$IPF 100 allow tcp from any to any 20 out
$IPF 110 allow tcp from any to any 21 in setup limit src-addr 10 # ป้องกัน ให้เรียกใช้ 10 concurrent per ip เพื่อป้องกัน DDoS Attack
$IPF 120 allow tcp from any to any 21 out
$IPF 130 allow tcp from any to any 22 in setup limit src-addr 5 # ป้องกัน ให้เรียกใช้ 5 concurrent per ip เพื่อป้องกัน DDoS Attack
$IPF 140 allow tcp from any to any 22 out
$IPF 150 allow tcp from any to any 25 in
$IPF 160 allow tcp from any to any 25 out
$IPF 151 allow tcp from any to any 587 in
$IPF 161 allow tcp from any to any 587 out
$IPF 163 allow tcp from any to any 465 in
$IPF 165 allow tcp from any to any 465 out
$IPF 170 allow udp from any to any 53 in
$IPF 175 allow tcp from any to any 53 in
$IPF 180 allow udp from any to any 53 out
$IPF 185 allow tcp from any to any 53 out
$IPF 200 allow tcp from any to any 80 in setup limit src-addr 50
$IPF 210 allow tcp from any to any 80 out
$IPF 220 allow tcp from any to any 143 in
$IPF 230 allow tcp from any to any 143 out
$IPF 231 allow tcp from any to any 953 in
$IPF 232 allow tcp from any to any 953 out
$IPF 233 allow tcp from any to any 993 in
$IPF 234 allow tcp from any to any 993 out
$IPF 240 allow tcp from any to any 110 in
$IPF 250 allow tcp from any to any 110 out
$IPF 260 allow tcp from any to any 443 in
$IPF 270 allow tcp from any to any 443 out
$IPF 271 allow all from any to any 1119
$IPF 272 allow all from any to any 1111
#mysql server
$IPF 276 allow tcp from any to any 3306 in
$IPF 275 allow tcp from any 20-21 to any 49152-65535
$IPF 280 allow tcp from any to any 50000 out
$IPF 290 allow tcp from any to any 49999 out
$IPF 331 allow tcp from any to any 3128 out
$IPF 332 allow tcp from any to any 3128 in
$IPF 260 allow tcp from any to any 32000-33000 in setup keep-state
# deny and log everything
$IPF 500 deny log all from any to any
อธิบายตัวอย่าง Rule ของ IPFW แต่ละตำแหน่งในบรรทัด
$IPF 332 allow tcp from any to any 3128 in
อธิบายตัวอย่าง Rule ของ IPFW แต่ละตำแหน่งในบรรทัด
allow บ่งบอกว่าถึงสิทธ์การใช้งาน ถ้าใส่ allow หมายถึง อนุญาต ถ้าใส่ deny คือ ไม่อนุญาต
tcp คือ Protocal ของ กฏ นี้ ซึ่งจะมี protocal ต่าง ๆ คือ tcp , udp , ip
any คือ IP ต้นทาง ( Source IP ) ซึ่งเราสามารถระบุ เป็น IP หรือ Class IP หรือ any ( ทั้งหมด )
any คือ IP ต้นทาง ( Source IP ) ซึ่งเราสามารถระบุ เป็น IP หรือ Class IP หรือ any ( ทั้งหมด )จากนั้น ให้เราทำการ Reboot เครื่อง ด้วยคำสั่ง
3128 คือ Port ของเงื่อนไข ของ กฏ ข้อนี้
in คือ เส้นทาง inbound ซึ่งเราสามารถ ระบุ คือ in ( inbound ) , out ( outbound ) หากไม่ระบุ ค่านี้ จะหมายถึง ทั้ง in และ out
shutdown -r now
เมื่อเครื่องทำการ restart เสร็จ เราลองพิมพ์ คำสั่ง
ipfw show
ท่านจะเห็น rules ต่าง ๆ ของเราที่ได้กำหนด ไว้ /etc/ipfw.rules ซึ่งเมื่อท่าน ทำการแก้ไข rules แล้ว สามารถ อัพเดท rules ของ ipfw ด้วยคำสั่ง
/etc/rc.d/ipfw restart