Network Commands
Last updated
Was this helpful?
Last updated
Was this helpful?
iptables เป็นเครื่องมือสำคัญอีกตัวหนึ่งที่ถูกนำมาใช้ในการจัดการระบบความปลอดภัยในระบบเครือข่ายที่เรียกว่า ไฟร์วอลล์ (firewall) โดยพื้นฐานในการกำหนดการควบคุมการเข้าออกของข้อมูลนั้น ผู้ดูแลระบบหรือแม้แต่นักพัฒนาทางด้านระบบสมองกลฝังตัวควรเข้าใจโครงสร้างและหลักการทำงานของ iptables เป็นอย่างดี
ภายใน iptables นั้นมีด้วยกันหลายตาราง (tables) โดยแต่ละตารางจะประกอบไปด้วยหลายรายการที่เรียกว่า chain (ที่ iptables เตรียมมาให้แล้วหรือผู้ใช้กำหนดขึ้นเอง) และภายในแต่ละ chain จะประกอบไปด้วยข้อกำหนดการควบคุมการเข้าออกของข้อมูลที่เรียกว่า rule ดังโครงสร้างแสดงในรูปข้างล่าง
iptables จะถูกเตรียมตารางให้แล้ว 4 ตาราง (4 built-in tables) ได้แก่
Filter Table
NAT Table
Mangle Table
Raw Table
ส่วนประกอบของ iptables จะมีส่วนประกอบหลัก 3 ส่วนได้แก่
INPUT คือส่วนของข้อมูลที่เข้ามาสู่เครื่องคอมพิวเตอร์
OUTPUT คือส่วนของข้อมูลที่ออกจะเครื่องคอมพิวเตอร์
FORWARD คือส่วนที่ส่งต่อข้อมูลจากระบบเครือข่ายภายในสู่เครือข่ายภายนอก ซึ่งการบล็อกพอร์ตก็จะใช้ส่วนนี้เป็นหลัก
ตัวอย่างการแสดงรายละเอียดของตารางภายใน iptables
$ sudo iptables --list
Chain INPUT (policy ACCEPT)
target prot opt source destination
ACCEPT tcp -- anywhere anywhere tcp dpt:ssh
DROP all -- anywhere anywhere
Chain FORWARD (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
โดยที่
ACCEPT คือไฟร์วอลล์จะยอมให้แพ็กเก็ต (packet) ผ่านไปยังปลายทางได้
DROP คือไฟร์วอลล์จะทิ้งแพ็กเก็ตทันที แต่จะไม่แจ้งผู้ส่งเกี่ยวกับข้อความที่ส่งไม่สำเร็จ
REJECT คือไฟร์วอลล์จะทิ้งแพ็กเก็ตทันที และผู้ส่งจะได้รับข้อความผ่าน ICMP ตอบกลับถึงข้อความที่ส่ง
ไม่สำเร็จ
QUEUE คือไฟร์วอลล์จะส่งต่อแพ็กเก็ต ไปยังส่วนระบบบนที่ติดต่อกับผู้ใช้ (userspace)
RETURN คือไฟร์วอลล์จะหยุดการทำงานภายใน chain แล้วกลับไปยัง Chain เดิมที่เรียกก่อนหน้านี้
ตัวอย่างแสดงการเปิดพอร์ตด้วยคำสั่ง iptables โดยหลักการสำคัญคือ ควรปิดพอร์ตทั้งหมดก่อนแล้วจึงค่อยเลือกเปิดพอร์ตที่ใช้ทีละพอร์ตจะเป็นวิธีที่มีความปลอดภัยที่สุด
$ IPTABLES -P FORWARD DROP #CLOSE PORT ALL
$ IPTABLES -A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT
$ IPTABLES -A FORWARD -p tcp --dport 53 -j ACCEPT #DNS
$ IPTABLES -A FORWARD -p udp --dport 53 -j ACCEPT #DNS
$ IPTABLES -A FORWARD -p udp --dport 67 -j ACCEPT #DHCP
$ IPTABLES -A FORWARD -p udp --dport 69 -j ACCEPT #TFTP
$ IPTABLES -A FORWARD -p udp --dport 111 -j ACCEPT #NFS
$ IPTABLES -A FORWARD -p udp --dport 2049 -j ACCEPT #NFS
$ IPTABLES -A FORWARD -p udp --dport 32700 -j ACCEPT #NFS
$ IPTABLES -A FORWARD -p tcp --dport 80 -j ACCEPT #HTTP
$ IPTABLES -A FORWARD -p tcp --dport 8080 -j ACCEPT #HTTP
$ IPTABLES -A FORWARD -p tcp --dport 443 -j ACCEPT #HTTPS
$ IPTABLES -A FORWARD -p tcp --dport 8443 -j ACCEPT #HTTPS
$ IPTABLES -A FORWARD -p tcp --dport 20 -j ACCEPT #FTP
$ IPTABLES -A FORWARD -p udp --dport 20 -j ACCEPT #FTP
$ IPTABLES -A FORWARD -p tcp --dport 21 -j ACCEPT #FTP
$ IPTABLES -A FORWARD -p udp --dport 21 -j ACCEPT #FTP
$ IPTABLES -A FORWARD -p tcp --dport 22 -j ACCEPT #SSH
$ IPTABLES -A FORWARD -p tcp --dport 23 -j ACCEPT #TELNET
พอร์ตพื้นฐานที่จะถูกเปิดไว้สำหรับบอร์ดสมองกลฝังตัว เพื่อใช้ในการติดตั้ง bootloader,ลีนุกซ์คอร์เนลและ เรียก root filesystem ได้นั้นจะมีด้วยกันอย่างน้อย 4 ถึง 5 พอร์ต ได้แก่
ตารางรายการ services ที่ถูกเปิดใช้ในระบบสมองกลฝังตัว
DHCP
bootps
67
UDP
TFTP
tftp
69
UDP
NFS
sunrpc
111
UDP
nfs
2049
UDP
mountd
32700 หรือ 32772
UDP
ในกรณีที่ต้องการปิดการทำงานของไฟร์วอลล์ เพื่อเข้าสู่โหมดบำรุงรักษาระบบสามารถใช้คำสั่งดังต่อไปนี้
$ sudo /etc/init.d/iptables off
nfs เป็นโปรโตคอลที่ได้รับการออกแบบมาเพื่อการเชื่อมโยงทรัพยากรฮาร์ดดิสก์จากเครื่องอื่นๆที่อยู่บนเครือข่ายคอมพิวเตอร์ที่อยู่ห่างออกไปให้เป็นเสมือนระบบไฟล์ของอุปกรณ์เอง สำหรับนักพัฒนาระบบสมองกลฝังตัวแล้วการใช้งาน nfs มีผลทำให้ในระหว่างการปรับแต่งระบบปฏิบัติการ หรือการพัฒนาโปรแกรมเพื่อใช้ในระบบสมองกลฝังตัวคล่องตัวและสะดวกมากยิ่งขึ้นและไม่มีข้อจำกัดของขนาดในการเก็บข้อมูล โดยการนำไฟล์ root file system (RFS) ไปวางไว้ในไดเรกทอรีที่ถูกตั้งค่าให้เป็นไดเรอทอรีที่ถูกแชร์ผ่านโปรโตคอล NFS เนื่องจากโดยทั่วไปแล้วเมื่อนักพัฒนาได้ปรับแต่งระบบปฏิบัติการเสร็จ และพัฒนาโปรแกรมฝังเข้าไป root file system เรียบร้อยก็จะถูกนำไปเขียนลงในตัวเก็บข้อมูลที่อยู่ภายในบอร์ดสมองกลฝังตัว เช่น Flash Memory เป็นต้น
ในระบบปฏิบัติการลีนุกซ์บนระบบสมองกลฝังตัว การเชื่อมต่อระบบเข้ากับ Network File System นั้นในขั้นตอนการทำงานจะมีลักษณะเดียวกับการเชื่อมต่อของระบบปฏิบัติการลีนุกซ์โดยทั่วไป
ขั้นตอนการติดตั้ง nfs-kernel-server และตั้งค่าในไฟล์ /etc/exports ดังนี้
$ sudo apt-get install rpcbind nfs-kernel-server
$ sudo mkdir /rootfs
$ sudo vim /etc/exports
/rootfs 192.168.0.2(rw,sync,no_subtree_check,no_root_squash)
/rootfs localhost(rw,sync,no_subtree_check,no_root_squash)
ทำการเรียก service ที่เกี่ยวข้องทั้งหมด ด้วยคำสั่ง
$ sudo service xinetd restart
$ sudo service tftpd-hpa restart
$ sudo service isc-dhcp-server restart
$ sudo service rpcbind-boot stop
$ sudo service nfs-kernel-server stop
$ sudo service rpcbind-boot start
$ sudo service nfs-kernel-server start
ไฟล์ /etc/exports เป็นไฟล์ที่ได้ถูกสร้างขึ้นจากเครื่องแม่ข่าย เพื่อระบุว่าจะให้ไดเรกทอรีใดในเครื่องแม่ข่ายที่จะให้เครื่องลูกข่ายสามารถทำการ mount ไดเรกทอรีได้ ด้วยคำสั่งข้างล่าง
$ mount –t nfs nfs_server_Address:/rootfs/ /mnt/rfs