Quando DesdeLinux Eu tinha apenas alguns meses e escrevi um tutorial extremamente simples de entender sobre iptables: iptables para iniciantes, curiosos, interessados (1ª parte) . Usando metáforas como comparar nosso computador com nossa casa, nosso firewall com a porta de casa, entre outros exemplos, expliquei de forma divertida, sem tantos detalhes técnicos ou conceitos complicados, o que é firewall, o que é iptables e como começar a usar e configurar. Esta é a continuação, a 2ª parte do tutorial do iptables anterior 🙂
Acontece que há poucos dias usando um AP Linksys (Ponto de Acesso) coloquei um Wifi na casa da minha namorada, embora o local não seja o mais conhecedor em termos de tecnologia, ou seja, não é que haja muitos perigos de cracking , é sempre uma boa ideia ter uma segurança excelente tanto no Wifi como nos computadores.
Não vou comentar sobre a segurança do Wifi aqui, pois não é o objetivo do post, vou me concentrar na configuração do iptables que uso atualmente no meu laptop.
No post anterior, expliquei que é necessário em um firewall primeiro negar todo o tráfego de entrada, para isso:
sudo iptables -P INPUT DROP
Então, devemos permitir que nosso próprio computador tenha permissão para inserir dados:
sudo iptables -A INPUT -i lo -j ACCEPT
Além de aceitar pacotes de solicitações originadas de nosso computador:
sudo iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
Até agora nosso computador pode navegar na internet sem problemas, mas ninguém de nenhum outro ambiente (LAN, internet, Wifi, etc.) poderá acessar nosso computador de nenhuma maneira. Vamos começar a configurar o iptables de acordo com nossas necessidades.
Usando ulogd para gerar os logs do iptables em outro arquivo:
Por padrão, os logs do iptables vão para o log do kernel, o log do sistema, ou algo assim ... no Arch por padrão, agora eu nem me lembro para onde vão, é por isso que eu uso Ulogd para que os logs do iptables fiquem em outro arquivo.
sudo iptables -A INPUT -p tcp -m tcp --tcp-flags FIN,SYN,RST,ACK SYN -j ULOG
Dar acesso ao meu servidor privado:
Eu não uso o VirtualBox ou algo semelhante para virtualizar, tenho meu servidor privado virtualizado com Qemu + KVM que deve ser capaz de se conectar ao meu laptop como tal, com as regras de iptables que acabei de especificar acima, ele não será capaz, é por isso que tenho que dar permissão ao IP do meu servidor virtual para que ele possa acessar meu laptop:
sudo iptables -A INPUT -i virbr0 -p tcp -s 192.168.122.88 -j ACCEPT
Vamos detalhar essa linha, é importante que você entenda o que significa cada parâmetro, pois eles se repetirão muito a partir de agora:
-A ENTRADA : Estou dizendo que vou declarar uma regra para o tráfego de entrada
-eu virbr0 : Declaro que a interface pela qual aceitarei o tráfego não é etho (LAN) ou wlan0 (Wifi), digo especificamente que é a minha interface virbr0, ou seja, a interface de rede virtual (interna) pela qual meu laptop se comunica com meu servidor virtual (e vice-versa)
-p tcp : Eu especifico o protocolo, os mais usados são UDP e TCP, aqui bastou realmente não colocar isso mas ... costuma-se especificar o tipo de protocolo a aceitar
-s 192.168.122.88 : A fonte, fonte dos pacotes. Ou seja, a regra se refere a pacotes que vêm especificamente do IP 192.168.122.88
-j ACEITAR : Já aqui digo o que quero fazer com os pacotes que correspondem ao anterior, neste caso aceitar.
Ou seja, resumindo, vou aceitar pacotes que venham desse IP 192.168.122.88, mas caso queira inserir pacotes que venham desse IP MAS! Eles entram de uma interface que não é virbr0, ou seja, digamos que tentem inserir pacotes do IP 192.168.122.88 mas sejam de um computador da nossa rede Wifi, se for o caso os pacotes serão rejeitados. porque? Porque especificamos claramente que sim, aceitamos pacotes de 192.168.122.88 sim, mas e somente mas, eles também têm que entrar na interface virbr0 (interface de rede virtual interna), se os pacotes vierem de outra interface (LAN, RAS, Wifi, etc), então eles não serão aceitos. Especificando a interface como você pode ver, podemos restringi-la ainda mais, podemos ter um melhor controle sobre o que entra (ou não entra) em nosso computador.
Aceitando ping de qualquer IP do Wifi doméstico:
De algum outro computador que se conecta ao Wifi, se você tentar fazer ping no meu laptop, quero permitir. razão? A ideia também é que nas próximas semanas ligar o PC da casa ao lado da rede, então compartilhar informações ficaria menos complexo, mais fluido, quando eu começar a fazer testes para vincular o desktop ao Wifi, irei preciso fazer o ping do meu laptop para verificar a conectividade, se meu laptop não der ping de volta posso pensar que o AP está falhando, ou que ocorreu um erro ao acessar o Wifi, por isso quero permitir o ping.
sudo iptables -A INPUT -i wlo1 -p icmp -s 192.168.1.0/24 -d 192.168.1.51 -j ACCEPT
-A ENTRADA : O mesmo que antes, me refiro ao tráfego de entrada
-eu quero1 : Semelhante a antes. No caso anterior eu especifiquei a interface virtual, neste caso eu especifico outra interface, a do meu wifi: wlo1
-picmp : Protocolo Icmp, icmp = ping. Ou seja, não estou permitindo SSH ou algo semelhante, só permito ping (icmp)
-s 192.168.1.0/24 : A origem dos pacotes, ou seja, desde que os pacotes venham de um IP 192.168.1.? será aceito
-d192.168.1.51 : IP de destino, ou seja, meu IP.
-j ACEITAR : Indico o que fazer com os pacotes que correspondem ao anterior, aceito.
Isto é, e para explicar isso de uma forma corrente, eu aceito que eles me façam ping (protocolo icmp) cujo destino é especificamente meu IP, desde que venham de um IP como 192.168.1 .__ mas também, eles não podem vir de qualquer interface de rede, eles devem entrar especificamente na minha interface de rede Wifi (wlo1)
Aceite SSH apenas para um IP:
Às vezes preciso me conectar por SSH do meu smartphone para controlar o laptop, é por isso que devo permitir o acesso SSH ao meu laptop a partir dos IPs do meu Wifi, para isso:
sudo iptables -A INPUT -i wlo1 -p tcp -s 192.168.1.0/24 -d 192.168.1.51 --dport 22 -j ACCEPT
Desta linha a única coisa que é diferente ou que merece destaque é: –Dport 22 (Porta SSH que uso)
Ou seja, eu aceito tentativas de conexão ao meu laptop pela porta 22, desde que venham de qualquer IP do meu wifi, elas também devem ter meu IP como destino específico e também venham pela interface wlo1, ou seja, meu wifi (não a lan, etc)
Permitindo que eles vejam seu site:
Não é o meu caso, mas se algum de vocês tem um site hospedado e não deseja negar o acesso a ninguém, ou seja, que qualquer pessoa de qualquer lugar possa acessar aquele site, é muito mais simples do que você imagina:
sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT
Em outras palavras, aqui eles estão permitindo todo o tráfego de entrada (tcp) através da porta 80. Como você pode ver, eu não especifico de quais IPs ou rede eu permito o acesso, ao não especificar uma faixa de IP para permitir, o iptables assume que eu desejo permitir o acesso todos os intervalos de IP existentes, ou seja, para todo o mundo 🙂
Outras combinações:
Tenho muitas outras regras como, por exemplo, aceitar ping para IPs da minha LAN doméstica (para isso é basicamente a mesma linha acima, alterando os intervalos de IP), que é mais do mesmo que acabei de explicar acima ... no meu laptop como tal eu não uso coisas realmente complexas, de limitação de conexões, anti DDoS, deixo isso para os servidores, no meu laptop não preciso disso
Enfim, até agora o artigo.
Como você pode ver, trabalhar com iptables não é tão complexo de forma alguma, uma vez que você constrói um script no qual você escreve suas regras, é muito simples modificá-lo, adicionar ou remover regras de seu firewall.
Não me considero um especialista no assunto longe disso, apesar das dúvidas que possa ter, eles comentam aqui, tentarei ajudá-lo no máximo que puder.
lembranças
Muito bom, muito bem explicado, ótimo.
Eu amo esse tipo de postagem.
Muito obrigado por comentar 🙂
Este post foi uma dívida que eu tinha há muito tempo, é agradável e agradável no final poder saldá-la ^ _ ^
lembranças
uma pergunta você está em cuba?
… Acontece que há alguns dias usando um AP Linksys (Ponto de Acesso) coloquei um Wifi na casa da minha namorada
Sim, claro, nasci e moro em Cuba. por que a pergunta?
@FIXOCONN: Olá amigo e perdoe o offtopic da pergunta, mas como você define o Cinnamon para aparecer como um ambiente de desktop no user-agent? Eu uso o Mint 13 com o Cinnamon, mas de forma alguma faço com que o logotipo do Cinnamon apareça no meu user-agent toda vez que comento neste site
Você poderia ter a gentileza de me passar os detalhes do seu agente de usuário, se não for muito problema? Eu gostaria de saber esses dados para colocá-los sozinho =)
Deixo uma página para que você possa revisá-la e me dar as informações. Obrigado e administradores, perdoem o "trolling" (se você pode chamá-lo assim) da minha parte com esta informação -> http://user-agent-string.info/
Adicione "Canela" (sem as aspas) a qualquer parte do UserAgent, então o logotipo deve aparecer em comentários futuros 🙂
Muito bom o post! muito claro 😀
Obrigado por ler e obrigado pelo seu comentário 🙂
Obrigado! Isso realmente me ajuda muito!
Olá, antes de mais muitos parabéns pelo blog, acho ótimo.
Algo que convém mencionar é que a opção de logar com ULOG não funciona em sistemas operacionais que possuem ulogd2, para este caso a regra deveria ser:
sudo iptables -A INPUT -p tcp -m tcp –tcp-flags FIN, SYN, RST, ACK SYN -j NFLOG
Em primeiro lugar, muito obrigado pelo que você fala sobre o blog 🙂
No Arch tenho ulogd v2.0.2-2 instalado, e a linha que coloquei funciona sem problemas (tive que colocar um loglevel = 1 em /etc/ulogd.conf, mas leva os logs para outro arquivo sem problemas.
Usando ulogd v2 ou superior, a linha que deixei funciona incorretamente para você?
Saudações e obrigado por comentar.
Fiquei sempre esperando a segunda parte, lembro quando li a primeira (era minha iniciação nos firewalls). Obrigado @ KZKG ^ Gaara, cumprimentos 🙂
Obrigado por me ler 😀
E hehe sim, eu falei ... esse post foi uma dívida que eu tinha há muito tempo ^ _ ^
Saudações. Muito bom o post. Estou tentando configurar regras de iptables para redirecionar o tráfego do squid para o dansguardian e ainda não atingiu o objetivo. Eu apreciaria alguma ajuda a esse respeito.
iptables para isso? Isso não é feito diretamente com ACLs no Squid?
"Eu tenho muitas outras regras como .."
Isso é o que eu chamo de paranóia garoto
Um pouco mais e você coloca um pacote de Rotwailer em cada porta aberta do seu modem / roteador 🙂
HAHAHAHAHAHAHAHAHA Estou morrendo de rir com os rottwailers hahahaha
Saudações amigo, acontece que preciso de ajuda para configurar o IPTables de forma que negue o acesso apenas para a porta 80 quando digito o endereço no navegador dos meus servidores de nomes personalizados, ou seja, quando por exemplo digito ns1.mydomain.com e ns2.mydomain. com (que são meus servidores de nomes) IPtables negam acesso à porta 80 para que o navegador tente carregar a página, mas depois de um tempo ela expira e nunca carrega, acontece que eu já tentei com comandos como este:
iptables -A INPUT -d ns1.midomini.com -p tcp –dport 80 -j DROP
iptables -A INPUT -d ns2.midomini.com -p tcp –dport 80 -j DROP
Mas a única coisa que ele faz é negar a entrada na porta 80 em todos os meus domínios (já que eles estão compartilhando o mesmo IP do host virtual), quero que esteja apenas na url dos meus servidores de nomes e no IP para o qual meus servidores de nomes apontam, ou seja, as tabelas de IP negam acesso à porta 80 em:
ns1.midomini.com (Apontando A) -> 102.887.23.33
ns2.midomini.com (Apontando A) -> 102.887.23.34
e os IPs para os quais os servidores de nomes apontam
102.887.23.33
102.887.23.34
Um exemplo de empresa que possui este sistema é: Dreamhost
Seus servidores de nomes: ns1.dreamhost.com e ns2.dreamhost.com e os IPs para os quais eles apontam não respondem quando digitados na barra de endereços do navegador
Muito obrigado desde já pela atenção, gostaria muito que me ajudassem com isso, eu realmente preciso e com urgência !!
Bom Dia !!
Olá Ivan
Contate-me por e-mail (kzkggaara[at]desdelinux[ponto]net) para falar sobre isso com mais calma e explicar melhor, responderei amanhã sem falta (hoje estou passando por aqui)
O que você quer fazer é simples, não sei por que as linhas que você me diz não funcionam para você, deveriam, mas você tem que verificar os logs e outras coisas que seriam muito longas por aqui.
Saudações e espero seu email
teoricamente com o iptables eu poderia evitar solicitações de desconexão de programas como o aircrack. Estou certo??? Bem, eu vou fazer testes, mas se você me disser, você me deixaria muito feliz XDDD
Em teoria eu acho que sim, agora não sei como poderia ser feito, nunca fiz ... mas repito, em teoria, acho que poderia.
Depois de aplicar as regras de iptables, é impossível para mim acessar as pastas compartilhadas do Windows na rede local. Que regra devo aplicar para corrigir isso?
Obrigado.
Quais regras de iptables você aplicou?
Esta é a 2ª parte de "iptables for newbies", você leu a primeira? Eu pergunto para saber se você aplicou as regras que estavam no post anterior
Sim, li ambas as partes. Para o script, baseio-me em outro post que você postou sobre como iniciar regras com o systemd.
#! / Bin / bash
# - UTF 8 -
# Iptables binary
iptables = »/ usr / bin / iptables»
jogou fora ""
## Limpar tabelas ##
$ iptables -F
$ iptables -X
$ iptables -Z
#echo »- Feito FLUS para iptables» && echo »»
## Estabelecendo logs com ULOGD ##
$ iptables -A INPUT -p tcp -m tcp -tcp-flags FIN, SYN, RST, ACK SYN -j ULOG
## Definir política DROP padrão ##
$ iptables -P INPUT DROP
$ iptables -P FORWARD DROP
#echo »- Política DROP definida por padrão» && echo »»
## Permitir tudo para localhost ##
$ iptables -A INPUT -i lo -j ACEITAR
$ iptables -A SAÍDA -o lo -j ACEITAR
#echo »- Todos permitidos para localhost» && echo »»
## Permitir a entrada de pacotes de conexões que iniciei ##
$ iptables -A INPUT -m state –state ESTABELECIDO, RELACIONADO -j ACEITAR
#echo »- Pacotes de conexão permitidos iniciados por mim» && echo »»
jogou fora " ##############################"
echo »## IPTABLES CONFIGURADOS OK! ## »
jogou fora " ##############################"
Li na internet que para o samba você deve ter as seguintes regras no script:
$ iptables -A INPUT -p tcp –dport 139 -j ACEITAR
$ iptables -A INPUT -p tcp –dport 445 -j ACEITAR
$ iptables -A INPUT -p udp –sport 137 -j ACEITAR
$ iptables -A INPUT -p udp –dport 137 -j ACEITAR
$ iptables -A INPUT -p udp –dport 138 -j ACEITAR
Porém, nem mesmo com eles vejo grupos de trabalho do Windows. : S
Problema resolvido. Modifique o grupo de trabalho e os hosts permitem parâmetros no arquivo de configuração do samba.
Excelente artigo, ótimo !!!!
Acabei de ler e adoro a maneira como você o explica e o uso realmente útil do iptables, gostaria muito de aprender como usá-lo com mais profundidade.
Saudações e excelente artigo, espero que publique mais sobre Iptables! ^^
Querida;
Tenho um proxy com iptables e uma das minhas redes não consegue pingar http://www.google.cl por isso estou com as portas bloqueadas e tentando mil maneiras de abrir as portas e nada acontece. Se eu não consigo ping, não consigo conectar o Outlook
Parabéns pela postagem! Muito bom. Mas eu tenho uma pergunta. Às vezes, o endereço IP que é atribuído a você na rede pode mudar (se for verdade que poderíamos atribuir um IP aos nossos endereços MAC), mas existe a possibilidade com o Iptables permitir o acesso ao nosso servidor via SSH por endereço MAC?
Espero ter me explicado bem.
Saudações e muito obrigado!
Olá, você sabe que eu tinha um servidor linux configurado e depois de digitar esses comandos bloqueei tudo e perdi o acesso, consegui recuperar quase tudo mas estou faltando 2 coisas. * Não consigo mais acessar de um navegador web através do cname «servidor» se por ip, 10.10.10.5 e por outro lado não vejo os recursos compartilhados do windows explorer na rede, antes de colocar \\ servidor e viu todos os recursos compartilhados. Espero que você possa me ajudar, eu sei que é bobo mas não estou conseguindo resolver, obrigado
Cito literalmente:
'
Protocolo Icmp, icmp = ping. Ou seja, não estou permitindo SSH ou algo semelhante, só permito ping (icmp)
'
ICMP e PING não são iguais. O ping faz parte do protocolo ICMP, mas não é tudo. O protocolo ICMP (Internet Control Message Protocol) tem muitos outros usos, alguns deles com certos perigos. E você está aceitando todo o tráfego ICMP. Você teria que se restringir apenas ao ping.
Saludos!
Tenho que fazer um estágio, mas não entendo muito de iptables, você poderia me ajudar….
obrigado!!!!!!!