Да приемем, че моето приложение има слушащ UDP сокет и знае от какви IP адреси може да получава UDP дейтаграми. Всичко, идващо от други IP адреси, ще се счита за злонамерена дейтаграма и трябва да бъде изхвърлено възможно най-рано, за да се предотвратят DoS атаки. Трудната част е, че наборът от тези легитимни IP адреси може динамично да се променя през живота на приложението (т.е. чрез динамичното им получаване по контролен канал).
Как бихте приложили филтриране въз основа на IP адреса на източника в горния случай?
Виждам две решения къде да поставя тази изходна логика за филтриране на IP:
- Внедрете го в самото приложение след извикване на recvfrom().
- Инсталирайте политиката за изхвърляне по подразбиране в защитната стена и след това оставете приложението да инсталира правила за защитна стена, които динамично ще добавят в белия списък законните IP адреси.
Има плюсове и минуси за всяко решение. Някои, които ми идват наум:
- iptables може да завърши с O(n) сложност на филтриране (против за iptables)
- iptables изпуска пакети, преди дори да стигнат до буфера на сокета (про за iptables)
- iptables може да не е много преносим (против за iptables)
- iptables от моето приложение може да попречи на други приложения, които потенциално биха инсталирали правила за iptables (против за iptables)
- ако моето приложение инсталира правила за iptables, тогава то може потенциално да стане вектор за атака (против за iptables)
Къде бихте приложили IP филтриране на източника и защо?
Можете ли да посочите приложения, които следват конвенция №2 (администраторът ръчно инсталира статични правила на защитната стена не се брои)?