[FUG-BR] Opcao keep-state do PF

Fabiano Carlos Heringer bigu em grupoheringer.com.br
Quarta Outubro 1 12:20:04 BRT 2008


opa, beleza...

tirei o keep state, mas estranhamente nao se comporta como no outro 
servidor...
quando coloco o keep state no servidor em que esta funcionando, ele se 
comporta como o outro que esta com problema, provando ser o keep state

mas quando coloco o no state no que nao esta funcionando, continua com o 
mesmo problema...

vou mandar as regras dos dois servidores para se ter uma ideia:

SERVIDOR 1 (esta funcionando da maneira que eu quero)

set optimization normal
set loginterface xl0
set loginterface nve0
set skip on lo0

scrub in all
scrub out all

nat on $ext_if from x.x.x.x/24 to any -> y.y.y.y

altq on { $int_if } cbq bandwidth 4Mb queue { std_in, rede_in }

        queue std_in bandwidth 1Mb priority 1 \
                cbq(default)
       queue rede_in bandwidth 256Kb priority 1 \
              cbq(red ecn)


altq on { $ext_if } cbq bandwidth 4Mb queue { std_out, rede_out }
        queue std_out bandwidth 1Mb priority 1 \
                cbq(default)
       queue rede_out bandwidth 56Kb priority 1 \
              cbq(red ecn)


pass quick proto tcp from x.x.x.x to any queue rede_out
pass quick proto tcp from any to x.x.x.x queue rede_in

OBS: Neste Servidor estou com a versao 6.2 (portanto o keep state nao 
vem por default)

Olhas as estatisticas no PFTOP com essas regras:

pfTop: Up Queue 1-6/6, View: queue, Cache: 
10000                                                                                                                
12:21:49

QUEUE                             BW SCH  PRIO     PKTS    BYTES   
DROP_P   DROP_B QLEN BORROW SUSPEN     P/S     B/S
root_nve0                      4000K cbq     0   589940  380403K        
0        0    0      0      0
 std_in                        1000K cbq         589936  380403K       
57    37445    0      0   5265
 rede_in                        256K cbq              4      262        
0        0    0      0      0
root_xl0                       4000K cbq     0   559760  110156K        
0        0    0      0      0
 std_out                       1000K cbq         555246  108803K       
22    11588    0      0   4694
 rede_out                      56000 cbq           4514  1385063        
0        0    0      0    179

notem que rede_in e rede_out estao recebendo o trafego (aqui o controle 
esta funcionando perfeitamente, tanto down quanto Up)

#### SERVIDOR 2 (ONDE NAO ESTA FUNCIONANDO)

set optimization normal
set loginterface em0
set loginterface sk0

scrub in all
scrub out all

altq on $int_if bandwidth 2Gb cbq queue { def_in_em0, q000Iem0 }
   queue def_in_em0 bandwidth 1Mb priority 0 cbq(default borrow)
   queue q000Iem0 bandwidth 128Kb

altq on $ext_if bandwidth 2Gb cbq queue { def_in_sk0, q000Osk0 }
   queue def_in_sk0 bandwidth 1Mb priority 0 cbq(default borrow)
   queue q000Osk0 bandwidth 128Kb


pass quick log from x.x.x.x to any no state queue q007Iem0
pass quick log from any to x.x.x.x no state queue q007Osk0

Neste estou usando um FreeBSd 7.0

Notem como ficam as filas (utilizei o pftop):

QUEUE                             BW SCH  PRIO     PKTS    BYTES   
DROP_P   DROP_B QLEN BORROW SUSPEN     P/S     B/S
root_em0                       2000M cbq     0    50256 69906080        
0        0    0      0      0      89  125753
 def_in_em0                    1000K cbq     0    43704 60277928        
0        0    0  10865      0      88  125665
 q000Iem0                       128K cbq           6384  9594503        
3     4542    0      0   3157       0       0
root_sk0                       2000M cbq     0    36002  2900567        
0        0    0      0      0      69    5755
 def_out_sk0                   1000K cbq     0    36002  2900567        
0        0    0      0      0      69    5755
 q000Osk0                       128K cbq              0        0        
0        0    0      0      0       0       0

notem que nao há trafego nenhum na fila q000Osk0


Desculpem pelo tamanho do email, so nao estou entendendo porque isso 
esta acontecendo...

Abracos


Matheus Cucoloto escreveu:
> No FreeBSD 7.0 foi portado o novo PF e no novo PF ele automaticamente
> coloca o keep-state
>
> Para tirar essa flag em cada regra adicione  "no state"
>
> Ex:
>
> pass out quick on em0 inet from any to 192.168.10.2 no state queue grp109fxp0
> pass in quick on em0 inet from 192.168.10.2 to any no state queue grp109fxp2
>
> Abraços.
>
>
> On Wed, Oct 1, 2008 at 8:13 AM, Fabiano Carlos Heringer
> <bigu em grupoheringer.com.br> wrote:
>   
>> Pessoal, alguem poderia me explicar para que serve realmente a opcao
>> keep-state no PF?
>>
>> pelo que entendi eh o seguinte: quando um pacote casa com um regra que
>> tem uma opcao keep-state ele cria um estado desse pacote, sendo assim,
>> se o pacote retornar ele vai entrar por essa mesma regra, é isso?
>>
>> Seria o mesmo que colocar as seguintes regras:
>>
>> pass bla bla bla from x.x.x.x to any
>> pass bla bla bla from any to x.x.x.x
>>
>> so que com o keep-state somente uma regra seria suficiente, pois o
>> retorno do pacote seria pela mesma, eh isso mesmo ou to viajando na
>> maionese?
>>
>> O que acontece,
>>
>> tenho dois servidores aqui, os dois sao identicos no tipo de conexao
>> (fazem NAT, tem uma fila em CBQ), acontece que em um deles consigo fazer
>> tanto o controle do download, quanto do upload (interfaces interna e
>> externa) e no outro servidor nao consigo fazer o upload, e a unica coisa
>> que vi diferente nos dois sao o keep-state flags S/SA ..
>>
>> ai voce me diria, tira o keep-state pra testar...esse eh o problema, nao
>> coloquei nenhuma dessas opcoes, o que percebi que a partir de um release
>> do FreeBSD ele ja vem por padrao essa opcao nas regras do PF...
>>
>> e agora? sera que eh isso mesmo que esta dando o problema?
>>
>> Obrigado
>>
>> -------------------------
>> Histórico: http://www.fug.com.br/historico/html/freebsd/
>> Sair da lista: https://www.fug.com.br/mailman/listinfo/freebsd
>>
>>     
>
>
>
>   



Mais detalhes sobre a lista de discussão freebsd