Назад | Перейти на главную страницу

iptables превышает квоту при добавлении нового правила

У меня есть 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 (например, сохранение оставшихся квот и восстановление при загрузке, если вам пришлось перезагружать сервер), но это наверняка решит ваши проблемы.