terça-feira, 6 de agosto de 2013

Squid configurado como proxy no Ubuntu Server


Passo I: Configuração e Instalação

Configurando as interfaces de rede

Partindo do pressuposto que o sistema operacional, no caso o Ubuntu Server 11, já esteja instalado. Verifique as placas de rede que foram reconhecidas:

$ sudo ifconfig

Exemplo:

eth0    Link encap:Ethernet HWaddr 00:0a:5e:65:a6:af
          inet addr:192.168.x.x Bcast:192.168.x.255 Mask:255.255.255.0
          inet6 addr: fe80::20a:5eff:fe65:a6af/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
          RX packets:288803 errors:0 dropped:0 overruns:0 frame:0
          TX packets:196541 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:325622713 (325.6 MB) TX bytes:28563856 (28.5 MB)
          Interrupt:19

lo       Link encap:Local Loopback
          inet addr:127.0.0.1 Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING MTU:16436 Metric:1
          RX packets:37 errors:0 dropped:0 overruns:0 frame:0
          TX packets:37 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:16972 (16.9 KB) TX bytes:16972 (16.9 KB)


Se não reconhecer a outra(s) placa(s) de rede. Use o seguinte comando para cada placa de rede que você instalou e não apareceu.

Exemplo:

$ sudo ifconfig eth1 up

Para verificar, use o ifconfig novamente:

$ sudo ifconfig

eth0    Link encap:Ethernet HWaddr 00:0a:5e:65:a6:af
          inet addr:192.168.x.x Bcast:192.168.x.255 Mask:255.255.255.0
          inet6 addr: fe80::20a:5eff:fe65:a6af/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
          RX packets:288803 errors:0 dropped:0 overruns:0 frame:0
          TX packets:196541 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:325622713 (325.6 MB) TX bytes:28563856 (28.5 MB)
          Interrupt:19

eth1    Link encap:Ethernet HWaddr 00:1e:c9:3e:0a:fe
          inet addr:192.168.y.y Bcast:192.168.y.255 Mask:255.255.255.0
          inet6 addr: fe80::21e:c9ff:fe3e:afe/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
          RX packets:187374 errors:0 dropped:0 overruns:0 frame:0
          TX packets:276611 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:26530616 (26.5 MB) TX bytes:315087701 (315.0 MB)
          Interrupt:18

lo       Link encap:Local Loopback
          inet addr:127.0.0.1 Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING MTU:16436 Metric:1
          RX packets:37 errors:0 dropped:0 overruns:0 frame:0
          TX packets:37 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:16972 (16.9 KB) TX bytes:16972 (16.9 KB)


Agora, configure suas interfaces de rede:

$ sudo vi /etc/network/interfaces

Obs.: O arquivo deverá ficar semelhante ao exemplo abaixo:

# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).

# The loopback network interface

auto lo
iface lo inet loopback

# The primary network interface
auto eth0 eth1 #para subir as interfaces automaticamente no reboot e não precisar usar o comando sudo ifconfig “placa de rede” up


Exemplo:

iface eth0 inet static # configurar a saída de rede ( Seu IP Interno para um gateway ou IP Público)
address 192.168.x.x #IP de saída
netmask 255.255.255.0 #mascará padrão
network 192.168.x.0 # Inicio da rede
broadcast 192.168.x.255 # Fim da rede
gateway 192.168.x.x #gateway que sua rede aponta
# dns-* options are implemented by the resolvconf package, if installed
dns-nameservers 8.8.8.8 # estou usando o DNS externo da Google

iface eth1 inet static #Placa de rede que irá controlar a rede interna
address 192.168.2.1 # IP desta placa
netmask 255.255.255.0 # Máscara padrão
network 192.168.2.0 # Inicio desta rede
broadcast 192.168.2.255 # Fim desta rede


Inserir DNS de seu Provedor:

$ sudo vi /etc/resolv.conf

Exemplo:

nameserver 8.8.8.8
nameserver 8.8.4.4


Reinicie as interfaces de rede:

$ sudo /etc/init.d/networking restart

Pode ser que dê uma mensagem de falha em uma das interfaces, mas não se preocupe (pelo menos neste momento, não).

Instalações necessárias

Atualize o sistema, antes de prosseguir, com o seguinte comando:

$ sudo apt-get update –y;apt-get upgrade –y

Instale alguns programas e bibliotecas que ajudarão a manipular o GNU/Linux:

$ sudo apt-get install gcc g++ mc openssh-server libnet-ssleay-perl libauthen-pam-perl líbio-pty-perl

Instale o Squid, utilizando o comando:

$ sudo apt-get install squid squid-common bind9

Passo II: mão na massa

Entre no diretório do Squid:

$ cd /etc/squid

Obs.: Você verá um arquivo chamado squid.conf. Antes de editá-lo (ou antes de editar qualquer arquivo no GNU/Linux) crie um backup.

Exemplo:

$ sudo cp squid.conf squid.conf.ori

Onde:
  • O comando cp cria uma cópia;
  • squid.conf é o arquivo a ser copiado;
  • squid.conf.ori foi o nome que dei ao arquivo de backup.

Agora, edite o squid.conf:

Obs.: O mcedite é um editor de textos instalado anteriormente no comando:

# apt-get install mc

$ sudo mcedit squid.conf

Exemplo:

#Inicio
http_port 192.168.2.1:3128 transparent #3128 porta do direcionamento e transparente

visible_hostname nome_do_servidor
hierarchy_stoplist cgi-bin ?
acl QUERY urlpath_regex cgi-bin \?

cache_mem 400 MB #Quantidade de Cache que deseja permitir
maximum_object_size 512 KB #tamanho Maximo de cache
minimum_object_size 0 KB # arquivo mínimo de uso do HD
cache_swap_low 50 #em porcentagem – quanddo começar a liberar espaço de cache ele manterá até esse valor
cache_swap_high 90 #em porcentagem – começa a liberar o espaço de cachê (apagando cache mais antigos)
cache_access_log /var/log/squid/access.log #armazena os logs
cache_dir ufs /var/spool/squid 2048 16 256 # Cache no HD (espaço em disco para cache das páginas)
#2048 MG de espaço para cachê- 16 pastas e dentro e das 16 temos mais 256 pastas dentro delas.

refresh_pattern ^ftp: 15 20% 2280
refresh_pattern ^gopher: 15 0% 2280
refresh_pattern . 15 20% 2280

acl all src 192.168.2.0/255.255.255.0
#acl – all é o nome da acl – src é o tipo de acl – o IP identifica a rede local/ mascará padrão

acl manager proto cache_object
acl SSL_ports port 443 563
acl Safe_ports port 80
acl Safe_ports port 21
acl Safe_ports port 443 563
acl Safe_ports port 70
acl Safe_ports port 210
acl Safe_ports port 1025-65535
acl Safe_ports port 280
acl Safe_ports port 488
acl Safe_ports port 591
acl Safe_ports port 777
acl bloqueio url_regex -i "/etc/squid/bloqueados" # arquivos de palavras bloqueadas
acl CONNECT method CONNECT
acl redelocal src 192.168.2.0 # rede que se atribui as ACl’s

http_access allow redelocal # libera acesso da rede local
http_access deny !Safe_ports
http_access deny CONNECT !SSL_ports
http_access deny bloqueio
http_access allow all


Tecle F2 para salvar o arquivo e F10 para sair do editor.

Crie um arquivo com todas as palavras para bloquear:

$ sudo mcedit bloqueados

E dentro do arquivo insira as palavras. Salve e saia do editor. 
 
 

Passo III: Script do firewall

Entre no init.d:

$ cd /etc/init.d

Crie um arquivo de firewall:

$ sudo mcedit firewall.sh

Exemplo:

iptables_start(){
iptables -F
iptables -X
iptables -t nat -F
iptables -t nat -X
iptables -t filter -F
iptables -t filter -X
iptables -t mangle -F
iptables -t mangle -X

modprobe ip_tables
modprobe iptable_nat
modprobe ip_conntrack

iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
################################################################
#ATIVA REGRA SQUID


iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
iptables -t nat -A PREROUTING -i eth1 -p tcp --dport 80 -j REDIRECT --to-port 3128

echo "1" > /proc/sys/net/ipv4/icmp_echo_ignore_all
echo "1" < /proc/sys/net/ipv4/tcp_syncookies
echo "0" > /proc/sys/net/ipv4/conf/eth0/accept_source_route
echo "0" > /proc/sys/net/ipv4/conf/eth1/accept_source_route
echo "1" > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts

#################################################################
#LIBERA ACESSO PARA REDE


iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -p tcp --syn -s 192.168.2.0/255.255.255.0 -j ACCEPT

#################################################################
#Aqui poderão ser inseridas regras para bloqueios Ex: torrents, P2P,...
#################################################################
#FINALIZA ARQUIVO
#################################################################

#################################################################
#REGRAS DE EXCESSÃ(ACESSO LIVRE DO FIREWALL) Permite aceeso sem passar pelas regras
#################################################################

iptables -t nat -I PREROUTING 1 -p tcp -s 192.168.2.100 --dport 1:65334 -j ACCEPT
#################################################################

echo 1 > /proc/sys/net/ipv4/ip_forward

}

iptables_stop(){
iptables -F
iptables -X
iptables -P INPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -P OUTPUT ACCEPT
}

case "$1" in
"start")
iptables_start
;;
"stop")
iptables_stop
echo "O iptables esta sendo desativado"
sleep 2
echo "ok"
;;
"restart")
echo "O iptables esta sendo desativado"\e sleep 1
echo "ok"
iptables_stop; iptables_start
;;
*)
iptables -L -n
esac


Salve o arquivo e saia do Editor. Dê prioridade ao root neste arquivo:

$ sudo chown root.root firewall.sh

Mude a permissão do arquivo:

$ sudo chmod 755 firewall.sh

Tornando o script uma tarefa do sistema ao reinicializar:

$ sudo update-rc.d firewall defaults
 
 

Passo IV: Finalizando com BIND

Entre no diretório do BIND:

$ cd /etc/bind

Edite o arquivo named.conf.options:

Obs.: Descomente as linhas e insira os DNS externos (estou usando o do Google, mas você pode usar o DNS de seu provedor):

forwarders {
    8.8.8.8;
           8.8.4.4;
           };


$ sudo mcedite named.conf.options

Exemplo:

options {
            directory "/var/cache/bind";

            // If there is a firewall between you and nameservers you want
            // to talk to, you may need to fix the firewall to allow multiple
            // ports to talk. See http://www.kb.cert.org/vuls/id/800113

            // If your ISP provided one or more IP addresses for stable
            // nameservers, you probably want to use them as forwarders.
            // Uncomment the following block, and insert the addresses replacing
            // the all-0's placeholder.


            forwarders {
                     8.8.8.8;
    8.8.4.4;
            };

            auth-nxdomain no; # conform to RFC1035
            listen-on-v6 { any; };
};


Agora reboot o sistema:

$ sudo reboot

Obs.: Nas máquinas clientes, aponte o Gateway para o IP da rede interna e teste sua rede.

Nenhum comentário:

Postar um comentário