Disponibilizo meu rc.firewall

1. Disponibilizo meu rc.firewall

emerson
cpdrede

(usa CentOS)

Enviado em 24/11/2010 - 15:22h

Olá a todos, estou disponibilizando o script que fiz aqui para minha rede.
É o script de firewall, esta funcionando normal, para aquele que precisam de um start acredito que ajuda.
Sei que pode ser melhorado, e como sou iniciante tb, só peço que aqueles que utilizarem e fizerem alguma alteração que disponibilizem as alterações para os outros colegas.

#! /bin/bash
# /etc/init.d/firewall
# description: firewall
# Feito por Emerson Ricardo

# Interface de Loopback
IF_LOOP="lo"

# Interface da rede EXTERNA
IF_EXTERNA="eth0"

# Interface da rede INTERNA
IF_INTERNA="eth1"

# Definicao da rede interna
REDE_INTERNA="192.168.1.0/24"

# ========================================================== #
# ======================== Modulos ========================= #
# ========================================================== #

MODPROBE=/sbin/modprobe
IPTABLES=/sbin/iptables
prog=/etc/init.d/firewall

$MODPROBE ip_conntrack
$MODPROBE ip_conntrack_ftp
$MODPROBE ip_nat_ftp
$MODPROBE ip_tables
$MODPROBE iptable_filter
$MODPROBE iptable_mangle
$MODPROBE iptable_nat
$MODPROBE ipt_tos
$MODPROBE ipt_LOG
$MODPROBE ipt_limit
$MODPROBE ipt_state
$MODPROBE ipt_mark
$MODPROBE ipt_multiport
$MODPROBE ipt_conntrack
$MODPROBE ipt_MARK
$MODPROBE ipt_MASQUERADE
$MODPROBE ipt_REJECT


fw_start()
{

echo ""
echo "Iniciando Firewall..................... [ OK ]"
echo ""

# ========================================================== #
# =================== Limpando as Regras =================== #
# ========================================================== #
echo ""
echo "Limpando Regras........................ [ OK ]"
echo ""
$IPTABLES -F
$IPTABLES -F INPUT
$IPTABLES -F OUTPUT
$IPTABLES -F FORWARD
$IPTABLES -F -t nat
$IPTABLES -F -t mangle
$IPTABLES -X
$IPTABLES -Z


# ========================================================== #
# ==================== POLITICAS PADRAO ==================== #
# ========================================================== #
echo ""
echo "Aplicando Politicas Padrao............. [ OK ]"
echo ""
$IPTABLES -t filter -P INPUT DROP
$IPTABLES -t filter -P FORWARD DROP
$IPTABLES -t filter -P OUTPUT ACCEPT
$IPTABLES -t nat -P PREROUTING ACCEPT
$IPTABLES -t nat -P POSTROUTING ACCEPT
$IPTABLES -t nat -P OUTPUT ACCEPT
$IPTABLES -t mangle -P PREROUTING ACCEPT
$IPTABLES -t mangle -P POSTROUTING ACCEPT
$IPTABLES -t mangle -P OUTPUT ACCEPT
$IPTABLES -t mangle -P INPUT ACCEPT
$IPTABLES -t mangle -P FORWARD ACCEPT


# ========================================================== #
# =============== Ativa o roteamento dinamico ============== #
# ========================================================== #
echo ""
echo "Liberando Internet..................... [ OK ]"
echo ""
echo "1" > /proc/sys/net/ipv4/ip_forward
echo "1" > /proc/sys/net/ipv4/ip_dynaddr
echo "0" > /proc/sys/net/ipv4/conf/all/proxy_arp


# ========================================================== #
# ===== Habilitando o fluxo interno entre os processos ===== #
# ========================================================== #
echo ""
echo " Aplicando Fluxo Interno............... [ OK ]"
echo ""
$IPTABLES -A INPUT -i $IF_LOOP -j ACCEPT
$IPTABLES -A OUTPUT -o $IF_LOOP -j ACCEPT
$IPTABLES -A INPUT -i $IF_INTERNA -j ACCEPT
$IPTABLES -A FORWARD -i $IF_INTERNA -j ACCEPT


# ========================================================== #
# ====================== CHECA CONEXAO ===================== #
# ========================================================== #
echo ""
echo " Checando Conexoes...................... [ OK ]"
echo ""
$IPTABLES -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
$IPTABLES -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
$IPTABLES -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT


# ========================================================== #
# ========= Libera a conexao para a rede interna =========== #
# ========================================================== #
echo ""
echo " Liberacao Rede Interna................ [ OK ]"
echo ""
$IPTABLES -t nat -A POSTROUTING -s $REDE_INTERNA -o $IF_EXTERNA -j MASQUERADE


# ========================================================== #
# ================= Liberacao de Portas ==================== #
# ========================================================== #
echo ""
echo "Liberando Portas....................... [ OK ]"
echo ""
# FTP
$IPTABLES -A FORWARD -p tcp -i $IF_INTERNA -s $REDE_INTERNA -o $IF_EXTERNA --dport 21 -j ACCEPT

# SSH
$IPTABLES -A FORWARD -p tcp -i $IF_INTERNA -s $REDE_INTERNA -o $IF_EXTERNA --dport 22 -j ACCEPT
$IPTABLES -A FORWARD -p tcp -i $IF_EXTERNA -s $REDE_INTERNA -o $IF_EXTERNA --dport 2222 -j ACCEPT

# HTTP
$IPTABLES -A FORWARD -p tcp -i $IF_INTERNA -s $REDE_INTERNA -o $IF_EXTERNA --dport 80 -j ACCEPT

# HTTPS
$IPTABLES -A FORWARD -p tcp -i $IF_INTERNA -s $REDE_INTERNA -o $IF_EXTERNA --dport 443 -j ACCEPT

# SMTP
$IPTABLES -A FORWARD -p tcp -i $IF_INTERNA -s $REDE_INTERNA -o $IF_EXTERNA --dport 25 -j ACCEPT

# SMTPS
$IPTABLES -A FORWARD -p tcp -i $IF_INTERNA -s $REDE_INTERNA -o $IF_EXTERNA --dport 465 -j ACCEPT

# POP
$IPTABLES -A FORWARD -p tcp -i $IF_INTERNA -s $REDE_INTERNA -o $IF_EXTERNA --dport 110 -j ACCEPT

# POPS
$IPTABLES -A FORWARD -p tcp -i $IF_INTERNA -s $REDE_INTERNA -o $IF_EXTERNA --dport 995 -j ACCEPT

# IMAP
$IPTABLES -A FORWARD -p tcp -i $IF_INTERNA -s $REDE_INTERNA -o $IF_EXTERNA --dport 143 -j ACCEPT

# IMAPS
$IPTABLES -A FORWARD -p tcp -i $IF_INTERNA -s $REDE_INTERNA -o $IF_EXTERNA --dport 993 -j ACCEPT

# DNS
$IPTABLES -A FORWARD -p tcp -i $IF_INTERNA -s $REDE_INTERNA -o $IF_EXTERNA --dport 53 -j ACCEPT
$IPTABLES -A FORWARD -p udp -i $IF_INTERNA -s $REDE_INTERNA -o $IF_EXTERNA --dport 53 -j ACCEPT

# SQUID
$IPTABLES -A FORWARD -p tcp -i $IF_INTERNA -s $REDE_INTERNA -o $IF_EXTERNA --dport 3128 -j ACCEPT

# ========================================================== #
# ================ Liberar Maquina do Proxy ================ #
# ========================================================== #
$IPTABLES -t nat -A PREROUTING -i $IF_INTERNA -s 192.168.1.1 -p tcp --dport 80 -j ACCEPT
$IPTABLES -t nat -A PREROUTING -i $IF_INTERNA -s 192.168.1.2 -p tcp --dport 80 -j ACCEPT
$IPTABLES -t nat -A PREROUTING -i $IF_INTERNA -s 192.168.1.10 -p tcp --dport 80 -j ACCEPT
$IPTABLES -t nat -A PREROUTING -i $IF_INTERNA -s 192.168.1.51 -p tcp --dport 80 -j ACCEPT


# ========================================================== #
# =================== PROTECOES ============================ #
# ========================================================== #
echo ""
echo "Aplicando Protecoes.................... [ OK ]"
echo ""
echo "0" > /proc/sys/net/ipv4/icmp_echo_ignore_all
echo "0" > /proc/sys/net/ipv4/tcp_syncookies
# Contra Ping
$IPTABLES -A FORWARD -p icmp --icmp-type echo-request -j DROP

# Protege contra os "Ping of Death"
$IPTABLES -A FORWARD -p icmp --icmp-type echo-request -m limit --limit 1/s -j ACCEPT

# Protege contra port scanners avancados (Ex.: nmap)
$IPTABLES -A FORWARD -p tcp --tcp-flags SYN,ACK,FIN,RST SYN -m limit --limit 1/s -j ACCEPT

# Bloqueando tracertroute
$IPTABLES -A INPUT -p udp -s 0/0 -i eth1 --dport 33435:33525 -j REJECT

# Protecoes contra ataques
$IPTABLES -A INPUT -m state --state INVALID -j REJECT

# Proteção contra pacotes danificados ou suspeitos
$IPTABLES -A BLOCK -m unclean -j DROP

# Bloqueio Anti-Spoofings
$IPTABLES -A INPUT -s 10.0.0.0/8 -i $IF_EXTERNA -j DROP
$IPTABLES -A INPUT -s 127.0.0.0/8 -i $IF_EXTERNA -j DROP
$IPTABLES -A INPUT -s 172.16.0.0/12 -i $IF_EXTERNA -j DROP
$IPTABLES -A INPUT -s 192.168.1.0/16 -i $IF_EXTERNA -j DROP

# ========================================================== #
# ================= Redirecionando porta 80 ================ #
# ========================================================== #
echo ""
echo " Redirecionamento porta 80............. [ OK ]"
echo ""
$IPTABLES -t nat -A PREROUTING -i $IF_INTERNA -p tcp --dport 80 -j REDIRECT --to-port 3128


}

fw_stop()
{
echo ""
echo "Parando Firewall ..................... [ OK ]"
echo ""

$IPTABLES -t filter -P INPUT ACCEPT
$IPTABLES -t filter -P FORWARD ACCEPT
$IPTABLES -t filter -P OUTPUT ACCEPT
$IPTABLES -t nat -P PREROUTING ACCEPT
$IPTABLES -t nat -P POSTROUTING ACCEPT
$IPTABLES -t nat -P OUTPUT ACCEPT
$IPTABLES -t mangle -P PREROUTING ACCEPT
$IPTABLES -t mangle -P POSTROUTING ACCEPT
$IPTABLES -t mangle -P OUTPUT ACCEPT
$IPTABLES -t mangle -P INPUT ACCEPT
$IPTABLES -t mangle -P FORWARD ACCEPT
$IPTABLES -t filter -F
$IPTABLES -t nat -F
$IPTABLES -t mangle -F
$IPTABLES -t filter -X
$IPTABLES -t nat -X
$IPTABLES -t mangle -X
$IPTABLES -t filter -Z
$IPTABLES -t nat -Z
$IPTABLES -t mangle -Z
}

fw_usage()
{
echo
echo "$0 (start | stop | restart | clear)"
echo
echo "start - Ativa o firewall"
echo "stop - Desativa o firewall"
echo "restart - Reativa o firewall"
echo "clear - Limpa os contatores"
}

fw_clear()
{
$IPTABLES -t filter -Z
$IPTABLES -t nat -Z
$IPTABLES -t mangle -Z
}

case $1 in
start)
fw_start;
;;

stop)
fw_stop;
;;

restart)
fw_stop;
fw_start;
;;

clear)
fw_clear;
;;
*)
fw_usage;
exit;

;;

esac


  


2. Re: Disponibilizo meu rc.firewall

Perfil removido
removido

(usa Nenhuma)

Enviado em 24/11/2010 - 18:51h

amigo, envie isso como um conf.

Após logar-se no VOL vá ao rodapé da página e clique em Conf, depois clique em 'Iniciar Contrib' e preencha os dados com as informações que achar necessárias. Ao final clique em 'Enviar para fila de espera', após aprovação por parte dos moderadores seu conf deverá ser publicado.

[]'s.


3. Re: Disponibilizo meu rc.firewall

Rafael Umbelino
tlaloc

(usa Gentoo)

Enviado em 24/11/2010 - 20:31h

Melhor revisar antes de mandar.
Tem regra duplicada, políticas inseguras e etc.


4. Re: Disponibilizo meu rc.firewall

emerson
cpdrede

(usa CentOS)

Enviado em 24/11/2010 - 21:50h

Opa tlaloc, valeu pelos comentários, mas será que vc poderia ajudar no que está errado.
Revisei, mas sou iniciante no assunto e essa coletanêa de regras não é um simples ctrl+c, baixei tutoriais e apostilas para poder fazer. Sei que tem erro, mas minhas capacidades de compreensão do assunto estão esgotadas.
Se puder mostrar o que tem de errado, para que possa arrumar e disponibilizar para outros, acredito que seria mais interessante.
Valeu e muito obrigado pelas dicas.


5. Re: Disponibilizo meu rc.firewall

Rafael Umbelino
tlaloc

(usa Gentoo)

Enviado em 24/11/2010 - 22:05h

Olha CPDRED, só pra citar algumas regras:


# Contra Ping
$IPTABLES -A FORWARD -p icmp --icmp-type echo-request -j DROP
# Protege contra os "Ping of Death"
$IPTABLES -A FORWARD -p icmp --icmp-type echo-request -m limit --limit 1/s -j ACCEPT

Na primeira regra você nega, na segunda você abre.
Ou você abre ou você nega, OS DOIS ao mesmo tempo não da.
Se você nega ping, você perde retorno de monitoramento, se você abre, você tá se permitindo ser visto na rede.

São estes tipos de inconsistências que se acha em firewalls prontos, como sei que você utilizou para montar o seu, que faz com que as coisas não funcionem direito.
Várias pessoas leigas tentam se passar por inteligentes e fazer "rc.firewalls" por aí (sem boa intenção, só pra ganhar ponto no VOL), e nem sabem o que a regra está aplicando.

Outro exemplo:

# ========================================================== #
# ================ Liberar Maquina do Proxy ================ #
# ========================================================== #
$IPTABLES -t nat -A PREROUTING -i $IF_INTERNA -s 192.168.1.1 -p tcp --dport 80 -j ACCEPT
$IPTABLES -t nat -A PREROUTING -i $IF_INTERNA -s 192.168.1.2 -p tcp --dport 80 -j ACCEPT
$IPTABLES -t nat -A PREROUTING -i $IF_INTERNA -s 192.168.1.10 -p tcp --dport 80 -j ACCEPT
$IPTABLES -t nat -A PREROUTING -i $IF_INTERNA -s 192.168.1.51 -p tcp --dport 80 -j ACCEPT

Essas regras liberam as máquinas 1, 2, 10 e 51 de passar pelo proxy.
Isso é inútil se a pessoa não tiver DHCP distribuído pela rede.
Se tiver, seu firewall bloqueará o tráfego DHCP na rede.
E aí? Como é que os clientes da rede vão pegar IP?

# Bloqueando tracertroute
$IPTABLES -A INPUT -p udp -s 0/0 -i eth1 --dport 33435:33525 -j REJECT

Bloquear traceroute na rede interna é tolice. Vai dificultar para os admins de rede encontrarem problemas de rota na rede interna. É isso que você quer, fazer o analista ser demitido por causa de um switch queimado que ele não consegue distinguir na rede?

Sem contar que você colocou a regra da liberação do proxy antes da regra do proxy. Quando se trabalha com -A nas regras, temos de pôr tudo em ordem inversa.
Logo, seria primeiro o bloqueio, depois a liberação.

Outro erro é trabalhar com -A ao invés de -I em políticas DROP. Em políticas DROP utilizamos -I que funciona na ordem inversa de -A.

São errinhos bobos mas que já dariam MUITA dor de cabeça aos admins de rede inexperientes que usarem teu script.


6. Re: Disponibilizo meu rc.firewall

emerson
cpdrede

(usa CentOS)

Enviado em 24/11/2010 - 22:18h

Valeu tlaloc, realmente foi de grande ajuda.
Fazem uns 6 meses que estou estudando e essa foi a minha primeira retribuição para o site.
Vou refazer as regras e procurar por mais informações e assim que tiver outro revisado, postarei, pois essas " critcas" na minha opinião ajudam muito.
Meu servidor tem DHCP ativo e os clientes buscam normalmente os IPs e navegam sem problemas, esse IPs liberados são de teste que uso.
Valeu pelas dicas e vou refazelos para melhorar, sem a intenção de ganhar pontos junto ao site.
Muito Obrigado.


7. Re: Disponibilizo meu rc.firewall

Rafael Umbelino
tlaloc

(usa Gentoo)

Enviado em 24/11/2010 - 22:23h

CPDRED, qualquer coisa estamos aí pra ajudar.

Agora, essa do DHCP funcionar foi nova pra mim... você não está habilitando em nenhuma regra o tráfego de fornecimento DHCP.
Das duas uma, ou tens uma rota de fuga na tua rede, ou teu firewall não tá sendo eficiente.
Teste ele com o Shields UP!.






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts