Académique Documents
Professionnel Documents
Culture Documents
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
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:
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.
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:
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:
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:
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:
As proximas regras farão a liberação do HTTP e do HTTPS da máquina, para acesso exterior. Segue
comandos:
HTTP:
HTTPS:
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:
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:
SSH:
Se você quer que consigam “pingar” seu servidor, você deve colocar essa regra no Firewall
para que isso seja possível. Segue regra:
10 – Permitindo DNS
Para permitir o DNS, devemos ter essa regra no nosso Firewall, segue regra;
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:
PostgreSQL:
12 – Liberação do SMTP
Para fazer a liberação do tráfego SMTP, inclua as regras abaixo em seu Firewall, segue as
regras:
Para liberarmos o tráfego IMAP e IMAPS em nosso servidor, inclua as regraqs abaixo em seu Firewall.
Seguem as regras:
IMAP:
IMAPS:
Para liberarmos o tráfego POP3 e POP3S em nosso servidor, inclua as regraqs abaixo em seu Firewall.
Seguem as regras:
POP3:
POP3S:
Para fazermos o famoso Port Forward, ou simplesmente NAT. Devemos adicionar a regra
abaixo:
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:
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..
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
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....
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
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
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.
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.
iptables
Esta parte é bem simples, no seu script de firewall, adicione a seguinte linha:
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":
# cd /etc/fail2ban/
# vi /etc/fail2ban/jail.local
[ultrasurf]
enabled = true
filter = ultrasurf
port = all
banaction = iptables-ultrasurf
logpath = /var/log/messages
maxretry = 6
Vamos criar o arquivo com a expressão regular que irá filtar o Log do iptables:
# vi /etc/fail2ban/filter.d/ultrasurf.local
[Definition]
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
[Definition]
[Init]
name = ultrasurf
Agora basta reiniciar o "Daemon":
# /etc/init.d/fail2ban restart
# 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
É 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:
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á.
# 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>
[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
Suporte"
- Desbloqueio
"O dispositivo com IP 10.23.134.41 foi liberado para acesso normal
Suporte"
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
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:
Referências
http://www.fail2ban.org - Software Fail2ban
http://www.netfilter.org - iptables
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
Endereço de IP: 127.0.0.2 (esse ip é um loopback inválido mais você pode colocar o IP que
desejar)
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.
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) =)
==============================
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
==============================
==============================
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
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.
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.
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}’
for i in `whois -h whois.radb.net — ‘-i origin AS32934′ | grep ^route | grep -v route6 | awk ‘{print $2}’`;
do
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.