Servidor de Nomes - Configuração do Firewall
Autor: Marcos Ferreira da Silva | Publicado: 2010-06-12T09:17:00-03:00

Lembrando que estamos fazendo uma sequencia de instalação, sempre estaremos nos referindo as partes anteriormente publicadas e já implementadas.

Inicialmente vamos configurar o acesso externo para o servidor de nomes, para isto devemos colocar os IPs na placa rede externa do nosso firewall depois adicionar novas regras do firewall.

Endereços IPs

Os IPs que serão acessados externamente, no nosso exemplo, serão 172.16.0.1 e 172.16.0.2 para os servidores de nomes primário e secundário, para colocar estes IPs no firewall basta criar dois arquivos como mostrado abaixo.

Vamos deixar a interface eth0 configurada como estava anteriormente.

Em um servidor real o correto seria ter as interfaces eth0 e eth0:0 para estes dois IPs, mas no nosso exemplo, usaremos a eth0 (que pode estar com DHCP ou um IP estático da sua rede), eth0:0 e eth0:1

[root@fw root]# vim /etc/sysconfig/network-scripts/ifcfg-eth0:0
DEVICE=eth0:0
IPADDR=172.16.0.1
NETMASK=255.255.255.248
GATEWAY=172.16.0.7&nbsp; &lt;&lt;-- coloque o gateway se for configurar a interface eth0 e não eth0:0

[root@fw root]# vim /etc/sysconfig/network-scripts/ifcfg-eth0:1
DEVICE=eth0:1
IPADDR=172.16.0.2
NETMASK=255.255.255.248
Após configurar as interfaces de rede reinicie a rede.

[root@fw root]# /etc/init.d/network restart
Veja se as interfaces subiram corretamente.

[root@fw root]# ifconfig
Regras do Firewall

Adicione as regras do firewall para redirecionar as requisições externas e internas.

Coloque as variáveis abaixo juntamente com as demais variáveis do script do firewall.

DNS1_DMZ=192.168.10.2
DNS2_DMZ=192.168.10.3
DNS1_IP=172.16.0.1
DNS2_IP=172.16.0.2
Para os acesso externos adicione as regras após a linha

iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
Inclua

iptables -t nat -A PREROUTING -p udp --dport 53 -i $EXT_IF -d $DNS1_IP -m state --state NEW -j DNAT --to-destination $DNS1_DMZ
iptables -A FORWARD -i $EXT_IF -o $DMZ_IF -p udp --dport 53 -m state --state NEW -d $DNS1_DMZ -j ACCEPT
iptables -A FORWARD -i $DMZ_IF -o $EXT_IF -s $DNS1_DMZ -m state --state NEW -j ACCEPT
iptables -t nat -A POSTROUTING -p udp --sport 53 -o $EXT_IF -s $DNS1_DMZ -j SNAT --to-source $DNS1_IP
Estas regras estão definindo que qualquer pacote com destino a porta 53, protocolo udp, e IP definido pela variável $DNS1_IP será enviado para o IP destino definido pela variável $DNS1_DMZ.

A segunda regra deixará passar todas as requisições para a porta porta 53, protocolo udp, saindo na interface definida pela variável $DMZ_IF e IP definido pela variável $DNS1_DMZ desde que seja um pedido de nova conexão.

A terceira regra habilitará todos os pacotes que saem do servidor de nomes primário com IP $DNS1_DMZ saindo pela interface $EXT_IF que sejam pedido de novas conexões sejam repassadas.

A quarta regra irá fazer o NAT (Network Address Translate), vulgarmente conhecido como mascarar o endereço interno. Todo pacote que estiver saindo pela interface $EXT_IF que tenha vindo da porta 53 protocolo udp, tendo como origem o IP $DNS1_IP deverá ser trocado (mascarado) para o IP $DNS1_IP.

Repita estas linhas para o servidor de nomes secundário.

Inclua as linhas abaixo para acesso da rede interna.

# Acesso da rede Interna
iptables -t nat -A PREROUTING -p udp --dport 53 -i $INT_IF -d $DNS1_IP -m state --state NEW -j DNAT --to-destination $DNS1_DMZ
iptables -A FORWARD -i $INT_IF -o $DMZ_IF -p udp --dport 53 -d $DNS1_DMZ -m state --state NEW -j ACCEPT
iptables -t nat -A PREROUTING -p udp --dport 53 -i $INT_IF -d $DNS2_IP -m state --state NEW -j DNAT --to-destination $DNS2_DMZ
iptables -A FORWARD -i $INT_IF -o $DMZ_IF -p udp --dport 53 -d $DNS2_DMZ -m state --state NEW -j ACCEPT

Reinicie o seu firewall para que as regras tenha validade.

Para testar os dois servidores de nomes faça como abaixo.

[root@nbmarcos ~]# nslookup www.testes.com.br 172.16.0.1
Server:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 172.16.0.1
Address:&nbsp;&nbsp;&nbsp; 172.16.0.1#53

Name:&nbsp;&nbsp;&nbsp; www.testes.com.br
Address: 172.16.0.3
Name:&nbsp;&nbsp;&nbsp; www.testes.com.br
Address: 172.16.0.2

[root@nbmarcos ~]# nslookup www.testes.com.br 172.16.0.2
Server:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 172.16.0.2
Address:&nbsp;&nbsp;&nbsp; 172.16.0.2#53

Name:&nbsp;&nbsp;&nbsp; www.testes.com.br
Address: 172.16.0.3
Name:&nbsp;&nbsp;&nbsp; www.testes.com.br
Address: 172.16.0.2
Portanto nossos servidores podem ser consultado de fora.

Até este ponto o nosso firewall deve estar como abaixo.

#!/bin/bash
# Variável para interface de rede externa
EXT_IF=eth0
# Variável para interface de rede interna
INT_IF=eth1
# Variável para interface de rede DMZ
DMZ_IF=eth2

/sbin/modprobe ip_nat_ftp
/sbin/modprobe ip_conntrack_ftp

iptables -F
iptables -F -t nat
iptables -X

iptables -P INPUT DROP
iptables -P FORWARD DROP

iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -p tcp --dport 22 -m state --state NEW -j ACCEPT
iptables -A INPUT -p icmp --icmp-type echo-request -m limit --limit 1/s -j ACCEPT
iptables -A INPUT -p icmp --icmp-type echo-reply -m limit --limit 1/s -j ACCEPT
iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
# Acesso da rede interna ------
iptables -A FORWARD -i $INT_IF -o $EXT_IF -p tcp -m multiport --dports 25,80,110,443,587 -m state --state NEW -j ACCEPT
iptables -A FORWARD -i $INT_IF -o $EXT_IF -p udp--dport 53 -m state --state NEW -j ACCEPT
#------------------------------

# Acesso da rede interna a DMZ -----------------------------------------------
iptables -t nat -A PREROUTING -p udp --dport 53 -i $INT_IF -d $DNS1_IP -m state --state NEW -j DNAT --to-destination $DNS1_DMZ
iptables -A FORWARD -i $INT_IF -o $DMZ_IF -p udp --dport 53 -d $DNS1_DMZ -m state --state NEW -j ACCEPT
iptables -t nat -A PREROUTING -p udp --dport 53 -i $INT_IF -d $DNS2_IP -m state --state NEW -j DNAT --to-destination $DNS2_DMZ
iptables -A FORWARD -i $INT_IF -o $DMZ_IF -p udp --dport 53 -d $DNS2_DMZ -m state --state NEW -j ACCEPT

# DNS1 -----------------------------------------------------------------------
echo DNS1
iptables -t nat -A PREROUTING -p udp --dport 53 -i $EXT_IF -d $DNS1_IP -m state --state NEW -j DNAT --to-destination $DNS1_DMZ
iptables -A FORWARD -i $EXT_IF -o $DMZ_IF -p udp --dport 53 -m state --state NEW -d $DNS1_DMZ -j ACCEPT
iptables -A FORWARD -i $DMZ_IF -o $EXT_IF -s $DNS1_DMZ -m state --state NEW -j ACCEPT
iptables -t nat -A POSTROUTING -p udp --sport 53 -o $EXT_IF -s $DNS1_DMZ -j SNAT --to-source $DNS1_IP
# DNS2 -----------------------------------------------------------------------
echo DNS2
iptables -t nat -A PREROUTING -p udp --dport 53 -i $EXT_IF -d $DNS2_IP -m state --state NEW -j DNAT --to-destination $DNS2_DMZ
iptables -A FORWARD -i $EXT_IF -o $DMZ_IF -p udp --dport 53 -m state --state NEW -d $DNS2_DMZ -j ACCEPT
iptables -A FORWARD -i $DMZ_IF -o $EXT_IF -s $DNS2_DMZ -m state --state NEW -j ACCEPT
iptables -t nat -A POSTROUTING -p udp --sport 53 -o $EXT_IF -s $DNS2_DMZ -j SNAT --to-source $DNS2_IP

#Mascaramento
iptables -t nat -A POSTROUTING -o $EXT_IF -j MASQUERADE

Qualquer problema que encontre, por favor, poste seu comentário.