debian (rc.firewall)

Categoria: Segurança

Software: debian

[ Hits: 23.129 ]

Por: Ederson


rc.firewall com siafi e vpn


#Ai galera esse e para administradores de quarteis com siafi e vpn
#!/bin/bash
firewall_start() {
echo "==============================================="
echo "| ::  SETANDO A CONFIGURACAO DO IPTABLES   :: |"
echo "==============================================="
ipt="/usr/local/sbin/iptables"
### Passo 1: Limpando as regras ###
$ipt -F INPUT
$ipt -F OUTPUT
$ipt -F FORWARD
echo "Limpando todas as regras .................[ OK ]"
# Definindo a Politica Default das Cadeias
$ipt -P INPUT DROP
$ipt -P FORWARD DROP
$ipt -P OUTPUT ACCEPT
echo "Setando as regras padrao .................[ OK ]"
### Passo 2: Desabilitar o trafego IP entre as placas de rede ###
echo "0" > /proc/sys/net/ipv4/ip_forward
echo "Setando ip_foward ........................[ OK ]"
# Portas e Servicos
ftp=20:21
ftp1=20
ftp2=21
smtp=25
dns=53
dhcp1=67
dhcp2=68
http=80
pop=110
ntp=123
snmp=161:162
https=443
Paltas=1024:65535
squid=3128
rip=520
vpn1=500
vpn2=4500
siafi1=8999
siafi2=23000
redecmdo1=465
redecmdo2=995
fz1=990
fz2=9091
fz3=9121
# Interfaces
IADSL=eth0
ILAN=eth1
ILocal=lo
# Redes Internas
LAN=192.168.1.0/255.255.255.0
ADSL=10.1.1.5/255.0.0.0
# Redes Externas
Siafi=161.148.40.0/255.255.255.0
Vpn=200.199.248.60
Redecmdo=200.252.148.144
Avg1=207.40.194.0/255.255.255.0
Avg2=193.86.103.0/255.255.255.0
Internet=0.0.0.0/0.0.0.0
# Configurando a Protecao anti-spoofing
for spoofing in /proc/sys/net/ipv4/conf/*/rp_filter; do
echo "1" > $spoofing
done
echo "Setando a protecao anti-spoofing .........[ OK ]"
# Impedimos que um atacante possa maliciosamente alterar alguma rota
echo 0 > /proc/sys/net/ipv4/conf/all/accept_redirects
echo "Setando anti-redirecionamento ............[ OK ]"
# Utilizado em diversos ataques, isso possibilita que o atacante determine o "caminho" que seu
# pacote vai percorrer (roteadores) ate seu destino. Junto com spoof, isso se torna muito perigoso.
echo 0 > /proc/sys/net/ipv4/conf/all/accept_source_route
echo "Setando anti_source_route.................[ OK ]"
# Protecao contra responses bogus
echo 1 > /proc/sys/net/ipv4/icmp_ignore_bogus_error_responses
echo "Setando anti-bogus_response ..............[ OK ]"
# Protecao contra ataques de syn flood (inicio da conexao TCP). Tenta conter ataques de DoS.
echo 1 > /proc/sys/net/ipv4/tcp_syncookies
echo "Setando protecao anti_synflood ...........[ OK ]"
# Protecao contra port scanners ocultos
$ipt -A INPUT -p tcp --tcp-flags SYN,ACK,FIN,RST RST -m limit --limit 1/s -j ACCEPT
$ipt -A INPUT -s 0.0.0.0/0 -p icmp -j DROP
# Bloqueando tracertroute
$ipt -A INPUT -p udp -s 0/0 -i $IADSL --dport 33435:33525 -j DROP
#Protecoes contra ataques
$ipt -A INPUT -m state --state INVALID -j DROP
$ipt -A OUTPUT -p tcp ! --tcp-flags SYN,RST,ACK SYN -m state --state NEW -j DROP
#Ping da morte
$ipt -A FORWARD -p icmp --icmp-type echo-request -m limit --limit 1/s -j ACCEPT
#Protecao contra Syn-floods
$ipt -A FORWARD -p tcp --syn -m limit --limit 1/s -j ACCEPT
### Passo 3: Carregando os modulos do iptables ###
modprobe ip_tables
modprobe iptable_filter
modprobe iptable_mangle
modprobe iptable_nat
modprobe ipt_MASQUERADE
modprobe ipt_layer7
modprobe ip_nat_ftp
modprobe ip_conntrack_ftp
modprobe ip_conntrack_irc
echo "Carregando modulos do iptables ...........[ OK ]"
### Passo 4: Agora, vamos definir o que pode passar e o que nao ###
# Cadeia de Entrada
# LOCALHOST - ACEITA TODOS OS PACOTES
$ipt -A INPUT -i lo -j ACCEPT
# PORTA $http - ACEITA PARA A REDE LOCAL
$ipt -A INPUT -i $ILAN -p tcp --dport $http -j ACCEPT
# PORTA 22 - ACEITA PARA A REDE LOCAL
$ipt -A INPUT -i $ILAN -p tcp --dport 22 -j ACCEPT
# No $ipt, temos de dizer quais sockets sao validos em uma conexao
$ipt -A INPUT -m state --state ESTABLISHED,RELATED,NEW -j ACCEPT
echo "Setando regras para INPUT ................[ OK ]"
################################
# Cadeia de Reenvio (FORWARD).
# Primeiro, ativar o mascaramento (nat).
$ipt -t nat -F POSTROUTING
$ipt -t nat -A POSTROUTING -o $IADSL -j MASQUERADE
echo "Ativando mascaramento de IP ..............[ OK ]"
## Redireciona para SQUID
$ipt -t nat -A PREROUTING -i $ILAN -p tcp --dport $http -j REDIRECT --to-port $squid
$ipt -t nat -A PREROUTING -i $ILAN -p tcp --dport $https -j REDIRECT --to-port $squid
# Agora dizemos quem e o que podem acessar externamente
# No $ipt, o controle do acesso a rede externa e feito na cadeia "FORWARD"
# Abre para a interface de loopback.
$ipt -A INPUT -p tcp --syn -s 127.0.0.1/255.0.0.0 -j ACCEPT
# Abre para uma faixa de enderecos da rede local
$ipt -A INPUT -p tcp --syn -s $LAN -j ACCEPT
# ACEITA TODOS OS PACOTES
#$ipt -A FORWARD -s 192.168.1.4 -j ACCEPT
$ipt -A FORWARD -s 192.168.1.5 -j ACCEPT
$ipt -A FORWARD -s 192.168.1.55 -j ACCEPT
$ipt -A FORWARD -s 192.168.1.19 -j ACCEPT
$ipt -A FORWARD -s 192.168.1.6 -j ACCEPT
# SIAFI
$ipt -A FORWARD -s $LAN -d $Siafi -p tcp -m multiport --destination-port $siafi1,$siafi2 -j ACCEPT
$ipt -A FORWARD -i $IADSL -s $Siafi -d $LAN -p tcp -m multiport --source-port $siafi1,$siafi2 -m state --state ESTABLISHED -j ACCEPT
$ipt -A FORWARD -p tcp --dport 23000 -j ACCEPT
$ipt -A FORWARD -p tcp --dport 8999 -j ACCEPT
$ipt -A FORWARD -s $LAN -d $Siafi -j ACCEPT 
# VPN
$ipt -A FORWARD -s $LAN -d $Vpn -p udp --destination-port $vpn1 -j ACCEPT
$ipt -A FORWARD -s $LAN -d $Vpn -p udp --destination-port $vpn2 -j ACCEPT
$ipt -A FORWARD -s $Vpn -d $LAN -p udp --destination-port $vpn1 -j ACCEPT
$ipt -A FORWARD -s $Vpn -d $LAN -p udp --destination-port $vpn2 -j ACCEPT
# FileZilla
$ipt -A INPUT -i $ILAN -p tcp --dport $fz1 -j ACCEPT
$ipt -A FORWARD -p tcp --dport $fz1 -j ACCEPT
$ipt -A INPUT -i $ILAN -p tcp --dport $fz2 -j ACCEPT
$ipt -A FORWARD -p tcp --dport $fz2 -j ACCEPT
$ipt -A INPUT -i $ILAN -p tcp --dport $fz3 -j ACCEPT
$ipt -A FORWARD -p tcp --dport $fz3 -j ACCEPT
# AVG
$ipt -A FORWARD -s $LAN -d $Avg1 -p tcp --destination-port $http -j ACCEPT
$ipt -A FORWARD -i $IADSL -s $Avg1 -d $LAN -p tcp --source-port $http -m state --state ESTABLISHED -j ACCEPT
$ipt -A FORWARD -s $LAN -d $Avg2 -p tcp --destination-port $http -j ACCEPT
$ipt -A FORWARD -i $IADSL -s $Avg2 -d $LAN -p tcp --source-port $http -m state --state ESTABLISHED -j ACCEPT
##### INICIO REGRAS PARA LAYER7 ########
# Protocols
# MSN Messenger
$ipt -A FORWARD -m layer7 --l7proto msnmessenger -j DROP
$ipt -A FORWARD -m layer7 --l7proto msn-filetransfer -j DROP
# Bittorrent - P2P filesharing
$ipt -A FORWARD -m layer7 --l7proto bittorrent -j DROP
# Gnutella - P2P filesharing
$ipt -A FORWARD -m layer7 --l7proto gnutella -j DROP
# Skype to phone
$ipt -A FORWARD -m layer7 --l7proto skypeout -j DROP
$ipt -A FORWARD -m layer7 --l7proto skypetoskype -j DROP
# eDonkey2000 - P2P filesharing
$ipt -A FORWARD -m layer7 --l7proto edonkey -j DROP
# Yahoo messenger
$ipt -A FORWARD -m layer7 --l7proto yahoo -j DROP
# Ventrilo - VoIP
$ipt -A FORWARD -m layer7 --l7proto ventrilo -j DROP
# FastTrack - P2P filesharing
$ipt -A FORWARD -m layer7 --l7proto fasttrack -j DROP
# Chikka - SMS
$ipt -A FORWARD -m layer7 --l7proto chikka -j DROP
####  FIM REGRAS LAYER7 ####
####  GERANDO LOGS DE ACESSO  ####
# Gerando logs do msn
$ipt -A FORWARD -m layer7 --l7proto msnmessenger -j LOG --log-prefix "msn : "
# Gerando logs de emule
$ipt -A FORWARD -m layer7 --l7proto edonkey -j LOG --log-prefix "edonkey : "
$ipt -A FORWARD -m layer7 --l7proto gnutella -j LOG --log-prefix "gnutella : "
#### FIM LOGS ####
# Bloqueando Acesso MSN
$ipt -A FORWARD -p tcp --dport 1863 -j DROP
$ipt -A OUTPUT -p tcp --dport 1863 -j DROP
# Ignora pings
echo "1" > /proc/sys/net/ipv4/icmp_echo_ignore_all 
# PORTA 3128 - ACEITA PARA A REDE LOCAL
$ipt -A FORWARD -i $ILAN -p tcp --dport $squid -j ACCEPT
# PORTA 53 - ACEITA PARA A REDE LOCAL
$ipt -A FORWARD -i $ILAN -p udp --dport 53 -j ACCEPT
# PORTA 110 - ACEITA PARA A REDE LOCAL
$ipt -A FORWARD -i $ILAN -p tcp --dport 110 -j ACCEPT
# PORTA 25 - ACEITA PARA A REDE LOCAL
$ipt -A FORWARD -i $ILAN -p tcp --dport 25 -j ACCEPT
# PORTA 443 - ACEITA PARA A REDE LOCAL
$ipt -A FORWARD -i $ILAN -p tcp --dport $https -j ACCEPT
# PORTA 21 - ACEITA PARA A REDE LOCAL
$ipt -A FORWARD -i $ILAN -p tcp --dport 21 -j ACCEPT
# No $ipt, temos de dizer quais sockets sao validos em uma conexao
$ipt -A FORWARD -m state --state ESTABLISHED,RELATED,NEW -j ACCEPT
echo "Setando regras para FOWARD ...............[ OK ]"
# Apesar do padrao do forward ser bloqueio. Aqui a regra eh duplicada para gerar log,
# ou seja, tudo o que eh bloqueado por default no forward eh logado aqui
$ipt -A FORWARD -m limit --limit 2/m -j LOG --log-prefix "FORWARD: Bloqueio Padrao "
$ipt -A FORWARD -j DROP
# Finalmente: Habilitando o trafego IP, entre as Interfaces de rede
echo "1" > /proc/sys/net/ipv4/ip_forward
# Ignora qualquer pacote de entrada, vindo de qualquer endereco, a menos
# que especificado o contrario acima, Bloqueia tudo.
$ipt -A INPUT -p tcp --syn -j DROP
echo "Setando ip_foward: ON ....................[ OK ]"
echo "Firewall configurado com sucesso .........[ OK ]"
echo
}
   
firewall_restart() {
firewall_start
}
       
firewall_stop() {
       
echo "==========================================="
echo "| ::       DESLIGANDO FIREWALL          :: |"
echo "==========================================="
       
# Limpa as regras
$ipt -F INPUT
$ipt -F OUTPUT
$ipt -F FORWARD
echo "Limpando todas as regras .................[ OK ]"
       
}
       
case "$1" in
'start')
firewall_start
;;
'stop')
firewall_stop
;;
'restart')
firewall_restart
;;
*)
firewall_start
esac
  


Comentários
[1] Comentário enviado por rafael.augusto em 31/10/2007 - 14:26h

onde coloco esse arquivo?

[2] Comentário enviado por TothBR em 02/11/2007 - 19:32h

Conheço esse firewall! não esqueça de postar a fonte...

[3] Comentário enviado por andrellucz em 31/03/2008 - 12:10h

Valeu pelo artigo me ajudou muito.

T+

[4] Comentário enviado por redson_arcenio em 25/04/2008 - 20:24h

Boa noite em primeiro lugar, e em segundo seu arquivo é show mais eu estou com um pequeno problema quando eu incluir esse script no init.d e dei o comando rc.firewall start e ele dá o seguinte error:

'/rc.firewall: line 3: syntax error near unexpected token `{
'/rc.firewall: line 3: `firewall_start(){

O que eu posso está bizonhando?

Me ajude por favor.


Agradecimentos

Viva a Liberdade
Viva o Linux

[5] Comentário enviado por edersonschmitz em 26/04/2008 - 08:36h

Saudações creio que o problema seja no interpretador de comandos, no meu caso é o
#!/bin/bash
mas vc pode verificar isso nos scripts do init.d.
Qualquer problema só entrar em contato

[6] Comentário enviado por vanderleiTI em 31/07/2008 - 14:31h

show de bola.. valeu pela ajuda..

[7] Comentário enviado por comfaa em 28/10/2008 - 10:41h

muito bom !!

[8] Comentário enviado por tiagomb em 12/10/2009 - 12:18h

muito bom teu arquivo..........
Show de Bola

[9] Comentário enviado por guioximitsu em 07/07/2010 - 11:45h

Obrigado por compartilhar! =D

[10] Comentário enviado por mr.oliver em 14/11/2010 - 14:43h

Nunca esqueçamos de personalizar os scripts de scordo com a nossa rede e distro ok ?
o binario do IPTABLES muda de distro para distro !
Mas show de bola o script !!

[11] Comentário enviado por removido em 03/01/2011 - 04:20h

Poderia ser um arquivo bem menor!!!Se nã tivesse tanto exageiro!!
ipt?? pra que declarar essa variavel?ou as listando as portas??

Totalmente sem necessidade!!!
concordo com as funções!!mas fora isso...

Mas cada um cada um... legal o script!

[12] Comentário enviado por joaquimnt em 25/04/2011 - 14:45h

Bom dia Pessoal,
Tenho uma dúvida sobre acesso remoto.
Aqui na empresa tenho dois servidores que precisam ser publicados na internet para ter acesso remoto.
Um deles eu consegui usando a seguinte regra:
iptables -t filter -A FORWARD 192.168.200.243 -t eth0 -p tcp -m tcp --dport 3389 -J ACCEPT
e
iptables -t nat -A PREROUTING -i eth0 -p tcp -m tcp --dport 3389 -J DNAT --to-destination 192.168.200.243

Eu preciso publicar outro servidor, por exemplo o que tenho o IP 192.168.200.249 e não estou sabendo fazer. Alguém pode me ajudar?
Obrigado pela atenção.
T+!

[13] Comentário enviado por joaquimnt em 26/04/2011 - 16:34h

É o seguinte, na placa eth0, que é a placa de rede que está na internet, podemos por vários endereços IP's, eu vi um modo de ser fazer o que preciso colocando vários endereços IP's na mesma placa e criar diversos redirecionamentos. No exemplo acima, o:

iptables -t filter -A FORWARD 192.168.200.243 -t eth0 -p tcp -m tcp --dport 3389 -J ACCEPT
e
iptables -t nat -A PREROUTING -i eth0 -p tcp -m tcp --dport 3389 -J DNAT --to-destination 192.168.200.243

Ta funcionando. Eu coloquei mais um IP nesta mesma placa e seu nome do dispositivo, nas configurações de rede ficou "eth0:1", me corrijam se eu estiver errado, pois, na teoria se eu fizesse o seguinte esquema:

iptables -t filter -A FORWARD 192.168.200.249 -t eth0:1 -p tcp -m tcp --dport 3390 -J ACCEPT
e
iptables -t nat -A PREROUTING -i eth0:1 -p tcp -m tcp --dport 3390 -J DNAT --to-destination 192.168.200.249

Era para dar certo, não?

Só que, salvo o arquivo e na hora que uso o iptables-restore /caminho onde está o arquivo, me apresenta a seguinte mensagem:

Warning: wired character in interface 'eth0:1' (no aliases, :, ! or *).
Warning: wired character in interface 'eth0:1' (no aliases, :, ! or *).

Entendi que é o ":" que coloquei no nome da interface, só que é esse o nome da interface com o novo IP que me aparece no ifconfig. O que eu teria que fazer neste caso?
Mais uma vez, grato pela atenção.

[14] Comentário enviado por joaquimnt em 27/04/2011 - 12:32h

Socoooooorro!!!!

[15] Comentário enviado por removido em 13/08/2011 - 06:49h

Olha sinceramente não sei pra que tanta frescura...
Pra que variaveis para as portas ...
Muita frescura pra pouca coisa.. desculpe mas acho que sinceridade é algo construtivo!
abraço!


Contribuir com comentário

  



Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts