Eu tenho lutado em portar as regras do IPTable do Ubuntu 10.04 para o Ubuntu 12.04. O problema é que a cota parece estar quebrada. Tome esta instância muito simples de uma regra de cota.
iptables -t mangle -A POSTROUTING -o eth0 -p tcp -m quota --quota 500000 -j ACCEPT
No Ubuntu 10.04, isso é o que vemos quando transferimos bytes através de eth0.
(root@dev)-(~) $ iptables -L -t mangle -v | grep quota
146 111K ACCEPT tcp -- any eth0 anywhere anywhere quota: 389148 bytes
(root@dev)-(~) $ iptables -L -t mangle -v | grep quota
667 348K ACCEPT tcp -- any eth0 anywhere anywhere quota: 152577 bytes
Você pode ver que a cota está diminuindo enquanto os bytes usados estão subindo (segunda coluna).
No entanto, quando eu uso as mesmas regras no Ubuntu 12.04, acontece o seguinte.
(root@LU1)-(~) $ iptables -L -t mangle -v | grep quota
14 2544 ACCEPT tcp -- any eth0 anywhere anywhere quota: 500000 bytes
(root@LU1)-(~) $ iptables -L -t mangle -v | grep quota
19 3188 ACCEPT tcp -- any eth0 anywhere anywhere quota: 500000 bytes
O contador de bytes usados está subindo, mas a cota não está diminuindo. No entanto, está contando e, se a cota for usada, ela continuará na próxima regra. Há um segundo problema, porém, porque quando você reinicializa o servidor e salva as regras, a cota é redefinida novamente, mesmo que tudo esteja esgotado.
Então, basicamente, há dois problemas: a cota não está diminuindo visivelmente e ela é reinicializada mesmo que eu esteja salvando as regras.
O kernel no Ubuntu 12.04 é o 3.2.0-44-generic
Saída lsmod: link
Alguém pode me explicar o que está acontecendo e de onde vem essa diferença entre o comportamento? Ou melhor ainda propor uma solução? Eu estou realmente preso a isso e gostaria que qualquer um de vocês pudesse me dar.