Firewall não funciona como esperado

1. Firewall não funciona como esperado

Leonardo Bolognesi
leonardonhesi

(usa Debian)

Enviado em 25/08/2011 - 16:54h

Bom preciso de uma ajuda do pessoal mais esperiente estou com um servidor rodando DEBIAN6 64bits dedicado a ser nosso firewall e proxy e balanceamento de carga faz tres semanas que estou parado na hora de configurar o firewall se alguem quiser e puder me ajudar segue meu script:
iniciar () {
#!/bin/sh
### BEGIN INIT INFO
# Provides: Fw-cxxxxxxx
# Required-Start:
# REquired-Stop:
# Default-Start: 2
# Default-Stop: 0 1 6
# Short-Description: Start daemon at boot time
# Description: Enable service provide by daemon
### END INIT INFO

#VARIAVEIS DEFINEM CONFIGURAÇÕES DE REDE

#QUANDO MUDAR QUALQUER ENDEREÇO DE IP NÂO ESQUECER DE MUDAR TAMBEM NO (/etc/squid/squid.conf)
#POIS LA TEMOS UMA REFERENCIA A ESTES ENDEREÇOS

#TELEFONICA#
IP0=189.XXX.XXX.X
GW0=189.XXX.XXX.X
NET0=189.XXX.XXX.X/24
BCAST0=189.XXX.XXX.255
IFACE0=eth0

#EMBRATEL#
IP1=201.xxx.xxx.xxx
GW1=201.xxx.xxx.xxx
NET1=201.xxx.xxx.xxx/xx
BCAST1=201.xxx.xxx.xxx
IFACE1=eth1

#REDE LOCAL#
IP2=192.168.1.1
NET2=192.168.1.1/24
BCAST2=192.168.1.255
IFACE2=eth2

set -x
#ZERA AS CONFIGURAÇÔES DO FIREWALL#
iptables -F
iptables -t nat -F
iptables -t mangle -F
iptables -X
iptables -t nat -X
iptables -t mangle -X

#DEFINE POLITICAS PADRÂO DO FIREWALL
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT

#CARREGA OS MODULOS NECESSARIOS AO IPTABLES
modprobe ip_tables
modprobe iptable_nat
modprobe iptable_mangle
modprobe ip_conntrack

#ATIVA REPASSE DE PACOTE POSSIBILANDO ROTEAMENTO ENTRE INTERFACES
echo "1" > /proc/sys/net/ipv4/ip_forward

##LIBERA ACESSO A REDE LOCAL##
iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -i 127.0.0.1 -j ACCEPT


##MASCARAMENTO DOS PACOTES##
#todos os pacotes depois de serem roteados recebem o endereço da interface de
#saida
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
iptables -t nat -A POSTROUTING -o eth1 -j MASQUERADE

#APLICA REGRA DE CONEXÂO ESTABELECIDA
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT


# BLOQUEIA O ACESSO DOS IPS BANIDOS DE ACORDO COM A LISTA (/etc/ips_banidos)
for ip in `cat /etc/ips_banidos`
do
iptables -t nat -A PREROUTING -i $IFACE2 -s $ip -j DROP
iptables -A INPUT -i $IFACE2 -s $ip -j DROP
iptables -A FORWARD -i $IFACE2 -s $ip -j DROP
done

##ABRE CONSULTA DNS NO SERVIDOR LOCAL##
iptables -A INPUT -s 192.168.1.0/24 -i $IFACE2 -p udp --dport 53 -j ACCEPT
iptables -A INPUT -s 192.168.1.0/24 -i $IFACE2 -p tcp --dport 53 -j ACCEPT
iptables -A INPUT -i $IFACE0 -j DROP
iptables -A INPUT -i $IFACE1 -j DROP

##ATIVAR O PROXY TRANSPARENTE##
iptables -t nat -A PREROUTING -i $IFACE2 -p tcp -d 0/0 --dport 80 -j REDIRECT --to-port 3128
iptables -A INPUT -i $IFACE2 -p tcp --dport 3128 -j ACCEPT
#RETORNO PROXY#

iptables -A FORWARD -p tcp -i $IFACE2 --dport 443 -j ACCEPT

iptables -A FORWARD -p tcp -i $IFACE2 --dport 110 -j ACCEPT

iptables -A FORWARD -p tcp -i $IFACE2 --dport 25 -j ACCEPT


##PERMITE CONEXÔES SERVIÇOS ADMNISTRAÇÂO SERVIDOR##
#SSH
iptables -A INPUT -i $IFACE2 -s 192.168.1.207 -p tcp --dport 22 -j ACCEPT
iptables -A INPUT -i $IFACE0 -p tcp --dport 22 -j DROP
iptables -A INPUT -i $IFACE1 -p tcp --dport 22 -j DROP
#
iptables -A INPUT -s 192.168.1.207 -i $IFACE2 -p udp --dport 161 -j ACCEPT
iptables -A INPUT -i $IFACE0 -p udp --dport 161 -j DROP
iptables -A INPUT -i $IFACE1 -p udp --dport 161 -j DROP


########## PRIORIDADES NO ACESSO #####################################
#COLOCA PRIORIDADE
iptables -t mangle -A PREROUTING -s 200.XXX.XXX.XXX -d 192.168.1.12/24 -j TOS --set-tos 16
iptables -t mangle -A OUTPUT -o $IFACE0 -s 192.168.1.12/24 -d 200.XXX.XXX.XXX -j TOS --set-tos 16
iptables -t mangle -A OUTPUT -o $IFACE1 -s 192.168.1.12/24 -d 200.XXX.XXX.XXX -j TOS --set-tos 16
#COLOCA PRIORIDADE 8 NOS ACESSOS DE E_MAIL
#E_MAIL#
#ENTRADA#
iptables -t mangle -A PREROUTING -i $IFACE0 -p tcp --sport 25 -j TOS --set-tos 8
iptables -t mangle -A PREROUTING -i $IFACE0 -p tcp --sport 110 -j TOS --set-tos 8
iptables -t mangle -A PREROUTING -i $IFACE1 -p tcp --sport 25 -j TOS --set-tos 8
iptables -t mangle -A PREROUTING -i $IFACE1 -p tcp --sport 110 -j TOS --set-tos 8
iptables -t mangle -A PREROUTING -i $IFACE2 -p tcp --sport 25 -j TOS --set-tos 8
iptables -t mangle -A PREROUTING -i $IFACE2 -p tcp --sport 110 -j TOS --set-tos 8
#SAIDA#
iptables -t mangle -A OUTPUT -o $IFACE0 -p tcp --dport 25 -j TOS --set-tos 8
iptables -t mangle -A OUTPUT -o $IFACE0 -p tcp --dport 110 -j TOS --set-tos 8
iptables -t mangle -A OUTPUT -o $IFACE1 -p tcp --dport 25 -j TOS --set-tos 8
iptables -t mangle -A OUTPUT -o $IFACE1 -p tcp --dport 110 -j TOS --set-tos 8
iptables -t mangle -A OUTPUT -o $IFACE2 -p tcp --dport 25 -j TOS --set-tos 8
iptables -t mangle -A OUTPUT -o $IFACE2 -p tcp --dport 110 -j TOS --set-tos 8
########################################################################


##REDIRECIONAMENTO DE PORTAS

####
#
iptables -t nat -A PREROUTING -p tcp --dport 1234 -j LOG --log-prefix "TOTVS"
iptables -A FORWARD -p tcp --sport 1234 -j ACCEPT
iptables -A FORWARD -p tcp --dport 1234 -j ACCEPT
iptables -t nat -A PREROUTING -i $IFACE0 -p tcp --dport 1234 -j DNAT --to-destination 192.168.1.210:1234
iptables -t nat -A PREROUTING -i $IFACE1 -p tcp --dport 1234 -j DNAT --to-destination 192.168.1.210:1234

## MARCAMOS OS PACOTES DE ACORDO PORTA DE DESTINO
iptables -t mangle -A PREROUTING -i $IFACE2 -p tcp --dport 25 -j MARK --set-mark 2
iptables -t mangle -A PREROUTING -i $IFACE2 -p tcp --dport 110 -j MARK --set-mark 2
iptables -t mangle -A OUTPUT -p tcp --dport 25 -j MARK --set-mark 2
iptables -t mangle -A OUTPUT -p tcp --dport 110 -j MARK --set-mark 2

#Marcar pacote das conexões
iptables -t mangle -A PREROUTING -i $IFACE2 -p tcp --dport 1234 -J MARK --set-mark 4
iptables -t mangle -A OUTPUT -p tcp -d 200.XXX.XXX.XXX -j MARK --set-mark 4


#NO COMEÇO LOG DE TODOS OS BLOQUEIOS
#iptables -A INPUT -j LOG --log-prefix "Bloqueio-INPUT"
iptables -A FORWARD -j LOG --log-prefix "Bloqueio-FORWARD"


#IMPEDE INICIAR CONEXÂO DE FORA esta não faz parte da regra
#iptables -A INPUT -p tcp --syn -j DROP

######### ROTAS E REGRAS ############

#CASO NECESSARIO DESABILITAR RP_FILTER
echo "0" > /proc/sys/net/ipv4/conf/all/rp_filter

#ELIMINA AS ROTAS DEFAULT#
ip route del default
ip route del default

#DEFINE O TEMPO QUE O KERNEL TENTA UTILIZAR UMA ROTA QUE NÃO RESPONDE (SEGUNDOS)
#PASSANDO PARA OUTRA ROTA FUNCIONAL
echo "5" > /proc/sys/net/ipv4/route/gc_timeout


## REGRAS E ROTAS DAS TABELAS DISPONIVEIS A UTILIZAÇÂO (EMBRATEL e TELEFONICA)

ip route add $NET0 dev $IFACE0 src $IP0 table TELEFONICA
ip route add $IP2 dev $IFACE2 table TELEFONICA
ip route add default via $GW0 dev $IFACE0 table TELEFONICA

ip route add $NET1 dev $IFACE1 src $IP1 table EMBRATEL
ip route add $IP2 dev $IFACE2 table EMBRATEL
ip route add default via $GW1 dev $IFACE1 table EMBRATEL
ip rule add fwmark 2 table EMBRATEL
ip rule add fwmark 4 table EMBRATEL

ip route add default nexthop via $GW0 dev $IFACE0 weight 1 nexthop via $GW1 dev $IFACE1 weight 1

ip route flush cache

exit 0
}

parar(){
iptables -F
iptables -t nat -F
iptables -t mangle -F
iptables -X
iptables -t nat -X
iptables -t mangle -X
iptables -P INPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -P OUTPUT ACCEPT
ip rule del lookup EMBRATEL
ip rule del lookup TELEFONICA
ip route del 189.XXX.XXX.XXX/24 &> /dev/null
ip route del 201.XXX.XXX.XXX &> /dev/null
ip route flush table EMBRATEL
ip route flush table TELEFONICA
ip route flush cache dev eth0
ip route flush cache dev eth1
ip route flush cache
}

case "$1" in
"start") iniciar ;;
"stop") parar ;;
"restart") parar; iniciar ;;
*) echo "Use os parametros start ou stop"
esac
###FIM#####

Enfim passei noites pensando e estudando sobre o assunto esgotei minhas possibilidade tudo isso só funciona se coloco as seguintes linhas:
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
mas com estas linhas o SSH fica aberto para internet o servidor aceita consulta de DNS da internet sem estas linhas nada funciona estas linhas são para liberar os retornos e respostas mas por que abre o DNS e SSH.

Quem puder analizar e dar um paupite troco por um scritzinho de failover que testa as interfaces com ping e muda o gw quando alguma deixa de funcionar se voltar reestabelece o balanceamento tambem grava em log todas as alterações nas interfaces (quando parou quando voltou) caso seja de interesse

Obrigado a todos

olha a saida nmap
22/tcp open ssh
25/tcp closed smtp
53/tcp open domain
80/tcp open http
110/tcp closed pop3
443/tcp closed https
987/tcp open unknown
1234/tcp open hotline




  


2. Re: Firewall não funciona como esperado

Evandro Nabor
evandronabor

(usa Debian)

Enviado em 25/08/2011 - 19:02h

Cara posso te dar uma dica?
Sempre utilizei FWBuilder para montar firewalls e nunca tive problemas.
O FWBuilder te poupa muita dor de cabeça com sitaxe do iptables, ele é uma interface grafica para o iptables dentre outros.
É só instalar e usar, muito simples e intuitivo.
Recomendo.






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts