Saturday, 5 July 2014

MikroTik Block Facebook โดย IP Address

วันนี้เราจะมาดูวิธีการ ฺBlock Facebook อีกแบบกันนะครับนอกจากวิธีการ ฺBlock แบบ Layer 7 (ไม่สามารถ Block https ได้) ดังที่มีในบทความเก่าในเว็บนะครับ ในบทความนี้จะใช้วิธีการ Block โดย IP เป็นหลักนะครับ เอาละมาดูกันดีกว่าครับว่าวิวิธีการทำอย่างไร




ก่อนอื่นเราต้องมาเรียนรู้ก่อนนะครับว่า บางเว็บไซด์นั่นมี IP หลาย IP มากครับดังด้านล่างครับ


ถ้าเราจะไล่ Block ทุกไอพีมันก็จะดูถึงไปนะครับ หรือไม่ถ้าเกิดเว็บเกิดเปลี่ยน IP ขึ้นมาอีกเราก็ต้องมาอัพเดท IP อีกซึ่งอาจจะมีโอกาศหลุดได้นะครับ เพราะฉะนั่นวิธีที่ดีที่สุดคือการ Lookup hostname มาเป็น IP จะดีที่สุดครับ

ขั้นแรกเลยเราต้องสร้าง Script เพื่อทำการ Lookup hostname มาเป็น IP แล้วนำไปเก็บไว้ใน Address-list ก่อนนะครับ

# Define parameter.
:global host www.facebook.com
:global list block-web
:global ip
:global find

# Resolve hostname to ip address.
:set ip [:resolv $host]

# Is ip address in address list.
:set find [/ip firewall address-list find address=$ip]
:if ($find = "") do={
   /ip firewall address-list add list=$list address=$ip comment=$host
   :log info ("Add a new ip to address-list for $find $host --> $ip")
}


หลังจากนั่นให้ไปสร้าง Scheduler ขึ้นมาเพื่อสั่งทำงาน Script ทุกๆ 10 วินาทีครับ


จากนั่นให้ไปสังเกตการทำงานได้ 2 ทีใน Winbox => IP => Firewall =>Address List และ Log


จะเห็นว่ามีการอัพเดท IP ของ Facebook เข้ามาเรื่อยๆ นะครับ ส่วนใน Log ก็จะมีรายละเอียดการทำงาน


จากนั่นให้มาสร้าง Filter Rule เพื่อทำการ Drop Packet ครับ




เพียงเท่านี้เราก็สามารถจะ ฺBlock Facebook ได้ตลอดเวลาทั้ง http และ https แล้วละครับ


6 comments:

  1. nslookup www.youtube.com แบบนี้ก็ได้นะครับ สั้นดี

    ReplyDelete
    Replies
    1. nslookup จะไม่ได้ ip ทั้งหมดครับจะได้ทั้งหมดขอ ณ ตอนนั่นครับ
      ทำให้ถ้าใช้ ืnslookup ตอนมาค่อยนั่งทำตลอดครับถ้าทาง facebook หรือ youtube เปลี่ยน ip ใหม่ครับ

      Delete
  2. ถ้าใช้ แอพ fb สามารถ block app ได้ไหมครับ อิๆ

    ReplyDelete
    Replies
    1. ได้ครับแต่รต้องรู้ host ip ครับ

      Delete
  3. echo "www.facebook.com" | awk -F "." '{if($1 == "www" ){print$2"."$3"."$4" "$1"."$2"."$3"."$4}else{print$1"."$2"."$3}}' | tr " " "\n" | awk '{system("/usr/bin/dig @8.8.8.8 "$1" +short | grep -v [a-z]")}'
    69.171.230.0/24
    43.245.144.0/24
    31.13.78.0/24
    216.58.221.0/24
    69.171.230.0/24
    43.245.144.0/24
    31.13.78.0/24
    216.58.221.0/24

    ReplyDelete