I.Оптимальным способом хранения IP ACL будет отправка запрещенных IP-адресов в базу данных SQL, которая не страдает от проблем параллелизма, таких как запись в файлы.Затем внешний сценарий, на регулярной основе или триггер, может генерировать правила IPTABLES.Вам не нужно перечитывать вашу базу данных при каждом доступе, вы пишете только тогда, когда обнаруживаете неправильное поведение.
II.Привязка к IP не является хорошей вещью в общедоступном Интернете, если вы предлагаете услуги клиентам за прозрачными прокси или мобильным устройствам - их IP-адреса меняются.Пусть пользователи выбирают в настройках, если они хотят эту функцию (зависит от вашей аудитории, если они знают, что означает IP ...).Мое решение состоит в том, чтобы генерировать уникальный токен для запроса (страницы), повторно используемого на этой странице AJAX-запросами (не вмешиваясь в проблему с ресурсами - случайные числа, хранилище данных сеанса и т. Д.).Сгенерированные мной токены хранятся в течение сеанса и запоминаются на несколько минут.Это позволяет пользователю открыть несколько вкладок, вернуться и отправить их в ранее открытую вкладку.Я не привязываюсь к IP.
III.Это зависит ... не хватает данных от вас, чтобы ответить.Выше может идеально удовлетворить ваши потребности для ~ 500 пользователей, приходящих на ваш сайт по 5 минут в день, один раз.Или он может подходить даже для 1000 уникальных пользователей в час на сайте / игре чата - это зависит от того, что делает ваше приложение, и от того, насколько хорошо вы кешируете данные, которые можно кэшировать.
Хорошо спроектируйте, протестируйтеэталонный.Проверьте, является ли обработка сеанса проблемой вашего ресурса, а не чем-то другим.Хорошие алгоритмы не должны бросать вас в проблемы с ресурсами.DoS защита включена, и она не должна быть кодом в приложении.Приложения могут подсказывать механизмам предотвращения DoS, что нужно делать, и разрешать защиту с помощью специализированных инструментов (см. Ответ I.).
В любом случае, если в будущем у вас возникнут проблемы с ресурсами, лучший выход - этоновое оборудование.Это может показаться кому-то грубым или даже некомпетентным, но рассчитайте цену нового сервера через 6 месяцев, практически на 30% лучше, чем цена за вашу работу: заплатите 600 долларов за новый сервер и получите дополнительно 130% мощности или платите себе 100 долларов в месяц заулучшение на 5% (хорошо, улучшение на 40%, но если неделя стоит 25 долларов, это может серьезно измениться).
Если вы разрабатываете с нуля, сначала прочитайте https://www.owasp.org/index.php/Session_Management, а затем найдите перехват сеанса, фиксация сессии и подобные строки в Google.