Author Topic: รวมความรู้เกี่ยวกับ set iptables คืออะไร ใช้งานยังไง by golfreeze  (Read 45007 times)

golfreeze

  • Administrator
  • Hero Member
  • *****
  • Posts: 2145
    • View Profile
    • นั่งสมาธิ สติปัฏฐานสี่ พาเที่ยววัด แนะนำวัด แจกcd ธรรมะฟรี
    • Email
การใช้ iptables จะต้องสร้าง chain ให้ระบบ โดยเขียน Parameter ต่อท้ายซึ่งมี Parameter หลักที่จำเป็นดังนี้

-A หมายถึง การเพิ่ม Chain ให้ระบบ
-F หมายถึง สั่งลบ Chain เดิมที่เคยสร้างไว้ทั้งหมด
-N หมายถึง ตั้งชื่อ Chain ใหม่
-P หมายถึง การกำหนด Policy
-X หมายถึง ลบชื่อ Chain
-I หมายถึง เพิ่ม rule ใหม่ ใน chain
-s หมายถึง ( Source ) IP Address ต้นทาง
-d หมายถึง ( Destination ) IP Address ปลายทาง
-p หมายถึง Protocal เช่น tcp, udp, icmp
- -dport หมายถึง ( Destination Port ) หมายเลขหรือชื่อ Port ปลายทาง
- -sport หมายถึง ( Source Port ) หมายเลขหรือชื่อ Port ต้นทาง
-j หมายถึง การกำหนดให้เชื่อมต่อกันระหว่างต้นทาง ( Source ) กับปลายทาง ( Destination )
ที่นิยมใช้คือ ACCEPT, REJECT, DENY, MASQUERADE และ REDIRECT
-o หมายถึง packet ที่จะ match กับ rule นี้กำลังจะเดินผ่าน interface ที่ระบุไว้ เช่น -o eth0
-i หมายถึง packet ที่จะ match กับ rule นี้ต้องเข้ามาจาก interface ที่กำหนด เช่น -i eth0
-m หมายถึง เป็น option ที่ใช้กรอง packet ที่ถูกส่งเข้ามา – ออกไป ของ eth0 หรือ ppp0
Input คือ ส่วนที่ใช้รับค่าต่างๆ จากภายนอกเข้า Server
Output คือ ส่วนที่ส่งค่าต่างๆ ออกจาก Server ไปยังภายนอก
Forward คือ ส่วนที่ต้องการให้ลูกข่าย ติดต่อออกไปภายนอก Server

The State Match

รูปแบบการใช้งาน : -m state หรือ - -match state
เป็นโมดูลที่ใช้ประโยชน์ได้เป็นอย่างดี มีออปชันให้ใช้งานดังนี้

NEW รูปแบบการใช้งาน: -m state --state new หรือ --match state --state new
หมายถึง packet ที่เป็นตัวสร้าง connection ใหม่

ESTABLISHED รูปแบบการใช้งาน: -m state --state established
หรือ --match state --state establishedหมายถึง packet ที่เกี่ยวข้องกันกับ connection
ที่สร้างไว้แล้ว เช่น echo-reply packet หรือ packet ที่ส่งข้อมูลออกไปจาก web server เมื่อมี request web service เข้ามา

RELATED รูปแบบการใช้งาน: -m state --state related หรือ --match state --state related
เป็น packet ที่เกี่ยวข้องกับ connection ที่สร้างไว้แล้ว แต่ไม่ใช่ส่วนหนึ่งส่วนใดของ connection
นั้น เช่น FTP data packet (port 20) ที่เกิดขึ้นจากการใช้คำสั่งใน FTP command (port 21)

INVALID รูปแบบการใช้งาน: -m state --state invalid หรือ --match state --state invalid
เป็น packet ที่ไม่เกี่ยวข้องกับส่วนอื่นเลย เช่น icmp echo-reply ที่เกิดขึ้น โดยที่ไม่มีเครื่องได้ในระบบส่ง
echo-request ออกไปเลย (กรณีเช่นนี้เกิดขึ้นได้เนื่องจากอาจจะโดนโจมตีแบบ Smurf attack)

วิธีการ setiptables สำหรับ share internet และการทำ filewall
ให้ลบ rule ทั้งหมดที่มีทุก chain ใน file /etc/sysconfig/iptables

iptables --flush
iptables -t nat -F ( ลบ chain nat table ที่ใช้สำหรับการแปลงแอดเดรส )
iptables -t mangle -F ( ลบ chain mangle table ที่ใช้สำหรับการเปลี่ยนแปลงหรือแก้ไข packet )
iptables -t filter -F ( ลบ chain filter table ที่ใช้สำหรับกรอง packet )
iptables -X ( ลบ chain ที่ไม่มี rule ซึ่งสามารถลบ user-define chain ที่ไม่มี rule ได้ )

golfreeze

  • Administrator
  • Hero Member
  • *****
  • Posts: 2145
    • View Profile
    • นั่งสมาธิ สติปัฏฐานสี่ พาเที่ยววัด แนะนำวัด แจกcd ธรรมะฟรี
    • Email
Iptables ที่ไว้ป้องกัน DoS attack นะครับ
ตัวอย่างข้างล่างเป็น rule ที่ใช้กับ web , http protocol port 80

#iptables -A INPUT -p tcp --dport 80 -m limit --limit 25/minute --limit-burst 100 -j ACCEPT
#iptables -A INPUT -p tcp --dport 80 -j DROP

อธิบายได้ดังนี้ ครับ

    -m limit: เป็นการบอกให้ ใช้ค่า limit ได้
    –limit 25/minute: Limit นี้อนุญาตให้รับได้แค่ 25 packet ต่อ 1 นาที. ถ้ามาเกินนี้ drop (ตรงนี้สามารถปรับได้ตาม limit ของแต่ละ app และทรัพยากรบนเครื่องเรานะครับ ) เป็นการ limit packet นะครับ ไม่ใช่ limit connection per IP
                           (ค่า default –limit คือ 3/hour)
    –limit-burst 25: คือประมาณบอกว่ามี Token เท่าไรในอยู่ในตระกร้าในที่นี้คือมี 100 token ถ้า packet เข้ามาเป็น 100 packet ต่อนาที ระบบ burst จะทำการเก็บpacket เข้ากับ token ที่เข้ามาใส่ช่องไว้แค่ 25 ช่องส่วนที่เหลือคือ 75 packet จะ ตกไปที่ rule อื่นใน chain ต่อไป ถ้า rule ใน chain นั้นคือ rule ที่ทำการ drop ก็จะ drop packet ที่เกินมานั้นในช่วง 1 นาทีนั้น ตาม rule บันทัดที่สอง (ค่า default --limit-burst คือ 5)

เมื่อไรที่ token ใหม่จะถูก เติมลงตระกร้าอีกครั้ง : คำตอบคือขึ้นอยู่กับค่า --limit คือ เมื่อขึ้น นาทีใหม่ ก็จะมี token เปิดรับได้ 25 token ในทุกๆนาทีใหม่

ถ้าต้องการที่จะ limit connection per ip ก็ ใช้ร่วมกับ connlimit + hashlimit ครับผม

iptables -A INPUT -p tcp --syn --dport 80 -m connlimit --connlimit-above 5 --connlimit-mask 32 -j REJECT --reject-with tcp-reset

อธิบายคือ จะทำการ reject connection เมื่อมี connection จาก ip เดียวกันเข้ามา 5 / second แต่ถ้าจะป้องกัน DDoS ต้องใช้ hashlimit ช่วยครับ จะสามารถระบุ limit per ip หรือจะเป็น per IP + Port ได้ครับผม

iptables -A INPUT -p tcp --dport 80 -m hashlimit --hashlimit 45/sec --hashlimit-burst 60 --hashlimit-mode srcip --hashlimit-name DDOS --hashlimit-htable-size 32768 --hashlimit-htable-max 32768 --hashlimit-htable-gcinterval 1000 --hashlimit-htable-expire 100000 -j ACCEPT

#อ่านเพิ่มเติม
http://www.linuxmantra.com/2012/07/iptables-limit.html
http://www.netfilter.org/documentation/HOWTO/packet-filtering-HOWTO-7.html
http://thelowedown.wordpress.com/2008/07/03/iptables-how-to-use-the-limits-module/
« Last Edit: กันยายน 22, 2016, 02:13:25 PM by golfreeze »

golfreeze

  • Administrator
  • Hero Member
  • *****
  • Posts: 2145
    • View Profile
    • นั่งสมาธิ สติปัฏฐานสี่ พาเที่ยววัด แนะนำวัด แจกcd ธรรมะฟรี
    • Email
ถ้าต้องการ monitoring ดู packet ที่วิ่งเข้ามาในระบบ สามารถใช้ watch เข้ามาช่วยได้ครับ
#watch -n 1 "iptables -L -xv"