Avaliação - Firewall [RESOLVIDO]

1. Avaliação - Firewall [RESOLVIDO]

Fernando Cesar Vaini
vaini

(usa Debian)

Enviado em 14/12/2009 - 16:36h

Galera, sou novo em Linux ainda. Quero trabalhar com servidores, mas ainda nao entendo sobre firewall. Utilizo atualmente um script que um amigo me deu, pois ainda nao aprendi criar o meu proprio. Gostaria da opiniao de voces, visto que tem muita gente aqui que manja muito de firewall.

#!/bin/sh

#Configuraco de Variaveis
IPT=/sbin/iptables
IF=eth0
RD=eth1
LOG="iplog -i $IF -w -d -l /var/log/iplogs"
printf "."

echo 1 > /proc/sys/net/ipv4/ip_forward
echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all
#
if [ -e /proc/sys/net/ipv4/conf/all/rp_filter ]; then
for f in /proc/sys/net/ipv4/conf/*/rp_filter; do
echo 1 > $f
done
fi
printf "."

#Ativando syn cookies proteco no kernel
if [ -e /proc/sys/net/ipv4/tcp_syncookies ]
then
echo 1 > /proc/sys/net/ipv4/tcp_syncookies
fi
printf "."

#Setando o kernel para dinamico IP masquerado
if [ -e /proc/sys/net/ipv4/ip_dynaddr ]
then
echo 1 > /proc/sys/net/ipv4/ip_dynaddr
fi
printf "."

#Flushing all e criando chains.
$IPT -F
$IPT -X
$IPT -t nat -F
$IPT -t nat -X
printf "."

#Capturando o IP da internet
net=$1
net=`ifconfig $IF| grep inet| cut -f2 -d:| cut -f1 -d " "`
#int=$1
#int=`ifconfig $RD| grep inet| cut -f2 -d:| cut -f1 -d " "`
printf "."

$IPT -P OUTPUT ACCEPT
/sbin/modprobe iptable_nat

#Bloqueio de MSN por IP
$IPT -A FORWARD -s 192.168.1.2 -p tcp --dport 1863 -j ACCEPT
$IPT -A FORWARD -s 192.168.1.2 -p tcp --dport 5190 -j ACCEPT

$IPT -A FORWARD -s 192.168.1.0/24 -p tcp --dport 1863 -j REJECT
$IPT -A FORWARD -s 192.168.1.0/24 -p tcp --dport 5190 -j REJECT

#Internet Sharing e Firewall - Iniciando
$IPT -t nat -A POSTROUTING -o $IF -j MASQUERADE
$IPT -t nat -A PREROUTING -p tcp --dport -j REDIRECT --to-port 3128
$IPT -A FORWARD -i $IF -j ACCEPT
$IPT -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
$IPT -A FORWARD -m limit --limit 60/minute --limit-burst 60
printf "."

#Desvios de portas (Redirecionamentos)
$IPT -t nat -A PREROUTING -i eth0 -p tcp --dport 5900 -j DNAT --to 192.168.1.20:5900 #VNC(programa)
$IPT -t nat -A PREROUTING -i eth0 -p tcp --dport 2550 -j DNAT --to 192.168.1.20:2550 #GV800
$IPT -t nat -A PREROUTING -i eth0 -p tcp --dport 3550 -j DNAT --to 192.168.1.20:3550 #GV800
$IPT -t nat -A PREROUTING -i eth0 -p tcp --dport 4550 -j DNAT --to 192.168.1.20:4550 #GV800
$IPT -t nat -A PREROUTING -i eth0 -p tcp --dport 5550 -j DNAT --to 192.168.1.20:5550 #GV800
$IPT -t nat -A PREROUTING -i eth0 -p tcp --dport 6550 -j DNAT --to 192.168.1.20:6550 #GV800
printf "."

#Criando Logs para a chain.
$IPT -N LDROP
$IPT -A INPUT -p tcp --dport 12345 -j LOG --log-prefix "BackOrifice"
$IPT -A LDROP -p tcp -j LOG --log-level 7 --log-prefix "DROP"
$IPT -A LDROP -p udp -j LOG --log-level 7 --log-prefix "DROP"
$IPT -A LDROP -p icmp -j LOG --log-level 7 --log-prefix "DROP"
$IPT -A LDROP -f -j LOG --log-level 7 --log-prefix "DROP"
$IPT -A LDROP -j DROP
$IPT -N LREJECT
$IPT -A LREJECT -p tcp -j LOG --log-level 7 --log-prefix "REJECT"
$IPT -A LREJECT -p udp -j LOG --log-level 7 --log-prefix "REJECT"
$IPT -A LREJECT -p icmp -j LOG --log-level 7 --log-prefix "REJECT"
$IPT -A LREJECT -f -j LOG --log-level 7 --log-prefix "REJECT"
$IPT -A LREJECT -j REJECT
$IPT -N LACCEPT
$IPT -A LACCEPT -p tcp -j LOG --log-level 7 --log-prefix "ACCEPT"
$IPT -A LACCEPT -p udp -j LOG --log-level 7 --log-prefix "ACCEPT"
$IPT -A LACCEPT -p icmp -j LOG --log-level 7 --log-prefix "ACCEPT"
$IPT -A LACCEPT -f -j LOG --log-level 7 --log-prefix "ACCEPT"
$IPT -A LACCEPT -j ACCEPT
$IPT -N TREJECT
$IPT -A TREJECT -p tcp -j REJECT --reject-with tcp-reset
$IPT -A TREJECT -p ! tcp -j REJECT --reject-with icmp-port-unreachable
$IPT -A TREJECT -j REJECT
$IPT -N LTREJECT
$IPT -A LTREJECT -p tcp -j REJECT --reject-with tcp-reset
$IPT -A LTREJECT -p ! tcp -j REJECT --reject-with icmp-port-unreachable
$IPT -A LTREJECT -p tcp -j LOG --log-level 7 --log-prefix "REJECT "
$IPT -A LTREJECT -p udp -j LOG --log-level 7 --log-prefix "REJECT "
$IPT -A LTREJECT -p icmp -j LOG --log-level 7 --log-prefix "REJECT "
$IPT -A LTREJECT -f -j LOG --log-level 7 --log-prefix "REJECT "
$IPT -A LTREJECT -p tcp -j REJECT --reject-with tcp-reset
$IPT -A LTREJECT -p ! tcp -j REJECT --reject-with icmp-port-unreachable
$IPT -A LTREJECT -j REJECT
printf "."

#Ativa o redirecionamento do MSN-Proxy
$IPT -t nat -I PREROUTING -i eth0 -p tcp --dport 1863 -j REDIRECT --to-port 1863
$IPT -A INPUT -p ALL -s 192.168.1.0/24 -i eth0 -j ACCEPT
printf "."

#Aceita trafego em lo (loopback) device
$IPT -I INPUT -i lo -j ACCEPT
$IPT -I OUTPUT -o lo -j ACCEPT
$IPT -I INPUT -i ! lo -s 127.0.0.0/255.0.0.0 -j DROP
printf "."

#Libera portas para Dreamule pegar ID alta
$IPT -t nat -A PREROUTING -p tcp --dport 36416 -j DNAT --to 192.168.1.20
$IPT -t nat -A PREROUTING -p udp --dport 55973 -j DNAT --to 192.168.1.20
printf "."

#Aceita conexoes por ack bit sets.
$IPT -A INPUT -p tcp ! --syn -i $IF -j ACCEPT
printf "."

#Bloqueio a IP Spoofing
$IPT -N syn-flood
printf "."

#Bloqueio a Ping
$IPT -A FORWARD -p icmp --icmp-type echo-request -j DROP
printf "."

#Bloqueio de Syn-flood via Limit
$IPT -A FORWARD -p tcp --syn -m limit --limit 1/s -j ACCEPT
printf "."

#Bloqueio Scanners Ocultos
$IPT -A FORWARD -p tcp --tcp-flags SYN,ACK,FIN,RST RST -m limit --limit 1/s -j ACCEPT
printf "."

#Anti-Spoofings
$IPT -A INPUT -j DROP -s 10.0.0.0/8 -i $IF
$IPT -A INPUT -j DROP -s 127.0.0.0/8 -i $IF
$IPT -A INPUT -j DROP -s 172.16.0.0/12 -i $IF
$IPT -A INPUT -j DROP -s 192.168.1.0/16 -i $IF
printf "."

#Bloqueando Multicast
$IPT -A INPUT -s 224.0.0.0/8 -d 0/0 -j DROP
$IPT -A INPUT -s 0/0 -d 224.0.0.0/8 -j DROP
printf "."

#Bloqueando Conexao ao samba pela internet
$IPT -A INPUT -p tcp -s 192.168.1.0/24 --dport 139 -j ACCEPT
$IPT -A INPUT -p udp -s 192.168.1.0/24 --dport 139 -j ACCEPT
$IPT -A INPUT -p udp -s 192.168.1.0/24 --dport 138 -j ACCEPT
$IPT -A INPUT -p udp -s 192.168.1.0/24 --dport 137 -j ACCEPT
$IPT -A INPUT -p tcp -s 0/0 --dport 139 -j DROP
$IPT -A INPUT -p udp -s 0/0 --dport 139 -j DROP
$IPT -A INPUT -p udp -s 0/0 --dport 138 -j DROP
$IPT -A INPUT -p udp -s 0/0 --dport 137 -j DROP
$IPT -A OUTPUT -p tcp -s 192.168.1.0/24 --dport 139 -j ACCEPT
$IPT -A OUTPUT -p udp -s 192.168.1.0/24 --dport 139 -j ACCEPT
$IPT -A OUTPUT -p udp -s 192.168.1.0/24 --dport 138 -j ACCEPT
$IPT -A OUTPUT -p udp -s 192.168.1.0/24 --dport 137 -j ACCEPT
$IPT -A INPUT -p tcp -i $IF --dport 445 -j LDROP
$IPT -A INPUT -p udp -i $IF --dport 445 -j LDROP
$IPT -A INPUT -p tcp -i $IF --dport 139 -j LDROP
$IPT -A INPUT -p udp -i $IF --dport 139 -j LDROP
$IPT -A INPUT -p tcp -i $IF --dport 133 -j LDROP
$IPT -A INPUT -p udp -i $IF --dport 133 -j LDROP
$IPT -A INPUT -p tcp -i $IF --dport 137 -j LDROP
$IPT -A INPUT -p udp -i $IF --dport 137 -j LDROP
printf "."

#Bloqueando Conexao ao Webmin pela internet
$IPT -A INPUT -p tcp -i $IF --dport 10000 -j LDROP
$IPT -A INPUT -p udp -i $IF --dport 10000 -j LDROP
printf "."

#Bloqueando Conexao ao FTP pela internet
$IPT -A INPUT -p tcp -i $IF --dport 21 -j LDROP
$IPT -A INPUT -p udp -i $IF --dport 21 -j LDROP
printf "."

#Bloqueando Conexao ao MySQL pela internet
$IPT -A INPUT -p tcp -i $IF --dport 3306 -j LDROP
$IPT -A INPUT -p udp -i $IF --dport 3306 -j LDROP
printf "."

#Bloqueando NFS
$IPT -A INPUT -p tcp -i $IF --dport 2049 -j LDROP
$IPT -A INPUT -p udp -i $IF --dport 2049 -j LDROP

#Bloqueando Conexao ao Apache pela internet
$IPT -A INPUT -p tcp -i $IF --dport 4000 -j LDROP
$IPT -A INPUT -p udp -i $IF --dport 4000 -j LDROP
printf "."

#Bloqueando Conexao a porta 80
$IPT -A INPUT -p tcp -i $IF --dport 80 -j LDROP
$IPT -A INPUT -p udp -i $IF --dport 80 -j LDROP
printf "."

#Bloqueando Conexao ao Squid pela internet
$IPT -A INPUT -p tcp -i $IF --dport 3128 -j LDROP
$IPT -A INPUT -p udp -i $IF --dport 3128 -j LDROP
printf "."

#Bloqueando Conexao SSH pela internet
$IPT -A INPUT -p tcp -i $IF --dport 22 -j LDROP
$IPT -A INPUT -p udp -i $IF --dport 22 -j LDROP
printf "."

#Bloqueando Back Orifice
$IPT -A INPUT -p tcp -i $IF --dport 31337 -j LDROP
$IPT -A INPUT -p udp -i $IF --dport 31337 -j LDROP
printf "."

#Bloqueando NetBus
$IPT -A INPUT -p tcp -i $IF --dport 12345:12346 -j LDROP
$IPT -A INPUT -p udp -i $IF --dport 12345:12346 -j LDROP
printf "."

#Bloqueando Trin00
$IPT -A INPUT -p tcp -i $IF --dport 1524 -j LDROP
$IPT -A INPUT -p tcp -i $IF --dport 27665 -j LDROP
$IPT -A INPUT -p udp -i $IF --dport 27444 -j LDROP
$IPT -A INPUT -p udp -i $IF --dport 31335 -j LDROP
$IPT -A INPUT -p udp -i $IF --dport 31337 -j LDROP
$IPT -A INPUT -p tcp -i $IF --dport 3080 -j LDROP
$IPT -A INPUT -p udp -i $IF --dport 3080 -j LDROP
printf "."

#Rejeitando (Nao aceitos) ident requeridos.
$IPT -A INPUT -p tcp -i $IF --dport 113 -j TREJECT
$IPT -A INPUT -p udp -i $IF --dport 113 -j TREJECT
printf "."

#Bloqueando acesso para o X Server.
$IPT -A INPUT -p tcp -i $IF --dport 5999:6003 -j LDROP
$IPT -A INPUT -p udp -i $IF --dport 5999:6003 -j LDROP
$IPT -A INPUT -p tcp -i $IF --dport 7100 -j LDROP
printf "."

#Setando telnet, www, smtp, pop3 e FTP para Pouco Delay
$IPT -t mangle -A OUTPUT -p tcp --dport 22 -j TOS --set-tos Minimize-Delay
$IPT -t mangle -A OUTPUT -p tcp --dport 23 -j TOS --set-tos Minimize-Delay
$IPT -t mangle -A OUTPUT -p tcp --dport 110 -j TOS --set-tos Minimize-Delay
printf "."

#Portas abertas para estabelecer conexoes
$IPT -A INPUT -m state --state ESTABLISHED -j ACCEPT
$IPT -A INPUT -m state --state RELATED -j ACCEPT
$IPT -A INPUT -p tcp -i $IF --dport 1023:65535 -j ACCEPT
$IPT -A INPUT -p udp -i $IF --dport 1023:65535 -j ACCEPT
$IPT -A INPUT -p tcp -i $IF --dport 2631 -j ACCEPT
$IPT -A INPUT -p udp -i $IF --dport 2631 -j ACCEPT
printf "."

$IPT -A INPUT -p icmp -i $IF -j LDROP
$IPT -A INPUT -p icmp --icmp-type echo-reply -s 0/0 -i $IF -j ACCEPT
$IPT -A INPUT -p icmp --icmp-type destination-unreachable -s 0/0 -i $IF -j ACCEPT
$IPT -A INPUT -p icmp --icmp-type time-exceeded -s 0/0 -i $IF -j ACCEPT
$IPT -A OUTPUT -p icmp -o $IF -j ACCEPT

#Bloqueando Tracertroute
$IPT -A INPUT -p udp -s 0/0 -i $IF --dport 33435:33525 -j DROP
printf "."




  


2. Avaliação - Firewall

Ricardo Cardoso
Ricardo Cardoso

(usa Debian)

Enviado em 14/12/2009 - 18:24h

Só não entendi o por que de substituir os comandos por variáveis. IPT=/sbin/iptables...
Isso ajuda em que? só esta aumentando o tamanho do script e fazendo ele ficar mais lento por ter que executar mais linhas...


3. ricardo(dinho)

Renato Carneiro Pacheco
renato_pacheco

(usa Debian)

Enviado em 14/12/2009 - 22:17h

Isso é pra ser aplicado em outras distros, pois tem certas distros q o caminho do executável iptables fica em outro diretório (ou pode não estar no PATH).

Com relação ao script, isso é tão relativo. É verdade, o seu script tá show d bola, mas nem sempre pode servir pra vc, pois depende d+ da sua rede. Tem coisas q podem ser desnecessárias e, ao msm tempo, pode t coisas q vc terá q acresentar.


4. Re: Avaliação - Firewall [RESOLVIDO]

Jefferson Diego
Diede

(usa Debian)

Enviado em 14/12/2009 - 23:17h

"echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all"
Comentário pessoal: Acho este parâmetro meio extremo. Não sei vocês, mas sempre que uma máquina não acessa a rede, vou dela, e pingo o gateway para testar. Com o Gateway não respondendo a pings, não iria ajudar muita coisa...

"$IPT -t nat -A POSTROUTING -o $IF -j MASQUERADE"
Acho mais flexível deixar esta regra por último...

"$IPT -A FORWARD -i $IF -j ACCEPT"
OK, lí seu script até o final, e $IF parece ser a interface ligada a web. Essa regra acima é desnecessária.


$IPT -A FORWARD -m limit --limit 60/minute --limit-burst 60
Só 1 pacote por segundo?

$IPT -t nat -I PREROUTING -i eth0 -p tcp --dport 1863 -j REDIRECT --to-port 1863
Ok, se IF=eth0, e lá em cima há um MASQUERADE com IF como saída, mas aqui há um Redirect com eth0 (IF=eth0) como entrada, há algo errado.
eth1 é a rede interna, não? a regra deveria ser:
$IPT -t nat -I PREROUTING -i eth1 -p tcp --dport 1863 -j REDIRECT --to-port 1863


"#Aceita conexoes por ack bit sets."
$IPT -A INPUT -p tcp ! --syn -i $IF -j ACCEPT"
Bem, é mais fácil (e mais seguro) apenas aceitar um RELATED,ESTABLISHED


"$IPT -A FORWARD -p icmp --icmp-type echo-request -j DROP"
Comentário pessoal2: Bem, bloqueando o forward de pings, fica também difícil testar a conectividade (nat) nas estações. Não sei vocês, mas costumo dar um "ping 200.x.x.x.", para ver se está tudo ok.


"$IPT -A FORWARD -p tcp --syn -m limit --limit 1/s -j ACCEPT"
limit não bloqueia syn-flood. E só ajuda no DoS, já que sua rede está permitida, e o limit é só de 1/s.


"$IPT -A FORWARD -p tcp --tcp-flags SYN,ACK,FIN,RST RST -m limit --limit 1/s -j ACCEPT"
Nunca entendi como funciona esta regra. Agradeceria se alguém me explicasse, mas, porque eu liberaria um pacote com apenas RST setado, e de que modo isso bloquearia um scanner oculto?

De "#Bloqueando Conexao ao samba pela internet" até "#Bloqueando acesso para o X Server."
É mais fácil você bloquear tudo por padrão, e liberar a entrada da WEB apenas em RELATED,ESTABLISHED, do que criar uma regra para "cada porta existente" como nestas regras suas.
Seria algo como:
iptables -P INPUT DROP
iptables -A INPUT -i INTERFACE_DA_REDE_INTERNA -j ACCEPT
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT


#Setando telnet, www, smtp, pop3 e FTP para Pouco Delay
$IPT -t mangle -A OUTPUT -p tcp --dport 22 -j TOS --set-tos Minimize-Delay
$IPT -t mangle -A OUTPUT -p tcp --dport 23 -j TOS --set-tos Minimize-Delay
$IPT -t mangle -A OUTPUT -p tcp --dport 110 -j TOS --set-tos Minimize-Delay

Suas regras não batem com o comentário. Bem, convém aplicar um Minimize-Delay nas portas smtp,pop3,FTP e SSH (25,110,20,20 e 22).
O tráfego maior de uma rede (tirando P2P) é dividido entre www,smtp,pop3 e ftp. Se você setar Minimize-Delay para todos, é o mesmo que nada. É como contratar todos os empregados como "gerentes" (faz as prioridades perderem sentido)
Mas, OUTPUT é só o que sai da sua máquina vindo dela mesma. COnvém passar um TOS também em Forward, para atuar sobre os pacotes das estações.



$IPT -A INPUT -m state --state ESTABLISHED -j ACCEPT
$IPT -A INPUT -m state --state RELATED -j ACCEPT
Você pode combinar em uma regra só:
$IPT -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT




$IPT -A INPUT -p tcp -i $IF --dport 1023:65535 -j ACCEPT
$IPT -A INPUT -p udp -i $IF --dport 1023:65535 -j ACCEPT
$IPT -A INPUT -p tcp -i $IF --dport 2631 -j ACCEPT
$IPT -A INPUT -p udp -i $IF --dport 2631 -j ACCEPT
OK, só confirmando, mas IF é a interface da Web, certo?
Por que liberar a acesso direto em todas as portas altas?
Você precisa apenas liberar por ESTABLISHED,RELATED para as conexões funcionarem.



$IPT -A INPUT -p icmp -i $IF -j LDROP
Regra desnecessária, pois la em cima você já bloqueou o icmp.

$IPT -A INPUT -p icmp --icmp-type echo-reply -s 0/0 -i $IF -j ACCEPT
$IPT -A INPUT -p icmp --icmp-type destination-unreachable -s 0/0 -i $IF -j ACCEPT
$IPT -A INPUT -p icmp --icmp-type time-exceeded -s 0/0 -i $IF -j ACCEPT
ICMP bloqueado lá em cima...


5. Re: Avaliação - Firewall [RESOLVIDO]

Fernando Cesar Vaini
vaini

(usa Debian)

Enviado em 15/12/2009 - 08:18h

renato pacheco - muito obrigado pela dica, e fiquei feliz em saber que o script esta legal. Minha intenção é realmente proteger. Agora quanto as coisas desnecessarioas, como liberação de porta para dreamule, ou redirecionamentos de vnc ou gv800, etc, etc, eu adapto a cada cliente, de acordo com a necessidade.

diede - muito obrigado pelas dicas, vou ver com calma todas elas, e alterar o script.

Na real, como disse, nao entendo de firewall (ainda), e por causa disso, quero deixar meus clientes protegidos até que eu entenda e consiga me virar sozinho. Por isso pedi ajuda e vou estudar.

O que pretendo fazer nesse script ainda, é incluir um start|stop|restart|allow. Pretendo fazer assim: com o start, claro, iniciar o firewall com todas as proteções etc, com stop, parar tudo, incluindo o compartilhamento de internet, com restart, o nome ja diz, reinicar o firewall, e com allow, eu quero eliminar qualquer regra de redirecionamento, bloqueio, etc, mas manter a conexao com a net ativa e compartilhada.

Obrigado pela ajuda ate agora, e aguardo nova ajuda para essa tarefa.


6. Re: Avaliação - Firewall [RESOLVIDO]

Fernando Cesar Vaini
vaini

(usa Debian)

Enviado em 15/12/2009 - 12:02h

Mais uma coisa, que esqueci de mencionar acima, o que é a politica padrão do firewall DROP/ACCEPT, para que ela serve, e qual sua consequencia no sistema. Gostaria de usar a politica DROP para entrada/saídas, assim consigo controlar tudo o que entra e sai da rede.
Agradeço a explanação


7. Re: Avaliação - Firewall [RESOLVIDO]

Jefferson Diego
Diede

(usa Debian)

Enviado em 15/12/2009 - 12:27h

A política padrão é a regra que fecha cada chain.
Dentro de cada chain você terá diversas regras. Se o nenhuma delas bater com determinado pacote que passar por ela, ao final ele baterá com a política padrão.

Se você, por exemplo por DROP como padrão em tudo, a não ser que tenha uma regra que permita determinados pacotes, nada entrará/sairá/atravessará sua rede.
As concequencias ao sistema são em termos de organização.
Você pode escolher por as políticas padrões em DROP e fazer regras de ACCEPT, ou por as políticas padrões em ACCEPT e fazer regras de DROP.
A única política que costumo deixar em ACCEPT é a Output da tabela filter, pois considero que tudo que sai do meu gateway (que já é o firewall) é seguramente confiável...
Deixar DROP na saída de um gateway é meio inviável, pois não é como em uma rede interna, onde você pode determinar faixas de IP's ou portas. Sendo o gateway, é provavável que ele deva ter acessso a todas as portas/IP's imagináveis, então cairía na questão de jogar a Default Policy como ACCEPT, mas isso depende do que precisas por aí...


8. Re: Avaliação - Firewall [RESOLVIDO]

Fernando Cesar Vaini
vaini

(usa Debian)

Enviado em 16/12/2009 - 20:40h

Só dando sequencia ao topico, estou precisando de ajuda para fazer o seguinte:

preciso incluir um start|stop|restart|allow como parametros para o script. Pretendo fazer assim: com o start, claro, iniciar o firewall com todas as proteções etc, com stop, parar tudo, incluindo o compartilhamento de internet, com restart, o nome ja diz, reinicar o firewall, e com allow, eu quero eliminar qualquer regra de redirecionamento, bloqueio, etc, mas manter a conexao com a net ativa e compartilhada.



9. Re: Avaliação - Firewall [RESOLVIDO]

Renato Carneiro Pacheco
renato_pacheco

(usa Debian)

Enviado em 16/12/2009 - 22:35h

#!/bin/sh

#Configuracao de Variaveis
IPT=/sbin/iptables
IF=eth0
RD=eth1
LOG="iplog -i $IF -w -d -l /var/log/iplogs"
printf "."

start() {
echo 1 > /proc/sys/net/ipv4/ip_forward
echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all
#
if [ -e /proc/sys/net/ipv4/conf/all/rp_filter ]; then
for f in /proc/sys/net/ipv4/conf/*/rp_filter; do
echo 1 > $f
done
fi
printf "."

#Ativando syn cookies proteco no kernel
if [ -e /proc/sys/net/ipv4/tcp_syncookies ]
then
echo 1 > /proc/sys/net/ipv4/tcp_syncookies
fi
printf "."

#Setando o kernel para dinamico IP masquerado
if [ -e /proc/sys/net/ipv4/ip_dynaddr ]
then
echo 1 > /proc/sys/net/ipv4/ip_dynaddr
fi
printf "."

#Capturando o IP da internet
net=$1
net=`ifconfig $IF| grep inet| cut -f2 -d:| cut -f1 -d " "`
#int=$1
#int=`ifconfig $RD| grep inet| cut -f2 -d:| cut -f1 -d " "`
printf "."

$IPT -P OUTPUT ACCEPT
/sbin/modprobe iptable_nat

#Bloqueio de MSN por IP
$IPT -A FORWARD -s 192.168.1.2 -p tcp --dport 1863 -j ACCEPT
$IPT -A FORWARD -s 192.168.1.2 -p tcp --dport 5190 -j ACCEPT

$IPT -A FORWARD -s 192.168.1.0/24 -p tcp --dport 1863 -j REJECT
$IPT -A FORWARD -s 192.168.1.0/24 -p tcp --dport 5190 -j REJECT

#Internet Sharing e Firewall - Iniciando
$IPT -t nat -A POSTROUTING -o $IF -j MASQUERADE
$IPT -t nat -A PREROUTING -p tcp --dport -j REDIRECT --to-port 3128
$IPT -A FORWARD -i $IF -j ACCEPT
$IPT -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
$IPT -A FORWARD -m limit --limit 60/minute --limit-burst 60
printf "."

#Desvios de portas (Redirecionamentos)
$IPT -t nat -A PREROUTING -i eth0 -p tcp --dport 5900 -j DNAT --to 192.168.1.20:5900 #VNC(programa)
$IPT -t nat -A PREROUTING -i eth0 -p tcp --dport 2550 -j DNAT --to 192.168.1.20:2550 #GV800
$IPT -t nat -A PREROUTING -i eth0 -p tcp --dport 3550 -j DNAT --to 192.168.1.20:3550 #GV800
$IPT -t nat -A PREROUTING -i eth0 -p tcp --dport 4550 -j DNAT --to 192.168.1.20:4550 #GV800
$IPT -t nat -A PREROUTING -i eth0 -p tcp --dport 5550 -j DNAT --to 192.168.1.20:5550 #GV800
$IPT -t nat -A PREROUTING -i eth0 -p tcp --dport 6550 -j DNAT --to 192.168.1.20:6550 #GV800
printf "."

#Criando Logs para a chain.
$IPT -N LDROP
$IPT -A INPUT -p tcp --dport 12345 -j LOG --log-prefix "BackOrifice"
$IPT -A LDROP -p tcp -j LOG --log-level 7 --log-prefix "DROP"
$IPT -A LDROP -p udp -j LOG --log-level 7 --log-prefix "DROP"
$IPT -A LDROP -p icmp -j LOG --log-level 7 --log-prefix "DROP"
$IPT -A LDROP -f -j LOG --log-level 7 --log-prefix "DROP"
$IPT -A LDROP -j DROP
$IPT -N LREJECT
$IPT -A LREJECT -p tcp -j LOG --log-level 7 --log-prefix "REJECT"
$IPT -A LREJECT -p udp -j LOG --log-level 7 --log-prefix "REJECT"
$IPT -A LREJECT -p icmp -j LOG --log-level 7 --log-prefix "REJECT"
$IPT -A LREJECT -f -j LOG --log-level 7 --log-prefix "REJECT"
$IPT -A LREJECT -j REJECT
$IPT -N LACCEPT
$IPT -A LACCEPT -p tcp -j LOG --log-level 7 --log-prefix "ACCEPT"
$IPT -A LACCEPT -p udp -j LOG --log-level 7 --log-prefix "ACCEPT"
$IPT -A LACCEPT -p icmp -j LOG --log-level 7 --log-prefix "ACCEPT"
$IPT -A LACCEPT -f -j LOG --log-level 7 --log-prefix "ACCEPT"
$IPT -A LACCEPT -j ACCEPT
$IPT -N TREJECT
$IPT -A TREJECT -p tcp -j REJECT --reject-with tcp-reset
$IPT -A TREJECT -p ! tcp -j REJECT --reject-with icmp-port-unreachable
$IPT -A TREJECT -j REJECT
$IPT -N LTREJECT
$IPT -A LTREJECT -p tcp -j REJECT --reject-with tcp-reset
$IPT -A LTREJECT -p ! tcp -j REJECT --reject-with icmp-port-unreachable
$IPT -A LTREJECT -p tcp -j LOG --log-level 7 --log-prefix "REJECT "
$IPT -A LTREJECT -p udp -j LOG --log-level 7 --log-prefix "REJECT "
$IPT -A LTREJECT -p icmp -j LOG --log-level 7 --log-prefix "REJECT "
$IPT -A LTREJECT -f -j LOG --log-level 7 --log-prefix "REJECT "
$IPT -A LTREJECT -p tcp -j REJECT --reject-with tcp-reset
$IPT -A LTREJECT -p ! tcp -j REJECT --reject-with icmp-port-unreachable
$IPT -A LTREJECT -j REJECT
printf "."

#Ativa o redirecionamento do MSN-Proxy
$IPT -t nat -I PREROUTING -i eth0 -p tcp --dport 1863 -j REDIRECT --to-port 1863
$IPT -A INPUT -p ALL -s 192.168.1.0/24 -i eth0 -j ACCEPT
printf "."

#Aceita trafego em lo (loopback) device
$IPT -I INPUT -i lo -j ACCEPT
$IPT -I OUTPUT -o lo -j ACCEPT
$IPT -I INPUT -i ! lo -s 127.0.0.0/255.0.0.0 -j DROP
printf "."

#Libera portas para Dreamule pegar ID alta
$IPT -t nat -A PREROUTING -p tcp --dport 36416 -j DNAT --to 192.168.1.20
$IPT -t nat -A PREROUTING -p udp --dport 55973 -j DNAT --to 192.168.1.20
printf "."

#Aceita conexoes por ack bit sets.
$IPT -A INPUT -p tcp ! --syn -i $IF -j ACCEPT
printf "."

#Bloqueio a IP Spoofing
$IPT -N syn-flood
printf "."

#Bloqueio a Ping
$IPT -A FORWARD -p icmp --icmp-type echo-request -j DROP
printf "."

#Bloqueio de Syn-flood via Limit
$IPT -A FORWARD -p tcp --syn -m limit --limit 1/s -j ACCEPT
printf "."

#Bloqueio Scanners Ocultos
$IPT -A FORWARD -p tcp --tcp-flags SYN,ACK,FIN,RST RST -m limit --limit 1/s -j ACCEPT
printf "."

#Anti-Spoofings
$IPT -A INPUT -j DROP -s 10.0.0.0/8 -i $IF
$IPT -A INPUT -j DROP -s 127.0.0.0/8 -i $IF
$IPT -A INPUT -j DROP -s 172.16.0.0/12 -i $IF
$IPT -A INPUT -j DROP -s 192.168.1.0/16 -i $IF
printf "."

#Bloqueando Multicast
$IPT -A INPUT -s 224.0.0.0/8 -d 0/0 -j DROP
$IPT -A INPUT -s 0/0 -d 224.0.0.0/8 -j DROP
printf "."

#Bloqueando Conexao ao samba pela internet
$IPT -A INPUT -p tcp -s 192.168.1.0/24 --dport 139 -j ACCEPT
$IPT -A INPUT -p udp -s 192.168.1.0/24 --dport 139 -j ACCEPT
$IPT -A INPUT -p udp -s 192.168.1.0/24 --dport 138 -j ACCEPT
$IPT -A INPUT -p udp -s 192.168.1.0/24 --dport 137 -j ACCEPT
$IPT -A INPUT -p tcp -s 0/0 --dport 139 -j DROP
$IPT -A INPUT -p udp -s 0/0 --dport 139 -j DROP
$IPT -A INPUT -p udp -s 0/0 --dport 138 -j DROP
$IPT -A INPUT -p udp -s 0/0 --dport 137 -j DROP
$IPT -A OUTPUT -p tcp -s 192.168.1.0/24 --dport 139 -j ACCEPT
$IPT -A OUTPUT -p udp -s 192.168.1.0/24 --dport 139 -j ACCEPT
$IPT -A OUTPUT -p udp -s 192.168.1.0/24 --dport 138 -j ACCEPT
$IPT -A OUTPUT -p udp -s 192.168.1.0/24 --dport 137 -j ACCEPT
$IPT -A INPUT -p tcp -i $IF --dport 445 -j LDROP
$IPT -A INPUT -p udp -i $IF --dport 445 -j LDROP
$IPT -A INPUT -p tcp -i $IF --dport 139 -j LDROP
$IPT -A INPUT -p udp -i $IF --dport 139 -j LDROP
$IPT -A INPUT -p tcp -i $IF --dport 133 -j LDROP
$IPT -A INPUT -p udp -i $IF --dport 133 -j LDROP
$IPT -A INPUT -p tcp -i $IF --dport 137 -j LDROP
$IPT -A INPUT -p udp -i $IF --dport 137 -j LDROP
printf "."

#Bloqueando Conexao ao Webmin pela internet
$IPT -A INPUT -p tcp -i $IF --dport 10000 -j LDROP
$IPT -A INPUT -p udp -i $IF --dport 10000 -j LDROP
printf "."

#Bloqueando Conexao ao FTP pela internet
$IPT -A INPUT -p tcp -i $IF --dport 21 -j LDROP
$IPT -A INPUT -p udp -i $IF --dport 21 -j LDROP
printf "."

#Bloqueando Conexao ao MySQL pela internet
$IPT -A INPUT -p tcp -i $IF --dport 3306 -j LDROP
$IPT -A INPUT -p udp -i $IF --dport 3306 -j LDROP
printf "."

#Bloqueando NFS
$IPT -A INPUT -p tcp -i $IF --dport 2049 -j LDROP
$IPT -A INPUT -p udp -i $IF --dport 2049 -j LDROP

#Bloqueando Conexao ao Apache pela internet
$IPT -A INPUT -p tcp -i $IF --dport 4000 -j LDROP
$IPT -A INPUT -p udp -i $IF --dport 4000 -j LDROP
printf "."

#Bloqueando Conexao a porta 80
$IPT -A INPUT -p tcp -i $IF --dport 80 -j LDROP
$IPT -A INPUT -p udp -i $IF --dport 80 -j LDROP
printf "."

#Bloqueando Conexao ao Squid pela internet
$IPT -A INPUT -p tcp -i $IF --dport 3128 -j LDROP
$IPT -A INPUT -p udp -i $IF --dport 3128 -j LDROP
printf "."

#Bloqueando Conexao SSH pela internet
$IPT -A INPUT -p tcp -i $IF --dport 22 -j LDROP
$IPT -A INPUT -p udp -i $IF --dport 22 -j LDROP
printf "."

#Bloqueando Back Orifice
$IPT -A INPUT -p tcp -i $IF --dport 31337 -j LDROP
$IPT -A INPUT -p udp -i $IF --dport 31337 -j LDROP
printf "."

#Bloqueando NetBus
$IPT -A INPUT -p tcp -i $IF --dport 12345:12346 -j LDROP
$IPT -A INPUT -p udp -i $IF --dport 12345:12346 -j LDROP
printf "."

#Bloqueando Trin00
$IPT -A INPUT -p tcp -i $IF --dport 1524 -j LDROP
$IPT -A INPUT -p tcp -i $IF --dport 27665 -j LDROP
$IPT -A INPUT -p udp -i $IF --dport 27444 -j LDROP
$IPT -A INPUT -p udp -i $IF --dport 31335 -j LDROP
$IPT -A INPUT -p udp -i $IF --dport 31337 -j LDROP
$IPT -A INPUT -p tcp -i $IF --dport 3080 -j LDROP
$IPT -A INPUT -p udp -i $IF --dport 3080 -j LDROP
printf "."

#Rejeitando (Nao aceitos) ident requeridos.
$IPT -A INPUT -p tcp -i $IF --dport 113 -j TREJECT
$IPT -A INPUT -p udp -i $IF --dport 113 -j TREJECT
printf "."

#Bloqueando acesso para o X Server.
$IPT -A INPUT -p tcp -i $IF --dport 5999:6003 -j LDROP
$IPT -A INPUT -p udp -i $IF --dport 5999:6003 -j LDROP
$IPT -A INPUT -p tcp -i $IF --dport 7100 -j LDROP
printf "."

#Setando telnet, www, smtp, pop3 e FTP para Pouco Delay
$IPT -t mangle -A OUTPUT -p tcp --dport 22 -j TOS --set-tos Minimize-Delay
$IPT -t mangle -A OUTPUT -p tcp --dport 23 -j TOS --set-tos Minimize-Delay
$IPT -t mangle -A OUTPUT -p tcp --dport 110 -j TOS --set-tos Minimize-Delay
printf "."

#Portas abertas para estabelecer conexoes
$IPT -A INPUT -m state --state ESTABLISHED -j ACCEPT
$IPT -A INPUT -m state --state RELATED -j ACCEPT
$IPT -A INPUT -p tcp -i $IF --dport 1023:65535 -j ACCEPT
$IPT -A INPUT -p udp -i $IF --dport 1023:65535 -j ACCEPT
$IPT -A INPUT -p tcp -i $IF --dport 2631 -j ACCEPT
$IPT -A INPUT -p udp -i $IF --dport 2631 -j ACCEPT
printf "."

$IPT -A INPUT -p icmp -i $IF -j LDROP
$IPT -A INPUT -p icmp --icmp-type echo-reply -s 0/0 -i $IF -j ACCEPT
$IPT -A INPUT -p icmp --icmp-type destination-unreachable -s 0/0 -i $IF -j ACCEPT
$IPT -A INPUT -p icmp --icmp-type time-exceeded -s 0/0 -i $IF -j ACCEPT
$IPT -A OUTPUT -p icmp -o $IF -j ACCEPT

#Bloqueando Tracertroute
$IPT -A INPUT -p udp -s 0/0 -i $IF --dport 33435:33525 -j DROP
printf "."
}

stop() {
#Flushing all e criando chains.
$IPT -F
$IPT -X
$IPT -t nat -F
$IPT -t nat -X
printf "."
}

restart() {
stop
start
}

allow() {
stop
#Internet Sharing e Firewall - Iniciando
$IPT -t nat -A POSTROUTING -o $IF -j MASQUERADE
$IPT -t nat -A PREROUTING -p tcp --dport -j REDIRECT --to-port 3128
$IPT -A FORWARD -i $IF -j ACCEPT
$IPT -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
$IPT -A FORWARD -m limit --limit 60/minute --limit-burst 60
printf "."
}

case $1 in
"start") start ;;
"restart") restart ;;
"stop") stop ;;
"allow") allow ;;
*) echo "Modo de usar: firewall start|stop|restart|allow"
esac

Eu usei o seu exemplo. Dae vc aprimora com as dicas do Diede, ok?


10. Re: Avaliação - Firewall [RESOLVIDO]

Fernando Cesar Vaini
vaini

(usa Debian)

Enviado em 17/12/2009 - 07:21h

galera, muito obrigado. Vou fazer conforme o recomendado.
Qualquer duvida, abro um novo post.

Valew.






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts