BEM VINDO AO BLOG DO MARCOS CARRARO CRIADOR DO "CARRARO DASHBOARD". MUITO MAIS QUE UM SIMPLES BLOG.

quarta-feira, 9 de maio de 2012

iptables - modulo recent

Salve galera,

A algum tempo atras participei de uma palestra do mestre Marcus Burghardt onde ele explicou o modulo recent do iptables, de inicio não vou mentir, não conseguia entender muito bem como o malandro funcionava, para quem quiser tem no blog do Marcus os slides, alguns scripts e a palestra.

http://mapburghardt.blogspot.com.br/2010/06/palestra-tchelinux-ftec-2010.html

O que realmente importa é que esta semana eu tive que melhorar a segurança de um sistema, pensei de todas maneiras, pensei em fechar VPN, mas dai falei pow, certo que ele nunca usa o mesmo computador, ele são os diretores, pensa repensa, até que tive uma idéia, e porque não implementar aquele troço que vi na palestra do Marcus, batata, li mais a respeito, relembrei de como funcionava e coloquei a mão na massa.

O projeto consiste, em...

- o usuário tem que mandar um pacote TCP para uma determinada porta, "onde não tenha nenhum serviço rodando e que seja mais alta que 1024 assim conseguimos escapar dos port-scanners".
- o usuário vai utilizar o comando telnet, ou algum script pronto.
- depois disso ele conecta no TS.


Criando os scripts.

# Esta primeira linha é a responsavel por autorizar ou não quem vai ter acesso a porta 3389, somente que estiver na tabela TS3 sera aceito. Ainda utilizo um tempo de 120 segundos, porque utilizar este tempo?? Pois vai que o cara esta num Hotel, e deixa o IP do hotel com total acesso, e um hacker descobre e acesa o meu sistema???? Eae como eu fico? ferrado, por isso eu deixo esse tempo que libera a conexão somente por 120 segundos, depois o cara vai ter que repetir todos os passos, telnet na porta XXXXX para liberar.... As conexões abertas não vão ser perdidas, pois eu utilizo na cadeia de INPUT FORWARD os estados de conexão ESTABLISHED,RELATED,
iptables -A FORWARD -d 192.168.1.2 -p tcp --dport 3389 -m recent --rcheck --seconds 120 --name TS3 -j ACCEPT


# Aqui eu so faço um DNAT para a maquina do TS.
iptables -t nat -A PREROUTING -d 192.168.1.2 -p tcp --dport 3389 -m recent --rcheck --seconds 120 --name TS3 -j DNAT --to 10.0.0.2

# Nesta regra que é a cabeça onde, ela vai registrar o pacote e o ip, e armazenar na tabela chamada de TS3 
iptables -A INPUT -d 192.168.1.2 -p tcp --dport 6666 -m recent --set --name TS3

# Aqui so gero um LOG para saber quem tentou se conectar sem saber do segredo HEHEHE.
iptables -t nat -A PREROUTING -d 192.168.1.2 -p tcp --dport 3389 -j LOG --log-prefix "FW PROTECAO TS:   "

Para testar.

telnet IPFIXO 6666
mstsc -v IPFIXO /f

Para verificar no linux.


# cat /proc/net/xt_recent/TS3 
src=189.4.86.213 ttl: 54 last_seen: 78753150 oldest_pkt: 1 78753150

# tail -f /var/log/aud/fw.log
ou 
# tail -f /var/log/messages

May  9 17:09:46 gw kernel: FW PROTECAO TS:   IN=eth1 OUT= MAC=00:40:f4:56:2a:2d:f4:ec:38:ad:e7:aa:08:00 SRC=189.90.169.19 DST=192.168.1.2 LEN=56 TOS=0x00 PREC=0x00 TTL=120 ID=5528 DF PROTO=TCP SPT=9337 DPT=3389 WINDOW=8192 RES=0x00 SYN URGP=0 



No telnet ele vai dar que o FW recusou a conexão, blz, justamente é isso que queremos, pois não tem serviço escutando naquela porta.

Aqui tem mais opções que peguei no artigo no vivaolinux.com.br
http://www.vivaolinux.com.br/artigo/Iptables-+-modulo-recent?pagina=1

[!] --set: Adiciona um endereço à lista.

[!] --rcheck: Verifica se um endereço de origem existe na lista.

[!] --update: Atualiza um endereço de origem na lista, atualizando também o seu tempo.

[!] --remove: Verifica e se estiver na lista remove o endereço de origem.

--seconds seconds: Funciona junto com os comandos de atualização e verificação citados acima. Especifica que o match ocorrerá somente se o último endereço da origem estiver dentro do último 'seconds' segundos.

--hitcount hits: Funciona com os comandos de verificação e atualização. verificando se existe entradas (hits) na lista do endereço de origem até aquele momento. Sendo muito usado com a opção --seconds.

--rttl: Funciona junto com os comandos de verificação e atualização. verificando qual o tamanho do TTL (time to Live) do endereço de origem e comparando com o da lista. Podendo ser usado quando identificar problemas de spoofing ou DoS.

--name name: Seta o nome da lista. O nome DEFAULT é usado quando não é especificado nenhum nome.

--rsource: Salva o endereço de origem de cada pacote na lista.

--rdest: Salva o endereço de destino na tabela/lista.

Abraços e bora melhorar esses FW.
Marcos Carraro.


Nenhum comentário:

Postar um comentário

Posts que a turma mais esta lendo...

Posts que a turma mais esta lendo...

Marcos Carraro