Cota IPTables não funciona no Ubuntu 12.04

1

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.

    
por Maran 25.05.2013 / 13:36

1 resposta

1

Eu respondi a minha própria pergunta ao analisar as alterações do kernel.

Eu tropecei em este commit. A coisa que eu assumi que era um bug era o comportamento real pretendido pelo patcher. Eu fiz um patch no kernel 3.2 recente para reverter este commit e tudo funciona novamente. Espero que isso possa salvar alguém de algumas horas pesquisando.

    
por 27.05.2013 / 18:19