2016-07-26 135 views
0

我在網上查找,似乎無法找到太多類似的故事,這是令人驚訝的。如何停止或處理垃圾郵件服務器連接

我從提供商租用服務器,然後在那裏運行我的服務器軟件。我的iOS應用連接到它。它已經過去了一個月沒有問題,並且每天獲得幾十個連接。

從大約30小時前開始,有人開始每2秒連接一次。始終相同的IP。我懷疑他把手機放了30個小時?而我的應用程序每天只有100個用戶,因此我沒有任何競爭對手可以從中獲益。

我終於使用iptable阻止了他從我的服務器。從軟件工程方面來看,防止這些事情的常見做法是什麼?我應該跟蹤服務器端並拒絕重複連接嗎?我是否使用某種登錄/握手,或者我該怎麼做?

爲了澄清,我沒有使用http或apache。我使用基於TCP的自定義協議編寫了​​基於BSD套接字的服務器。我也有一個加密哈希,如果消息沒有正確散列,會終止連接。

編輯:我在我的連接日誌中計數。在過去的30個小時內,共有3個IP連接了10,000次。其中2個已經停止。所有這些都來自亞洲一個我不會指名的小國。

+0

對於這樣的事情不要修改或限制系統相關的東西,如iptable。作爲服務器邏輯的一部分實施阻止可疑請求。您可以使用'Memcache'來記錄來自特定IP的請求數量,並根據傳入請求的閾值限制在一段時間內(例如1小時)作出決定。在Memcache密鑰上也使用TTL。 – sameerkn

回答

0

您需要實現某種antirobot在您的應用程序:

  • 刪除傳入連接,如果已經有來自同一IP地址> = N建立的連接。
  • 如果最後1分鐘,5分鐘和30分鐘內來自此IP地址的連接總數超過預定義閾值(是的,您將需要跟蹤每個IP地址的連接數量),則丟棄傳入連接。

高負載環境中使用的更復雜的反向機器人不僅可以檢測和阻止單個IP地址,還可以阻止整個IP地址範圍(網絡)。而且最好不要盲目放置連接,而是將客戶重定向到驗證碼。

無論如何,有沒有完美的解決方案來區分機器人和普通客戶端:要麼放棄一些好客戶,要麼允許一些機器人篩選您的反機器人。

+0

謝謝gudok。我剛剛搜索過,看到最好在網絡堆棧中阻塞(使用iptables我假設?)。因爲在服務器軟件中,直到我調用BSD接受之後,我才能獲得對等地址。但iptables需要root/sudo,我不想以root身份運行。你建議在什麼時候放棄連接? – Rob