How to Save Rules of the iptables?

2000px-Tux.svg

สวัสดีครับ วันนี้มีเรื่อง iptables มานำเสนอครับ ปกติแล้วเวลาเราต้องการไม่ให้ ip ไหนเข้ามายัง server ของเรา เราก็จะเขียนคำสั่งง่ายๆเข้าไปเพื่อไม่ให้ ip เหล่านั้นเข้ามาได้ อาจจะไม่ให้เข้าทุก port หรือไม่ให้เข้าเฉพาะบาง port ได้โดยไม่จำเป็นต้องปิดการใช้งานของ port นั้น แต่มีปัญหาอยู่อย่างนึงครับ นั่นก็คือเวลาเรา reboot เครื่องแล้ว คำสั่งต่างๆใน iptables จะหายไป เหมือนกับเราไม่ได้เซฟเอาไว้ครับ

วิธีแก้ไขก็ไม่ยากครับ กล่าวโดยสรุปก็คือเราจะทำการเซฟคำสั่งใน iptables นั้นลงในไฟล์หนึ่ง จากนั้นตอน reboot กลับเข้ามา มันก็จะ load คำสั่งนั้นลงไปใน iptables อีกครั้งนึงครับ

ลองทำตามขั้นตอนตามนี้ครับ
1. เปลี่ยน user ID ของเราให้กลายเป็น superuser ก่อนครับ เพื่อที่เราจะได้ไม่ต้องพิมพ์ sudo ก่อนทุกครั้ง (สะดวกดีครับ)

sudo su

2. เซฟ rules ลงไปที่ไฟล์ครับ ผมเลือกวางไว้ที่ /etc

iptables-save > /etc/iptables.rules

3. ใส่คำสั่งให้ restore ไฟล์นี้เพื่ออ่าน rules แล้วไปไว้ใน iptables ทุกครั้งเมื่อเปิดเครื่องขึ้นมาใหม่ โดยการเข้าไปเปิดไฟล์ /etc/network/if-pre-up.d/iptables

nano /etc/network/if-pre-up.d/iptables

จากนั้นใส่คำสั่งนี้ลงไป

#!/bin/sh
iptables-restore < /etc/iptables.rules
exit 0

4. ใส่คำสั่งให้ก่อนที่จะปิดเครื่องให้เซฟ rules ของ iptables ล่าสุดลงไปในไฟล์ในข้อ 2 อีกครั้ง โดยการเข้าไปเปิดไฟล์ /etc/network/if-post-down.d/iptables

nano /etc/network/if-post-down.d/iptables

จากนั้นใส่คำสั่งนี้ลงไป

#!/bin/sh
iptables-save -c > /etc/iptables.rules
if [ -f /etc/iptables.rules ]; then
iptables-restore < /etc/iptables.rules
fi
exit 0

5. สุดท้ายแล้วเราต้องให้อนุญาต script ที่เราเพิ่งใส่ไป สามารถเขียนไฟล์ได้โดยพิมพ์ command นี้ไป

sudo chmod +x /etc/network/if-post-down.d/iptables
sudo chmod +x /etc/network/if-pre-up.d/iptables

เสร็จแล้วครับ ถ้าไม่เชื่อลองทำตามแล้ว reboot เครื่องดูสิครับ จะเห็นว่า rules ใน iptables ยังคงอยู่เหมือนเดิม :)

credithttp://askubuntu.com/questions/119393/how-to-save-rules-of-the-iptables