Consulta SNMP - operação não permitida

4

Estou trabalhando na API que lê muitos dados via SNMP (rotas, interfaces, QoS policies, etc ...). Ultimamente, tenho experimentado um erro aleatório afirmando:

Operation not permitted

Agora, uso SNMP4J como biblioteca principal e não consigo identificar a origem do erro. Algumas perguntas sobre o Stackoverflow sugeriram que o SO não consegue abrir um número suficiente de identificadores de arquivo, mas aumentar esse parâmetro não ajudou muito.

O mais estranho é que o erro ocorre somente quando iptables está ativo e em execução.

Será que o firewall está bloqueando algum tráfego? Eu tentei escrever JUnit test que imitava a lógica do aplicativo, mas nenhum erro foi acionado ...

Qualquer ajuda seria apreciada! Obrigado!

IPTABLES

*nat
:PREROUTING ACCEPT [2:96]
:POSTROUTING ACCEPT [68:4218]
:OUTPUT ACCEPT [68:4218]
# route redirect za SNMP Trap i syslog
-A PREROUTING -i eth0 -p udp -m udp --dport 514 -j REDIRECT --to-ports 33514 
-A PREROUTING -i eth0 -p udp -m udp --dport 162 -j REDIRECT --to-ports 33162
COMMIT

*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]

-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT

.....

# SNMP
-A INPUT -p udp -m state --state NEW -m udp --dport 161 -j ACCEPT 

# SNMP trap
-A INPUT -p udp -m state --state NEW -m udp --dport 162 -j ACCEPT 
-A INPUT -p udp -m state --state NEW -m udp --dport 33162 -j ACCEPT 

.....

-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
COMMIT
    
por Jovan Perovic 20.03.2014 / 11:36

1 resposta

0

Sua pergunta não é 100% clara, mas presumo que seu erro Operation not permitted venha de dentro da sua biblioteca SNMP no seu cliente e signifique uma rejeição do host de destino. Por favor, esclareça se você sabe diferente.

Você está aceitando conexões SNMP de fora para que o módulo de estado não esteja ajudando. Normalmente, é usado o drop de pacotes de entrada onde não há conexão de saída. Isso não se aplica, então você provavelmente quer desligar. use a opção CT - notrack (veja man iptables-extensions). Tendo feito isso, você vai querer colocar regras em ambas as direções.

-I INPUT -p udp -m udp --dport 161 -j ACEITAR
  -I OUTPUT -p udp -m udp --sport 161 -j ACCEPT #não é necessário se você tiver alguma saída bloqueada

Isso pode resolver seu problema.

Se você quiser solucionar problemas, então existem várias razões possíveis para o iptables bloquear conexões, o que parece que as regras deveriam permitir. Por exemplo:

  1. o estado expirou
  2. o estado não se encaixa na tabela de estados

Como você parece estar apenas usando conexões UDP, não há nenhum estado real . Isso significa que os pacotes provenientes do sistema do cliente devem ser aceitos pelas regras, mesmo que seja uma conexão "nova".

Com certeza você quer saber onde o seu iptables está perdendo pacotes. Use

sudo iptables --list  --verbose

para ver quais regras recebem pacotes. Para obter uma visão mais clara, você pode usar

sudo iptables --zero

para limpar os contadores e, em seguida, verificar se uma determinada linha sobe logo após um erro. Você pode então adicionar regras de registro (ver, por exemplo, link ) e ver exatamente qual pacote é descartado.

Nesse ponto, você também pode procurar nos registros do sistema e encontrar alguma explicação.

    
por 01.06.2014 / 20:35