Enviado em 14/09/2012 - 14:36h
Boa tarde galera do VOL,
De um tempo para cá venho queimando uma boa quantidade de neurônios para criar um script de configuração para o iptables, que use uma política restritiva para as chains INPUT e FORWARD da tabela filter. Porém, devo estar deixando passar alguma coisa, pois ao executar o script os computadores da rede não conseguem ter acesso a internet.
Por usar a política restritiva de dropar tudo, exeto o que estiver explicitamente definido nas regras para aceitar, o firewall está barrando as conexões. Já tentei de tudo para liberar, porém não tive sucesso. E não quero ter de mudar a política para ACCEPT.
Obs: Pretendo rodar este firewall na máquina que faz o roteamento de pacotes. É o meu servidor DHCP, DNS, Samba, Proxy, ou seja, nada na rede acessa a internet sem passar por ela.
Peço que se alguém tiver alguma sugestão, por favor poste, segue o script:
#!/bin/bash
echo 1 > /proc/sys/net/ipv4/ip_forward #Habilita o suporte a redirecionamento de pacotes no kernel.
echo 1 > /proc/sys/net/ipv4/tcp_syncookies #Habilita a proteção contra Syn-flood
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT
# Tabela nat
iptables -t nat -P PREROUTING ACCEPT
iptables -t nat -P OUTPUT ACCEPT
iptables -t nat -P POSTROUTING ACCEPT
iptables -t mangle -P PREROUTING ACCEPT
iptables -t mangle -P OUTPUT ACCEPT
# Tabela filter #
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
##### Chain INPUT #####
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
# Aceita todo o tráfego vindo do loopback e indo pro loopback
iptables -A INPUT -i lo -j ACCEPT
# Todo tráfego vindo da rede interna também é aceito
iptables -A INPUT -s 10.0.1.0/24 -i eth0 -j ACCEPT
# Aceita todas as conexoes ja estabelecidas
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
#liberar ping
iptables -A INPUT -p icmp -m limit --limit 2/s -j ACCEPT
#Aceita o tráfego das portas necessárias
iptables -A INPUT -p tcp --dport 80 -j ACCEPT #http
iptables -A INPUT -p udp -s 10.0.1.0/24 --dport 53 -j ACCEPT #DNS
iptables -A INPUT -p tcp -s 10.0.1.0/24 --dport 53 -j ACCEPT #DNS
iptables -A INPUT -p udp -s 10.0.1.0/24 --sport 53 -j ACCEPT #DNS
iptables -A INPUT -p tcp -s 10.0.1.0/24 --sport 53 -j ACCEPT #DNS
iptables -A INPUT -p tcp --dport 443 -j ACCEPT #https
iptables -A INPUT -p tcp --dport 5901 -j ACCEPT
iptables -A INPUT -p tcp --dport 5900 -j ACCEPT
iptables -A INPUT -p tcp --dport 587 -j ACCEPT
iptables -A INPUT -p tcp --dport 8081 -j ACCEPT
iptables -A INPUT -p tcp --dport 8080 -j ACCEPT
##### Chain FORWARD ####
iptables -A FORWARD -m state --state RELATED,ESTABLISHED -p tcp ! --dport 443 -j ACCEPT
iptables -I FORWARD -p tcp --dport 80 -j ACCEPT #http
iptables -I FORWARD -p tcp -s 10.0.1.0/24 --dport 53 -j ACCEPT #DNS
iptables -I FORWARD -p tcp -s 10.0.1.0/24 --sport 53 -j ACCEPT #DNS
iptables -I FORWARD -p tcp --dport 3017 -j ACCEPT #PinPad
iptables -I FORWARD -p tcp --dport 587 -j ACCEPT #
iptables -I FORWARD -p tcp --dport 8081 -j ACCEPT #
iptables -I FORWARD -p tcp --dport 8080 -j ACCEPT #
iptables -I FORWARD -p udp --dport 80 -j ACCEPT #www
iptables -I FORWARD -p udp -s 10.0.1.10/24 --dport 53 -j ACCEPT #DNS
iptables -I FORWARD -p udp -s 10.0.1.10/24 --sport 53 -j ACCEPT #DNS
iptables -I FORWARD -p udp --dport 3017 -j ACCEPT #PinPad
iptables -I FORWARD -p udp --dport 587 -j ACCEPT #
iptables -I FORWARD -p udp --dport 8081 -j ACCEPT #
iptables -I FORWARD -p udp --dport 8080 -j ACCEPT #
##Libera sites do HTTPS
iptables -A FORWARD -d 65.55.0.0/16 -j ACCEPT #hotmail
iptables -A FORWARD -d 74.125.229.0/24 -j ACCEPT #google
iptables -A FORWARD -d 74.125.45.84 -j ACCEPT #accounts.google.com
iptables -A FORWARD -d 189.28.143.98 -j ACCEPT #cadastro.sus.gov.br
iptables -A FORWARD -d 201.3.168.36 -j ACCEPT #unicrednet.e-unicred.com.br
iptables -A FORWARD -d 200.152.33.1 -j ACCEPT #granulito.mte.gov.br
iptables -A FORWARD -d 98.139.237.162 -j ACCEPT #yahoo.com
# Tabela nat #
##### Chain PREROUTING #####
#Redireciona tudo da porta 80 para a 3128 pro Proxy
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 3128
##### Chain POSTROUTING #####
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
# Permite qualquer conexão vinda com destino a lo e rede local para eth0
iptables -t nat -A POSTROUTING -o lo -j ACCEPT
iptables -t nat -A POSTROUTING -s 10.0.1.0/24 -o eth0 -j ACCEPT
Obs2: Peço desculpas caso esteja cometendo alguma falha boba, pois não sou muito experiente na área.
Obrigado pela atenção
De um tempo para cá venho queimando uma boa quantidade de neurônios para criar um script de configuração para o iptables, que use uma política restritiva para as chains INPUT e FORWARD da tabela filter. Porém, devo estar deixando passar alguma coisa, pois ao executar o script os computadores da rede não conseguem ter acesso a internet.
Por usar a política restritiva de dropar tudo, exeto o que estiver explicitamente definido nas regras para aceitar, o firewall está barrando as conexões. Já tentei de tudo para liberar, porém não tive sucesso. E não quero ter de mudar a política para ACCEPT.
Obs: Pretendo rodar este firewall na máquina que faz o roteamento de pacotes. É o meu servidor DHCP, DNS, Samba, Proxy, ou seja, nada na rede acessa a internet sem passar por ela.
Peço que se alguém tiver alguma sugestão, por favor poste, segue o script:
#!/bin/bash
echo 1 > /proc/sys/net/ipv4/ip_forward #Habilita o suporte a redirecionamento de pacotes no kernel.
echo 1 > /proc/sys/net/ipv4/tcp_syncookies #Habilita a proteção contra Syn-flood
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT
# Tabela nat
iptables -t nat -P PREROUTING ACCEPT
iptables -t nat -P OUTPUT ACCEPT
iptables -t nat -P POSTROUTING ACCEPT
iptables -t mangle -P PREROUTING ACCEPT
iptables -t mangle -P OUTPUT ACCEPT
# Tabela filter #
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
##### Chain INPUT #####
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
# Aceita todo o tráfego vindo do loopback e indo pro loopback
iptables -A INPUT -i lo -j ACCEPT
# Todo tráfego vindo da rede interna também é aceito
iptables -A INPUT -s 10.0.1.0/24 -i eth0 -j ACCEPT
# Aceita todas as conexoes ja estabelecidas
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
#liberar ping
iptables -A INPUT -p icmp -m limit --limit 2/s -j ACCEPT
#Aceita o tráfego das portas necessárias
iptables -A INPUT -p tcp --dport 80 -j ACCEPT #http
iptables -A INPUT -p udp -s 10.0.1.0/24 --dport 53 -j ACCEPT #DNS
iptables -A INPUT -p tcp -s 10.0.1.0/24 --dport 53 -j ACCEPT #DNS
iptables -A INPUT -p udp -s 10.0.1.0/24 --sport 53 -j ACCEPT #DNS
iptables -A INPUT -p tcp -s 10.0.1.0/24 --sport 53 -j ACCEPT #DNS
iptables -A INPUT -p tcp --dport 443 -j ACCEPT #https
iptables -A INPUT -p tcp --dport 5901 -j ACCEPT
iptables -A INPUT -p tcp --dport 5900 -j ACCEPT
iptables -A INPUT -p tcp --dport 587 -j ACCEPT
iptables -A INPUT -p tcp --dport 8081 -j ACCEPT
iptables -A INPUT -p tcp --dport 8080 -j ACCEPT
##### Chain FORWARD ####
iptables -A FORWARD -m state --state RELATED,ESTABLISHED -p tcp ! --dport 443 -j ACCEPT
iptables -I FORWARD -p tcp --dport 80 -j ACCEPT #http
iptables -I FORWARD -p tcp -s 10.0.1.0/24 --dport 53 -j ACCEPT #DNS
iptables -I FORWARD -p tcp -s 10.0.1.0/24 --sport 53 -j ACCEPT #DNS
iptables -I FORWARD -p tcp --dport 3017 -j ACCEPT #PinPad
iptables -I FORWARD -p tcp --dport 587 -j ACCEPT #
iptables -I FORWARD -p tcp --dport 8081 -j ACCEPT #
iptables -I FORWARD -p tcp --dport 8080 -j ACCEPT #
iptables -I FORWARD -p udp --dport 80 -j ACCEPT #www
iptables -I FORWARD -p udp -s 10.0.1.10/24 --dport 53 -j ACCEPT #DNS
iptables -I FORWARD -p udp -s 10.0.1.10/24 --sport 53 -j ACCEPT #DNS
iptables -I FORWARD -p udp --dport 3017 -j ACCEPT #PinPad
iptables -I FORWARD -p udp --dport 587 -j ACCEPT #
iptables -I FORWARD -p udp --dport 8081 -j ACCEPT #
iptables -I FORWARD -p udp --dport 8080 -j ACCEPT #
##Libera sites do HTTPS
iptables -A FORWARD -d 65.55.0.0/16 -j ACCEPT #hotmail
iptables -A FORWARD -d 74.125.229.0/24 -j ACCEPT #google
iptables -A FORWARD -d 74.125.45.84 -j ACCEPT #accounts.google.com
iptables -A FORWARD -d 189.28.143.98 -j ACCEPT #cadastro.sus.gov.br
iptables -A FORWARD -d 201.3.168.36 -j ACCEPT #unicrednet.e-unicred.com.br
iptables -A FORWARD -d 200.152.33.1 -j ACCEPT #granulito.mte.gov.br
iptables -A FORWARD -d 98.139.237.162 -j ACCEPT #yahoo.com
# Tabela nat #
##### Chain PREROUTING #####
#Redireciona tudo da porta 80 para a 3128 pro Proxy
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 3128
##### Chain POSTROUTING #####
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
# Permite qualquer conexão vinda com destino a lo e rede local para eth0
iptables -t nat -A POSTROUTING -o lo -j ACCEPT
iptables -t nat -A POSTROUTING -s 10.0.1.0/24 -o eth0 -j ACCEPT
Obs2: Peço desculpas caso esteja cometendo alguma falha boba, pois não sou muito experiente na área.
Obrigado pela atenção