As configurações abaixo são referentes ao servidor
GNU/Linux.
A partir deste ponto, serão necessários conhecimentos em algum editor de textos no ambiente GNU/Linux, eu recomendo o
Vim (Improved VI), mas fique à vontade para escolher o editor de sua preferência.
Como já é de conhecimento dos leitores, o caractere "#" na linha de comando representa uma console de super usuário (root) enquanto "$" representa uma console de usuário comum. Além disso, o caractere "#" pode também representar comentários, caso esteja presente dentro dos arquivos que serão editados.
No meu ambiente foram utilizadas duas interfaces de rede, simulando um ambiente real, onde uma interface possui acesso irrestrito à Internet (eth0) e a outra interface, apenas à rede local (eth1):
- eth0 → Internet Access (192.168.0.0/24)
- eth1 → Local Network (10.1.1.0/24)
1. O primeiro passo após a instalação do GNU/Linux é configurar o
SELinux para trabalhar em modo permissivo, desta forma ele não tomará qualquer atitude, irá apenas gerar logs de qualquer suposto acesso indevido.
Para isso é necessário editar o arquivo
/etc/selinux/config e alterar o parâmetro SELINUX para permissive.
Ex.:
SELINUX=permissive
2. O segundo passo é habilitar o encaminhamento de pacotes na pilha TCP, para isso será necessário editar um parâmetro de kernel que tem por padrão o valor "0".
Editar o
/etc/sysctl.conf e adicionar no final do arquivo o parâmetro:
net.ipv4.ip_forward = 1
Para que a alteração acima tenha efeito, executar o comando abaixo:
# sysctl -p
3. O terceiro passo chega a ser um pouco polêmico, pois trata-se da liberação completa do acesso da sua rede local para a Internet, mas você irá compreender esta necessidade no final deste tópico.
Para criar esta regra de firewall será utilizado o IPtables. Com esta regra, será feito o mascaramento das requisições da rede local (eth1) para a rede com acesso à Internet (eth0), desta forma, os programas do governo como ReceitaNet, Caixa FGTS, etc, irão funcionar sem maiores problemas.
# iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
4. Com o acesso irrestrito liberado pelo passo anterior, nada impede que o usuário remova as configurações de proxy do browser e consiga navegar tranquilamente sem qualquer filtro. Para evitar este tipo de acesso, deverá ser bloqueado a saída para a Internet através de HTTP e HTTPS direto.
# iptables -A FORWARD -p tcp -s 10.1.1.0/24 -i eth1 --sport 1024: -d 0/0 -o eth0 --dport 80 -j DROP
# iptables -A FORWARD -p tcp -s 10.1.1.0/24 -i eth1 --sport 1024: -d 0/0 -o eth0 --dport 443 -j DROP
Obs.: Caso queira bloquear o acesso irrestrito, apenas para alguns determinados IPs, basta alterar o parâmetro "-s" da configuração acima, especificando os IPs que deverão ser bloqueados.
# iptables -A FORWARD -p tcp -s 10.1.1.10/32 -i eth1 --sport 1024: -d 0/0 -o eth0 --dport 80 -j DROP
# iptables -A FORWARD -p tcp -s 10.1.1.10/32 -i eth1 --sport 1024: -d 0/0 -o eth0 --dport 443 -j DROP
5. Ajustar o hostname no arquivo
/etc/hosts, no meu caso, o nome do servidor é "monkey", e o arquivo ficou conforme exemplo abaixo:
127.0.0.1 localhost
192.168.0.10 monkey
10.1.1.1 monkey
6. Instalação do Squid
Existem formas muito simples de instalar o Squid, utilizando pacotes prontos para cada distribuição (".rpm" ou ".deb"), porém, após algumas horas de tentativas sem sucesso, reparei que as versões distribuídas já empacotadas são carentes de um parâmetro na compilação que é necessário para a configuração que iremos utilizar. Sendo assim, será necessário instalar o Squid através do fonte que pode ser obtido no site do projeto.
A versão do
OpenSSL utilizada na versão padrão do CentOS é mais atual e incompatível com o Squid. Após algumas tentativas sem sucesso na compilação, consegui identificar que seria necessário também instalar uma versão menos recente do OpenSSL através do fonte, que também pode ser obtido através do site do projeto.
Obs.: Obviamente, para que seja possível compilar os programas, serão necessários os compiladores de
C e
C++, que serão instalados através do YUM.
Segue abaixo o passo a passo que deve ser executado para efetuar a instalação do Squid:
# yum install gcc gcc-c++ openssl openssl-devel
# cd /root
# wget http://www.openssl.org/source/openssl-1.0.0g.tar.gz
# tar -xvzf openssl-1.0.0g.tar.gz
# cd openssl-1.0.0g
# ./config
# make
# make install
# cd /root
# wget http://www.squid-cache.org/Versions/v3/3.2/squid-3.2.1-20120915-r11661.tar.gz
# tar -xvzf squid-3.2.1-20120915-r11661.tar.gz
# cd squid-3.2.1-20120915-r11661
# ./configure --enable-ssl --enable-ssl-crtd --with-openssl="/root/openssl-1.0.0g"
# make all
# make install
# mkdir -p /usr/local/squid/var/lib/
# /usr/local/squid/libexec/ssl_crtd -c -s /usr/local/squid/var/lib/ssl_db
# chown -R nobody. /usr/local/squid/
7. O passo anterior pode ser um pouco demorado, dependendo da sua configuração de hardware disponível. Em seguida entra a configuração básica Squid, para isso será necessário customizar o arquivo de configurações:
/usr/local/squid/etc/squid.conf
As configurações adicionadas estão delimitadas por linhas comentadas.
acl CONNECT method CONNECT
#-------- Início config. adicionada --------#
# Configuracao customizada para o meu ambiente FGM (acl)
acl fgm_network src 10.1.1.0/24
acl badsites url_regex -i "/usr/local/squid/etc/restricted-sites"
# Configuracao customizada para o meu ambiente FGM (http_acess)
http_access deny badsites
http_access allow fgm_network
.....
http_port 3128 ssl-bump generate-host-certificates=on dynamic_cert_mem_cache_size=4MB cert=/usr/local/squid/etc/monkey.pem
.....
#-------- Fim config. adicionada --------#
#cache_dir ufs /usr/local/squid/var/cache/squid 100 16 256
#------- Início config. adicionada --------#
# SSL Configurations
always_direct allow all
ssl_bump allow all
#-------- Fim config. adicionada --------#
8. No passo anterior, foram customizadas as configurações do proxy para o seu ambiente e foi criada uma ACL que é utilizada para restringir o acesso a sites que possuam palavras específicas, que serão definidas pelo administrador.
O conteúdo restrito deve estar dentro do arquivo de restrições
/usr/local/squid/etc/restricted-sites, as palavras devem ser separadas por linha.
Exemplo:
facebook
twitter
tumblr
redtube
porn
xxx
9. Gerar a chave e o certificado que serão utilizados na configuração do Squid:
# openssl req -new -newkey rsa:1024 -days 365 -nodes -x509 -keyout /usr/local/squid/etc/monkey.pem -out /usr/local/squid/etc/monkey.pem
10. Exportar o certificado para o formato do browser:
# openssl x509 -in /usr/local/squid/etc/monkey.pem -outform DER -out /usr/local/squid/etc/monkey.der
Obs.: O arquivo "monkey.der" não tem qualquer utilidade no servidor, ele servirá apenas para o browser dos clientes, no meu caso, o cliente foi o Windows XP com
Firefox. A cópia do arquivo pode ser facilmente executada através do
winscp.
11. Iniciar o Squid:
# /usr/local/squid/sbin/squid start
Obs.: Os logs podem ser acompanhados através do diretório:
/usr/local/squid/logs
12. Importar o certificado (mokey.der) no browser (Chrome, Firefox, Safari e IE).
Segue abaixo o exemplo para o Firefox:
- Acesso à opção 'Options' do menu principal.
- Vá até a seção 'Advanced', e selecione a aba 'Encryption'.
- Clique no botão 'View Certificates' e vá até a aba 'Authorities'.
- Clique no botão 'Import', selecione o arquivo ".der", que foi criado anteriormente, e pressione 'OK'.
Obs.: A execução deste procedimento fará com o que o browser não apresente uma mensagem de alerta dizendo que o site não pode ser acessado, pois você não possui um certificado válido.
Referências
Obrigado.
Fabio G. Martins
LPIC ID - LPI000127547
CCNA ID - CSCO11016831