1. 程式人生 > >Liunx防火牆--iptables(二)攻擊與防禦篇

Liunx防火牆--iptables(二)攻擊與防禦篇

網路層攻擊的定義

      網路層攻擊定義為:通過傳送濫用網路層的首部欄位的一個或者一系列的資料包以利用網路棧漏洞或消耗網路層資源進行攻擊。

1.首部濫用:包含有惡意構造的,損壞的或經過非法改造的網路層首部的資料包。(如虛假源ip地址,或者包含虛假片偏移)

2.利用網路棧漏洞:如Linux 2.6.9 以前版本發現的IGMP拒絕服務Dos漏洞。

3.寬頻包和:DDos攻擊。

4.IP分片:任何連線兩個不同MTU大小的資料鏈路層的路由器都有責任確保這兩個資料鏈路層之間傳輸的IP資料包大小不會超過任何一方的MTU的值。而攻擊者可以利用分片,將一個數據包故意分成多個IP片來逃避IDS(入侵檢測系統)的檢查。

5.低TTL攻擊。

         雖然非法改造的ip首部可能會被防火牆或帶有訪問控制列表(ACL)的路由器一一過濾調,但是強大的黑客面前沒有攻不破的系統。

防火牆iptables 主要是工作在網路層上的,iptables則可以通過記錄網路層資料包的首部來捕獲可疑的網路層活動。

首先則是 記錄IP首部,使用的是 --log-ip-options 命令列引數將LOG規則新增到iptables策略。

首先是iptables命令(注意,這裡為了演示,會停掉firewall對iptables的規則)。

# iptables -A INPUT -j LOG --log-ip-options

在另一臺機器對該機器進行ping操作

$ ping -c 1 -T tsonly 192.168.199.208
PING 192.168.199.208 (192.168.199.208) 56(124) bytes of data.
64 bytes from 192.168.199.208: icmp_seq=1 ttl=64 time=0.241 ms
TS: 	51551931 absolute
	-1833
	1
	1832


--- 192.168.199.208 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 0.241/0.241/0.241/0.000 ms

檢視日誌
# grep "ICMP" /var/log/messages 
Aug  6 21:58:15 vm1 kernel: IN=enp0s3 OUT= MAC=08:00:27:bd:cd:37:d0:53:49:54:4d:e1:08:00 SRC=192.168.199.171 DST=192.168.199.208 LEN=124 TOS=0x00 PREC=0x00 TTL=64 ID=28193 DF OPT (44280D0002FF785002FF712700000000000000000000000000000000000000000000000000000000) PROTO=ICMP TYPE=8 CODE=0 ID=9332 SEQ=1 

其中日誌詳細記錄首部內容。OPT後面跟的一長串十六進位制位元組是包含在IP首部的完整IP選項。

 

傳輸層攻擊的定義

    通過傳送濫用的傳輸層首部欄位的一個或一系列資料包或利用傳輸棧的漏洞進行攻擊。

 1.耗盡連線資源:用於耗盡一個目標主機為新連線提供服務的的所有可用資源的資料包。(如SYN泛洪實施的DDos攻擊)

 2.首部濫用:比如用於中斷一個TCP連線的偽造RST資料包。

 3.埠掃描:一個人對你心懷不軌,必定會事先踩點。

而記錄tcp首部的手段就是引數 --log-tcp-options

# iptables -A INPUT -j LOG --log-tcp-options

對該主機進行探測

$ nc -v 192.168.199.208 25010
Ncat: Version 6.40 ( http://nmap.org/ncat )
Ncat: Connection refused.

檢視日誌

# grep "25010" /var/log/messages 
Aug  6 22:52:19 vm1 kernel: IN=enp0s3 OUT= MAC=08:00:27:bd:cd:37:d0:53:49:54:4d:e1:08:00 SRC=192.168.199.171 DST=192.168.199.208 LEN=60 TOS=0x00 PREC=0x00 TTL=64 ID=63634 DF PROTO=TCP SPT=49440 DPT=25010 WINDOW=29200 RES=0x00 SYN URGP=0 
Aug  6 22:52:19 vm1 kernel: IN=enp0s3 OUT= MAC=08:00:27:bd:cd:37:d0:53:49:54:4d:e1:08:00 SRC=192.168.199.171 DST=192.168.199.208 LEN=60 TOS=0x00 PREC=0x00 TTL=64 ID=63634 DF PROTO=TCP SPT=49440 DPT=25010 WINDOW=29200 RES=0x00 SYN URGP=0 OPT (020405B40402080A00712A670000000001030307) 

 

下面介紹一下埠掃描技術。

埠掃描不得不說一下一款優秀的埠掃描技術--Nmap 。

TCP connect() 掃描 --- (nmap -sT)

TCP SYN 或半開放掃描 --- (nmap -sS)

TCP FIN或XMAS和NULL 掃描 --- (nmap -sF,-sX,-sN)

TCP ACK 掃描 --- (nmap -sA)

TCP idle 掃描 --- (nmap -sI)

UDP 掃描 --- (nmap -sU)

nmap 的 -P0 是指強制跳過判斷iptablesfw系統是否線上的過程(即省略主機的發現過程)。從nmap的角度來看一個被掃描的埠可能處於3種狀態。

開放,關閉,被過濾。   

TCP connect() 掃描

       這種是最基本的掃描方式,也是最普通的TCP連線。如果SYN資料包到了一個開放的埠,伺服器的TCP協議將以一個SYN/ACK資料包作為響應。確認收到了來自客戶端的初始序號,同時會將自己的序號給客戶端,客戶端受到SYN/ACK資料包後,將返回一個確認資料包給伺服器。此時就建立連線引數,連線狀態也成為了“establish” 狀態,並準備好傳輸資料。

      在TCP connect() 掃描時,就是最普通的TCP連線,針對每一個被掃描的埠傳送SYN資料包和握手結束的ACK資料包。

對應的nmap 命令為 nmap -P0 -sT 192.168.199.208

$ nmap -P0 -sT 192.168.199.208

Starting Nmap 6.40 ( http://nmap.org ) at 2018-08-30 21:11 CST
Nmap scan report for vm1.lan (192.168.199.208)
Host is up (0.0018s latency).
Not shown: 998 closed ports
PORT    STATE SERVICE
22/tcp  open  ssh
111/tcp open  rpcbind

Nmap done: 1 IP address (1 host up) scanned in 0.12 seconds


$ grep SYN /var/log/messages |tail -n 1
Aug 28 23:43:47 vm1 kernel: IN=lo OUT= MAC=00:00:00:00:00:00:00:00:00:00:00:00:08:00 SRC=192.168.199.208 DST=192.168.199.208 LEN=44 TOS=0x00 PREC=0x00 TTL=47 ID=37472 PROTO=TCP SPT=60907 DPT=111 SEQ=2712329176 ACK=0 WINDOW=1024 RES=0x00 SYN URGP=0 OPT (020405B4) 

 

TCP SYN或半開放 掃描

      半開放是類似於connect() 掃描的。掃描器傳送一個SYN資料給TCP埠,希望獲得一個SYN/ACK資料包或者RST/ACK 。收到前者表示目標埠是開著的,收到後者表示是關著的。當然還存在第三種情況,那就是什麼都沒獲得,這種情況只能說明資料包被過濾了,這個埠到底開著或者沒開,nmap也不知道。但是這種掃描方式不會完成3次握手,也就是它故意不返回ACK給已經響應了SYN/ACK資料包的開放埠。因此SYN掃描也稱為半開放掃描。這種反常規的操作其實繞過了TCP協議棧,這是通過原始套接字實現的。

      如果對一個iptablesfw系統進行掃描,SYN掃描所記錄的TCP選項將十分的少。

$ nmap -P0 -sS 192.168.199.208

Starting Nmap 6.40 ( http://nmap.org ) at 2018-08-30 21:37 CST
Nmap scan report for vm1.lan (192.168.199.208)
Host is up (0.00035s latency).
Not shown: 998 closed ports
PORT    STATE SERVICE
22/tcp  open  ssh
111/tcp open  rpcbind
MAC Address: 08:00:27:BD:CD:37 (Cadmus Computer Systems)

Nmap done: 1 IP address (1 host up) scanned in 0.16 seconds

TCP FIN,XMAS,NULL 掃描

      FIN,XMAS,NULL 掃描的操作是基於同一個原理,就是當某個關閉埠突然收到一個沒有設定SYN,ACK或RST控制位的TCP資料包時,通常是一個RST去響應這個令人詫異的資料包,但如果是一個開放的埠,TCP將不做任何響應。

$ nmap -P0 -sF 192.168.199.208

Starting Nmap 6.40 ( http://nmap.org ) at 2018-08-30 21:44 CST
Nmap scan report for vm1.lan (192.168.199.208)
Host is up (0.00031s latency).
Not shown: 998 closed ports
PORT    STATE         SERVICE
22/tcp  open|filtered ssh
111/tcp open|filtered rpcbind
MAC Address: 08:00:27:BD:CD:37 (Cadmus Computer Systems)

Nmap done: 1 IP address (1 host up) scanned in 1.31 seconds

TCP ACK掃描

    TCP ACK掃描向每個被掃描的埠傳送一個TCP ACK資料包。如果目標資料包傳送出去有接收到RST(不是RST/ACK資料包)說明埠是開放或者關閉的,沒有回信表示被過濾了。

    ACK掃描的目的並不是確定某個埠是開著的還是關著的,它是為了確定一個埠是否被一個有狀態的防火牆過濾了。

$ nmap -P0 -sA 192.168.199.208

Starting Nmap 6.40 ( http://nmap.org ) at 2018-08-30 21:52 CST
Nmap scan report for vm1.lan (192.168.199.208)
Host is up (0.00035s latency).
All 1000 scanned ports on vm1.lan (192.168.199.208) are unfiltered
MAC Address: 08:00:27:BD:CD:37 (Cadmus Computer Systems)

Nmap done: 1 IP address (1 host up) scanned in 0.12 seconds