Bem, faz um tempo que não posto nada, estava meio enrolado com os trabalhos da Faculdade, mais faz parte.
Hoje vou postar um script de firewall, bem simples porém é meu primeiro script, e pode ser de ajuda para alguém. Não vou explicar por enquanto o conteúdo de comandos e tudo mais do script, porém o mesmo está comentado.
O arquivo se encontra dentro do diretório /etc/init.d/firewall.sh
Deve se dar permissão de execução:
# chmod +x /etc/init.d/firewall.sh
Segue arquivo de Configuração.
# chmod +x /etc/init.d/firewall.sh
Segue arquivo de Configuração.
#!/bin/bash
# SISTEMA OPERACIONAL: DEBIAN 6.0.5
#BLOG: www.linuxstudylpi.blogspot.com.br
#Futuro Analista de Redes/Suporte a Servidores
#DATA: 30/06/2012
#Escrevendo meu primeiro Script de Firewall IPTABLES
#Cléio Sousa
## INDICAR O INICIO/REINICIO DO FIREWALL
case $1 in
start|restart)
echo "Iniciando Firewall"
## CARREGANDO MODULOS NECESSÁRIOS PARA UM BOM FUNCIONAMENTO DAS REGRAS
modprobe ip_tables
modprobe iptable_nat
modprobe iptable_filter
modprobe ip_conntrack
modprobe ip_nat_ftp
modprobe ip_conntrack_ftp
modprobe ipt_MASQUERADE
modprobe ipt_LOG
## LIMPAR REGRAS ANTERIORES
iptables -F
iptables -t nat -F
# DEFINIR POLITICA PADRAO (NEGAR TUDO)
iptables -P INPUT DROP
iptables -P OUTPUT DROP
iptables -P FORWARD DROP
## COMPARTILHAR CONEXAO DE INTERNET
## IP DINAMICO
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
## IP FIXO
#iptables -t nat -A POSTROUTING -o eth0 -j SNAT --to 189.19.40.7
## ATIVAR ROTEAMENTO
echo "1" > /proc/sys/net/ipv4/ip_forward
######## Regra para proxy Squid transparente ##########################################
#echo " Ativando o Proxy Transparente SQUID .......... [ OK ]" #
#iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 3128 #
#iptables -t nat -A PREROUTING -i ppp0 -p tcp --dport 80 -j REDIRECT --to-port 3128 #
#iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE #
#################################################################################
#### Regra de redirecionamento das portas de DNS e NTP para o SQUID ####################
#echo " Redirecionando portas DNS e NTP para o SQUID .......... [ OK ]" #
#iptables -t nat -A PREROUTING -i ppp0 -p udp --dport 53 -j REDIRECT --to-port 3128 #
#iptables -t nat -A PREROUTING -i ppp0 -p udp --dport 123 -j REDIRECT --to-port 3128 #
#iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE #
#################################################################################
####### Regra para liberação de portas usadas por programas p2p ########################
#echo " Liberando portas para aMule e Transmission ( p2p ) .......... [ OK ]" #
#iptables -A INPUT -m multiport -p tcp --dport 4661,4662,51413 -j ACCEPT #
#iptables -A INPUT -m multiport -p udp --dport 4665,4672 -j ACCEPT #
#################################################################################
#### Regra para Bloqueio de portas UDP #################################################
#portas UDP são usadas em geral por programas onde a integridade dos pacotes de dados #
#não é tão essencial, como por exemplo o ICQ, o PC Anywhere, o Apple Quick Time #
#(o servidor), vários jogos multiplayer, entre outros. #
# #
#echo " Fechando portas UDP 1:1024 .......... [ OK ]" #
#iptables -A INPUT -p udp --dport 1:1024 -j LOG --log-prefix "_BLOCKED_UDP_: " #
#iptables -A INPUT -p udp --dport 1:1024 -j DROP #
#################################################################################
## Lembrando que no começo do arquivo há uma regra de bloqueio total, incluindo a
# própria máquina (Servidor) abaixo vem as regras para liberar a máquina (Servidor) e acesso
# a internet!!
## Libera a rede localmente, para a própria máquina (LOOPBACK) ########################
iptables -A INPUT -i lo -j ACCEPT
#### Agora a regra para estabelecer a conexão com a internet para a rede Servidor ##########
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT -m state --state ESTABLISHED,RELATED,NEW -j ACCEPT
#### A Regra acima estabelece a conexão com a internet somente para o servidor, a rede
# interna ainda continua sem acesso a internet #########################################
# LIBERA A PORTA 3128 USADA PELO SQUID PARA A REDE LOCAL
iptables -A FORWARD -i eth0 -p tcp --dport 3128 -d 192.168.0.0/255.255.255.0 -j ACCEPT
### Estabelece a conexão para a rede Local
iptables -A FORWARD -m state --state ESTABLISHED,RELATED,NEW -j ACCEPT
## LIBERAR/BLOQUEAR A REDE LOCAL/ COMEÇA A TER ACESSO A INTERNET A REDE
## LOCAL
iptables -A INPUT -s 192.168.0.0/24 -j ACCEPT
#### LIBERA O PING AO SERVIDOR PARA REDE INTERNA ################
iptables -A INPUT -s 0/0 -i eth0 -p icmp -j ACCEPT
######## Regras de segurança contra Ataques, pings etc.. #############################
echo " Protegendo contra Pings ( ignorando ) .......... [ OK ]"
echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all
echo " Protegendo contra IP spoofing .......... [ OK ]"
echo 1 > /proc/sys/net/ipv4/conf/default/rp_filter
echo " Protegendo contra diversos ataques .......... [ OK ]"
echo 1 > /proc/sys/net/ipv4/conf/all/accept_source_route
echo " Protegendo contra bogus responses .......... [ OK ]"
echo 1 > /proc/sys/net/ipv4/icmp_ignore_bogus_error_responses
echo " Protegendo contra IP synflood .......... [ OK ]"
echo 1 > /proc/sys/net/ipv4/tcp_syncookies
iptables -A FORWARD -p tcp --syn -m limit --limit 1/s -j ACCEPT
echo " Protegendo contra ICMP Broadcasting .......... [ OK ]"
echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts
echo " Protegendo contra alteração de rota .......... [ OK ]"
echo 0 > /proc/sys/net/ipv4/conf/all/accept_redirects
echo " Protegendo contra Pings da Morte .......... [ OK ]"
iptables -A FORWARD -p icmp --icmp-type echo-request -m limit --limit 1/s -j ACCEPT
echo " Protegendo contra traceroute .......... [ OK ]"
iptables -A INPUT -p udp --dport 33435:33525 -j LOG --log-prefix "_BLOCKED_: "
iptables -A INPUT -p udp --dport 33435:33525 -j DROP
echo " Protegendo contra portscanners, ping of death, ataques DoS, etc. .......... [ OK ]"
iptables -A INPUT -m state --state INVALID -j LOG --log-prefix "_BLOCKED_: "
iptables -A INPUT -m state --state INVALID -j DROP
;;
stop)
echo "CUIDADO SUA MAQUINA ESTA SEM FIREWALL - ATENCAO!!!..."
iptables -P INPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -P OUTPUT ACCEPT
iptables -t nat -P PREROUTING ACCEPT
iptables -t nat -P POSTROUTING ACCEPT
iptables -F
iptables -t nat -F
;;
*)
echo "Digite start, restart ou stop para ativar/reativar/desativar"
exit 1
;;
esac
#################################################################################
Bem é isso pessoal, por enquanto ainda estou estudando e testando estas regras e outras, porém até o momento funcionou legal este script, agora é só alterar conforme sua necessidade, e ir estudando e testando outras regras.
Abraço!!
Referências:
http://www.hardware.com.br/livros/linux-redes/capitulo-firewall.html
http://www.vivaolinux.com.br
http://www.tccamargo.com/linux/tutoriais/iptables.html
# SISTEMA OPERACIONAL: DEBIAN 6.0.5
#BLOG: www.linuxstudylpi.blogspot.com.br
#Futuro Analista de Redes/Suporte a Servidores
#DATA: 30/06/2012
#Escrevendo meu primeiro Script de Firewall IPTABLES
#Cléio Sousa
## INDICAR O INICIO/REINICIO DO FIREWALL
case $1 in
start|restart)
echo "Iniciando Firewall"
## CARREGANDO MODULOS NECESSÁRIOS PARA UM BOM FUNCIONAMENTO DAS REGRAS
modprobe ip_tables
modprobe iptable_nat
modprobe iptable_filter
modprobe ip_conntrack
modprobe ip_nat_ftp
modprobe ip_conntrack_ftp
modprobe ipt_MASQUERADE
modprobe ipt_LOG
## LIMPAR REGRAS ANTERIORES
iptables -F
iptables -t nat -F
# DEFINIR POLITICA PADRAO (NEGAR TUDO)
iptables -P INPUT DROP
iptables -P OUTPUT DROP
iptables -P FORWARD DROP
## COMPARTILHAR CONEXAO DE INTERNET
## IP DINAMICO
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
## IP FIXO
#iptables -t nat -A POSTROUTING -o eth0 -j SNAT --to 189.19.40.7
## ATIVAR ROTEAMENTO
echo "1" > /proc/sys/net/ipv4/ip_forward
######## Regra para proxy Squid transparente ##########################################
#echo " Ativando o Proxy Transparente SQUID .......... [ OK ]" #
#iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 3128 #
#iptables -t nat -A PREROUTING -i ppp0 -p tcp --dport 80 -j REDIRECT --to-port 3128 #
#iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE #
#################################################################################
#### Regra de redirecionamento das portas de DNS e NTP para o SQUID ####################
#echo " Redirecionando portas DNS e NTP para o SQUID .......... [ OK ]" #
#iptables -t nat -A PREROUTING -i ppp0 -p udp --dport 53 -j REDIRECT --to-port 3128 #
#iptables -t nat -A PREROUTING -i ppp0 -p udp --dport 123 -j REDIRECT --to-port 3128 #
#iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE #
#################################################################################
####### Regra para liberação de portas usadas por programas p2p ########################
#echo " Liberando portas para aMule e Transmission ( p2p ) .......... [ OK ]" #
#iptables -A INPUT -m multiport -p tcp --dport 4661,4662,51413 -j ACCEPT #
#iptables -A INPUT -m multiport -p udp --dport 4665,4672 -j ACCEPT #
#################################################################################
#### Regra para Bloqueio de portas UDP #################################################
#portas UDP são usadas em geral por programas onde a integridade dos pacotes de dados #
#não é tão essencial, como por exemplo o ICQ, o PC Anywhere, o Apple Quick Time #
#(o servidor), vários jogos multiplayer, entre outros. #
# #
#echo " Fechando portas UDP 1:1024 .......... [ OK ]" #
#iptables -A INPUT -p udp --dport 1:1024 -j LOG --log-prefix "_BLOCKED_UDP_: " #
#iptables -A INPUT -p udp --dport 1:1024 -j DROP #
#################################################################################
## Lembrando que no começo do arquivo há uma regra de bloqueio total, incluindo a
# própria máquina (Servidor) abaixo vem as regras para liberar a máquina (Servidor) e acesso
# a internet!!
## Libera a rede localmente, para a própria máquina (LOOPBACK) ########################
iptables -A INPUT -i lo -j ACCEPT
#### Agora a regra para estabelecer a conexão com a internet para a rede Servidor ##########
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT -m state --state ESTABLISHED,RELATED,NEW -j ACCEPT
#### A Regra acima estabelece a conexão com a internet somente para o servidor, a rede
# interna ainda continua sem acesso a internet #########################################
# LIBERA A PORTA 3128 USADA PELO SQUID PARA A REDE LOCAL
iptables -A FORWARD -i eth0 -p tcp --dport 3128 -d 192.168.0.0/255.255.255.0 -j ACCEPT
### Estabelece a conexão para a rede Local
iptables -A FORWARD -m state --state ESTABLISHED,RELATED,NEW -j ACCEPT
## LIBERAR/BLOQUEAR A REDE LOCAL/ COMEÇA A TER ACESSO A INTERNET A REDE
## LOCAL
iptables -A INPUT -s 192.168.0.0/24 -j ACCEPT
#### LIBERA O PING AO SERVIDOR PARA REDE INTERNA ################
iptables -A INPUT -s 0/0 -i eth0 -p icmp -j ACCEPT
######## Regras de segurança contra Ataques, pings etc.. #############################
echo " Protegendo contra Pings ( ignorando ) .......... [ OK ]"
echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all
echo " Protegendo contra IP spoofing .......... [ OK ]"
echo 1 > /proc/sys/net/ipv4/conf/default/rp_filter
echo " Protegendo contra diversos ataques .......... [ OK ]"
echo 1 > /proc/sys/net/ipv4/conf/all/accept_source_route
echo " Protegendo contra bogus responses .......... [ OK ]"
echo 1 > /proc/sys/net/ipv4/icmp_ignore_bogus_error_responses
echo " Protegendo contra IP synflood .......... [ OK ]"
echo 1 > /proc/sys/net/ipv4/tcp_syncookies
iptables -A FORWARD -p tcp --syn -m limit --limit 1/s -j ACCEPT
echo " Protegendo contra ICMP Broadcasting .......... [ OK ]"
echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts
echo " Protegendo contra alteração de rota .......... [ OK ]"
echo 0 > /proc/sys/net/ipv4/conf/all/accept_redirects
echo " Protegendo contra Pings da Morte .......... [ OK ]"
iptables -A FORWARD -p icmp --icmp-type echo-request -m limit --limit 1/s -j ACCEPT
echo " Protegendo contra traceroute .......... [ OK ]"
iptables -A INPUT -p udp --dport 33435:33525 -j LOG --log-prefix "_BLOCKED_: "
iptables -A INPUT -p udp --dport 33435:33525 -j DROP
echo " Protegendo contra portscanners, ping of death, ataques DoS, etc. .......... [ OK ]"
iptables -A INPUT -m state --state INVALID -j LOG --log-prefix "_BLOCKED_: "
iptables -A INPUT -m state --state INVALID -j DROP
;;
stop)
echo "CUIDADO SUA MAQUINA ESTA SEM FIREWALL - ATENCAO!!!..."
iptables -P INPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -P OUTPUT ACCEPT
iptables -t nat -P PREROUTING ACCEPT
iptables -t nat -P POSTROUTING ACCEPT
iptables -F
iptables -t nat -F
;;
*)
echo "Digite start, restart ou stop para ativar/reativar/desativar"
exit 1
;;
esac
#################################################################################
Bem é isso pessoal, por enquanto ainda estou estudando e testando estas regras e outras, porém até o momento funcionou legal este script, agora é só alterar conforme sua necessidade, e ir estudando e testando outras regras.
Abraço!!
Referências:
http://www.hardware.com.br/livros/linux-redes/capitulo-firewall.html
http://www.vivaolinux.com.br
http://www.tccamargo.com/linux/tutoriais/iptables.html
Parabéns Cleio, seu script de firewall star muito bom, mas te deixo uma dica, dependendo do porte da rede não é muito viável configurar um proxy transparente, pois seria fácil de burlar, o ideal é configurá-lo normalmente e incluir o ip do proxy dentro do arquivo dhcpd.conf, para que as estações recebam o ip dinamicamente. Gostaria de agradecê-lo pelas visitas e por ter gostado do meu site quero que sinta-se a vontade para opinar e enviar dúvidas, caso tenha. Abraços...
ResponderExcluirfagner.mendes22@gmail.com
Valeu Fagner, no caso as regras para proxy transparentes estão comentadas, nos meus testes não utilizei o squid com proxy transparente, mas agradeço o toque que me deu, sobre a segurança.
ResponderExcluirAbraço!
qual regra devo fazer, pois os colaboradore tiram o proxy e consegue navegar tranquilo, utilizamos o mozila
ResponderExcluirEste comentário foi removido pelo autor.
ResponderExcluircara a regra para proxy transparente está comentada neste script, é só adaptar ao seu uso, vc precisa direcionar todo o trafego da porta 80 para a porta 3128, utilizada pelo Squid.
ResponderExcluirObrigado.
ResponderExcluir