У меня есть iptables, работающие на Centos 7, использующие версию v1.4.21, но также протестированные на v1.6.0 (заметьте, я не перестраивал ядро, поскольку он говорит, что мне больше не нужны расширения).
Я установил квоту, и она используется:
# iptables -nvx -L 192.168.2.5
Chain 192.168.2.5 (2 references)
pkts bytes target prot opt in out source destination
3639 3999378 ACCEPT all -- * * 0.0.0.0/0 0.0.0.0/0 quota: 4000000 bytes
142 175468 DROP all -- * * 0.0.0.0/0 0.0.0.0/0
#
Затем, когда я добавляю любое другое правило в эту цепочку, существующее правило "сбрасывает" использование байтов и снова использует квоту:
# iptables -I 192.168.2.5 -m quota --quota 1000 -j ACCEPT
# iptables -nvx -L 192.168.2.5
Chain 192.168.2.5 (2 references)
pkts bytes target prot opt in out source destination
2 168 ACCEPT all -- * * 0.0.0.0/0 0.0.0.0/0 quota: 1000 bytes
7239 7998334 ACCEPT all -- * * 0.0.0.0/0 0.0.0.0/0 quota: 4000000 bytes
890 387931 DROP all -- * * 0.0.0.0/0 0.0.0.0/0
Даже если оно не превышено, это поведение всегда добавляет квоту к правилу, даже если я затрагиваю другое правило:
# iptables -nvx -L 192.168.2.5
Chain 192.168.2.5 (2 references)
pkts bytes target prot opt in out source destination
379 67755 ACCEPT all -- * * 0.0.0.0/0 0.0.0.0/0 quota: 4000000 bytes
0 0 DROP all -- * * 0.0.0.0/0 0.0.0.0/0
# iptables -I 192.168.2.5 -m quota --quota 1000 -j ACCEPT
# iptables -nvx -L 192.168.2.5
Chain 192.168.2.5 (2 references)
pkts bytes target prot opt in out source destination
2 168 ACCEPT all -- * * 0.0.0.0/0 0.0.0.0/0 quota: 1000 bytes
379 67755 ACCEPT all -- * * 0.0.0.0/0 0.0.0.0/0 quota: 4000000 bytes
0 0 DROP all -- * * 0.0.0.0/0 0.0.0.0/0
# iptables -nvx -L 192.168.2.5
Chain 192.168.2.5 (2 references)
pkts bytes target prot opt in out source destination
11 924 ACCEPT all -- * * 0.0.0.0/0 0.0.0.0/0 quota: 1000 bytes
4159 4066453 ACCEPT all -- * * 0.0.0.0/0 0.0.0.0/0 quota: 4000000 bytes
315 190056 DROP all -- * * 0.0.0.0/0 0.0.0.0/0
Кажется, это ошибка и, возможно, связана с вот этот.
Любые идеи? Мой единственный обходной путь - сам захватить байты и добавить их в квоту нового правила. Это хорошо работает, когда оно уже превышено, но если нет, я могу пропустить байты из-за разрыва между чтением, вычислением, удалением и добавлением.
Читая другой вопрос, который вы связали и тестируете, я могу только сделать вывод, что модуль квот не очень полезен: сбрасывается при каждом изменении.
Наверняка поэтому существует другой модуль под названием quota2! Это не часть iptables, а часть xtables-addons. В Debian он доступен и компилируется при установке с помощью xtables-addons-dkms. Думаю, вам придется самому скомпилировать его в CentOS7.
Три выдержки из справочной страницы (можно найти здесь:xtables-addons.8)
Значение счетчика может быть прочитано и сброшено через procfs, что делает его минималистичным инструментом учета.
.
--name имя
Присвойте счетчику определенное имя. Эта опция должна присутствовать,
Квота находится в / proc / net / xt_quota /название и читается / пишется
--quota iq
Укажите начальную квоту для этого счетчика. Если счетчик уже существует, он не сбрасывается.
Это означает, что должна использоваться некоторая логика, выходящая за рамки самого iptables (например, сохранение оставшихся квот и восстановление при загрузке, если вам пришлось перезагружать сервер), но это наверняка решит ваши проблемы.