ตัวอย่างการเซ็ต iptables สำหรับ web server

เริ่มด้วยการล้างค่าเก่าๆ ออกให้หมดก่อน

iptables -F

สั่งให้ iptables ที่จะทำต่อไปมีผลกับทุกๆ การติดต่อที่ดำเนินอยู่ในปัจจุบันทุกอันด้วย

iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT

นอกจากนี้ อะไรก็ตามที่ทำโดย webserver เอง ก็น่าจะปล่อยให้ทำได้ทั้งหมด จึงน่าจะส่งคำสั่งนีั้ด้วย (lo คือ localhost)

iptables -A INPUT -i lo -j ACCEPT

ถ้าเป็น webserver ก็น่าจะต้องเปิดพอร์ต 80 ทิ้งไว้ ให้ HTTP เข้ามาได้

iptables -A INPUT -p tcp --dport 80 -j ACCEPT

ถ้าเป็นเว็บที่ใช้ SSL ด้วยก็ต้องเปิดพอร์ต 443 ให้ HTTPS เข้ามาได้ด้วย

iptables -A INPUT -p tcp --dport 443 -j ACCEPT

เชื่อว่าคุณคงต้อง login เข้ามาบ้าง เพื่อ admin ด้วย SSH ซึ่งใช้พอร์ต 22

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

ถ้ามี mail วิ่งเข้าออกใน webserver ด้วยก็อาจต้องเปิดพอร์ต 25 สำหรับ SMTP

iptables -A INPUT -p tcp --dport 25 -j ACCEPT

ถ้า mail ของคุณใช้โปรโตตอลอื่นๆ อีก เช่น pop3 (110/995), imap (143/993) ก็อาจต้องเปิดพอร์ตเยอะกว่านี้อีกนะครับ

ที่ขาดไปไม่ได้เลยคือ port 25 เพื่อคุยกับ DNS server

iptables -A INPUT -p tcp --sport 25 --dport 1024:65535  -j ACCEPT
iptables -A INPUT -p udp --sport 25 --dport 1024:65535  -j ACCEPT

สังเกตว่า DNS ใช้ทั้ง TCP และ UDP และ 25 คือ sport หมายถึงต้นทางได้แก่พอร์ตที่ DNS ใช้ แต่ webserver เองจะรับข้อมูลทางพอร์ต >1023 จึงเซ็ตค่า dport

เมื่อแน่ใจว่าเปิดพอร์ตที่ต้องการใช้ครบหมดแล้ว ก็สั่งคำสั่งต่อไปนี้ปิดท้ายเพื่อปิดพอร์ตอื่นๆ ทั้งหมด

iptables -A INPUT -j DROP

ลองตรวจสอบสถานะทั้งหมดของ iptables ตอนนี้ว่าเราเซ็ตอะไรไว้บ้าง
iptables -L

จะเป็นการดีถ้าเราจะ Log เก็บไว้ด้วยว่า iptables ของเรามีการ drop แพ็คเกจอะไรไว้บ้าง จะได้เห็นร่องรอยของสิ่งแปลกปลอมที่พยายามเจาะเข้ามา

iptables -N LOGGING
iptables -A INPUT -j LOGGING
iptables -A LOGGING -m limit --limit 2/min -j LOG --log-prefix "IPTables-Dropped: " --log-level 4
iptables -A LOGGING -j DROP

ต่อไปถ้าต้องการตรวจสอบประวัติ ก็เข้าไปดูไฟล์ /var/log/syslog บรรทัดที่ขึ้นต้นด้วย IPTables-Dropped คือ สิ่งที่ firewall ทำการบล็อกไว้

ที่เราทำมาทั้งหมดจะหายไปหมดถ้ามีการ reboot เซิร์ฟเวอร์ ดังนั้นเราจะต้องใช้ iptables-persistent เพื่อจดจำค่าต่างๆ เอาไว้ถาวร

apt-get install iptables-persistent
iptables-persistent save
iptables-persistent reload

ถ้าแค่นี้ยังไม่จุใจ ลองศึกษาเกี่ยวกับเรื่อง imcp และ knocking chain เพิ่มเติมอีก เพื่อเซ็ต iptables ของคุณให้รัดกุมยิ่งขึ้นอีก

ติดตั้ง Raspberrypi

20140128_092516

  • Raspberrypi สามารถหาซื้อได้ทางจาก ebay.com สำหรับโมเดล B ราคาอยู่ที่ $35 ไม่รวมค่าส่ง ควรซื้อเป็นโมเดล B เพราะมี Ethernet Port ด้วย
  • สิ่งอื่นที่ต้องมีคือ SD Card ตั้งแต่ 4GB หรือมากกว่า และสาย micro USB เพราะ Raspberrypi รับพลังงานทางพอร์ต USB ที่จริงแล้ว ต้องมี Mouse, Keyboard และจอด้วย แต่ว่าไม่จำเป็น เพราะสามารถ Remote Access มาจาก PC เครื่องอื่นที่อยู่ในเน็ตเวิร์กเดียวกันแทนได้
  • วิธิติดตั้งระบบปฏิบัติการคือให้ไปที่ raspberrypi.org/downloads เพื่อดาวน์โหลดตัวติดตั้ง NOOKS แต่วิธีนี้จะต้องมีเมาส์และคียบอร์ดด้วย ผมแนะนำให้ใช้วิธีสร้าง image แทน จะเป็นวิธีที่ง่ายกว่า
  • วิธีสร้าง image คือดาวน์โหลด image ของระบบปฏิบัติการตัวไหนก็ได้จากหน้า raspberrypi.org/downloads แนะนำ raspbian แล้วใช้โปรแกรม Win32 Disk Image บนวินโดว์บันทึก image ลงไปใน SD card จากนั้นนำ SD card นั้นไปเสียบกับ raspberrypi แล้วต่อสาย microUSB เพื่อเปิดเครื่อง (pi ไม่มีปุ่มเปิด การต่อสาย USB คือการเปิด) มันจะบูตขึ้นมาได้เอง
  •  ทีนี้ไปที่เครื่องพีซีของเราซึ่งต่ออยู่ในเน็ตเวิร์กเดียวกันกับ raspberrypi ของเราซึ่งเสียบสาย LAN ไว้แล้ว ใช้โปรแกรม ssh เช่น Putty ทำการ connect เข้าไป โดยระบุ IP address ให้ถูกต้อง username คือ pi ส่วน password คือ raspberry
  • จากนั้นสั่งคำสั่งต่อไปนี้ โดย LAN ของคุณต้องต่อเน็ตอยู่ด้วย
    • sudo apt-get update
    • sudo apt-get upgrade
    • sudo raspi-config
    • sudo apt-get install -y xrdp
  • จากนั้นเรียกโปรแกรม Remote Desktop บนวินโดว์ของคุณขึ้นมา แล้วต่อไปยัง IP Address ของ raspberrypi คุณก็จะสามารถดึงหน้าจอกราฟฟิกของ raspberrypi ขึ้นมาทำงานได้จากเครื่องพีซีของคุณเลย
  • สุดท้าย เวลาปิดเครื่อง ต้องสั่งคำสั่ง sudo halt จาก command line ก่อนถอดสาย USB ออกทุกครั้ง

1390923018083