@phoenix:
Isso seria excelente, simplificaria muito o processo de filtrar IP's. Por favor, tenta introduzir essa alteração.
@Todos:
Bem, pelo menos desta vez não é preciso andar a converter as gamas de IP's do ipblock.dat do bowlfish.
A solução ideal é criar um script que combine o ipfilter.dat e o ipblock.dat que o bowlfish utiliza. Partindo do programa que já disponibilizei, não é complicado fazer isto, se alguem tiver disponibilidade estão à vontade para o alterar. De momento não posso fazer isso, já que estou a trabalhar num outro projecto, mas se eventualmente arranjar um tempinho trato disso.
Fica aqui a minha proposta:
Manter o mesmo esquema para os ip's a bloquear e permitir como trafego internacional:
xxx.xxx.xxx.xxx - xxx.xxx.xxx.xxx, 200 , TRAFEGO PERMITIDO (nacional)
xxx.xxx.xxx.xxx - xxx.xxx.xxx.xxx, 100 , TRAFEGO BLOQUEADO (internacional)
xxx.xxx.xxx.xxx - xxx.xxx.xxx.xxx, 50 , TRAFEGO BLOQUEADO (ip's perigosos)
Assim, para permitir trafego internacional, mas bloqueando os ip's perigoso, seria só baixar o nível de bloqueio para 75, por exemplo.
@livebrain:
Fiz um script relativamente básico à uns tempos que cria um script bash com as regras a adicionar ao iptables, partindo de um ficheiro com uma listagem de IP's em notação CIDR. Perdi o interesse neste script, porque limita imenso a navegação na web se bloqueares tudo o que é internacional.
#!/usr/bin/perl
#programa pa criar as regras para o iptables a partir do que se sacou do site do bowlfish
#como sempre, não garanto que isto funcione, USA-O POR TUA PRÓPRIA CONTA E RISCO!
my @iplist;
open ( IN , "@ENV{HOME}/.ipfilter/ipfilter.txt"); # <--- Editar para apontar para o ficheiro certo
@iplist = ;
close ( IN );
open (OUT , ">iptables-rules.sh") || die;
print OUT "#!/bin/bash\n";
print OUT "#Regras para o iptables\n";
print OUT "/sbin/iptables -N IPFILTER\n"; #Cria uma nova table, que vamos usar.
print OUT "/sbin/iptables -F IPFILTER\n"; #limpa as regras da table IPFILTER caso já estivessem definidas
print OUT "/sbin/iptables -D INPUT -j IPFILTER\n"; #apaga alguma entrada que já pudesse haver no iptables, para não duplicar
print OUT "/sbin/iptables -I INPUT -j IPFILTER\n"; #mete a recem-criada tabela IPFILTER a tratar do input.
#print OUT "/sbin/iptables -I OUTPUT -j IPFILTER\n"; #assim evita-se a saída de trafego internacional.
print OUT "/sbin/iptables -A IPFILTER -s 192.168.0.0/16 -j ACCEPT\n"; #permite todo o trafego local, a entrar
foreach (@iplist) {
if ( /(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})\/(\d{1,3})/ ) {
if
print OUT "/sbin/iptables -A IPFILTER -s $1 -j LOG --log-level info --log-prefix \"whatever...\"\n";
print OUT "/sbin/iptables -A IPFILTER -s $1 -j ACCEPT\n";
print "ok\n";
}
}
print OUT "/sbin/iptables -A IPFILTER -j DROP\n";
print OUT "echo \"Regras aplicadas.\n\"";
close ( OUT );
Cumprimentos