Um firewall filtra o tráfego que passar por ele, esse filtro seleciona o tráfego que será permitido / negado.
Para que o tráfego possa passar pelo seu gateway (nesse caso, o servidor Linux) é necessário que algumas regras sejam adicionas com o intuito de permitir que o mesmo possa ser encaminhado de uma interface a outra, devemos ainda levar em conta o fato que a rede da internet não terá rota para chegar a nossa rede local (10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16 - RFC 1918), portanto uma regra de tradução também deve ser criada.
Nesse caso, levaremos em conta que já possuímos uma comunicação com a internet e a interface que já consegue acesso a internet é a eth0 (poderia ser qualquer outra, mas nesse caso será a eth0).
O firewall que será usado nesta página será o iptables
Após os comandos abaixo o iptables estará apenas usando as regras vigentes nas politicas, se estiver conectado remotamente no server troque as políticas antes de zerar a configuração (todo o tráfego será liberado, casa saiba o que estava fazendo escolha entre INPUT ou OUTPUT):
iptables -P INPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -P OUTPUT ACCEPT
O primeiro passo é zerar a configuração atual para não correr o risco de encontrar problemas que não são seus:
iptables -F INPUT
iptables -F FORWARD
iptables -F OUTPUT
iptables -F POSTROUTING -t nat
Permitir a rede interna de acessar a internet
iptables -A INPUT -p tcp -s 169.254.0.0/24 –dport 80 -j ACCEPT #HTTP iptables -A INPUT -p tcp -s 169.254.0.0/24 –dport 443 -j ACCEPT #HTTPS iptables -A INPUT -p tcp -s 169.254.0.0/24 –dport 110 -j ACCEPT #POP iptables -A INPUT -p udp -s 169.254.0.0/24 –dport 53 -j ACCEPT #DNS iptables -A INPUT -p tcp -s 169.254.0.0/24 –dport 22 -j ACCEPT #SSH iptables -A INPUT -p tcp -s 169.254.0.0/24 –dport 21 -j ACCEPT #FTP iptables -A INPUT -p tcp -s 169.254.0.0/24 –dport 20 -j ACCEPT #FTP iptables -A INPUT -p tcp -s 169.254.0.0/24 –dport 23 -j ACCEPT #Telnet
Se necessário, tradução pra o endereço público - O famoso nat, esse comando faz com que a rede 192.168.0.0/24 seja escondida atrás do ip da interface eth0, da mesma maneira que um roteador faz quando te conecta a internet.
iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -o eth0 -j MASQUERADE
Protinho, para ver seu trabalho concluído digite
root@debian:/home/ragazzid# iptables -L
Chain INPUT (policy DROP)
target prot opt source destination
ACCEPT tcp -- link-local/24 anywhere tcp dpt:http
ACCEPT tcp -- link-local/24 anywhere tcp dpt:https
ACCEPT tcp -- link-local/24 anywhere tcp dpt:pop3
ACCEPT udp -- link-local/24 anywhere udp dpt:domain
ACCEPT tcp -- link-local/24 anywhere tcp dpt:ftp
ACCEPT tcp -- link-local/24 anywhere tcp dpt:ftp-data
ACCEPT tcp -- link-local/24 anywhere tcp dpt:telnet
ACCEPT tcp -- link-local/24 anywhere tcp dpt:ssh
ACCEPT icmp -- link-local/24 anywhere
Chain FORWARD (policy DROP)
target prot opt source destination
ACCEPT tcp -- link-local/24 anywhere
ACCEPT udp -- link-local/24 anywhere
ACCEPT icmp -- link-local/24 anywhere
Chain OUTPUT (policy DROP)
target prot opt source destination
ACCEPT tcp -- 192.168.150.0/24 anywhere
root@debian:/home/ragazzid# iptables -L -t nat
Chain PREROUTING (policy ACCEPT)
target prot opt source destination
Chain INPUT (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
Chain POSTROUTING (policy ACCEPT)
target prot opt source destination
MASQUERADE all -- link-local/24 anywhere
Mas cade as regras para o OUTPUT? As regras do OUPUT servem para permitir que dispositivos acessem o seu servidor ou que a conexão se inicie fora da rede local, no nosso caso não precisamos disso, porém você pode encontar algo sobre isso em Redes DMZ.