Logo Hardware.com.br
willianholtz
willianholtz General de Pijama Registrado
2.8K Mensagens 152 Curtidas

[Dica] - LOG para iptables (Sem sarg ou squid)

#1 Por willianholtz 14/07/2020 - 12:42
Imagem


Olá pessoal, estou aqui trazendo para vocês uma dica que também vai servir para mim no futuro, porque eu procurei e muito sobre isso e quase sempre é escasso o material sobre assunto. Não que o IPTABLES tenha pouco conteúdo, mas para o que eu queria fazer tinha.

Mas o que se trata é a questão de LOG. Como eu tava cansado de procurar como fazer SQUID transparent, LOG com SARG e quase nunca dava certo, resolvi eu mesmo fazer um script que trabalha apenas com IPTABLES, ou seja, ele bloqueia, e faz uma LOG detalhada (até mais se você quiser editar) sobre as máquinas em rede de uma empresa e ajuda muito na hora de ver os bloqueios feitos por ele.

Em mais delongas, vamos lá.

Primeiramente eu fiz um script básico de iptables para bloquear sites que o usuário não pode acessar:


#!/bin/bash

# Limpar as regras
iptables -F
iptables -X
iptables -t nat -F
iptables -t nat -X
iptables -t mangle -F
iptables -t mangle -X
iptables -t raw -F
iptables -t raw -X


iptables -N logdrop
iptables -A logdrop -m limit --limit 5/min -j LOG --log-prefix "Pacotes recusados " --log-level 7
iptables -A logdrop -j DROP
iptables -A INPUT -m conntrack --ctstate INVALID -j logdrop

# LIBERANDO ACESSO
echo "1" > /proc/sys/net/ipv4/ip_forward
iptables -t nat -A POSTROUTING -o enp2s0 -j MASQUERADE

#Ao tentar acessar um site da lista ele é bloqueado
for i in $(cat /home/site.txt)
do
iptables -A FORWARD -m string --algo bm --string "$i" -j LOG --log-prefix "BLOQUEADO: $i " --log-level 7
iptables -A FORWARD -m string --algo bm --string "$i" -j DROP
done



Certamente você já deve ter essas regras no seu script iptables, mas para ilustrar, este é meu exemplo, e também não vou entrar em muitos detalhes aqui. wink.png

Agora vem a parte interessante, o LOG:

Crie este script em uma pasta de fácil acesso, pode ser na sua home:


#!/bin/sh

journalctl -k | grep "IN=.*OUT=.*" | cut -d ' ' -f 1,2,3,4,6,7,11 >> firewall.txt

# Usando SED para trocar os IP que aparecem pelos nomes dos usuários
# Troque aqui o IP usado na sua rede, e com o nome de cada máquina ao lado
sed -i 's/139.96.30.60/Willian/' firewall.txt
sed -i 's/139.96.30.50/Enfermeiras/' firewall.txt
sed -i 's/139.96.30.51/Portaria/' firewall.txt
sed -i 's/139.96.30.52/Bercario/' firewall.txt
sed -i 's/139.96.30.53/Maternidade/' firewall.txt
sed -i 's/139.96.30.54/Faturamento/' firewall.txt
sed -i 's/139.96.30.55/Ambulatorio/' firewall.txt
sed -i 's/139.96.30.56/Compras/' firewall.txt
sed -i 's/139.96.30.57/RH-Gigeli/' firewall.txt
sed -i 's/139.96.30.58/Telma/' firewall.txt
sed -i 's/139.96.30.59/RaioX/' firewall.txt
sed -i 's/139.96.30.61/Cozinha/' firewall.txt
sed -i 's/139.96.30.62/Farmacia/' firewall.txt
sed -i 's/139.96.30.63/RH-Elaine/' firewall.txt
sed -i 's/139.96.30.64/Servidor/' firewall.txt
sed -i 's/139.96.30.65/Clinica_Cirurgica/' firewall.txt
sed -i 's/SRC/Usuário/' firewall.txt

# Este conteúdo mostra certinho como deve ser gerado o LOG
awk '{print $3,$5,$6, $7}' firewall.txt | sed 's/.//6' | sed 's/.//6' | sed 's/.//6' | sort -u | sed 's/=/\t/'



Como este script funciona? (Lembrado de cria-lo em uma pasta com permissões adequadas, pois o mesmo vai criar um arquivo .txtsmile.png

[LIST=1]
Primeiro ele faz a leitura do LOG do iptables, estou usando Arch Linux este é o comando journalctl -k | grep "IN=.*OUT=.*"
Adicionei alguns comando a mais para que ele envie para um arquivo chamado firewall.txt
o Cut faz o corte das colunas que nos interessa, neste caso o meu ficou assim
Usei o SED para trocar o numero dos IP conforme as máquinas da minha rede
E por fim, sei o awk para controlar quais seriam as ordens a serem mostradas pelo terminal
[/LIST]

A saída padrão

jul 14 11:40:50 servidor kernel: BLOQUEADO: facebook.com IN=enp1s0 OUT=enp2s0 MAC=50:3e:aa:10:d6:f7:00:21:5a:30:05:4c:08:00 SRC=139.96.30.60 DST=157.240.222.35 LEN=557 TOS=0x00 PREC=0x00 TTL=127 ID=8855 DF PROTO=TCP SPT=49980 DPT=443 WINDOW=64400 RES=0x00 ACK PSH URGP=0


A saída com o CUT´

jul 14 11:40:50 servidor BLOQUEADO: facebook.com SRC=139.96.30.60


E finalmente, a saída customizada

11:37 BLOQUEADO: facebook.com Usuário Willian


Bom é isso, espero que ajude quem precise usar LOG's de Iptables mais amigáveis sem ter que ficar instalando e configurando outros softwares, até porque existem muitos que fazem isso, mas cada distro tem sua configuração diferente, e pelo menos este script, funciona em todas. Inclusive se seu caminho de log de iptables é diferente, basta apenas trocar a primeira linha antes do PIPE que vai funcionar.
© 1999-2024 Hardware.com.br. Todos os direitos reservados.
Imagem do Modal