Você está na página 1de 29

Regras Mais Utilizadas no IPTables

Olá pessoal, hoje vou mostrar aqui para vocês, uma série de regras do IPTables, onde nós costumamos
usar em nosso cotidiano. Então, vamos lá!

Quando olhamos pela primeira vez, as regras do IPTables pode parecer enigmática. Neste artigo, eu
preparei algumas regras práticas que você pode copiar e usá-lo para as suas necessidades. Estes exemplos
são modelos básicos para que você possa ajustar essas regras que atendam às suas necessidades mais
específicas. Então vamos a essas regras!

1 – Excluindo as Regras

Antes de iniciarmos a construção do novo conjunto de regras, você pode limpar todas as regras
padrão e outras regras existentes. Use o comando abaixo para fazer isso, como root:

iptables --flush

2 – Setando a politica padrão nas chains

A politica padrão para as chains do IPTables é ACCEPT para tudo. Então, como estamos
construindo um novo Firewall, vamos mudar a politica padrão para rejeitar tudo. Segue
comando:

iptables --policy INPUT DROP


iptables --policy FORWARD DROP
iptables --policy OUTPUT DROP

Quando nós setamos as politcas padrões do INPUT e OUTPUT como DROP, nós devemos depois, criar
uma regra de entrada e uma de saída para cada situação, por exemplo a abertura do SSH.

3 – Liberando Tráfego da Interface Loopback

Temos que liberar todo acesso a interface de Loopback, porque senão conseguimos fazer
acesso, por exemplo, ao http://127.0.0.1. Segue comando para liberação:

iptables -A INPUT -i lo -j ACCEPT


iptables -A OUTPUT -o lo -j ACCEPT

4 – Bloqueando um Determinado IP

Antes de darmos continuidade com outros exemplos, se você quiser, podemos bloquear o
acesso de entrada de um único IP. Observe o comando abaixo:

IP="x.x.x.x"
iptables -A INPUT -s "$IP" -j DROP

Basta substituir os “x” pelo número correto do IP a ser bloqueado. Essa técnica é boa, quando
percebemos atividades estranhas em nossos logs de arquivos, vindo de IPs desconhecidos.
Também podemos fazer modificações nessa regra, para deixa-la mais especifica. segue
exemplo:

iptables -A INPUT -i eth1 -s "$IP" -j DROP


iptables -A INPUT -i eth1 -p tcp -s "$IP" -j DROP
No caso acima, estamos bloqueando os pacotes que vem de $IP, e a interface é eth1. Na segunda regra pe
bloqueado os pacotes que são TCP.

5 – Liberando o Acesso SSH

A maioria dos servidores, disponibilizam acesso a linha de comando por SSH, para fazer
manutenção remota. Para isso, temos que liberar também no Firewall as regras de liberação do
SSH. Segue comando:

iptables -A INPUT -i eth0 -p tcp --dport 22 -m state --state NEW,ESTABLISHED -j


ACCEPT
iptables -A OUTPUT -o eth0 -p tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT

Também podemos liberar o SSH somente para a rede interna. As regras seguintes liberar o
SSH somente para a rede 192.168.1.0. Segue:

iptables -A INPUT -i eth0 -p tcp -s 192.168.1.0/24 --dport 22 -m state --state


NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT

Podemos trocar o “192.168.1.0/24″ por “192.168.1.0/255.255.255.0″.

6 – Liberando o Acesso HTTP e HTTPS

As proximas regras farão a liberação do HTTP e do HTTPS da máquina, para acesso exterior. Segue
comandos:

HTTP:

iptables -A INPUT -i eth0 -p tcp --dport 80 -m state --state NEW,ESTABLISHED -j


ACCEPT
iptables -A OUTPUT -o eth0 -p tcp --sport 80 -m state --state ESTABLISHED -j ACCEPT

HTTPS:

iptables -A INPUT -i eth0 -p tcp --dport 443 -m state --state NEW,ESTABLISHED -j


ACCEPT
iptables -A OUTPUT -o eth0 -p tcp --sport 443 -m state --state ESTABLISHED -j ACCEPT

7 – Liberando Multiplas Portas

Podemos substituir todas as regas acima por uma unica e simples regra, podemos criar uma
nova regra com multiportas. Segue comando para liberação do SSH, HTTP e HTTPS:

iptables -A INPUT -i eth0 -p tcp -m multiport --dports 22,80,443 -m state --state


NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp -m multiport --sports 22,80,443 -m state --state
ESTABLISHED -j ACCEPT

8 – Liberando HTTP, HTTPS e SSH Sainte

Seguindo essas regras que foram passadas até agora, nós não temos acesso a internet para fazer acesso ao
Google por exemplo, então devemos liberar no Firewall para que da rede interna possa fazer conexões
com a rede externa, segue comandos:

HTTP:
iptables -A OUTPUT -o eth0 -p tcp --dport 80 -m state --state NEW,ESTABLISHED -j
ACCEPT
iptables -A INPUT -i eth0 -p tcp --sport 80 -m state --state ESTABLISHED -j ACCEPT

HTTPS:

iptables -A OUTPUT -o eth0 -p tcp --dport 443 -m state --state NEW,ESTABLISHED -j


ACCEPT
iptables -A INPUT -i eth0 -p tcp --sport 443 -m state --state ESTABLISHED -j ACCEPT

SSH:

iptables -A OUTPUT -o eth0 -p tcp --dport 22 -m state --state NEW,ESTABLISHED -j


ACCEPT
iptables -A INPUT -i eth0 -p tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT

9 – Permitindo Pings de Fora para Dentro

Se você quer que consigam “pingar” seu servidor, você deve colocar essa regra no Firewall
para que isso seja possível. Segue regra:

iptables -A INPUT -p icmp --icmp-type echo-request -j ACCEPT


iptables -A OUTPUT -p icmp --icmp-type echo-reply -j ACCEPT

E para permitir ping de dentro para fora, segue regra:

iptables -A OUTPUT -p icmp --icmp-type echo-request -j ACCEPT


iptables -A INPUT -p icmp --icmp-type echo-reply -j ACCEPT

10 – Permitindo DNS

Para permitir o DNS, devemos ter essa regra no nosso Firewall, segue regra;

iptables -A OUTPUT -p udp -o eth0 --dport 53 -j ACCEPT


iptables -A INPUT -p udp -i eth0 --sport 53 -j ACCEPT

11 – Liberando MySQL e PostgreSQL

Para fazer a liberação dos bancos de dados PostgreSQL e MySQL, inclua as regras abaixo no seu
Firewall. No caso, a liberação é feita somente para a rede interna. Segue:

MySQL:

iptables -A INPUT -i eth0 -p tcp -s 192.168.1.0/24 --dport 3306 -m state --state


NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp --sport 3306 -m state --state ESTABLISHED -j ACCEPT

PostgreSQL:

iptables -A INPUT -i eth0 -p tcp -s 192.168.1.0/24 --dport 5432 -m state --state


NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp --sport 5432 -m state --state ESTABLISHED -j ACCEPT

Como mostrado anteriormente, podemos substituir o “192.168.1.0/24″ por “192.168.1.0/255.255.255.0″.

12 – Liberação do SMTP
Para fazer a liberação do tráfego SMTP, inclua as regras abaixo em seu Firewall, segue as
regras:

iptables -A INPUT -i eth0 -p tcp --dport 25 -m state --state NEW,ESTABLISHED -j


ACCEPT
iptables -A OUTPUT -o eth0 -p tcp --sport 25 -m state --state ESTABLISHED -j ACCEPT

13 – Liberando o IMAP e IMAPS

Para liberarmos o tráfego IMAP e IMAPS em nosso servidor, inclua as regraqs abaixo em seu Firewall.
Seguem as regras:

IMAP:

iptables -A INPUT -i eth0 -p tcp --dport 143 -m state --state NEW,ESTABLISHED -j


ACCEPT
iptables -A OUTPUT -o eth0 -p tcp --sport 143 -m state --state ESTABLISHED -j ACCEPT

IMAPS:

iptables -A INPUT -i eth0 -p tcp --dport 993 -m state --state NEW,ESTABLISHED -j


ACCEPT
iptables -A OUTPUT -o eth0 -p tcp --sport 993 -m state --state ESTABLISHED -j ACCEPT

14 – Liberando POP3 e POP3S

Para liberarmos o tráfego POP3 e POP3S em nosso servidor, inclua as regraqs abaixo em seu Firewall.
Seguem as regras:

POP3:

iptables -A INPUT -i eth0 -p tcp --dport 110 -m state --state NEW,ESTABLISHED -j


ACCEPT
iptables -A OUTPUT -o eth0 -p tcp --sport 110 -m state --state ESTABLISHED -j ACCEPT

POP3S:

iptables -A INPUT -i eth0 -p tcp --dport 995 -m state --state NEW,ESTABLISHED -j


ACCEPT
iptables -A OUTPUT -o eth0 -p tcp --sport 995 -m state --state ESTABLISHED -j ACCEPT

15 – Fazendo Forward de Portas (NAT)

Para fazermos o famoso Port Forward, ou simplesmente NAT. Devemos adicionar a regra
abaixo:

iptables -t nat -A PREROUTING -p tcp -d 192.168.1.100 --dport 2228 -j DNAT --to


192.168.1.100:22

No caso acima, todo o trafego que chegar com destino ao IP 192.168.1.100 na porta 2228, vai
ser redirecionado para o IP 192.168.1.100 na porta 22. Temos que lembrar posteriormente de
abrir o acesso a porta 2228 no Firewall. Segue regra:

iptables -A INPUT -i eth0 -p tcp --dport 2228 -m state --state NEW,ESTABLISHED -j


ACCEPT
iptables -A OUTPUT -o eth0 -p tcp --sport 2228 -m state --state ESTABLISHED -j ACCEPT
Por hoje é isso aí pessoal, algumas regras do IPTables que são as maius utilizadas. Quem tiver dúvidas,
criticas e/ou sugestões, postem aí nos comentários.

ptables, modelo de firewall com dicas para diversas

 Sobre este documento


 Testar firewall
 Firewall com proxy na mesma maquina e outras regras
o carregando modulos
 Exemplos e dicas sobre as regras de Iptables
o Conectividade Social excluir do proxy
o Samba - fechando as portas para o mundo
o MAC ADRESS - controle pelo numero da placa de rede
o porta 25 e 110 e-mail
o Squid - proxy - redirecionamento
o Liberar IP (estações) com acesso por fora do proxy
o NAT e forward - compartilhar internet
o Redirecionamento de conexões recebidas - entrada
o SSH - fechado para o mundo e aberto para rede interna
o SSH - Redirecionar entrada para estações da rede
o VNC - redirecionamento para estações da rede
 SUSE 10.1 - executar script no boot
 CL10 - executar script no boot
 Indicações

Sobre este documento


Como criar um firewall e como iniciar em diversas distribuições, original em formato texto com
marcações para conversão em HTML, processo automatizado com scripts e txt2tags.
Resumo de comandos e regras de iptables mais utilizados, (na minha opinião e como eu uso,
copiar e colar).
Dificilmente os comandos e dicas atenderão suas necessidades, muitos nem são compativeis
com sua instalação ou nem servem para seu uso, tente adaptar ao seu ambiente, use como
fonte de consulta e referencia.
Todas as dicas e exemplos neste tutorial, considera a instalação default da distribuição, nada
de compilar kernel, instalar patch ou modificações no kernel.
Também não considera o uso de firewall da própria distro, as referencias a ele são para
desativar ou usar em substituição ao indicado neste howto.
Considere que firewall não são somente regras de Iptables, veja algumas dicas em;
http://www.zago.eti.br/firewall/firewall.txt
Considere que não existe um firewall padrão, são muitas possibilidades, cada rede tem
suas particularidades, neste documento tem algumas regras e dicas para entender o
principio de como funciona, não use como firewall, use somente como script de
referencia para consulta ou modelo inicial, implemente suas regras especificas, pesquise
sobre o assunto, neste diretório tem muitos modelos e indicações nas mensagens da
Linux-br.

Testar firewall
Teste o seu firewall nestes sites:
http://scan.sygatetech.com/
Direto na página de testes das portas
http://scan.sygatetech.com/stealthscan.html
http://www.auditmypc.com/
https://grc.com/x/ne.dll?bh0bkyd2
Navegue nos sites acima, tem diversas opções de testes, verifique no resultado, quais portas
estão abertas, quando aparece portas que não devem ser acessadas via internet neste
servidor, estas portas tem que ser fechadas, edite o teu scrip de firewall e acrescente mais uma
regra especifica para fechar a porta, ou parar o serviço, volte ao site e faça novo teste.
Configure de forma que sejam listadas somente as portas dos serviços que voce disponibilizou
para acesso via internet, porta 80 para servidor web, porta 22 para ssh e assim por diante.
Tudo que não pode ter acesso de fora deve ser fechado, fechar a porta, ou melhor, deverá
aparecer nos testes acima como fechadas ou não listadas.
Pode acessar de qualquer estação da rede, o teste de volta sempre é feito no micro que está
de cara para internet.
Tem muitas dicas nas mensagens deste documento e outros arquivos deste diretório com FAQ
especificos sobre port scanner, firewall etc..

Firewall com proxy na mesma maquina e outras regras


Dicas e exemplos com o modelo;
http://www.zago.eti.br/firewall/fireaula.sh
Ambiente, micro com duas placas de rede configuradas, uma eth? ligada ao modem
ADSL, conexão configurada e com acesso normal à internet, outra eth? ligado ao HUB
com comunicação normal com as maquinas da rede interna, responde ao ping ou outro
serviço como ssh. Precisa conferir e fazer alguns ajustes; Placas de rede, observe estas
variaveis no inicio do script
EXTERNA=eth0
INTERNA=eth1
eth1 = placa de rede INTERNA (rede local) - ligada ao HUB e conectada com as
maquinas da rede interna eth0 = placa de rede EXTERNA (internet) - ligada ao modem
ADSL ou router ou outro equipamento que sai ou entra da internet, conectada com o
mundo (internet) Ajuste o device nestas variaveis conforme sua rede, lembre que
conexões com pppoe utiliza o device ppp0 em lugar de eth? Utilizar variáveis é opcional,
facilta muito na administração, troca ou copia para outra instalação. Comente as linhas
que não utiliza, veja neste documento mais detalhes nos tópicos especificos sobre cada
serviço. Neste script as linhas de comando iniciam com "$iptables", este sinal ($) no
inicio da linha indique está usando uma variável de nome "iptables", nesta variável indica
o caminho completo do iptables. iptables=/usr/sbin/iptables Pode tentar sem indicação
do caminho, basta remover o sinal ($) de todas as linhas que iniciam com ($iptables) ou
colocar o caminho para o seu iptables, o comando which retorna o caminho completo
which iptables Pegue o resultado e compare se o local é o mesmo do script, sendo
diferente precisa alterar na criação da variável iptables, pode tentar criar a variável com.
iptables=$(which iptables) Resumindo, teste todos os exemplos abaixo que um deles
deve funcionar.
iptables
/usr/sbin/iptables
ou criar e usar a variável iptables apontando para iptables em sua
instalação.
iptables=/usr/sbin/iptables
$iptables

carregando modulos
A maioria das distros utiliza modulos, se preferir pode compilar o kernel com este recurso,
considere que trabalhar com modulos é mais prático, pode iniciar ou parar somente o serviço
(modulo), pode até compilar o modulo ou atualizar sem alterar nada no kernel e portanto sem
reiniciar a maquina.
em breve farei algumas anotações sobre a finalidade de cada modulo.
##### carregar modulos
# fazer NAT, de forma geral compartilha a interenet com forward
/sbin/modprobe iptable_nat
# resolve os problemas de FTP, sempre que tiver problemas com acesso a sites de
FTP,
#lentidão, problemas de login ou acesso, tente carregar estes modulos relacionados
a FTP.
/sbin/modprobe ip_conntrack
/sbin/modprobe ip_conntrack_ftp
/sbin/modprobe ip_nat_ftp
# utlizado nas opções que geram log.
/sbin/modprobe ipt_LOG

/sbin/modprobe ipt_REJECT
/sbin/modprobe ipt_MASQUERADE
Cuidado com esta opção zera regras, tem outra regra logo abaixo que mantem as conexões
existentes, quando fizer qualquer alteração nas regras, precisa executar o script para carregar
as novas regras, as regras abaixo removem as anteriores mas mantem as conexões
existentes.
##### Zera regras
$iptables -F
$iptables -X
$iptables -F -t nat
$iptables -X -t nat
$iptables -F -t mangle
$iptables -X -t mangle
$iptables -P INPUT DROP
$iptables -P OUTPUT DROP
$iptables -P FORWARD DROP
Coloque após as regras abaixo, suas regras de bloqueio, log e outros controles, em seguida as
regras de redirecionamento....
##### Filtros - DROP nos pacotes TCP indesejaveis
$iptables -A FORWARD -p tcp ! --syn -m state --state NEW -j LOG --log-level 6
--log-prefix "FIREWALL: NEW sem syn: "
$iptables -A FORWARD -p tcp ! --syn -m state --state NEW -j DROP

##### ACCEPT (libera) pacotes de retorno da internet


$iptables -A INPUT -i ! $EXTERNA -j ACCEPT
$iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
$iptables -A OUTPUT -m state --state ESTABLISHED,RELATED,NEW -j ACCEPT
$iptables -A FORWARD -m state --state ESTABLISHED,RELATED,NEW -j ACCEPT

Exemplos e dicas sobre as regras de Iptables

Conectividade Social excluir do proxy


Este um serviço da Caixa Economica, geralmente utilizado por funcionarios do departamento
pessoal das empresas, utiliza o navegador mas não pode passar pelo proxy, inventaram uma
conexão segura na porta 80, a solução que encontrei foi excluir o IP da Caixa do proxy,
funciona com esta regra.
##### Liberar Conectividade Social para todos
# liberando acesso a toda a rede 200.201 e pode liberar sites alem da CAIXA.
$iptables -t nat -A PREROUTING -p tcp -d 200.201.0.0/16 -j ACCEPT
$iptables -A FORWARD -p tcp -d 200.201.0.0/16 -j ACCEPT
Tem mais dicas e detalhes sobre isto em;
http://www.zago.eti.br/squid/conectividade-social.html

Samba - fechando as portas para o mundo


Precisa liberar as portas do netbios 136 a 139, libere somente para sua rede interna.
# Fechando as portas do samba o perigo mora aqui caso fique de cara para a
internet.

$iptables -A INPUT -p tcp -i $EXTERNA --syn --dport 139 -j DROP


$iptables -A INPUT -p tcp -i $EXTERNA --syn --dport 138 -j DROP
$iptables -A INPUT -p tcp -i $EXTERNA --syn --dport 137 -j DROP
Por questão de segurança não se deve rodar Samba junto com firewall, não tem
incompatibilidades nem conflito entre estes serviços, podem rodar na mesma maquina,
considere que Samba não deve dar as caras na internet, um eventual incidente nesta maquina
pode comprometer seus dados e informações, quando rodar Samba na mesma maquina, feche
as portas 137, 138 e 139, tem que fechar somente para acessos da internet, em maquinas que
não roda Samba pode remover as linhas acima.
Use este exemplo de regra para fechar a porta de outros serviços rodando na maquina,
principalmente quando não devem ouvir nem atender requisições vindo da internet
Outra opção, quem já fechou tudo precisa abrir as portas para acesso das maquinas da rede
interna, alguns exemplos.
$iptables -I INPUT -p tcp -s 192.168.1.0/24 -d 192.168.1.254 --dport 138,139 -j
ACCEPT
Onde 192.168.1.0 é sua rede e 192.168.1.254 seu servidor Samba.
Permitir de qualquer origem, depende de outras regras do firewall negando acesso via internet.
$iptables -A INPUT -p tcp --destination-port 139 -j ACCEPT

MAC ADRESS - controle pelo numero da placa de rede


Regras de IPtables pelo numero da placa de rede MAC ADRESS, o exemplo abaixo nega
qualquer acesso com origem na placa de rede identificada com o MAC (00:E0:7D:E3:5F:1E),
neste caso não importa o IP da maquina, a ordem da regra no firewall é muito importante,
aplicar antes do redirecionado do proxy e não ter regra anterior liberando o acesso.
Para testar, troque o MAC do exemplo abaixo pelo de uma maquina da sua rede, depois de
rodar o script do firewall a maquina não acessa mais nada na internet, o NAT está negado.
$iptables -t nat -A PREROUTING -i $INTERNA -m mac --mac-source 00:E0:7D:E3:5F:1E -j
DROP
Com esta regra, qualquer pacote proveniente deste MAC serão descartados, não permine NAT
e não navega, não conecta por ssh nem outro meio.
Inverter a regra para liberar, troque DROP por ACCEPT
Outros exemplos.
Negar somente para portas 80 e 3128
$iptables -A INPUT -p tcp -m multiport --dport 80,3128 -m mac --mac-source
00:E0:7D:E3:5F:1E -j DROP

Permitir conexão via ssh


$iptables -A INPUT -m mac --mac-source 00:E0:7D:E3:5F:1E -p tcp --dport 22 -j
ACCEPT
# teste com mac da m7mia para liberar somente ssh (porta 22)
$iptables -A INPUT -p tcp -m multiport --dport 22 -m mac --mac-source
00:40:F4:5B:9E:A7 -j ACCEPT
$iptables -A INPUT -m mac --mac-source 00:40:F4:5B:9E:A7 -p tcp --dport 22 -j
ACCEPT
$iptables -t nat -A PREROUTING -p tcp -m multiport --dport 22 -m mac --mac-source
00:40:F4:5B:9E:A7 -j ACCEPT
$iptables -t nat -A PREROUTING -i $INTERNA -m mac --mac-source 00:40:F4:5B:9E:A7 -j
DROP
Tem mais exemplos nas mensagens do FAQ.
http://www.zago.eti.br/firewall/iptables-mac.txt

porta 25 e 110 e-mail


Regras de firewal para quem trabalha com tudo fechado e libera somente o necessário, neste
exemplo de firewall, para fechar tudo e abrir somente o necessário, deve comentar as linhas.
$iptables -A POSTROUTING -t nat -o $EXTERNA -j MASQUERADE
echo "1" > /proc/sys/net/ipv4/ip_forward
com estas linhas acima comentadas não é possível navegar nem enviar ou receber e-mail,
para liberar a navegação tem exemplos neste tutorial , pode liberar pelo firewall ou pelo proxy
(squid) quando redirecionado.
Quanto ao envio e recebimento de e-mail segue alguns exemplos, liberação para todos,
somente para determinado dominio, somente por maquina da rede, combinando IP interno com
dominio e etc. Veja os comentarios para cada regra.
# Estas regras abaixo permite que todos os smtp e pop funcionan, precisa comentar
estas linhas para refinar o controle por dominio ou por maquina, sem estas regras a
controle passa a valer as demais regras do firewall no controle da porta 25 e 110

iptables -t nat -A POSTROUTING -s 192.168.1.1/24 -d 0/0 -p tcp --dport 110 -j


MASQUERADE
iptables -t nat -A POSTROUTING -s 192.168.1.1/24 -d 0/0 -p tcp --dport 25 -j
MASQUERADE
Liberando smtp somente para uma maquina e um destino (provedor)
$iptables -t nat -A POSTROUTING -s 192.168.1.211/32 -p tcp --dport 25,110 -d
smtp.bol.com.br -j MASQUERADE
ou
$iptables -t nat -A POSTROUTING -s 192.168.1.211/32 -p tcp --dport 25 -d
smtp.bol.com.br -j MASQUERADE
#$iptables -t nat -A POSTROUTING -s 192.168.1.211/32 -p tcp --dport 110 -d
pop.sao.terra.com.br -j MASQUERADE

Squid - proxy - redirecionamento


A regra que redireciona o trafego da porta 80 para 3128 Squid, tem que ficar antes da regra
que faz NAT para forçar o uso do proxy, assim estações com navegador configurado para usar
proxy cai nas regras do proxy, se tentar sem proxy não navega.
No script fireaula.sh tem estas regras sobre Squid.
##### Squid - proxy
#utilize somente uma das opções abaixo, comente as demais
# redireciona o trafego da porta 80 para 3128, execeto a estacao
# com IP 192.168.1.6
#$iptables -t nat -A PREROUTING -i $INTERNA -s \! 192.168.1.6 -p tcp -m multiport
--dport 80,443 -j REDIRECT --to-ports 3128
# redireciona o trafego da prota 80 para 3128 (squid)
$iptables -t nat -A PREROUTING -p tcp -m multiport -s 192.168.1.0/24 --dport 80,443
-j REDIRECT --to-ports 3128
Tem duas regras, ambas se aplicam quando roda o Squid na mesma maquina firewall, a
segunda está habilitada;
$iptables -t nat -A PREROUTING -p tcp -m multiport -s 192.168.1.0/24 --dport 80,443
-j REDIRECT --to-ports 3128
esta regra redireciona todo o trafego da porta 80 e 443 para a porta 3128, com isto as estações
só navegam pelas regras do squid, na estação configure o navegador para usar proxy na porta
3128 e IP do servidor proxy.
A primeira regra que está comentada;
#$iptables -t nat -A PREROUTING -i $INTERNA -s \! 192.168.1.6 -p tcp -m multiport
--dport 80,443 -j REDIRECT --to-ports 3128
esta regra também faz o redirecionamento como na anterior, com exclusão de uma maquina do
proxy, neste exemplo a estação com IP 192.168.1.6 vai navegar sem passar pelo proxy, este
recurso ajuda muito na solução de problemas, quando tem problemas com acesso a sites
especificos, tem sites que não pode acessar via proxy, nestes casos para acessar sem passar
pelo proxy, troque o IP citado na regra pelo IP da estação que vai usar no teste, use o
navegador sem proxy e tente acesso, observe que a linha eatá comentada, deve usar somente
uma das regras, quando habilitar a primeira comente a segunda e vice versa.
Considere utilizar instalações de testes, pode montar outro servidor proxy na rede, servidor de
e-mail interno ou outro serviço, para excluir esta maquina de testes do proxy, utilize a exclusão
acima, quando for mais de uma maquina utilize o exemplo abaixo.

Liberar IP (estações) com acesso por fora do proxy


Excluir mais de uma estação do proxy, no firewall tem este exemplo para liberar por portas,
multiplas portas.
##### excluir estacoes do proxy, passa direto pelo NAT

$iptables -t nat -A PREROUTING -i $INTERNA -s 192.168.1.37/32 -p tcp -m multiport


--dport 80,443 -j ACCEPT
$iptables -t nat -A PREROUTING -i $INTERNA -s 192.168.1.53/32 -p tcp -m multiport
--dport 80,443 -j ACCEPT
Utilize uma regra para cada IP, neste exemplo acima as estações com IP 192.168.1.37 e 53
não precisa configurar proxy no navegador e acessam internet por fora do proxy, estas regras
obrigatoriamente tem que ser adicionadas no firewall, antes da regra do redireionamento do
Squid, observe no Firewall a posição delas em relação a regra do redirecionamento para a
porta 3128.
Outro exemplo de formato da regra. liberar a porta 80 para determinado IP de origem
$iptables -t nat -A PREROUTING -s 192.168.1.53 -p tcp -i $INTERNA --dport 80 -j
ACCEPT
Outro exemplo de formato da regra para liberar acesso a tudo
# micro zago 192.168.1.53
$iptables -t nat -A PREROUTING -s 192.168.1.53 -d 0.0.0.0/0 -j ACCEPT
Lembrando que Squid não é firewall, é servidor proxy e controla somente o que passa pela
porta 80, não pode redirecionar outras portas, portanto serviços como cliente de e-mail nas
estações não passarão pelo controle do Squid nem serão afetados pelas regras acima, sobre
este e outros serviços veja o tópico sobre NAT.
Outro exemplo para liberar um IP da rede , liberar todas as portas, algo como tirar um IP do
firewall e passar direto
# em tetes
# Regra para fazer NAT de tudo. e para todos
#$iptables -A POSTROUTING -t nat -o $IF_EXTERNA -j MASQUERADE
# Regra para fazer SNAT para destino especifico
#iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o $EXTERNA -j SNAT --to
200.200.200.200/24
# Regra para liberar um IP interno, fazer nat de tudo, de todas as portas, neste
exemplo libera o IP interno 192.168.1.218

$iptables -t nat -A PREROUTING -i $IF_INTERNA -s 192.168.1.218/32 -j ACCEPT


Controle via iptables e por estação (IP da estação), tem mais exemplos em outros tópicos deste
tutorial, neste tem algumas dicas sobre controle por IP de origem para acesso externo
passando pela porta 25, 110, 80 e 443, tente modificar ou adaptar ao seu ambiente, altere IP
indicado nas regras abaixo para o da estação que deseja testar regra.
Modificando o exemplo com NAT para liberar estação do proxy, temos esta regra no firewall
liberando estação para navegar sem passar pelo proxy.
##### excluir estacoes do proxy, passa direto pelo NAT
$iptables -t nat -A PREROUTING -i $INTERNA -s 192.168.1.37/32 -p tcp -m multiport
--dport 80,443 -j ACCEPT
Proibir porta 80 e 443 na estação especifica. Faça copia da regra acima e modifique a regra
para rejeitar, proibir determinado IP de navegar, basta alterar na copia da regra, IP e de
ACCEPT por DROP.
$iptables -t nat -A PREROUTING -i $INTERNA -s 192.168.1.37/32 -p tcp -m multiport
--dport 80,443 -j DROP
Impedir ou liberar acesso a e-mail via clientes de e-mail local (na estação), fechar as portas 25
e 110, como neste exemplo.
Esta regra impede cliente de e-mail acessar servidores externos (provedores),
fechar portas 25 e 110.
$iptables -t nat -A PREROUTING -i $INTERNA -s 192.168.1.37/32 -p tcp -m multiport
--dport 25,110 -j DROP

Libera cliente de e-mail para acessar servidores externos (provedores), liberar


porta 25 e 110.

$iptables -t nat -A PREROUTING -i $INTERNA -s 192.168.1.37/32 -p tcp -m multiport


--dport 25,110 -j ACCEPT
Permitir estação usar cliente de e-mail na maquina local e proíbir a navegação.
$iptables -t nat -A PREROUTING -i $INTERNA -s 192.168.1.37/32 -p tcp -m multiport
--dport 80,443 -j DROP
$iptables -t nat -A PREROUTING -i $INTERNA -s 192.168.1.37/32 -p tcp -m multiport
--dport 25,110 -j ACCEPT
Invertendo a ordem, permitir navegação e proíbir cliente de e-mail na estação.
$iptables -t nat -A PREROUTING -i $INTERNA -s 192.168.1.37/32 -p tcp -m multiport
--dport 80,443 -j ACCEPT
$iptables -t nat -A PREROUTING -i $INTERNA -s 192.168.1.37/32 -p tcp -m multiport
--dport 25,110 -j DROP
Com estes exemplos fica fácil adpatar a regra para outras portas e serviços, basta copiar a
regra, alterar o IP e porta. Lembre de acrescentar no firewall antes da regra que lebera ou
bloqueia geral, em firewall que redireciona a porta 80 as regras de iptables sobre a porta 80
tem que ser acrescentada antes da regra do redirecionamento.

NAT e forward - compartilhar internet


No firewall, depois da regra do Squid tem estas duas regras;
## NAT para os demais serviços que trabalham em outras portas,
# como exemplo, libera o acesso a cliente de e-mail e ssh

$iptables -A POSTROUTING -t nat -o $EXTERNA -j MASQUERADE


echo "1" > /proc/sys/net/ipv4/ip_forward
Obrigatoriamente tem que ficar depois da regra do proxy, servem para compartilhar internet
para os demais protocolos, como exemplo, liberar a porta 25 e 110 utilizadas pelos clientes e-
mail que não acessam a net pela porta 80, portanto não passam pelo proxy, estas regras
liberam tudo, compartilhamento total, como antes delas tem o redirecionamento do proxy, tudo
que usar a porta 80 cai no proxy e fica por lá, as demais portas não são redirecionadas,
portanto cai nesta regra que faz NAT. Qualquer bloqueio deve ser acrescentando antes desta
regra, ou se preferir, crie regras especificas de nat por protocolo e estação.

Redirecionamento de conexões recebidas - entrada


São regras que repassam a conexão para outra maquina da rede, considere um ambiente com
uma maquina conectada na internet via ADSL, vamos considerar que esta maquina compartilha
a internet para as demais maquinas da rede, vamos chamar esta maquina de firewall, neste
tipo de conexão somente ela tem IP roteável na internet, algo do tipo 200.200.200.200, todas
as conexões vindo do mundo tem que apontar para o IP deste micro, atraz dele tem diversos
micros, servidores e estações trabalhando com IP reservado, como exemplo da classe
192.168.1.0, não é possível utilizar esta classe de IP nas conexões via internet, IP desta classe
são descartados no primeiro roteador.
Atraz deste firewall pode ter servidores ou estações rodando serviços como; ssh, webmin, VNC
ou outro qualquer, no firewall é possível liberar (repassar) conexões vindo da internet para se
conectar direto com estas maquinas.
Considere um firewall rodando na maquina com IP fixo 200.200.200.200, atraz dele uma
estação usando IP 192.168.1.144, regras de iptables podem redirecionar conexão vindo da
internet direto para esta maquina.
Mesmo sem rodar o serviço no firewall, as conexões vindo do mundo (internet) tem que
apontar para o IP do firewall, quando atendida as regras de redirecionamento, a conexão é
rapassada para outra maquina da rede com IP reservado informado na regra, (estação atraz do
firewall), na origem da conexão precisa somente do IP do firewall, também a porta quando for o
caso, as regras de firewall faz o resto.
Resumindo;
Identifique quais portas esse serviço utiliza, IP que do seu (servidor) que é o mesmo IP de
internet, se possivel o IP remoto (cliente) quando quiser liberar acesso somente a um IP
externo, a regra tem este formato:
Liberar somente para conexões vindo de determinado IP, neste exemplo o IP remoto (-
s 200.204.198.164) mais a porta informada
iptables -t nat -A PREROUTING -p (protocolo tcp ou udp) -s (IP remoto) --dport
(porta solicitada) -i (interface externa) -j DNAT --to (IP servidor interno):(porta
no server interno)

##### Redirecionar ssh na porta 2222


$iptables -t nat -A PREROUTING -p tcp -s 200.204.198.164 --dport 2222 -i $EXTERNA
-j DNAT --to 192.168.1.144:22

Outra forma; rediciona somente pela porta, não importa o IP de origem


iptables -t nat -A PREROUTING -p tcp(ou udp) -d (IP do firewall local, servidor de
internet) --dport (porta solicitada) -j DNAT --to (IP servidor interno):(porta no
server interno)

Lembrando que a ordem é importante, se conflitar regras, a primeira que antender será
atendida e as demais ignoradas.
Nos tópicos a seguir tem mais exemplos sobre SSH e VNC, o principio se aplica a outros
protocolos e portas, pode modificar estas regras para webmin, banco de dados e etc....

SSH - fechado para o mundo e aberto para rede interna


SSH é muito útil e prático para administrar maquinas remotas, por ser muito usado, tem muitos
scripts que tentam fazer acesso forçado via ssh, alguns tem uma lista de login e senha e ficam
tentando, existem muitas tecnicas e maneiras, voce tem que se preocupar com isto e se
defender, ssh tem um alto nível de segurança e configuração, mas a configuração é feita por
você.
No modelo de firewall tem estas regras;
##### Libera acesso externo para ssh e servidor web
#$iptables -A INPUT -p tcp --dport 80 -i $EXTERNA -j ACCEPT
#$iptables -A INPUT -p tcp --dport 80 -i $INTERNA -j ACCEPT
#$iptables -A INPUT -p tcp --dport 22 -i $EXTERNA -j ACCEPT
$iptables -A INPUT -p tcp --dport 22 -i $INTERNA -j ACCEPT
A porta 80 é do servidor de páginas web (apache), a porta 22 é do ssh.
São duas regras, uma especifica para liberar acesso pela placa de rede interna $INTERNA e
outra especifica para a placa de rede da internet $EXTERNA, como as regras no inicio do
firewall fecha tudo, precisa implementar regra liberando acesso, neste exemplo tem regras
especificas por placa de rede para facilitar a configuração.
No exemplo acima está aberto somente para acesso pelas maquinas da rede interna e
proibindo o acesso externo, conexões da internet, está comentada a linha com a variável
$INTERNA, caso queira liberar para o mundo, remova o comentário da linha com variável
$EXTERNA.
Observe que neste firewall fecha tudo e depois vai abrindo as portas, em firewall aberto onde
vai fechando as portas, a regra muda de ACCEPT para DROP, algo neste formato;
#$iptables -A INPUT -p tcp --dport 22 -i $EXTERNA -j DROP
Lembre que ssh tem muitas possibilidades de configuração, este é somente um exemplo de
lidar com as portas, caso permita conexões vindo da internet, pesquise sobre segurança e
configuração dele, neste FAQ tem um diretório especifico sobre ssh.

SSH - Redirecionar entrada para estações da rede


Redirecionando os pedidos que chegam da net, ou seja o firewall simplesmente repassa para
outra maquina completar a conexão, segue alguns exemplos com redirecionamento como base
no IP de origem ou porta destino.
No firewall tem esta regra sobre ssh
##### Redirecionar ssh na porta 2222
$iptables -t nat -A PREROUTING -p tcp -s 200.204.198.164 --dport 2222 -i $EXTERNA
-j DNAT --to 192.168.1.144:22
Tentando descrever este ambiente, imagine duas empresas, cada uma tem seu micro rodando
firewall e conectado ao modem ADSL, sem restrições de uso pela operadora quanto as portas
descritas aqui, em uma ponta tem IP 200.204.198.164 e na outra ponta IP 200.200.200.200,
atraz destas maquinas tem estações com IP da classe 192.168.1.0, esta regra permite que
estação de uma rede se conecte via ssh com estação atraz da outra rede.
Exemplo de linha de comando tratada por esta regra (redirecionada). No console de maquina
atraz do IP 200.204.198.164 fazendo NAT
ssh -p 2222 zago@200.200.200.200
Observe que indica a porta (-p 2222) e dispara o comando para o IP do firewall remoto
200.200.200.200, o redirecionamento para a estação interna no firewall onde roda a regra
acima, (ip 192.168.1.144) ocorre quando atender as seguintes condições; origem da conexão
no IP = 200.204.198.164 e porta destino = 2222.
As demais requisições de ssh serão atendidas pela própria maquina ou outra regra do firewall.
Onde -s (source, origem) IP 200.204.198.164, requisições que chegam deste IP na placa de
rede da internet -i $EXTERNA (-i imput, entrada), --dport 2222, na porta 2222, observe que tem
varias condições, IP de origem, porta destino, entrada pela placa de rede externa. Quando
atendida todas estas condições o pedido é repassado para outra maquina da rede (DNAT --to
192.168.1.144:22), a estação da rede interna com ip 192.168.1.144 vai atender o pedido na
porta 22, claro que o firewall dela precisa permitir e também ter o serviço rodando (ouvindo)
nesta porta, neste exemplo o serviço é sshd, servidor do ssh.
Esta regra vale também para FreeNX, ele trabalha sobre conexão ssh, requer configuração
especifica para obter o desktop remoto, algo como VNC mas com melhor qualidade, velocidade
e segurança.
Sobre ssh e FreeNX, tem mais dicas, exemplos e FAQ em;
http://www.zago.eti.br/ssh/

VNC - redirecionamento para estações da rede


Prefiro ssh ou FreeNX, mas quando temos que conectar a estações windows na rede remota,
VNC torna uma grande solução.
No firewall tem esta regra sobre VNC
##### VNC
# Redireciona portas na primeira maquina vnc troque o ip conforme a maquina que
deseja acessar.
iptables -A FORWARD -i $EXTERNA -p tcp --dport 5800:5900 -m state --state
NEW,ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -i $EXTERNA -p udp --dport 5800:5900 -m state --state
NEW,ESTABLISHED,RELATED -j ACCEPT
iptables -t nat -A PREROUTING -p tcp -i $EXTERNA --dport 5800:5900 -j DNAT --to
192.168.1.144:5800-5900
iptables -t nat -A PREROUTING -p udp -i $EXTERNA --dport 5800:5900 -j DNAT --to
192.168.1.144:5800-5900

#Redirecionar para maquina VNC ouvindo na 5801


iptables -A FORWARD -i $EXTERNA -p tcp --dport 5801:5901 -m state --state
NEW,ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -i $EXTERNA -p udp --dport 5801:5901 -m state --state
NEW,ESTABLISHED,RELATED -j ACCEPT
iptables -t nat -A PREROUTING -p tcp -i $EXTERNA --dport 5801:5901 -j DNAT --to
192.168.1.144:5801-5901
iptables -t nat -A PREROUTING -p udp -i $EXTERNA --dport 5801:5901 -j DNAT --to
192.168.1.144:5801-5901
#####
Uso do primeiro exemplo é simples, basta instalar o VNCSERVER e rodar, neste exemplo,
redireciona qualquer pedido que chega da internet na porta 5800, na URL do navegador use o
IP:porta, neste formato;
http://200.200.200.200:5800
A regra de firewall se encarrega de redirecionar para a estação e esta se encarrega atender o
pedido e completar a conexão com login e senha.
A segunda opção complica um pouquinho porque permite ter varias maquinas aceitando
conexão via VNC, usa a porta como meio de seleção da maquina remota, permite multiplas
conexões VNC, redireciona para estação interna coforme a porta indicada na conexão, precisa
configurar o VNCserver para ouvir em outra porta, use 5801 para maquina 1, 5802 para
maquina 2 e assim por diante, a seleção da maquina remota é feita conforme a porta indicada
na URL, entendeu como é simples, quase como uma tabela, 5801 conecta na maquina X, 5802
conecta na Y e assim por diante..., precisa de uma regra para cada maquina, repita o exemplo
acima para cada maquina, altera a porta e IP, exemplo de uso na URL para conexão com
maquina que está ouvindo na porta 5801.
http://200.200.200.200:5801
Veja também o tópico sobre SSH - redirecionamento, são semelhantes e ajuda na explicação.
Sobre VNC, tem mais dicas, exemplos e FAQ em;
http://www.zago.eti.br/vnc.txt

SUSE 10.1 - executar script no boot


SUSE tem configurador do firewall via Yast, tem seu próprio script de firewall.
Acho mais fácil e prático usar meu script, tem que escolher pelo firewall do SUSE ou seu script,
para usar outro script é preciso deabilitar o firewall do SUSE.
Desabilitar o firewall nativo do SUSE, entre no yast, pode ser em modo texto, entre em
"segurança e Usuários" -> Firewall, desabilite o firewall
Aproveite e configure as placas de rede Yast -> "Dispositivos de Rede" -> Placa de Rede" ->
avançar e selecione a placa de rede, (editar), configure conforme sua rede, com IP dinamico
(DHCP) ou com IP Estático e mascara de rede, IP da mesma classe de rede interna. Não altere
mais nada, não precisa mexer na rota, avançar e OK até fechar o yast.
Compartilhar conexão - micro com duas placas de rede.
Use um script de IPtables para compartilhar, caso não tenha, como está navegando, para teste
use este script de iptables, as linhas de comando abaixo inclue o script no boot.local para
executar no boot.
cd /etc/rc.d
wget http://www.zago.eti.br/firewall/fireaula.sh
chmod 755 fireaula.sh
./fireaula.sh
rcnetwork restart
echo "/etc/rc.d/fireaula.sh" >> /etc/rc.d/boot.local
echo "rcnetwork restart" >> /etc/rc.d/boot.local

CL10 - executar script no boot


Salve o script no diretório /etc/rc.d/, entre no diretório e baixe com wget, acesse via navegador
para copiar e colar, ou importar direto no editor "vi", pode salvar em outro local qualquer,
lembre de ajustar o caminho nos comandos abaixo, não pode manipular em instalações
DOS/WIN.
com o script no diretório, execute estes comandos como root no console.
chkconfig myfirewall off
echo fireaula.sh >> /etc/rc.d/rc.local
chmod 755 /etc/rc.d/fireaula.sh
sh /etc/rc.d/fireaula.sh
Use seu editor de texto puro para fazer alterações no script, depois de salvar execute
novamente para carregar as alterações, como root no console execute uma destas opções.
sh /etc/rc.d/fireaula.sh

ou

cd /etc/rc.d/
./fireaula.sh
Pessoal, consegui o bloqueio do facebook e outros sites aqui na minha empresa e gostaria de
compartilhar com voces , ai vai :

Script que pega o ip do facebook e joga dentro de um arquivo chamado host_facebook, depois
uma expressão regular usando o "sed" que captura dentro do arquivo host_facebook qualquer
endereço de IP e joga para dentro de outro arquivo chamado ip_facebook e por fim uma regra
que podemos adiciona-la dentro do nosso firewall que pega todos os ips dentro do arquivo
ip_facebook e adiciona uma regra de INPUT e FORWARD DROP para cada IP.

Segue o script e lembrando que precisamos criar os arquivos e indica-los no script sua
localização:

#/bin/bash
#LIMPAR ARQUIVO ip_facebook
echo "" > ip_facebook
#CAPTURAR IP DO FACEBOOK
host www.facebook.com >> /root/host_facebook

## EXPRESSÃO REFULAR PARA CAPTURAR SOMENTE OS IPS DO ARQUIVO


host_facebook
sed -n 's/\([0-9]\{1,3\}\.\)\{3\}[0-9]\{1,3\}/\nip&\n/gp' /root/host_facebook | grep ip | sed 's/ip//'| sort
| uniq >> /root/ip_facebook

## REGRA DE CONDIÇÃO PARA BLOCK DOS IPS


for ip in $(cat /root/ip_facebook); do
iptables -I FORWARD -s $ip -j DROP;
iptables -I INPUT -s $ip -j DROP;
done

Após tudo isso preisamos adicionar no agendador cron para execução do script de 2 em 2
minutos que é o tempo que estimei para renovação dos ips do facebook.

Abraços a todos espero ter ajudado, vale ressaltar que esse é meu primeiro post em foruns.
Bloqueando acesso ao facebook com servidor linux e iptables
criando os arquivos necessários:
#touch /etc/facebook.txt
#touch /etc/init.d/bloqueia_facebook
#touch /etc/init.d/bloqueia_facebook_boot

editar e inserir o conteúdo abaixo no arquivo /etc/init.d/bloqueia_facebook


#!/bin/bash
#Configuracao de bloqueio do facebook
#Captura o IP do site www.facebook.com
SITE=`host www.facebook.com | grep -Eo '([0-9]{1,3}\.){3}[0-9]{1,3}'`
#Verifica se o IP não consta na lista. Caso não conste, executará todos procedimentos.
if ( ! cat /etc/facebook.txt | grep "$SITE" > /dev/null); then
echo $SITE >> /etc/facebook.txt
#Bloqueando os ipv4
iptables -I FORWARD -s $SITE -j DROP;
iptables -I INPUT -s $SITE -j DROP;
fi
#Bloqueando os ipv4 na inicialização do firewall
# for ip in $(cat /etc/facebook.txt); do
# iptables -I FORWARD -s $ip -j DROP;
# iptables -I INPUT -s $ip -j DROP;
# done

editar e inserir o conteúdo abaixo no arquivo /etc/init.d/bloqueia_facebook_boot


#!/bin/bash
Bloqueando os ipv4 na inicialização do firewall
for ip in $(cat /etc/facebook.txt); do
iptables -I FORWARD -s $ip -j DROP;
iptables -I INPUT -s $ip -j DROP;
done

alterar permissão dos arquivos do init.d para execução


chmod +x /etc/init.d/bloqueia_facebook_boot /etc/init.d/bloqueia_facebook

com o rcconf colocar o bloqueia_facebook_boot para rodar na inicialização

editar e inserir o conteúdo no final do arquivo /etc/crontab


***** root /etc/init.d/bloqueia_facebook

inicializar o serviço de cron


/etc/init.d/cron restart

agora é só esperar as reclamações do pessoal que não consegue mais acessar o facebook.
Como bloquear o Ultrasurf - solução definitiva (iptables + Fail2ban)
Autor: Rodrigo Luis Silva <rsilva.14 at gmail.com>
Data: 20/01/2012

O problema

Em um primeiro momento, eu acreditei que seria fácil bloquear o Ultrasurf, porém o uso de
proxy transparente obriga que a porta 443 (HTTPS) fique liberada, o 'BitTorrent' foi bloqueado
sem dificuldades.

Com o uso do tcpdump, eu identifiquei que todo o acesso do Ultrasurf sai pela porta 443, logo a
solução mais obvia seria bloqueá-la, porém não é possível. Bloquear o IP ou 'range' de IP do
servidor de destino seria outra opção.

Quando fiz o bloqueio pelo 'range' de IP, descobri que o Ultrasurf tenta uma centena de IPs
diferentes até conseguir o acesso que ele precisa, e certamente devem existir novos IPs a cada
nova versão.

Pesquisei pelo Google e não encontrei nenhuma forma eficiente de bloquear o Ultrasurf, foi
então que pensei o seguinte:

- Criar uma regra no iptables e fazer Log dos acesso ao IP do Ultrasurf, depois criar um
"Daemon" para ler esse log e fazer um bloqueio em tempo real.

Bem, vamos por a mão na massa.

Começando
Vamos lá, este pequeno tutorial é para tratar um problema especifico, sendo assim, eu suponho
que você já sabe usar o iptables, afinal já está aqui buscando uma forma de fazer um bloqueio
mais avançado. rs

Acredito que esta solução possa ser utilizada por todos, para Firewall simples e até o mais
complexo.

Eu estou usando Debian 5.0.3, iptables 1.4.2 e Fail2ban 0.8.3.

Qualquer dúvida, problema ou sugestão, podem deixar um comentário.

No final você encontra os arquivos de configuração para download.

iptables
Esta parte é bem simples, no seu script de firewall, adicione a seguinte linha:

iptables -A FORWARD -d 65.49.14.0/24 -j LOG --log-prefix "=UltraSurf= "

A rede 65.49.14.0/24 é a primeira a ser contactada pelo Ultrasurf quando ele é aberto, a regra
acima apenas gera um Log, não existe bloqueio do acesso, em um primeiro momento o usuário
vai até pensar que está funcionando.

ATENÇÃO: Coloque esta regra antes da regra com o módulo state (-m state --state
ESTABLISHED,RELATED).

Se colocar depois, os pacotes das conexões já estabelecidas, não irão para o Log e pode gerar
falhas no bloqueio.

Fail2ban

O Fail2ban é uma ferramenta muito boa para a segurança de servidores, em linhas gerais ela
faz o seguinte: lê algum arquivo de Log, compara com uma expressão regular e em caso
positivo, executa algum comando no sistema.

Por padrão ele monitora o Log do SSH e em caso de falhas consecutivas no acesso, ele cria
uma regra no iptables para bloquear o possível invasor.

Instalando
Como eu estou utilizando o Debian, vou instalar pelo "apt-get":

# apt-get install fail2ban

Depois de instalado, vamos acessar o diretório de configuração:

# cd /etc/fail2ban/

Aqui vamos criar um arquivo chamado "jail.local":

# vi /etc/fail2ban/jail.local

E adicionar o conteúdo abaixo ao arquivo:

[ultrasurf]
enabled = true
filter = ultrasurf
port = all
banaction = iptables-ultrasurf
logpath = /var/log/messages
maxretry = 6

# Tempo em segundos que o IP fica bloqueado, aqui 15 minutos


bantime = 900

Vamos criar o arquivo com a expressão regular que irá filtar o Log do iptables:

# vi /etc/fail2ban/filter.d/ultrasurf.local

Aqui vamos adicionar uma expressão regular simples ao arquivo "ultrasurf.local":

[Definition]

failregex = (.*)=UltraSurf=(.*) SRC=<HOST>


ignoreregex =

Apesar de simples, funciona. :)

Agora o arquivo que irá executar o iptables e criar as regras necessárias para o bloqueio e
desbloqueio:

# vi /etc/fail2ban/action.d/iptables-ultrasurf.local

Aqui é onde a mágica acontece, adicione o conteúdo abaixo ao arquivo "iptables-ultrasurf.local":

[Definition]

actionstart = iptables -N fail2ban-<name>


iptables -A fail2ban-<name> -j RETURN
iptables -I INPUT -j fail2ban-<name>
iptables -I FORWARD -j fail2ban-<name>

actionstop = iptables -D FORWARD -j fail2ban-<name>


iptables -D INPUT -j fail2ban-<name>
iptables -F fail2ban-<name>
iptables -X fail2ban-<name>

actioncheck = iptables -n -L FORWARD | grep -q fail2ban-<name>


iptables -n -L INPUT | grep -q fail2ban-

actionban = iptables -I fail2ban-<name> 1 -s <ip> -j REJECT

actionunban = iptables -D fail2ban-<name> -s <ip> -j REJECT

[Init]
name = ultrasurf
Agora basta reiniciar o "Daemon":

# /etc/init.d/fail2ban restart

Pronto, agora é só olhar o Log do Fail2ban e esperar pelo primeiro bloqueio:

# tail -f fail2ban.log

Ex.:
2012-01-13 19:11:36,890 fail2ban.server : INFO Changed logging target to /var/log/fail2ban.log
for Fail2ban v0.8.3
2012-01-13 19:11:36,891 fail2ban.jail : INFO Creating new jail 'ultrasurf'
2012-01-13 19:11:36,891 fail2ban.jail : INFO Jail 'ultrasurf' uses poller
2012-01-13 19:11:36,901 fail2ban.filter : INFO Added logfile = /var/log/messages
2012-01-13 19:11:36,902 fail2ban.filter : INFO Set maxRetry = 6
2012-01-13 19:11:36,903 fail2ban.filter : INFO Set findtime = 600
2012-01-13 19:11:36,903 fail2ban.actions: INFO Set banTime = 900
2012-01-13 19:11:36,912 fail2ban.jail : INFO Creating new jail 'ssh'
2012-01-13 19:11:36,912 fail2ban.jail : INFO Jail 'ssh' uses poller
2012-01-13 19:11:36,913 fail2ban.filter : INFO Added logfile = /var/log/auth.log
2012-01-13 19:11:36,914 fail2ban.filter : INFO Set maxRetry = 6
2012-01-13 19:11:36,915 fail2ban.filter : INFO Set findtime = 600
2012-01-13 19:11:36,915 fail2ban.actions: INFO Set banTime = 600
2012-01-13 19:11:36,985 fail2ban.jail : INFO Jail 'ultrasurf' started
2012-01-13 19:11:36,997 fail2ban.jail : INFO Jail 'ssh' started
2012-01-13 19:11:52,029 fail2ban.actions: WARNING [ultrasurf] Ban 10.23.134.42
2012-01-13 19:13:36,057 fail2ban.actions: WARNING [ultrasurf] Ban 10.23.134.140
2012-01-13 19:26:52,081 fail2ban.actions: WARNING [ultrasurf] Unban 10.23.134.42
2012-01-13 19:28:36,109 fail2ban.actions: WARNING [ultrasurf] Unban 10.23.134.140
2012-01-13 19:33:50,137 fail2ban.actions: WARNING [ultrasurf] Ban 10.23.134.42
2012-01-13 19:48:50,165 fail2ban.actions: WARNING [ultrasurf] Unban 10.23.134.42
2012-01-13 19:53:44,193 fail2ban.actions: WARNING [ultrasurf] Ban 10.23.134.140

Enviando e-mail de aviso

É possível enviar um e-mail de alerta a cada bloqueio e desbloqueio que o Fail2ban faz.

Para ativar esta função, você tem primeiramente que testar o envio de e-mail na máquina. Para
fazer isto, vamos usar o programa "mail":

# mail seu-email@seu-dominio.com.br

Subject: Teste
Teste de envio de mensagem
.
Cc:

Obs.: Atenção ao "." (ponto) no final da mensagem, ele finaliza o e-mail.

O Debian, por padrão, utiliza o Exim. O Log fica localizado em "/var/log/exim4/mainlog".


Você também pode usar o comando 'mailq' para verificar a fila de e-mail, em situações normais,
não deve existir nenhum e-mail na fila.

Diversos detalhes podem impedir o envio de e-mail, aqui não vou detalhar muito, vou apenas
colocar o conteúdo do meu arquivo "/etc/exim4/update-exim4.conf.conf" para usar como
referência.

dc_eximconfig_configtype='smarthost'
dc_other_hostnames='SERVER.DOMINIO.com.br'
dc_local_interfaces='127.0.0.1'
dc_readhost=''
dc_relay_domains=''
dc_minimaldns='false'
dc_relay_nets='127.0.0.1'
dc_smarthost='smtp.DOMINIO.com.br'
CFILEMODE='644'
dc_use_split_config='false'
dc_hide_mailname='false'
dc_mailname_in_oh='true'
dc_localdelivery='mail_spool'

Estou usando ele como "smarthost" e encaminhando as mensagens para o meu servidor de
SMTP.

Depois de ajustar o arquivo, você deve executar o comando "update-exim4.conf" para atualizar
a configuração e reiniciar o Daemon do Exim com o comando "/etc/init.d/exim4 restart".

Pronto, se o envio de e-mail pelo programa "Mail" estiver funcionando, você já pode ativar o
envio de e-mail pelo Fail2ban, vamos lá.

Edite o arquivo "/etc/fail2ban/jail.local":

# vi /etc/fail2ban/jail.local

[ultrasurf]

enabled = true
filter = ultrasurf
port = all
banaction = iptables-ultrasurf
sendmail-ultrasurf
logpath = /var/log/messages
maxretry = 6
bantime = 900

Adicione a "action sendmail-ultrasurf", conforme exemplo acima. Agora vamos criar um novo
arquivo chamado "/etc/fail2ban/action.d/sendmail-ultrasurf.local":

# vi /etc/fail2ban/action.d/sendmail-ultrasurf.local

[Definition]
actionstart =
actionstop =
actioncheck =
actionban = printf %%b "Subject: Bloqueado <ip>
From: Suporte <<sender>>
To: <dest>\n
\n
O dispositivo com IP <ip> foi bloqueado depois de tentar burlar
<failures> vezes o nosso sistema de seguranca.\n
Acesso sera liberado automaticamente,\n
Suporte" | /usr/sbin/sendmail -f <sender> <dest>

actionunban = printf %%b "Subject: Liberado <ip>


From: Infra <<sender>>
To: <dest>\n
\n
O dispositivo com IP <ip> foi liberado para acesso normal\n
Novas tentativas serao bloqueadas automaticamente,\n
Suporte" | /usr/sbin/sendmail -f <sender> <dest>

[Init]

name = default
dest = root
sender = fail2ban

Feito isto, você irá receber um email quando uma máquina for bloqueada ou desbloqueada, veja
exemplos abaixo.

- Bloqueio
"O dispositivo com IP 10.23.134.41 foi bloqueado depois de tentar burlar

14 vezes o nosso sistema de seguranca.

Acesso sera liberado automaticamente,

Suporte"

- Desbloqueio
"O dispositivo com IP 10.23.134.41 foi liberado para acesso normal

Novas tentativas serao bloqueadas automaticamente,

Suporte"

Você também pode alterar a mensagem a seu critério.

Finalizando

Conclusão
Um forte abraço ao meu amigo Yros Aguiar. Quando falei que iria criar um Daemon para ler o
Log, ele me lembrou que eu não precisaria reinventar a roda, bastava usar alguma ferramenta já
existente. rs

Valeu! Economizou horas de trabalho.

Fica aí a dica, pra mim funcionou.

Testei apenas com a versão 11.03, se em alguma outra não der certo, peço que me avisem para
podermos analisar como bloquear.

- Downloads:

Configuração SEM suporte a envio de e-mail:


 http://www.dotsharp.com.br - Conf-Fail2ban-Ultrasurf.tar.gz

Configuração COM suporte a envio de e-mail:


 http://www.dotsharp.com.br - Conf-Fail2ban-Ultrasurf-Email.tar.gz

Referências
 http://www.fail2ban.org - Software Fail2ban
 http://www.netfilter.org - iptables

 http://tekniblog.wordpress.com - Bloquear Ultrasurf com GPO


Bloqueando pelo host

Galera eu que já passei por tanta dor de cabeça para bloquear o facebook e demais sites que
usam https como a maior parte de vocês e com a ajuda de uma dica do Bunnunim acabei de
encontrar a melhor solução possível. =D

1ª Vamos criar uma regra DNS local apontando o domínio que deseja bloquear (no meu caso
Facebook mais pode ser substituído por qualquer outro), para isso vá em: Rede >> Editar hosts
>> Adicionar host

Adicione uma regra de acordo com a seguinte:

Endereço de IP: 127.0.0.2 (esse ip é um loopback inválido mais você pode colocar o IP que
desejar)

Nome do computador (host): www

Nome do domínio: facebook.com

Pronto, desta forma ele já “bloqueia” as maquinas que estiverem usando o IP do Endian como
DNS, agora e se a pessoa usar um DNS de terceiros como o da Google, como proceder?
Agora vem a segunda parte da dica (agradeço ao Bunnunim), sempre tem algum engraçadinho
que usa outro DNS para se livrar deste bloqueio, então para isso vamos ativar o DNS
Transparente.

2ª Vá em PROXY >> DNS e ative a opção “Transparente Ligado VERDE” no check box a
frente. Após isso TODOS os computadores da sua rede utilizarão o Endian como DNS de todos
os pacotes de saída da rede. Agora e se eu quiser liberar a maquina do presidente, gerente ou
a minha mesmo? Para isso é só adicionar seu MAC ou IP no campo: “Que fontes podem
passar ao lado do proxy transparente (uma subrede/ip/mac por linha)”.

Agora com essa dica meus problemas com o facebook foi COMPLETAMENTE resolvido (só
não testei o Tor ou ultrasuf).

Tácio, você acha que conseguiriamos redirecionar para a página de aviso de bloqueio de
conteúdo?

Sim cara de forma bem tranquila. Faça o seguinte, instale um servidor web (caso não tenha
muito conhecimento instale o WAMP no Windows) em alguma de suas maquinas da rede
interna e coloque a página de bloqueio que você desejar (de preferência pegue a página de
bloqueio do Endian de algum site e salve ela e edite o html para o nome facebook por exemplo)
e coloque o IP da maquina no IP customizado que você colocou no domínio.

esclareça pra mim o seguinte:

Endereço de IP: (é o ip da máquina que eu quero bloquear ou o do efw?)


Nome do computador (host):(é o nome da máquina que eu quero bloquear ou é o www
mesmo?

Nome do domínio: facebook.com

Reinaldo Bomfim, o Endian gerencia sim, porem se o proxy for autenticado, com proxy
transparente nenhum servidor de bloqueio funciona com https. Sobre o endereço IP ele é é um
endereço invalido qualquer (e não o da maquina que deseja bloquear) ao qual a maquina será
redirecionado ao tentar acessar o facebook. No meu caso eu redireciono para o 127.0.0.1 (que
é a própria maquina), mais você pode colocar qualquer IP inválido que desejar. E sobre o nome
da maquina no caso coloquei o www pois todo mundo digita http://www.facebook.com, no caso
facebook.com é o domínio e o www seria o nome do servidor que pertence ao domínio www
(que em 99% dos sites é esse quem responde) =)

Srs, usando a dica acima eu fiz um complemento para habilitar/desabilitar em determinados


horários, utilizando os seguintes scripts:

==============================

root@efwxx:/var/efw/scripts # vi DNSProxyOn.sh

#!/bin/sh

cp /var/efw/dnsmasq/hosts.On /var/efw/dnsmasq/hosts

cp /var/efw/dnsmasq/settings.On /var/efw/dnsmasq/settings

/usr/local/bin/restartdnsmasq –force

exit 0

==============================

root@efwxx:/var/efw/scripts # vi DNSProxyOff.sh

#!/bin/sh

cp /var/efw/dnsmasq/hosts /var/efw/dnsmasq/hosts.On

cp /var/efw/dnsmasq/hosts.Off /var/efw/dnsmasq/hosts

cp /var/efw/dnsmasq/settings /var/efw/dnsmasq/settings.On

cp /var/efw/dnsmasq/settings.Off /var/efw/dnsmasq/settings

/usr/local/bin/restartdnsmasq –force

exit 0

==============================

root@efwxx:/etc/cron.d # vi DNSProxyOn.cron
05 13 * * * [ -x /var/efw/scritps/DNSProxyOn.sh ] && /var/efw/scripts/DNSProxyOn.sh

35 22 * * * [ -x /var/efw/scritps/DNSProxyOn.sh ] && /var/efw/scripts/DNSProxyOn.sh

==============================

root@efwxx:/etc/cron.d # cat DNSProxyOff.cron

55 11 * * * [ -x /var/efw/scritps/DNSProxyOff.sh ] && /var/efw/scripts/DNSProxyOff.sh

25 21 * * * [ -x /var/efw/scritps/DNSProxyOff.sh ] && /var/efw/scripts/DNSProxyOff.sh

==============================

Para que tudo funcione, antes de configurar o DNS conforme os posts anteriores, você deve
executar os comandos:

cp /var/efw/dnsmasq/hosts /var/efw/dnsmasq/hosts.Off

cp /var/efw/dnsmasq/settings /var/efw/dnsmasq/settings.Off

Com isso, serão criados os .Off com as configs desabilitadas

Agora, basta configurar o DNS transparente e aguardar a execução.

Normalmente o DNS funciona após uns 5 mins, testei aqui e funcionou.

Pois é Tácio, mais se você digitar o “m.facebook.com” no navegador seja qual for você terá
acesso ao Facebook mobile. Embora que é muito difícil o usuário final saber disso e você
bloqueando o wi-fi da sua empresa p/ acesso celular da p/ resolver muitos problemas como eu
consegui.

onsegui bloquear o m.facebook.com editando o arquivo /var/efw/dnsmasq/hosts. Apenas

copiei e colei a linha linha superior, e editei o nome do host, olha como ficou:

cat /var/efw/dnsmasq/hosts

on,127.0.0.2,pt-br,facebook.com

on,127.0.0.2,www,facebook.com

on,127.0.0.2,m,facebook.com

Após a alteração bloqueou o endereço, é normal dar um dalay até que bloqueie, mas

funcionou certinho.

cat /var/efw/dnsmasq/hosts
on,127.0.0.2,pt-br,facebook.com

on,127.0.0.2,www,facebook.com

on,127.0.0.2,m,facebook.com

poxa ate deu certo mais como liberar no hr especifico como criar esse scrip
Bloqueando Facebook via IP
fazer um comentário »

Prezados,

Tive necessidade de aplicar regras ao famoso Facebook, o problema é que o ambiente não possui proxy,
portanto o bloqueio deverá ser via IP.

Pesquisando no google encontrei este site https://developers.facebook.com/docs/ApplicationSecurity/,


nele informa como pegar todas redes do Facebook.

Customizei um pouco o comando para ignorar ipv6 e retornar somente o IP/MASK, famoso CIDR.

whois -h whois.radb.net — ‘-i origin AS32934′ | grep ^route | grep -v route6 | awk ‘{print $2}’

Agora com essa lista o céu é o limite.

Exemplo com iptables:

for i in `whois -h whois.radb.net — ‘-i origin AS32934′ | grep ^route | grep -v route6 | awk ‘{print $2}’`;
do

iptables -I FORWARD -d $i -j REJECT

done

Com pfSense basta criar um Alias, ( a seta na imagem abaixo ilustra com criar em lote, famoso bulk
update) e fazer o bloqueio

Com alias criado adicione uma Floating Rule ou uma rule na interface de saída (WAN) bloqueando ou
fazendo QoS (vai do gosto do freguês), somente no campo destino coloque como “Host or Alias” e
coloque o nome do Alias que criou.