1,296 瀏覽數

UFW BLOCK

我的 Ubuntu 14.04 透過 ufw 來設定 firewall ,關於 ufw 設定請參考 http://benjr.tw/93733

目前開放的網路埠只有 ssh (port 22) , http (port 80) , https (port 443)

root@localhost:~#  ufw status
Status: active
 
To                         Action      From
--                         ------      ----
22                         ALLOW       Anywhere
80                         ALLOW       Anywhere
443                        ALLOW       Anywhere
22 (v6)                    ALLOW       Anywhere (v6)
80 (v6)                    ALLOW       Anywhere (v6)
443 (v6)                   ALLOW       Anywhere (v6)

在 /var/log/syslog 一堆關於 ufw 的訊息.

root@localhost:~# cat /var/log/syslog
Aug 28 10:21:14 localhost kernel: [UFW BLOCK] IN=eth0 OUT= MAC=f2:3c:91:3b:ba:a3:50:87:89:40:9f:c1:08:00 SRC=187.185.231.2 DST=139.162.22.140 LEN=40 TOS=0x00 PREC=0x00 TTL=244 ID=43068 PROTO=TCP SPT=35048 DPT=23 WINDOW=14600 RES=0x00 SYN URGP=0 

這訊息代表

  • Date: 訊息發生時間,日期加上時間.
  • Hostname: 發生訊息的主機名稱.
  • Logged Event: 訊息的種類, UFW BLOCK 表示 UFW (Uncomplicated Firewall) 阻止連線.
  • IN: 代表該訊息是傳入事件.
  • OUT: 代表該訊息是傳出事件.
  • MAC: f2:3c:91:3b:ba:a3:目的地(本地端) MAC + 50:87:89:40:9f:c1: 來源 MAC 地址組合 , 08:00 (不確定)
  • SRC: 來源端的 IP (連線的遠端)
  • DST: 目的地的 IP (本地端)
  • LEN: 封包大小
  • TOS: Type of service
  • PREC: Precedence 優先權
  • TTL: Time To Live 封包 在到目的地之前,最多可以透過幾個路由器之間轉送,直到 TTL 的上限值.
  • ID: ??
  • PROTO: 封包的協議,可為 TCP 或是 UDP.
  • SPT: 封包來源埠(連線的遠端).
  • DPT: 封包目的埠(本地端).
  • WINDOW: windows size .請參考 http://benjr.tw/3020
  • RES: ??
  • SYN URGP: 是否需要三次握手(three-way handshake), 0 表示不需要. 請參考 http://benjr.tw/3020

透過簡單的 bash 來統計一下 UFW 阻擋了幾個 TCP / IP 不正當的請求.

root@localhost:~# grep BLOCK /var/log/syslog | awk 'END{print "UFW Block:"NR}'
UFW Block:1888
  • grep: 主要是在一群文字資料裡搜尋 Keyword (BLOCK) 關鍵字在哪一行.
  • awk: 將一整行做多個 欄位(Field) 的資料處理. print 輸出格式,到標準輸出 (預設為 terminal),NR (Number of Record) 代表目前處理的資料的第幾行. END {} 只會在最後時執行一次.

進階一點我們還可以來統計一下,都是哪一些 IP 發出的需求.

root@localhost:~# grep BLOCK /var/log/syslog | awk '{print $11}' | sort | uniq -c | sort -n
...
     15 SRC=148.177.1.213
     15 SRC=218.211.34.185
     16 SRC=123.249.24.170
     19 SRC=186.15.47.26
     19 SRC=91.195.103.149
     20 SRC=91.211.0.103
     85 SRC=125.64.94.201
  • grep: 主要是在一群文字資料裡搜尋 Keyword (BLOCK) 關鍵字在哪一行.
  • awk: 將一整行做多個 欄位(Field) 的資料處理. print 輸出格式,到標準輸出 (預設為 terminal),$11 代表第 11 欄資料.
  • sort: 進行排序(預設使用文字來進行排序), -n 依據 數字 來進行排序.
  • uniq: 刪除重複的行 並透過 -c 進行計數.

這時候就可以透過 ufw 來進行 IP 封鎖 (但後來發現這些 IP 一直變動,好像封鎖不完).

root@localhost:~# ufw deny from <ip address>

發表迴響