CubieTruck SYN Cookie保護機制

事實上,對應SYN Flood來說,Linux Kernel 2.4.xx版本以上內部有一個選項可以打開SYN Cookie來防止SYN Flood。具體的理論比較複雜,簡單的說就是在三段式交握中,系統並不會真正配置資料給Socket,反而是透過一種可逆的計算方式先算出一個Cookie數值。在真正建立起連線以前,Linux SYN Cookie Firewall會自己和這個客戶端打交道,直至連線正式建立之後,才把這三段式交握的封包轉傳給TCP,退出中介角色。

但很可惜的是,這個選項預設值不是打開的,必須手動開啟。至於為何?嗯,我想不是每個人拿Linux當伺服器的,打開SYN Cookie 也有一些缺點,例如在Kernel文件提到的

SYN cookies may prevent correct error reporting on clients when the server is really overloaded. If this happens frequently better turn them off.

但副作用似乎不太大,所以我還是把它給打開來了,至於如何打開,有一個前提,就是你是否有打開 ufw 防火牆。如果沒有,那檔案在 /etc/sysctl.conf。如果你已經打開 ufw 防火牆的話,那 /etc/ufw/sysctl.conf 會覆寫 /etc/sysctl.conf,也就是比之前的優先權更高。所以先檢查是否有打開防火牆吧!

ufw status verbose

如果只有短短一行敘述,那就是沒有打開,去編輯 /etc/sysctl.conf,反之編輯/etc/ufw/sysctl.conf 檔案,內容都一樣

net.ipv4.tcp_syncookies=1

預設值是被 # 起來的,所以只要把最前面那個 # 符號拿掉就可以了。重新啟動的方式也不太一樣,若是沒有開啟 ufw 防火牆者

sysctl -p

如果有開啟防火牆者

ufw reload

檢查是否真正打開

cat /proc/sys/net/ipv4/tcp_syncookies

看看輸出是否為1,是者代表打開。反之關閉。

最後,我想講的是,就像我在第一篇分析SYN攻擊說到,TCP/IP原本就是一個古老的協定,而且是基於分散式處理的,所以機制上肯定有很多的漏洞。但是三段式交握卻是十分流行的方式,我們可以重寫一個比較好的機制,但是我們無法阻止大家使用三段式交握。正所謂道高一尺,魔高一丈,怎麼堵都是有缺點的。沒有吃燒餅不掉芝麻的道理。我們只是在這場攻防戰裡面學習一些基本的常識,想想一些之前讀書時沒想過的問題。

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *