การใช้งาน UFW เพื่อทำเป็น host firewall บน ubuntu 16.04

จาก Wiki Opensource

บันทึกนี้ปรับปรุงล่าสุดเมื่อวันที่ 12-07-62
ดูแลโดย วิบูลย์

UFW ย่อมาจาก Uncomplicated Firewall เป็นโปรแกรมที่ติดตั้งไว้ให้แล้วบน ubuntu 16.04 แต่ยังไม่เปิดใช้งาน
UFW ทำให้การ allow และ deny การเข้าถึง port ของ service ต่าง ๆ สะดวกกว่าการเขียนคำสั่ง iptables อย่างไรก็ตามหากเรารู้เรื่อง iptables ก็จะเป็นการดีมากทีเดียว
นอกจากโปรแกรม UFW แล้ว อีกตัวหนึ่งที่เคยเขียนบันทึกไว้และใช้งานกันอยู่คือ shorewall ก็ขอให้เลือกเอาว่าจะใช้งานตัวไหน แต่ผมคิดว่า เราน่าจะใช้ UFW นะ เพราะ ubuntu 16.04 ให้มาอยู่แล้ว และเขียน rule ได้ง่าย

การเปิดใช้ UFW จะเป็นการ DENY ALL ครับ ดังนั้นหลังจากคำสั่งนี้ เราจะต้อง allow port ที่ให้บริการทันทีครับ
ถ้าไม่ได้ทำที่หน้าเครื่อง แต่ remote ssh เข้าไปให้ทำคำสั่งเปิด ssh port 22 ก่อน enable ครับ
สมมติว่าคุณ ssh จาก client IP ใน net 192.168.1.0/24

sudo ufw allow from 192.168.1.0/24 to any port 22 proto tcp


การเปิดใช้ UFW

sudo ufw enable


การตรวจสอบสถานะ

sudo ufw status verbose


ผลลัพธ์

Status: active
Logging: on (low)
Default: deny (incoming), allow (outgoing), disabled (routed)
New profiles: skip

ถ้าเคย allow 25/tcp, 22/tcp เราจะเห็นผลลัพธ์เป็นแบบนี้

Status: active
Logging: on (low)
Default: deny (incoming), allow (outgoing), disabled (routed)
New profiles: skip

To                         Action      From
--                         ------      ----
25/tcp                     ALLOW IN    Anywhere                  
22/tcp                     ALLOW IN    Anywhere                  
25/tcp (v6)                ALLOW IN    Anywhere (v6)             
22/tcp (v6)                ALLOW IN    Anywhere (v6)             


การปิด UFW

sudo ufw disable

การตรวจสอบระดับล่าง (ดู iptables rules)

sudo ufw show raw


ไวยกรณ์ของคำสั่ง UFW ใช้ง่าย ประมาณนี้ครับ
คำสั่ง Allow

sudo ufw allow <port>/<optional: protocol>

เช่น

sudo ufw allow 53/udp


คำสั่ง Deny

sudo ufw deny <port>/<optional: protocol>

เช่น

sudo ufw deny 53/tcp


การลบ rule (delete rule)

sudo ufw delete <คำสั่ง><port>/<optional: protocol>

เช่น

sudo ufw delete allow 53/udp
sudo ufw delete deny 53/tcp


การทำงานของ UFW rule
UFW อ่านจาก rule จากบนลงล่าง พบแล้ว matched เลย ไม่ทำต่อ rule ข้างล่าง จึงตัองเรียงลำดับให้ดี
ดังนั้นหากเราจะเปลี่ยนแปลง rule ก็จะต้องลบ rule เก่าด้วย ก่อนจะใส่ rule ใหม่เข้าไป

การลบหรือแทรก rule ตรงตำแหน่งบรรทัด
ตรวจสอบ

sudo ufw status numbered

เช่น ลบ rule ที่ 1

sudo ufw delete 1

แทรกให้เป็น rule ที่ 1

sudo ufw insert 1 allow from <ip address>

ตัวอย่าง การอนุญาต port

#http
ufw allow to any port 80 proto tcp
#https
ufw allow to any port 443 proto tcp
#nrpe
ufw allow to any port 5666 proto tcp
#ftp
ufw allow to any port 21 proto tcp
#ssh
ufw allow from 192.168.0.0/16 to any port 22 proto tcp
ufw allow from 172.16.0.0/12 to any port 22 proto tcp
ufw allow from 10.0.0.0/8 to any port 22 proto tcp
#radius
ufw allow to any port 1812 proto udp
ufw allow to any port 1813 proto udp


เราสงสัยว่า ufw เก็บ user rules ไว้ที่ไหน ก็ที่นี้เลยครับ

sudo cat /etc/ufw/user.rules


คำสั่งที่ใช้ในการ allow และ deny หรือ ลบ rule ที่สร้างไว้จะมีรายละเอียดเยอะมาก อ่านเอาจากที่นี่ได้เลยครับ
https://help.ubuntu.com/community/UFW