Linux
น้องๆ หลายคนอาจจะเคยได้ยินคำว่า "IP Route" หรือ "Iptables" แล้วรู้สึกว่ามันยากจังเลย! สมัยพี่ทำร้านเน็ต SiamCafe ใหม่ๆ ก็งงเหมือนกันแหละ แต่จริงๆ แล้วมันไม่ได้ยากอย่างที่คิดนะ
คิดง่ายๆ นะ IP Route คือ "เส้นทาง" ที่ข้อมูลวิ่งไป ส่วน Iptables คือ "ยาม" ที่คอยตรวจตราข้อมูลที่วิ่งผ่าน ถ้าเราเข้าใจสองอย่างนี้ เราจะสามารถควบคุมและจัดการเครือข่าย Linux ของเราได้อย่างมีประสิทธิภาพมากๆ
ก่อนอื่นเราต้องเข้าใจ concept พื้นฐานก่อนนะ ไม่งั้นจะงงเต็กเลย
IP Address ก็เหมือน "บ้านเลขที่" ของคอมพิวเตอร์แต่ละเครื่องในเครือข่าย ส่วน Subnet Mask ก็คือ "ขอบเขต" ของบ้านเลขที่นั้นๆ ว่าอยู่หมู่บ้านเดียวกันรึเปล่า สมัยพี่ทำร้านเน็ต จะต้องกำหนด IP Address ให้เครื่องลูกข่ายแต่ละเครื่อง แล้วก็ต้องตั้ง Subnet Mask ให้ถูกต้อง ไม่งั้นเครื่องมันคุยกันไม่ได้นะ
Default Gateway คือ "ทางออก" ของเครือข่าย เหมือนประตูรั้วของหมู่บ้าน ถ้าเราต้องการออกไปข้างนอก (เช่น เข้าอินเทอร์เน็ต) เราก็ต้องผ่านประตูนี้ไปก่อน
Routing Table คือ "แผนที่" ที่บอกว่า ถ้าเราต้องการไปที่ไหน จะต้องไปทางไหนบ้าง Linux จะใช้ Routing Table ในการตัดสินใจว่าจะส่งข้อมูลไปทางไหนดี
เอาล่ะ ทีนี้มาลองดูวิธีใช้งานจริงกันบ้างดีกว่า พี่จะสอนแบบ Step-by-Step เลยนะ
เราจะมาลอง config IP Route และ Iptables แบบง่ายๆ กันดู
ip routeคำสั่ง ip route เป็นเครื่องมือหลักในการจัดการ Routing Table ของ Linux ลองดูตัวอย่างการเพิ่ม Default Gateway นะ
sudo ip route add default via 192.168.1.1 dev eth0
คำสั่งนี้จะบอกว่า ถ้าเราไม่รู้ว่าจะไปไหน ให้ส่งไปที่ 192.168.1.1 ผ่านทาง interface eth0 (ซึ่งส่วนใหญ่จะเป็นการ์ดแลน)
สมัยพี่ทำร้านเน็ต เคยเจอเคสที่เครื่องลูกข่ายเข้าเว็บไม่ได้ เพราะ Default Gateway ไม่ถูกตั้งค่า พอใช้คำสั่งนี้เข้าไป ก็หายเป็นปลิดทิ้งเลย
iptablesiptables คือ Firewall ของ Linux ที่เราจะใช้ในการควบคุม traffic ที่วิ่งเข้าออกเครื่องของเรา ลองดูตัวอย่างการอนุญาตให้ HTTP traffic (port 80) เข้ามาในเครื่องนะ
sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT
คำสั่งนี้จะบอกว่า อนุญาตให้ traffic ที่ใช้ protocol TCP และวิ่งเข้ามาที่ port 80 (HTTP) ผ่านเข้ามาได้
สมัยพี่ทำร้านเน็ต จะต้อง config iptables เพื่อป้องกันไม่ให้คนเข้ามาแฮกเครื่อง Server ของร้าน เราจะ block port ที่ไม่จำเป็น แล้วก็อนุญาตเฉพาะ port ที่จำเป็นเท่านั้น
สิ่งที่สำคัญคือ เราต้องบันทึก Rules ที่เราตั้งค่าไว้ด้วย ไม่งั้นพอ restart เครื่อง Rules ก็จะหายหมด
sudo iptables-save > /etc/iptables/rules.v4
และตอน Boot เครื่อง ก็ให้โหลด Rules เหล่านี้กลับมา
sudo iptables-restore < /etc/iptables/rules.v4
สมัยพี่ทำร้านเน็ต เคยพลาดลืมบันทึก Rules พอ restart เครื่อง Firewall ก็หายหมด Hacker เข้ามาป่วนเลย! หลังจากนั้นมา พี่ก็จำขึ้นใจเลยว่าต้องบันทึก Rules ทุกครั้ง
นอกจาก iptables แล้ว ก็ยังมี Firewall ทางเลือกอื่นๆ อีกนะ แต่ละตัวก็มีข้อดีข้อเสียต่างกันไป
| เครื่องมือ | ข้อดี | ข้อเสีย |
|---|---|---|
iptables |
ยืดหยุ่น, กำหนดค่าได้ละเอียด | ซับซ้อน, ต้องใช้ความเข้าใจพอสมควร |
ufw (Uncomplicated Firewall) |
ใช้งานง่าย, เหมาะสำหรับผู้เริ่มต้น | ความยืดหยุ่นน้อยกว่า iptables |
firewalld |
รองรับ Dynamic Firewall, เหมาะสำหรับ Server ที่มีการเปลี่ยนแปลงบ่อย | อาจจะซับซ้อนกว่า ufw |
เลือกใช้เครื่องมือที่เหมาะกับความต้องการของเรานะ ถ้าเพิ่งเริ่มต้น พี่แนะนำให้ลองใช้ ufw ก่อนก็ได้ เพราะใช้งานง่ายกว่าเยอะเลย
อ่านบทความเพิ่มเติมได้ที่ SiamCafe Blog นะครับ
IP Route และ Iptables เป็นเครื่องมือที่สำคัญมากสำหรับการจัดการเครือข่าย Linux ถ้าเราเข้าใจหลักการทำงานของมัน เราจะสามารถควบคุมและปกป้องเครือข่ายของเราได้อย่างมีประสิทธิภาพมากขึ้น
อย่าท้อแท้ถ้ามันยากในช่วงแรกๆ นะ ค่อยๆ เรียนรู้ไปทีละนิด แล้วน้องๆ จะเก่งขึ้นแน่นอน
และอย่าลืมแวะไปอ่านบทความอื่นๆ ที่ SiamCafe Blog นะครับ มีอะไรดีๆ อีกเยอะเลย
เอาล่ะ มาถึงส่วนที่สำคัญที่สุด นั่นคือ "ของจริง" ที่ผมเจอมากับตัว สมัยทำร้านเน็ต SiamCafe นะครับ ไม่ใช่แค่ทฤษฎีในตำรา บางอย่างนี่พลิกแพลงเอากันหน้างานเลย
เรื่อง networking เนี่ย มันเหมือนสร้างบ้าน ถ้าฐานไม่แน่น หลังคาก็พังครับ ดังนั้น วางแผนให้ดีก่อนลงมือทำเสมอ
สมัยก่อนเน็ต ADSL มันไม่ได้แรงเหมือน Fiber Optic ทุกวันนี้ เวลาใครโหลดบิตนี่คนอื่นแทบเล่นเน็ตไม่ได้ ผมเลยต้องใช้ tc (traffic control) เข้ามาช่วย
หลักการง่ายๆ คือ กำหนด priority ให้ traffic ที่สำคัญกว่า เช่น เว็บไซต์ เกมออนไลน์ ส่วนพวกโหลดบิตก็ลดความเร็วลงหน่อย
# กำหนด interface ที่ต้องการ
INTERFACE=eth0
# ล้างค่าเดิมก่อน
tc qdisc del dev $INTERFACE root
# สร้าง root qdisc แบบ htb (Hierarchical Token Bucket)
tc qdisc add dev $INTERFACE root handle 1: htb default 12
# สร้าง class สำหรับ traffic ทั่วไป (priority ต่ำ)
tc class add dev $INTERFACE parent 1: classid 1:1 htb rate 100kbit ceil 200kbit
# สร้าง class สำหรับ traffic สำคัญ (priority สูง)
tc class add dev $INTERFACE parent 1: classid 1:2 htb rate 500kbit ceil 1Mbit
# กรอง traffic ที่จะเข้า class ต่างๆ (ตัวอย่าง: port 80, 443 เข้า class 1:2)
tc filter add dev $INTERFACE parent 1: protocol ip prio 1 u32 match ip dport 80 0xffff flowid 1:2
tc filter add dev $INTERFACE parent 1: protocol ip prio 1 u32 match ip dport 443 0xffff flowid 1:2
อันนี้เป็นแค่ตัวอย่างนะครับ ต้องปรับแต่งค่า rate, ceil ให้เหมาะสมกับ bandwidth ที่มี และ traffic ที่ต้องการ
เคยไหมครับ เน็ตหลุดกลางร้าน ลูกค้าโวยวายกันระงม ผมเลยต้องหาทางแก้ปัญหา Failover คือ คำตอบ
ผมมี 2 เส้นเน็ต เส้นหลักกับเส้นสำรอง ถ้าเส้นหลักล่ม เส้นสำรองจะเข้ามาทำงานแทนอัตโนมัติ วิธีการคือ กำหนด route metric ให้เส้นสำรองสูงกว่า
# เส้นหลัก (ปกติ)
ip route add default via 192.168.1.1 dev eth0 metric 100
# เส้นสำรอง (เมื่อเส้นหลักล่ม)
ip route add default via 192.168.2.1 dev eth1 metric 200
Linux จะเลือก route ที่มี metric ต่ำที่สุดก่อน ถ้า route หลักใช้ไม่ได้ (gateway unreachable) มันจะสลับไปใช้ route สำรองเอง
DDoS (Distributed Denial of Service) คือฝันร้ายของคนทำร้านเน็ต สมัยก่อนโดนบ่อยมาก เว็บไซต์ล่ม เกมหลุด
Iptables ช่วยได้ครับ แต่มันต้องอาศัยความเข้าใจพอสมควร ต้องรู้ว่า traffic แบบไหนที่อันตราย แล้ว block มันซะ
# จำกัดจำนวน connection ต่อ IP address (SYN flood protection)
iptables -A INPUT -p tcp --syn -m limit --limit 25/second --limit-burst 100 -j ACCEPT
iptables -A INPUT -p tcp --syn -j DROP
# Block IP address ที่พยายาม scan port
iptables -A INPUT -p tcp --tcp-flags SYN,RST,ACK SYN -m recent --name portscan --rcheck --seconds 60 --hitcount 10 -j DROP
iptables -A INPUT -p tcp --tcp-flags SYN,RST,ACK SYN -m recent --name portscan --set -j ACCEPT
พวกนี้เป็นแค่ตัวอย่างนะครับ ต้องปรับแต่งให้เข้ากับสถานการณ์จริง และอย่าลืมทำ logging เพื่อวิเคราะห์ traffic ด้วย
สมัยก่อน Windows แพงครับ แถมกิน resource เยอะ Linux ฟรี และปรับแต่งได้เยอะกว่า เหมาะกับงาน server ที่ต้องเปิดตลอด 24 ชั่วโมง
เริ่มจากพื้นฐานก่อนครับ เข้าใจ concept ของ chain, rule, target แล้วค่อยๆ ลองทำตาม tutorial ในอินเทอร์เน็ต SiamCafe Blog อาจจะมีบทความเก่าๆ ที่ผมเคยเขียนไว้ลองไปค้นดูนะครับ
มีครับ แต่ผมไม่ค่อยแนะนำเท่าไหร่ เพราะมันซ่อนความซับซ้อนไว้ ทำให้เราไม่เข้าใจหลักการทำงานจริงๆ ฝึกใช้ command line จะดีกว่าเยอะ
Packet Forwarding คือการที่ server ทำหน้าที่เป็น router ส่งต่อ packet จาก network หนึ่งไปอีก network หนึ่ง เช่น จาก LAN ไป Internet ต้อง enable packet forwarding ใน kernel ก่อน
ใช้คำสั่ง iptables-save ครับ มันจะ save rules ทั้งหมดลงในไฟล์ แล้วเราก็เอาไฟล์นั้นไปเก็บไว้
Linux networking เป็นเรื่องที่ต้องใช้เวลาและความอดทนในการเรียนรู้ แต่ถ้าเข้าใจหลักการแล้ว มันจะช่วยให้เราจัดการ network ได้อย่างมีประสิทธิภาพ ไม่ว่าจะทำร้านเน็ต หรือทำงานด้าน IT อื่นๆ ก็ตาม
อย่ากลัวที่จะลองผิดลองถูกครับ ไม่มีใครเก่งมาตั้งแต่เกิด ลองทำไปเรื่อยๆ เดี๋ยวก็คล่องเอง iCafeForex ก็เป็นอีกหนึ่งธุรกิจที่ผมเคยทำสมัยก่อน เกี่ยวกับ Forex ครับ