quinta-feira, 12 de março de 2015
iptables + módulo time + conexões estabelecidas + conntrack
Montei recentemente na empresa uma rede para os funcionários somente acessarem a internet nos intervalos, porém meu proxy não esta configurado para tratar com as interceptações https, como os acessos serão feitos por mobile wpad não funcionária como esperado, a solução seria fazer o redirecionamento por iptables no qual cai na falta da configuração do proxy.
Solução, fazer um forward da rede funcionários para a rede externa somente nos horários, show, rápido fácil e focado.
iptables -A FORWARD -s 192.168.20.0/255.255.255.0 -m time --timestart 00:00:00 --timestop 11:55:00 --weekdays Sun,Mon,Tue,Wed,Thu,Fri,Sat -j DROP
iptables -A FORWARD -s 192.168.20.0/255.255.255.0 -m time --timestart 21:59:00 --timestop 23:59:00 --weekdays Sun,Mon,Tue,Wed,Thu,Fri,Sat -j DROP
iptables -A FORWARD -s 192.168.20.0/255.255.255.0 -m time --timestart 12:55:00 --timestop 21:00:00 --weekdays Sun,Mon,Tue,Wed,Thu,Fri,Sat -j DROP
Ok, fiz o teste show, as conexões com estado "new" fora desse horário é dropada, porém se o usuário acessa as 12:54 a conexão dele passa de "new" para "established", com isso ele teria esse canal fechado até o término da conexão por uma das partes.
Ali começou o problema, pois eu tinha que garantir que a conexão seria morta neste horário, pois o bem o iptables faz um rastreamento das conexões chamdo de conntrack, logo já tinha uma solução, apagar as entradas da rede no conntrack, assim eu faria com que a conexão solicita-se novamente o registro para o acesso, e como iria bater com a regra pois a conexão seria "new" o pacote seria dropado, tá feita a solução.
Para isso nada melhor que a crontab e um script.
Na crontab coloco para rodar alguns minutos depois do tempo final do intervalo para garantir que ninguém vai ficar de bobeira.
Lista as entradas da rede funcionários, sem repetir
# conntrack -L conntrack | awk '{print $5}' | grep src=192.168.20. | sed -e "s/src=//g" | sort | uniq
Apaga a entrada
# conntrack -D -s 192.168.20.88
#!/bin/bash
conntrack -L conntrack | awk '{print $5}' | grep src=192.168.20. | sed -e "s/src=//g" | sort | uniq |
while read ip; do
conntrack -D -s $ip > /dev/null
done
Assinar:
Postar comentários (Atom)
Nenhum comentário:
Postar um comentário