假設我的應用程序具有偵聽UDP套接字,並且它知道它可以從哪些IP地址接收UDP數據報。來自其他IP地址的任何內容都將被視爲惡意數據報,應儘早丟棄以防止DoS攻擊。最困難的部分是這些合法IP地址的集合可以動態改變應用程序的生命週期(即通過在控制通道上動態接收它們)。應該在應用層本身實現源IP地址過濾還是由應用委託給防火牆
如何在上述情況下基於源IP地址實施過濾?
我看到了兩個解決方案,其中把這個源IP篩選邏輯:
- 它recvfrom的()調用後,應用程序本身實現。
- 在防火牆中安裝默認的丟棄策略,然後讓應用程序安裝可動態將白名單合法IP地址列入白名單的防火牆規則。
每種解決方案都有優點和缺點。一些來我的腦海:
- 的iptables可以用O(n)的濾波的複雜性(CON iptables的)
- 的iptables丟棄數據包之前,他們甚至得到套接字緩衝區(親iptables的)最終
- iptables的可能不是非常便攜(CON iptables的)從我的應用程序
- iptables的可能與可能也將安裝iptables規則(CON iptables的)
- ,如果我的應用程序安裝的iptables規則,那麼它可能成爲其他應用程序攻擊矢量本身(con for iptables)
你會在哪裏實現源IP過濾,爲什麼?
你可以命名遵循約定#2的任何應用程序(管理員手動安裝靜態防火牆規則不計數)嗎?
iptables是內核級別,應用程序是用戶空間。那裏存在顯着差異。我期望一個tcpwrapper像實現,如果你在用戶空間做的事情..但通常有它的共同基礎設施,如Apache允許/拒絕規則的全部原因。 –