Implementação de um servidor Linux Squid + Iptables + DHCP

Este artigo nos mostrará de forma simples a configuração de um firewall iptables trabalhando com Squid transparente e serviço DHCP para ambientes sem políticas rígidas de acesso. A distribuição utilizada foi a openSuSE Linux 10.2.

[ Hits: 53.619 ]

Por: William Robert Neumann em 07/10/2008 | Blog: https://br.linkedin.com/in/williamneumann1


Script iptables



O iptables atua como uma poderosa ferramenta para confecção de firewalls baseados em GNU/Linux. A grande vantagem em utilizar um firewall iptables é que podemos alcançar uma alta performance na máquina servidor, pois ele trabalha na própria arquitetura do kernel, o que o torna muito superior em relação aos seus concorrentes.

A tabela filter

  • INPUT: tudo o que entra no firewall;
  • FORWARD: tudo que chega no firewall mas deve ser redirecionado a um host secundário;
  • OUTPUT: tudo que sai do firewall.

A tabela NAT

  • PREROUTING: utilizado quando há a necessidade de se fazer alterações em pacotes antes que os mesmos sejam roteados;
  • POSTROUTING: utilizado quando há a necessidade de se fazer alterações em pacotes após o tratamento de roteamento.

Criando as pastas necessárias para nosso firewall:

# mkdir /etc/firewall
# mkdir /var/log/firewall


Hora de trabalhar:

# vi /etc/firewall/firewall

#!/bin/sh
#########################################
# IPTABLES
# William Robert Neumann
# williamrn@gmail.com
#########################################


case "$1" in
       start)
         echo "starting firewall..."

#Variáveis
IPTABLES="/usr/sbin/iptables"
LAN=eth0
LAN1=eth3
LAN_INT="192.168.1.0/24"

#Módulos IPTABLES
modprobe ip_tables
modprobe iptable_nat
modprobe ip_conntrack
modprobe ip_conntrack_ftp
modprobe ip_nat_ftp
modprobe ipt_REJECT
modprobe ipt_MASQUERADE
modprobe ipt_state
modprobe ipt_multiport
modprobe iptable_mangle
modprobe ipt_limit

echo "#######################################"
echo "#IPTABLES"
echo "#William Robert Neumann"
echo "#williamrn@gmail.com"
echo "#######################################"

#Zera todas as regras do iptables
$IPTABLES -F
$IPTABLES -F INPUT
$IPTABLES -F OUTPUT
$IPTABLES -F FORWARD
$IPTABLES -t nat -F
$IPTABLES -X

#Políticas Padrão
$IPTABLES -P INPUT DROP
$IPTABLES -P OUTPUT ACCEPT
$IPTABLES -P FORWARD DROP

#Ativar ip_forward
echo "1" > /proc/sys/net/ipv4/ip_forward

#Desabilitar respostas a comandos ping
echo "1" > /proc/sys/net/ipv4/icmp_echo_ignore_all

#####################################
# FILTER INPUT
#####################################
#Libera SSH

$IPTABLES -I INPUT -p tcp --dport 22 -s 172.27.1.39 -j ACCEPT
$IPTABLES -I INPUT -p tcp --dport 22 -s 172.27.1.23 -j ACCEPT

#Liberar Proxy para rede interna
$IPTABLES -A INPUT -p tcp -i eth3 -s $LAN_INT --dport 8090 -j ACCEPT

#Habilitando o icmp interno
$IPTABLES -I INPUT -i lo -j ACCEPT
echo "Ativado o fluxo interno"
echo "ON ....................................................... [ OK ]"

#Libera as portas principais do servidor
$IPTABLES -I INPUT -m state --state ESTABLISHED -j ACCEPT
$IPTABLES -I INPUT -m state --state RELATED -j ACCEPT
$IPTABLES -I INPUT -p icmp -j ACCEPT
echo "Ativado a liberação das portas principais"
$IPTABLES -I INPUT -p udp -s $LAN_INT --dport 53 -j ACCEPT

######################################
# FILTER OUTPUT
######################################
#Habilitando o icmp interno

$IPTABLES -I OUTPUT -o lo -j ACCEPT

##########################################################
# FILTER FORWARD
######################################
#Roteamento de placas de REDE iptables

$IPTABLES -A FORWARD -s 0/0 -d 0/0 -j ACCEPT
$IPTABLES -A FORWARD -s $LAN_INT -p tcp --dport 8090 -j ACCEPT

#DNS
$IPTABLES -A FORWARD -p udp -s $LAN_INT --dport 53 -j ACCEPT

######################################
# PING-MORTE
######################################
#Bloqueio ping da morte

$IPTABLES -N PING-MORTE
$IPTABLES -A INPUT -p icmp --icmp-type echo-request -j PING-MORTE
$IPTABLES -A PING-MORTE -m limit --limit 1/s --limit-burst 4 -j RETURN
$IPTABLES -A PING-MORTE -j DROP
echo "Ativado o bloqueio a tentativa de ataque ping da morte"
echo "ON ....................................................... [ OK ]"

####################################
# SYN ACK and FIN
####################################
#Bloqueio de scanners ocultos (Shealt Scan)

$IPTABLES -A FORWARD -p tcp --tcp-flags SYN,ACK, FIN, -m limit --limit 1/s -j ACCEPT
echo "Bloqueado scanners ocultos"
echo "ON ....................................................... [ OK ]"

######################################
# SSH-BRUT-FORCE
######################################
#Bloqueio de ataque ssh de força bruta

$IPTABLES -N SSH-BRUT-FORCE
$IPTABLES -A INPUT -i $LAN -p tcp --dport 22 -j SSH-BRUT-FORCE
$IPTABLES -A SSH-BRUT-FORCE -m limit --limit 1/s --limit-burst 4 -j RETURN
$IPTABLES -A SSH-BRUT-FORCE -j DROP
echo "Ativado o bloqueio a tentativa de ataque do tipo SSH-BRUT-FORCE"
echo "ON ....................................................... [ OK ]"

######################################
# NAT
######################################

############################
# BLOQUEANDO MSN
############################

$IPTABLES -t nat -I PREROUTING -p TCP --dport 1863 -j DROP
$IPTABLES -t nat -I PREROUTING -d loginnet.passport.com -j DROP

#Habilita o roteamento da porta 80 para nosso Proxy transparente
$IPTABLES -t nat -A PREROUTING -i eth3 -p tcp --dport 80 -j REDIRECT --to-port 8090
echo "Regra para proxy transparente habilitada"
echo "ON ....................................................... [ OK ]"

#Roteamento de interface
$IPTABLES -t nat -I POSTROUTING -s 0/0 -j MASQUERADE
echo "Ativado o redirecionamento  ip_forward"
echo "ON ....................................................... [ OK ]"

#Zera contadores
echo "FIREWALL CARREGADO COM SUCESSO!!"
echo "ON ....................................................... [ OK ]"
;;
restart)
$0 stop
$0 start
;;
status)
iptables-save > /var/log/firewall |less
cat /var/firewall/firewall
;;
stop)
iptables -F
iptables -P INPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -P FORWARD ACCEPT
echo "stoping firewall..."
;;
*)
echo "usage: {start|stop|restart}"
exit 1
esac
exit 0

Após a configuração do script é necessário configurar com as permissões de execução, salvar e sair do arquivo, lembrando que todas as configurações foram feitas utilizando o editor de textos "VI".

# chmod +x /etc/firewall/firewall

Ufa, o script está quase pronto para ser utilizado.

Carregando o script durante o boot


Instalando o script com as permissões necessárias:

# install -o root -g root -m 755 /etc/firewall/firewall /etc/rc.d/init.d/
# chkconfig -a /etc/init.d/firewall


O script está pronto para ser inicializado no boot do sistema.

Página anterior     Próxima página

Páginas do artigo
   1. Instalação do Squid
   2. Script iptables
   3. Serviço DHCP
Outros artigos deste autor
Nenhum artigo encontrado.
Leitura recomendada

Squid + proxy transparente + autentificação + SSL

Squid como proxy transparente: Instalando e configurando

Limitando download com Squid

Grace - Usando a função "Regression"

Configurar servidor proxy Squid (Ubuntu)

  
Comentários
[1] Comentário enviado por renato.leite em 07/10/2008 - 14:51h

muito bom o artigo xD

[2] Comentário enviado por Felipe16 em 07/10/2008 - 22:12h

Muito bom artigo..
Mas eu prefiro deixar o output do firewall como DROP =P

[3] Comentário enviado por k4mus em 08/10/2008 - 21:28h

fera, se la em cima todos os pacotes icmp estao bloqueados...qual a necessidade dessa regra contra o ping da morte? nao é redondancia nao?

[4] Comentário enviado por williamrn em 08/10/2008 - 21:48h

É verdade k4mus eu havia feito essa mudança no script para desabilitar respostas a comandos ping da rede inteira e não retirei a regra do PING-MORTE, realmente não haveria necessidade de bloquear lá em cima e criar outra regra para bloqueio contra icmp novamente, acabou se tornando uma redundância, obrigado pelo comentário, abraço!

[5] Comentário enviado por k4mus em 08/10/2008 - 23:10h

vlw,Obrigado pela rsposta williamrn.

abraço

[6] Comentário enviado por k4mus em 08/10/2008 - 23:19h

Amigo, so mais uma duvida. Quanto a regra : IPTABLES -A FORWARD -s 0/0 -d 0/0 -j ACCEPT , neste caso voce estaria abrindo todas as portas de qualqeur origem pra qualquer destino da tabela FORWARD, né isso ne? Esta correto?

..Desculpe ae as perguntas é pq ainda sou um pouco novato em iptables. :)


obrigado.

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

bom artigo !!
abraços

[8] Comentário enviado por jocie em 12/10/2008 - 18:55h

muito bom mesmo o artigo,mas vc poderia me dar alguma dica a respeito do squid pra duas redes local.como criar acls separadamentes para redes

[9] Comentário enviado por williamrn em 13/10/2008 - 20:27h

Opa, eae k4mus desculpa a demora para responder, essa regra: 'IPTABLES -A FORWARD -s 0/0 -d 0/0 -j ACCEPT' aceita tanto para rede interna como externa de tudo para tudo, esse tipo de servidor não trabalhar em cima de políticas de bloqueio, como diz na descrição do artigo é para ambiente sem políticas rígidas de acesso, é interessante usar essa solução em lan house que podemos ter um maior aproveitamento da banda de internet devido a forma que o squid trabalha armazenando localmente páginas html, imagens e arquivos da internet, isso melhora a qualidade da banda de internet.

Abraços !

[10] Comentário enviado por williamrn em 13/10/2008 - 21:10h

Boa noite joice, td bem ?
Esse artigo eu procurei escrever e configurar ele da forma mais simples possível o arquivo squid.conf você pode observar que foi modificado apenas dois parâmetros, bom vamos lá, em relação as acl`s poderia ficar da seguinte forma.

#Criando as redes
acl LAN_INT1 src 192.168.1.0/24 #Rede 1
acl LAN_INT2 src 192.168.2.0/24 #Rede 2

#Regra para liberar a Rede 1
http_access allow LAN_INT1

#Regra para liberar a Rede 2
http_access allow LAN_INT2

#Negar o Resto
http_acceess deny all

Bom, como eu disse antes essa é uma configuração apenas funcional para utilizar o cache do squid, muitas outras configurações podem ser feita editando o arquivo squid.conf.

Abraço!

[11] Comentário enviado por comfaa em 14/10/2008 - 08:52h

muito bom !!

[12] Comentário enviado por mar.almeida em 14/10/2008 - 10:21h

Olá amigo,
Gostaria de saber um passo a passo para instalar o squid no fedora 9

Obrigado


[13] Comentário enviado por williamrn em 14/10/2008 - 23:15h

Boa noite mar.almeida, td bem ?
Você pode instalar o squid da seguinte forma, baixando o código fonte, verifique a versão mais recente no site http://www.squid-cache.org/Versions/v2/

# wget http://www.squid-cache.org/Versions/v2/2.7/squid-2.7.STABLE4.tar.gz
# tar xzvf squid-2.7.STABLE4.tar.gz
# groupadd squid
# useradd -g squid -s /dev/null squid >/dev/null 2>&1
# ./configure --prefix=/etc/squid
# make all
# make install

Abraço!

[14] Comentário enviado por comfaa em 28/10/2008 - 12:53h

muito bom


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts