Criando um firewall simples e compartilhando a conexão usando o IPtables
Este artigo aborda o processo de criação de um firewall baseado no iptables, onde o administrador de sistemas poderá bloquear acesso à portas desnecessárias, compartilhar a conexão do servidor com sua rede interna e redirecionar portas.
Parte 4: Direcionando portas para hosts da rede interna
Vamos agora a um último passo que é fowardar certas portas para os hosts
da rede interna. Isso permite que você rode um servidor de FTP ou crie um
servidor de Counter Strike por exemplo em qualquer um dos micros da rede
e não apenas no servidor que está diretamente conectado à internet.
O servidor simplesmente direciona todas as requisições recebidas na porta para o micro especificado, de forma transparente. Também aprendemos a fazer isso no Coyote, lembra? Mas ele utiliza o ipchains, uma versão antiga do firewall, por isso os comandos são diferentes.
O foward de portas também usa o Nat, por isso você também deve carregar o módulo caso não tenha feito anteriormente:
# modprobe iptable_nat
Em seguida vem as regras para fazer o foward da porta. Neste caso estou direcionando a porta 22 (do SSH) na conexão com a internet (eth0) para o micro 192.168.0.2 da rede local:
# iptables -t nat -A PREROUTING -i etho -p tcp --dport 22 -j DNAT --to-dest 192.168.0.2
iptables -A FORWARD -p tcp -i eth0 --dport 22 -d 192.168.0.2 -j ACCEPT
Basta alterar a regra, adicionando a porta e a máquina da rede interna para onde ela deve ser redirecionada. Se você acessa via modem, basta substituir o "eth0" em ambas as linhas por "ppp0". Esta regra pode ser usada em conjunto com as anteriores, mas deve ir sempre logo no início do arquivo, antes das regras para compartilhar a conexão e, claro, antes das regras para fechar tudo :-)
Você pode repetir o comando várias vezes para direcionar várias portas diferentes para várias máquinas. Naturalmente uma mesma porta não pode ser fowardada duas vezes.
Também é possível fowardar ranges de portas. No Unreal Tournament por exemplo, você precisa abrir as portas UDP 7777, 7778 e 7779, neste caso as regras seriam:
iptables -t nat -A PREROUTING -i eth0 -p udp --dport 7777:7779 -j DNAT --to-dest 192.168.0.2
iptables -A FORWARD -p udp -i eth0 --dport 7777:7779 -d 192.168.0.2 -j ACCEPT
No bittorrent, que usa as portas tcp de 6881 a 6889 (ele tenta uma a uma até achar uma disponível) a regra seria:
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 6881:6889 -j DNAT --to-dest 192.168.0.2
iptables -A FORWARD -p tcp -i eth0 --dport 6881:6889 -d 192.168.0.2 -j ACCEPT
Neste link você encontra uma longa lista de portas usadas por vários aplicativos e jogos. Basta fowardá-las no servidor para que os clientes da rede interna possam utilizá-los normalmente. A limitação neste caso é que apenas um cliente pode usar cada porta de cada vez, mas em alguns casos o aplicativo é programado para escutar em várias portas simultaneamente (como no caso do bittorrent) e basta distribuir as portas usadas entre os clientes da rede.
http://www.practicallynetworked.com/sharing/app_port_list.htm
Evite abrir muitas portas no seu firewall, abra apenas as portas de que você realmente precisar e sempre termine o script com o iptables -A INPUT -p tcp --syn -j DROP para esconder todas as demais. Os famosos "buracos" no firewall surgem justamente de portas abertas que direcionam para programas ou máquinas vulneráveis. Você direciona a porta 1022 para um micro da rede interna com uma versão desatualizada do SSH, o invasor obtém acesso a ela e a partir daí tem uma base para lançar ataques contra outros micros da rede local, ataques muito mais efetivos diga-se de passagem, pois serão feitos de dentro, onde sua rede é vulnerável.
O servidor simplesmente direciona todas as requisições recebidas na porta para o micro especificado, de forma transparente. Também aprendemos a fazer isso no Coyote, lembra? Mas ele utiliza o ipchains, uma versão antiga do firewall, por isso os comandos são diferentes.
O foward de portas também usa o Nat, por isso você também deve carregar o módulo caso não tenha feito anteriormente:
# modprobe iptable_nat
Em seguida vem as regras para fazer o foward da porta. Neste caso estou direcionando a porta 22 (do SSH) na conexão com a internet (eth0) para o micro 192.168.0.2 da rede local:
# iptables -t nat -A PREROUTING -i etho -p tcp --dport 22 -j DNAT --to-dest 192.168.0.2
iptables -A FORWARD -p tcp -i eth0 --dport 22 -d 192.168.0.2 -j ACCEPT
Basta alterar a regra, adicionando a porta e a máquina da rede interna para onde ela deve ser redirecionada. Se você acessa via modem, basta substituir o "eth0" em ambas as linhas por "ppp0". Esta regra pode ser usada em conjunto com as anteriores, mas deve ir sempre logo no início do arquivo, antes das regras para compartilhar a conexão e, claro, antes das regras para fechar tudo :-)
Você pode repetir o comando várias vezes para direcionar várias portas diferentes para várias máquinas. Naturalmente uma mesma porta não pode ser fowardada duas vezes.
Também é possível fowardar ranges de portas. No Unreal Tournament por exemplo, você precisa abrir as portas UDP 7777, 7778 e 7779, neste caso as regras seriam:
iptables -t nat -A PREROUTING -i eth0 -p udp --dport 7777:7779 -j DNAT --to-dest 192.168.0.2
iptables -A FORWARD -p udp -i eth0 --dport 7777:7779 -d 192.168.0.2 -j ACCEPT
No bittorrent, que usa as portas tcp de 6881 a 6889 (ele tenta uma a uma até achar uma disponível) a regra seria:
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 6881:6889 -j DNAT --to-dest 192.168.0.2
iptables -A FORWARD -p tcp -i eth0 --dport 6881:6889 -d 192.168.0.2 -j ACCEPT
Neste link você encontra uma longa lista de portas usadas por vários aplicativos e jogos. Basta fowardá-las no servidor para que os clientes da rede interna possam utilizá-los normalmente. A limitação neste caso é que apenas um cliente pode usar cada porta de cada vez, mas em alguns casos o aplicativo é programado para escutar em várias portas simultaneamente (como no caso do bittorrent) e basta distribuir as portas usadas entre os clientes da rede.
http://www.practicallynetworked.com/sharing/app_port_list.htm
Evite abrir muitas portas no seu firewall, abra apenas as portas de que você realmente precisar e sempre termine o script com o iptables -A INPUT -p tcp --syn -j DROP para esconder todas as demais. Os famosos "buracos" no firewall surgem justamente de portas abertas que direcionam para programas ou máquinas vulneráveis. Você direciona a porta 1022 para um micro da rede interna com uma versão desatualizada do SSH, o invasor obtém acesso a ela e a partir daí tem uma base para lançar ataques contra outros micros da rede local, ataques muito mais efetivos diga-se de passagem, pois serão feitos de dentro, onde sua rede é vulnerável.
liberei a porta 80,21 que possuo um servidor apache
e um proftp do mais novo que tem no site
a pergunta e a seguinte agora quero liberar a porta 3128
para a rede interna e nao liberar para a rede externa?
# iptables -A INPUT -p tcp --destination-port 80 -j ACCEPT
# iptables -A INPUT -p tcp --destination-port 21 -j ACCEPT
# iptables -A INPUT -p tcp --syn -s 192.168.0.0/255.255.255.0 -j ACCEPT
# iptables -A INPUT -p tcp --syn -j DROP