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