(movido de SO)
Eu tenho iptables protegendo um servidor SIP. Ele bloqueia todos os IPs, exceto os que eu abri especificamente, e parece funcionar para quase todos. Eu testei a partir de vários endereços IP que não estão na lista branca e todos são descartados como deveriam.
MAS, eu peguei um "hacker" que parece capaz de ignorar as regras do iptables. Suas investigações INVITEs passam, e eu não tenho idéia de como, ou que isso era possível. Em 10 anos eu não vi isso antes.
Suponho que deve ter sido algo que fiz, mas não consigo ver.
iptables criados assim (MYIP definido na parte superior - redigido):
iptables -F
iptables -X
iptables -N ALLOWEDSIP
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -p tcp -d $MYIP --dport 22 -j ACCEPT
iptables -t filter -A INPUT -j ALLOWEDSIP
# This is my white list.
iptables -A ALLOWEDSIP -j RETURN
Agora, com NADA no PERMITIDO PERMITIDO, tudo o que devo fazer é SSH (o que posso). Se eu ligar para eles, todos são descartados. Mas o wireshark me mostra isso (meu ip redigido):
89.163.146.25 -> x.x.x.x SIP/SDP 805 Request: INVITE sip:[email protected] |
x.x.x.x -> 89.163.146.25 SIP 417 Status: 100 Giving a try |
x.x.x.x -> 89.163.146.25 SIP 875 Status: 407 Proxy Authentication Required |
Suas ligações tocaram no meu interruptor e, embora tenham sido rejeitadas pela ACL, elas nunca deveriam chegar lá. Nada mais passa. Puxando meu cabelo. Ninguem sabe?
Apenas para completar, eis o resultado do iptables -L:
# iptables -L --line-numbers -v
Chain INPUT (policy DROP 0 packets, 0 bytes)
num pkts bytes target prot opt in out source destination
1 10 640 ACCEPT all -- any any anywhere anywhere state RELATED,ESTABLISHED
2 0 0 ACCEPT all -- lo any anywhere anywhere
3 0 0 ACCEPT tcp -- any any anywhere <redacted>.com tcp dpt:6928
4 0 0 ALLOWEDSIP all -- any any anywhere anywhere
Chain FORWARD (policy DROP 0 packets, 0 bytes)
num pkts bytes target prot opt in out source destination
Chain OUTPUT (policy ACCEPT 6 packets, 544 bytes)
num pkts bytes target prot opt in out source destination
Chain ALLOWEDSIP (1 references)
num pkts bytes target prot opt in out source destination
1 0 0 RETURN all -- any any anywhere anywhere
EDIT: acabei de ver isso no wireshark. Eles poderiam estar fazendo algo horrível como se estabelecer de alguma outra maneira e depois seguir a regra estabelecida? Talvez eles estejam jogando em algum buraco em RELATED?
89.163.146.25 -> <redacted> RTCP 806 Source port: tag-pm Destination port: sip
EDIT 2: UDP é a chave aqui. Quando defino o OpenSIPS para escutar apenas o TCP, o problema parece desaparecer. Nenhuma de suas tentativas foi concluída, apesar de estarem enviando mais dessas mensagens "tag-pm". No entanto, não explica por que os pacotes estão chegando ao opensips. O iptables deveria tê-los parado primeiro. Gostaria de saber o que fiz de errado aqui.
EDIT 3: Se eu remover RELATED, paro de responder a eles, então isso tem algo a ver com isso. Mas acho que preciso de um parente. Alguma dica sobre soluções alternativas?
ESTABLISHED
deve funcionar para o UDP. Parece que o pacote flui e aceita respostas para solicitações (de saída). Seus "hackers" têm IPs estáticos? ;-) Em caso afirmativo, verifique / proc / net / nf_conntrack para ver o que a tabela de estado contém sobre eles quando eles estão atualmente / não / conectados ...RELATED
é uma coisa mais complicada ... Não sei o que faz com o SIP . Serámodprobe
talvez mostrar um módulo ipt_sip ou algo carregado que iria fazer coisas "mágica"?RELATED
a-p icmp
. Talvez isso o resolva (ou é um trabalho adequado sobre o qual não é necessário que você leia sobre os auxiliares do conntrack).Respostas:
A única explicação plausível de como isso poderia funcionar é que os datagramas UDP ofensivos de alguma forma passam
--state ESTABLISHED,RELATED
.Como o UDP é um protocolo sem estado, duvido que o
state
módulo tenha um rastreamento eficaz sobre ele.Para resolver o problema, limitaria a verificação de estado ao protocolo TCP da seguinte maneira:
E pré-filtro
ALLOWEDSIP
com protocolo UDP (e de preferência também com a porta de destino):fonte
Você pode anular a rota. Isso deve ignorar o iptables.
Confira
OU
fonte