Firewall e E-mail em servidores diferentes

Iniciado por luis.sch, 05 de Novembro de 2012, 08:58

tópico anterior - próximo tópico

luis.sch

Bom dia amigos

Estou configurando um firewall novo, e preciso fazer com que esse firewall encaminhe as requisições de e-mail para um outro servidor, que fica na rede interna e não tem ip público válido.

Alguém poderia me dar uma luz quanto as regras que preciso incluir no iptables?

zekkerj

O que vc chama de "requisições de email"? E de onde elas estão vindo, da rede interna ou da internet?
Pesquise antes de perguntar, sua dúvida pode já ter sido respondida.
Não respondo dúvidas por MP, coloque sua dúvida no fórum onde ela pode ser pesquisada pelos seus colegas!
Não venha ao fórum apenas para perguntar. Se você sabe a resposta de um problema, porque não ajudar seu colega? ;D

luis.sch

Eu preciso fazer os clientes conectarem ao servidor de e-mail (Outlook, Thuderbird, etc...), preciso receber os e-mails de fora da rede e enviar e-mails para fora e para os internos. Isso eu chamo de "requisições de e-mail".

zekkerj

Pesquise antes de perguntar, sua dúvida pode já ter sido respondida.
Não respondo dúvidas por MP, coloque sua dúvida no fórum onde ela pode ser pesquisada pelos seus colegas!
Não venha ao fórum apenas para perguntar. Se você sabe a resposta de um problema, porque não ajudar seu colega? ;D


luis.sch

A minha grande dúvida mesmo é o iptables.
Que regras eu adiciono no script para redirecionar para o servidor de e-mail...

zekkerj

Você já tem alguma coisa feita desse script?

Se a sua intenção é redirecionar apenas o emails entrantes, em teoria bastaria redirecionar a porta 25/tcp pro endereço do servidor na rede interna. Mas isso pode mudar, conforme os serviços que vc já tenha ativos.
Pesquise antes de perguntar, sua dúvida pode já ter sido respondida.
Não respondo dúvidas por MP, coloque sua dúvida no fórum onde ela pode ser pesquisada pelos seus colegas!
Não venha ao fórum apenas para perguntar. Se você sabe a resposta de um problema, porque não ajudar seu colega? ;D

luis.sch

O script do firewall é esse


#!/bin/sh

#### Definicoes de variaveis #######
#### Interface externa - Conexao com a internet ####
IFEXT="eth1"

#### Interface interna - Conexao com a rede local ####
IFLCL="eth0"

#### Definindo o caminho do iptables ####
IPT=`which iptables`

#### Rede interna ####
NTW="10.0.0.0/24"

#### IP Interno ####
IPINT="10.0.0.1"

#### IP E-mail ####
IPZIM="10.0.0.6"

#### IP SMTP ####
IPSMT="10.0.0.2"

#### IP SAPL ####
IPSAP="10.0.0.5"

#### IP Externo ####
IPEXT="177.54.11.146"

#### Mostrando a versao ####
$IPT -V
echo  ""

iptables_up(){

        #### Modulos de mascaramento ####

        modprobe iptable_nat
        modprobe ip_nat_ftp
        modprobe ip_conntrack
        modprobe ip_conntrack_ftp


        #### Ativa o roteamento de pacotes ####

        echo 1 > /proc/sys/net/ipv4/ip_forward
        echo 1 > /proc/sys/net/ipv4/tcp_syncookies
        echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts
        echo 1 > /proc/sys/net/ipv4/icmp_ignore_bogus_error_responses


        #### Limpando regras ####

        echo -n "Cleaning current rules... "
        $IPT -F
        $IPT -F -t nat
        $IPT -F -t mangle
        $IPT -X
        $IPT -X -t nat
        $IPT -X -t mangle
        $IPT -Z -t nat
        $IPT -Z -t mangle
        echo "Ok"


        #### Politicas padrao ####

        echo -n "Setting default policies (DROP)... "
        $IPT -P INPUT DROP
        $IPT -P FORWARD DROP
        $IPT -P OUTPUT ACCEPT
        echo "Ok"

        #### Proxy transparente ####
        echo -n "Setting transparent proxy... "
        $IPT -t nat -A PREROUTING -i $IFLCL -p tcp --dport 80 -j REDIRECT --to-port 8787
        $IPT -t nat -A PREROUTING -i $IFLCL -p udp --dport 80 -j REDIRECT --to-port 8787
        #### Conectividade Social ####
        $IPT -t nat -A PREROUTING -p tcp -d 200.201.0.0/16 -j ACCEPT
        #### Tráfego para servidor de E-mail (vai sair depois)####
        $IPT -t nat -A PREROUTING -p tcp --dport 25 -j DNAT --to $IPSMT:25
        echo "Ok"

        #### NAT de saida ####

        echo -n "Setting source nat... "
        #### IP's sem limite ####
        for IP in `cat /etc/init.d/ips`; do
                $IPT -A POSTROUTING -t nat -o $IFEXT -s $IP/32 -j SNAT --to $IPEXT
        done

        ### Portas liberadas ####
        for PORT in `cat /etc/init.d/ports`; do
                $IPT -A POSTROUTING -t nat -o $IFEXT -s $NTW -p tcp --dport $PORT -j SNAT --to $IPEXT
                $IPT -A POSTROUTING -t nat -o $IFEXT -s $NTW -p udp --dport $PORT -j SNAT --to $IPEXT
        done
        echo "Ok"

        #### Politicas de INPUT ####

        echo -n "Setting INPUT policies... "
        #### Liberando acesso loopback ####
        $IPT -A INPUT -s 127.0.0.1 -d 127.0.0.1 -j ACCEPT
        #### Limitando ping a 5/s ####
        $IPT -A INPUT -p icmp -m limit --limit 5/s -j ACCEPT
        #### Liberando APACHE local ####
        $IPT -A INPUT -p tcp --dport 80 -j ACCEPT
        $IPT -A INPUT -p tcp --sport 80 -j ACCEPT
        #### Acesso dns ####
        $IPT -A INPUT -p tcp -s $NTW --dport 53 -j ACCEPT
        $IPT -A INPUT -p udp -s $NTW --dport 53 -j ACCEPT
        #### Bloqueando IP Spoofing
        $IPT -A INPUT -i $IFEXT -s 10.0.0.0/8 -m limit --limit 3/m -j LOG --log-prefix "FW: 10. Spoofing -- "
        $IPT -A INPUT -i $IFEXT -s 10.0.0.0/8 -j DROP
        $IPT -A INPUT -i $IFEXT -s 172.16.0.0/16 -m limit --limit 3/m -j LOG --log-prefix "FW: 172. Spoofing -- "
        $IPT -A INPUT -i $IFEXT -s 172.16.0.0/16 -j DROP
        $IPT -A INPUT -i $IFEXT -s 192.168.0.0/16 -m limit --limit 3/m -j LOG --log-prefix "FW: 192. Spoofing -- "
        $IPT -A INPUT -i $IFEXT -s 192.168.0.0/16 -j DROP

        ### Trafego para o squid ###
        $IPT -A INPUT -i $IFLCL -p tcp -s $NTW --dport 8787 -j ACCEPT
        $IPT -A INPUT -i $IFLCL -p udp -s $NTW --dport 8787 -j ACCEPT

        ### Trafego SSH ###
        $IPT -A INPUT -p tcp --dport 22 -j ACCEPT

        $IPT -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
        $IPT -A INPUT -m limit --limit 3/m --limit-burst 3 -j LOG --log-level info --log-prefix "Firewall: INPUT --"
        echo "Ok"


        #### Politicas de FORWARD ####

        echo -n "Setting FORWARD policies... "
        #### Liberando acesso loopback ####
        $IPT -A FORWARD -s 127.0.0.1 -d 127.0.0.1 -j ACCEPT
        #### Acesso DNS ####
        $IPT -A FORWARD -p udp -s $NTW --dport 53 -j ACCEPT
        $IPT -A FORWARD -p tcp -s $NTW --dport 53 -j ACCEPT
        ### Libera navegacao web ####
        for PORT in `cat /etc/init.d/ports`; do
                $IPT -A FORWARD -s $NTW -p tcp --dport $PORT -j ACCEPT
                $IPT -A FORWARD -s $NTW -p udp --dport $PORT -j ACCEPT
        done
        #### Conectividade Social ####
        $IPT -A FORWARD -p tcp -d 200.201.0.0/16 -j ACCEPT

        $IPT -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
        $IPT -A FORWARD -m limit --limit 3/m --limit-burst 3 -j LOG --log-level info --log-prefix "Firewall: FORWARD -- "
        echo "Ok"

        echo -n ""
        echo "Iptables starded sucessfuly"
        echo -n ""

}

iptables_down(){

        echo -n "Stopping Iptables firewall... "
        echo -n ""

        echo -n "Cleaning rules... "
        $IPT -F
        $IPT -F -t nat
        $IPT -F -t mangle
        $IPT -X
        $IPT -X -t nat
        $IPT -X -t mangle
        $IPT -Z
        $IPT -Z -t nat
        $IPT -Z -t mangle
        echo "Ok"

        echo -n "Setting default ACCEPT policy... "
        $IPT -P FORWARD ACCEPT
        $IPT -P INPUT ACCEPT
        $IPT -P OUTPUT ACCEPT
        echo "Ok"

        echo -n ""
        echo -n "Iptables stopped sucessfuly"
        echo -n ""

}

iptables_restart(){
        iptables_down
        echo ""
        sleep 1
        iptables_up
}

iptables_status(){
        echo "==========   NAT Status Policies   =========="
        echo ""
        $IPT -t nat -nL
        echo ""
        echo "==========   Mangle Status Policies   =========="
        echo ""
        $IPT -t mangle -nL
        echo ""
        echo "==========   Filter Status Policies   =========="
        echo ""
        $IPT -nL
        echo ""
}

case "$1" in
        "start")
                iptables_up
        ;;
        "stop")
                iptables_down
        ;;
        "restart")
                iptables_restart
        ;;
        "status")
                iptables_status
        ;;
        * ) echo "Use: [start] [stop] [restart] [status]"
esac


O servidor é um proxy/firewall básico. A única coisa diferente é que o servidor de e-mails está hospedado em uma máquina diferente.

zekkerj

Citar
        #### Tráfego para servidor de E-mail (vai sair depois)####
        $IPT -t nat -A PREROUTING -p tcp --dport 25 -j DNAT --to $IPSMT:25
Olha, me parece que o que vc quer já foi configurado.
Talvez o que esteja faltando seja liberar a passagem da porta 25/tcp na cadeia FORWARD, na entrada.
Pesquise antes de perguntar, sua dúvida pode já ter sido respondida.
Não respondo dúvidas por MP, coloque sua dúvida no fórum onde ela pode ser pesquisada pelos seus colegas!
Não venha ao fórum apenas para perguntar. Se você sabe a resposta de um problema, porque não ajudar seu colega? ;D