如何防止家中伺服器public IP洩漏,防止家用網絡被DDoS

點解要防止IP洩漏

我地呢d係屋企開server既用家,被人炸ser真係全屋唔洗上網。開game server有大把痴線佬或者小學雞會炸鳩你server,為遊戲積分又好,為fun都好。

痴線佬一拎到屋企個public IP,你就玩完了。DDoS流量係講緊5Gbps起跳,你屋企通常得果最多1Gbps。就算你用10Gbps網絡,你都唔好以為10Gbps好多。

痴線佬/小學雞點炸人屋企

一張圖講晒。

呢張圖都有唔準確既地方—果d所謂booter,係Google search free booter已經有幾個免費既,仲要威力唔差。唔一定要拎錢出黎先玩得DDoS。

基本保護措施

  • 唔好開game server。
  • DNS record跟足CloudFlare既呢個指示咁set。
  • E-mail果d既MX record都route左過GMail,姐係跟足晒以上既指示。

基本上,你粒server既IP已經好難漏出黎。

但係呢,現實係冇咁理想。CloudFlare只會保護你個web server。除左web server之外,你可能都會開埋d SSH server或者FTP server。Web server既野set錯左,都會可能漏左自己粒IP出黎,而attacker有可能因為咁搵到你粒public IP跟住再炸你,因為損人不利己既野真係有痴線佬會做。

再加強保護

以下情況有機會令到你既public IP洩漏:

有網頁洩漏IP

你有一兩個web page漏左自己public IP出黎。我有兩個活生生既例子比到出黎:

  • 我試過用一chatroom page黎做實驗,而果個page會log名+IP。我打左句野之後,我既名(Saren)同屋企public IP就被log低同出街,過幾日之後就被人炸。

  • 我有setup Gitlab server。果個server d public project,入面全部指住我個SSH既URL,而SSH URL個domain係指住我個server既public IP,有機會因為咁而洩漏IP。我已經set晒所有project做internal/private,停用SSH URL。

從server既open port認得出你部機

你被人炸,所以你轉左IP,但新IP係相約既/18 /20 /22甚至/24 range度。同時,你部機既service有fingerprint,或者service port既combination係一樣。例如我既SSH server setup係8080 port,係呢個subnet入面係獨一冇二。

換句話講,attacker只要keep住scan x.x.0.0/16,搵到有人係8080開ssh,就知我個真IP。

對於我個人而言,有兩種解決方法:

  • Port knocking

    白名單入面IP先可以access FTP/SSH server,否則一律用iptables DROP。將ipsetiptables、CloudFlare同埋網頁程式混用,可以做到呢個效果。

    你要去setup幾樣野:

    1. 一個神祕網址,例如你係victim.com既owner既話,就setup http://victim.com/fkubitch,然後再用CloudFlare保護victim.com
    2. 入到果個網址既request IP,就會加入ipset白名單。網頁server要成功run到呢個command: # ipset add allow <IP>
    3. iptables入面加呢個rule: -A TCP -p tcp -m set --match-set allow src -m tcp -m multiport --dports 21,22 -j ACCEPT

    好處:

    • 你部屋企server完全變成隱形。
    • 就算SSH/FTP server有0day漏洞都難以成為攻擊目標。
    • 唔洗再被人撞密碼。

    壞處:

    • 需要一d寫程式技巧。
    • HTTP server要有root access。
    • Server reboot/去到咩新地方/用手機流動上網都要入一入個網址先。
  • GRE Tunnel

    想開game server又唔想比好貴租勁vps既話,GRE Tunnel係唯一既解決方案。Linux系統限定。

    總之簡單講就係用其他街外server cover住自己既server,並且通常果d街外server既IP係DDoS protected或者係即棄式既。

    其實set起上黎有d麻煩。逼不得已又或者有興趣既,可以參考下教學呢個網址,算幾詳盡: http://wiki.buyvm.net/doku.php/gre_tunnel

    未來會試下教人用DigitalOcean / AWS / buyvm做round-robin fallback & monitoring & instance scaling。

    雖然我自己都己經用左好多DDoS protected (會自己blackhole) 既IP set左個round-robin A record。 已陣亡

$ dig gre.wtako.net

; <<>> DiG 9.10.3-P3 <<>> gre.wtako.net
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 38517
;; flags: qr rd ra; QUERY: 1, ANSWER: 24, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;gre.wtako.net.            IN    A

;; ANSWER SECTION:
gre.wtako.net.        300    IN    A    103.53.226.63
gre.wtako.net.        300    IN    A    103.53.226.65
gre.wtako.net.        300    IN    A    103.53.226.58
gre.wtako.net.        300    IN    A    103.53.226.59
gre.wtako.net.        300    IN    A    103.53.226.42
gre.wtako.net.        300    IN    A    103.53.226.55
gre.wtako.net.        300    IN    A    103.53.226.49
gre.wtako.net.        300    IN    A    103.53.226.64
gre.wtako.net.        300    IN    A    103.53.226.54
gre.wtako.net.        300    IN    A    103.53.226.45
gre.wtako.net.        300    IN    A    103.53.226.48
gre.wtako.net.        300    IN    A    103.53.226.52
gre.wtako.net.        300    IN    A    103.53.226.46
gre.wtako.net.        300    IN    A    103.53.226.57
gre.wtako.net.        300    IN    A    103.53.226.47
gre.wtako.net.        300    IN    A    103.53.226.50
gre.wtako.net.        300    IN    A    103.53.226.53
gre.wtako.net.        300    IN    A    103.53.226.60
gre.wtako.net.        300    IN    A    103.53.226.56
gre.wtako.net.        300    IN    A    103.53.226.44
gre.wtako.net.        300    IN    A    103.53.226.43
gre.wtako.net.        300    IN    A    103.53.226.51
gre.wtako.net.        300    IN    A    103.53.226.61
gre.wtako.net.        300    IN    A    103.53.226.62

;; Query time: 9 msec
;; SERVER: 192.168.0.1#53(192.168.0.1)
;; WHEN: 二  3月 08 21:10:45 HKT 2016
;; MSG SIZE  rcvd: 426

HTTP Server賣你屎忽

假設你個server仍然host緊http://victim.com,當你被人炸,你轉完IP之後,你部server仲係expose緊一d web server既port,例如80, 443, 8080等。

Attacker掃你個IP range之後,會得到一堆有開web server既IP。佢之後可以就咁連下所有IP既web server port,睇下邊個IP會出302 redirect去http://victim.com ,果個IP之後就會被痴線佬炸。

即使你個web server set左直入http://<你個IP>會出403,attacker仍然可以寫script,request header寫明Host: http://victim.com ,邊粒IP出到http://victim.com既網頁既話,果粒IP就係目標。

解決方法,都係用ipsetiptables,但今次係allow CloudFlare所擁有既IP,同埋屋企既private IP。

暫時CloudFlare有咁多IP:

103.21.244.0/22
103.22.200.0/22
103.31.4.0/22
104.16.0.0/12
108.162.192.0/18
131.0.72.0/22
141.101.64.0/18
162.158.0.0/15
172.64.0.0/13
173.245.48.0/20
188.114.96.0/20
190.93.240.0/20
197.234.240.0/22
198.41.128.0/17
199.27.128.0/21

屋企既private IP,黎黎去去都係10.0.0.0/8127.0.0.0/8172.16.0.0/12同埋192.168.0.0/16

結論

樹大招風、槍打出頭鳥。唔想成為攻擊目標?

  • 唔好開server,nas都唔好開。game server唔洗講。
  • 唔好上論壇串柒柒,即使你串得起。呢個世界好多妒忌人既痴線佬。
  • 參考父子騎驢既故事:

    父子騎驢

    你點做人,或者唔做人,都會有人鬧你,所以請自求多福。

  • 唔好上網,最好唔好做人。😂

Recommendations

Last modified: 2016-04-08 18:22:26
Powered by Simple Blog