วิเคราะห์ปัญหา
การยิงออกไปยังข้างนอกเกิดจากสองสาเหตุหลัก ใหญ่ ๆ
- ลูกค้าจงใจใส่ script แล้วยิงคนอื่น
- ลูกค้าถูก Hack แล้ววาง Script ยิงผู้อื่น
การยิงมี 2 แบบคือ
- ยิงออกด้วย UDP อันนี้จะทำให้ให้ Traffic เต็ม ผมจะเจออันนี้ก่อนเป็นอันดับแรกเลยครับ ไม่ได้มีผลกับคนอื่นเท่านั้นแต่มีผลกับ Network เราด้วยครับ
- ยิงออกด้วย TCP อันนี้จะเป็นลักษณะไปเรียกเว็บอื่นๆ ส่วนใหญ่ผมจะไม่ค่อยเจอตัวนี้ครับ
เพราะถ้าตัวนี้ยิงออกมากๆ Server มักจะไปก่อนเพราะ RAM ไม่พอ แต่ก็ไม่แน่เหมือนกันถ้ามันใช้ Socket
ที่นี้เราจะทำที่ไหนก็มีรูปแบบการทำ 2 แบบ
แบบแรก เป็น VPS ผู้มห้บริการควรทำที่เครื่องหลัก อย่าลืมตั้งกฎไว้ก่อนเราติดตั้ง Firewall ที่เครื่องหลัก หากต้องการเปิด port ไหนให้บอก
แบบที่ สองเป็นเครื่องของตนเองไม่ได้ลงเป็นแบบ VPS หรือเป็นเครื่องที่ตนเองเช่า VPS มาอีกทีหนึ่งครับ
วางแผน Firewall อันนี้วางแผนเฉพาะป้องกันเราไปโจมตีคนอื่นนะครับ ไม่ใช่ป้องกันคนอื่นโจมตีเรา (ป้องกันคนอื่นโจมตีเรามีเยอะลองหาดูใน gg)
- ตรวจสอบการใช้งาน UDP ว่าเราจำเป็นต้องใช้ Port อะไรบ้าง
ตัวอย่างของผม- ผมต้องใช้ DNS Port 53 และใช้เรียก DNS 61.19.245.245 และ 61.19.245.245 เท่านั้น (DNS ของ CAT IDC ของคนอื่นก็ไปดูเอาเอง)
- ผมต้องใช้ NTP Port 123 สำหรับ Update เวลา คือ IP 158.108.212.157 ใครใช้อันไหนก็ไปหา IP มา อันนี้ถ้าเป็น VPS ก็ไม่ต้องเพราะอ้างอิงเครื่องหลักอยู่แล้ว
สรุปถ้าใช้งานอย่างเดียวก็มีแค่ UDP Port 53 เท่านั้นที่ต้องใช้ ดังนั้น Port อื่นๆ Block ได้เลย
กรณีเป็นเครื่อง VPS หรือตัวจริงที่ใช้งาน ให้ทำการเพิ่มคำสั่งดังนี้
เคลียข้อมูล iptables กรณีมี กฎอื่นๆ อยู่ก่อนหน้า ไม่ต้องใช้คำสั่งนี้
iptables -F
คำสั่งนี้เป็นคำสั่งของ Statfull Firewall เพื่อให้ข้อมูลที่เรียกเข้ามาทางฝั่ง INPUT ตอบกลับไปได้ เราจะ Block UDP ขาออกทั้งหมด ถ้าไม่มีคำสั่งนี้มันจะตอบกลับไม่ได้
iptables -A OUTPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
ต่อมาเปิดให้เรียก DNS ได้ 2 IP
iptables -A OUTPUT -d 61.19.245.245 -j ACCEEPT >> เรียก DNS1 ของ CAT
iptables -A OUTPUT -d 61.19.245.246 -j ACCEEPT >> เรียก DNS2 ของ CAT
iptables -A OUTPUT -d 8.8.8.8 -j ACCEEPT >> เรียก DNS ของ Google
iptables -A OUTPUT -d 8.8.4.4 -j ACCEEPT >> เรียก DNS ของ Google
iptables -A OUTPUT -p udp -j DROP >> Drop ขาออกด้วย UDP ทั้งหมด
เป็นอันว่า ป้องกันการยิงออกด้วย UDP ที่ได้ผลที่เดียวครับ ***ผมได้ใช้งานจริงอยู่ครับ หลายเดือนแล้วยังไม่พบปัญหาอะไรครับ
กรณีที่ผู้ให้บริการ VPS (openvz เป็นผู้จัดการเอง ลูกค้ามันไม่ค่อยจัดการหรอก) เขียนคำสั่งดังนี้ครับ
iptables -F
iptables -A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT
บังคับไว้เลยถ้า VPS ลูกๆ จะใช้ DNS ให้ใช้ได้แค่ 4 ตัวนี้เท่านั้น กรณีเป็น ISP อื่น ก็เปลี่ยนไปตามแต่ละรายไปครับ
iptables -A FORWARD -d 61.19.245.245 -j ACCEEPT
iptables -A FORWARD -d 61.19.245.246 -j ACCEEPT
iptables -A FORWARD -d 8.8.8.8 -j ACCEEPT
iptables -A FORWARD -d 8.8.4.4 -j ACCEEPT
iptables -A FORWARD -p udp -s IP-VPS-1 -j DROP
iptables -A FORWARD -p udp -s IP-VPS-2 -j DROP
iptables -A FORWARD -p udp -s IP-VPS-3 -j DROP
…
…
iptables -A FORWARD -p udp -s IP-VPS-XX -j DROP
ส่วน TCP ผมยังไม่เอามาพูดในที่นี่ รอผมรวบรวมข้อมูลได้ทั้หมดก่อนจะเอามาเล่าให้ฟังอีกที
ปล. ผมไม่ใช่เซียนอะไร อาจมีข้อผิดพลาดในการเขียน รบกวนท่านเทพอื่นๆ อย่าถือสา และรบกวนแนะนำปรับปรุง script ให้ดีอีกนะครับ