Firewall/Proxy (solução completa)
Nesse artigo tento passar da melhor forma possível uma receita para configuração de um firewall/proxy com grande ênfase em segurança.
Parte 6: Instalando e configurando o squid-cache
Existem vários métodos para se instalar o Squid, tanto via source ou via pacotes das distros. Como estou usando Slackware, fiz o download do pacote do www.linuxpackages.net na versão estável.
# installpkg squid-stable.tgz
Por padrão ele gerou os seus arquivos de configuração no /etc/squid. Agora vamos configurar o arquivo squid.conf. Primeiramente vou falar que estarei usando o método de autenticação NCSA. Existem muitos outros como autenticação integrada com domínios (Active Directory e Samba, LDAP), mas como não possuo um servidor na rede, terei que usar o método NCSA.
Abaixo está o arquivo squid.conf comentado:
# installpkg squid-stable.tgz
Por padrão ele gerou os seus arquivos de configuração no /etc/squid. Agora vamos configurar o arquivo squid.conf. Primeiramente vou falar que estarei usando o método de autenticação NCSA. Existem muitos outros como autenticação integrada com domínios (Active Directory e Samba, LDAP), mas como não possuo um servidor na rede, terei que usar o método NCSA.
Abaixo está o arquivo squid.conf comentado:
http_port 28021
hierarchy_stoplist cgi-bin ?
acl QUERY urlpath_regex cgi-bin ?
no_cache deny QUERY
cache_mem 100 MB
cache_dir ufs /cache 2100 16 256
cache_access_log /var/lib/squid/logs/access.log
cache_log /var/lib/squid/logs/cache.log
cache_store_log /var/lib/squid/logs/store.log
auth_param basic program /usr/libexec/ncsa_auth /etc/squid/passwd
auth_param basic children 5
auth_param basic realm Squid proxy-caching web server
auth_param basic credentialsttl 2 hours
auth_param basic casesensitive off
refresh_pattern ^ftp: 1440 20% 10080
refresh_pattern ^gopher: 1440 0% 1440
refresh_pattern . 0 20% 4320
acl all src 0.0.0.0/0.0.0.0
acl manager proto cache_object
acl localhost src 127.0.0.1/255.255.255.255
acl to_localhost dst 127.0.0.0/8
acl SSL_ports port 443 563
acl Safe_ports port 80 # http
acl Safe_ports port 21 # ftp
acl Safe_ports port 25 # smtp
acl Safe_ports port 443 563 # https, snews
acl Safe_ports port 70 # gopher
acl Safe_ports port 210 # wais
acl Safe_ports port 110 # POP
acl Safe_ports port 210 # wais
acl Safe_ports port 1025-65535 # unregistered ports
acl Safe_ports port 280 # http-mgmt
acl Safe_ports port 488 # gss-http
acl Safe_ports port 591 # filemaker
acl Safe_ports port 777 # multiling http
acl CONNECT method CONNECT
acl rede_interna src 10.0.0.0/32 #Rede Interna
acl adm proxy_auth "/etc/squid/adm"
acl user1 proxy_auth "/etc/squid/usuarios/user1" #Usuários
acl user2 proxy_auth "/etc/squid/usuarios/user2"
acl user3 proxy_auth "/etc/squid/usuarios/user3"
acl user4 proxy_auth "/etc/squid/usuarios/user4"
acl user5 proxy_auth "/etc/squid/usuarios/user5"
acl user6 proxy_auth "/etc/squid/usuarios/user6"
acl user7 proxy_auth "/etc/squid/usuarios/user7"
acl user8 proxy_auth "/etc/squid/usuarios/user8"
acl user9 proxy_auth "/etc/squid/usuarios/user9"
acl permit_user1 url_regex -i "/etc/squid/acessos/user1" #Acessos dos usuários
acl permit_user2 url_regex -i "/etc/squid/acessos/user2"
acl permit_user3 url_regex -i "/etc/squid/acessos/user3"
acl permit_user4 url_regex -i "/etc/squid/acessos/user4"
acl permit_user5 url_regex -i "/etc/squid/acessos/user5"
acl permit_user6 url_regex -i "/etc/squid/acessos/user6"
acl permit_user7 url_regex -i "/etc/squid/acessos/user7"
acl permit_user8 url_regex -i "/etc/squid/acessos/user8"
acl permit_user9 url_regex -i "/etc/squid/acessos/user9"
http_access allow manager localhost
http_access deny manager
http_access deny !Safe_ports
http_access deny CONNECT !SSL_ports
http_access allow adm rede_interna
http_access allow user1 permit_user1 rede_interna #Efetivando a acl
http_access allow user2 permit_user2 rede_interna
http_access allow user3 permit_user3 rede_interna
http_access allow user4 permit_user4 rede_interna
http_access allow user5 permit_user5 rede_interna
http_access allow user6 permit_user6 rede_interna
http_access allow user7 permit_user7 rede_interna
http_access allow user8 permit_user8 rede_interna
http_access allow user9 permit_user9 rede_interna
http_access allow user10 permit_user10 rede_interna
http_access allow user11 permit_user11 rede_interna
http_access allow user12 permit_user12 rede_interna
http_access allow user13 permit_user13 rede_interna
http_access allow user14 permit_user14 rede_interna
http_access allow user15 permit_user15 rede_interna
http_access allow user16 permit_user16 rede_interna
http_access allow user17 permit_user17 rede_interna
http_access allow user18 permit_user18 rede_interna
http_access allow user19 permit_user19 rede_interna
http_access deny all
http_reply_access allow all
icp_access allow all
hierarchy_stoplist cgi-bin ?
acl QUERY urlpath_regex cgi-bin ?
no_cache deny QUERY
cache_mem 100 MB
cache_dir ufs /cache 2100 16 256
cache_access_log /var/lib/squid/logs/access.log
cache_log /var/lib/squid/logs/cache.log
cache_store_log /var/lib/squid/logs/store.log
auth_param basic program /usr/libexec/ncsa_auth /etc/squid/passwd
auth_param basic children 5
auth_param basic realm Squid proxy-caching web server
auth_param basic credentialsttl 2 hours
auth_param basic casesensitive off
refresh_pattern ^ftp: 1440 20% 10080
refresh_pattern ^gopher: 1440 0% 1440
refresh_pattern . 0 20% 4320
acl all src 0.0.0.0/0.0.0.0
acl manager proto cache_object
acl localhost src 127.0.0.1/255.255.255.255
acl to_localhost dst 127.0.0.0/8
acl SSL_ports port 443 563
acl Safe_ports port 80 # http
acl Safe_ports port 21 # ftp
acl Safe_ports port 25 # smtp
acl Safe_ports port 443 563 # https, snews
acl Safe_ports port 70 # gopher
acl Safe_ports port 210 # wais
acl Safe_ports port 110 # POP
acl Safe_ports port 210 # wais
acl Safe_ports port 1025-65535 # unregistered ports
acl Safe_ports port 280 # http-mgmt
acl Safe_ports port 488 # gss-http
acl Safe_ports port 591 # filemaker
acl Safe_ports port 777 # multiling http
acl CONNECT method CONNECT
acl rede_interna src 10.0.0.0/32 #Rede Interna
acl adm proxy_auth "/etc/squid/adm"
acl user1 proxy_auth "/etc/squid/usuarios/user1" #Usuários
acl user2 proxy_auth "/etc/squid/usuarios/user2"
acl user3 proxy_auth "/etc/squid/usuarios/user3"
acl user4 proxy_auth "/etc/squid/usuarios/user4"
acl user5 proxy_auth "/etc/squid/usuarios/user5"
acl user6 proxy_auth "/etc/squid/usuarios/user6"
acl user7 proxy_auth "/etc/squid/usuarios/user7"
acl user8 proxy_auth "/etc/squid/usuarios/user8"
acl user9 proxy_auth "/etc/squid/usuarios/user9"
acl permit_user1 url_regex -i "/etc/squid/acessos/user1" #Acessos dos usuários
acl permit_user2 url_regex -i "/etc/squid/acessos/user2"
acl permit_user3 url_regex -i "/etc/squid/acessos/user3"
acl permit_user4 url_regex -i "/etc/squid/acessos/user4"
acl permit_user5 url_regex -i "/etc/squid/acessos/user5"
acl permit_user6 url_regex -i "/etc/squid/acessos/user6"
acl permit_user7 url_regex -i "/etc/squid/acessos/user7"
acl permit_user8 url_regex -i "/etc/squid/acessos/user8"
acl permit_user9 url_regex -i "/etc/squid/acessos/user9"
http_access allow manager localhost
http_access deny manager
http_access deny !Safe_ports
http_access deny CONNECT !SSL_ports
http_access allow adm rede_interna
http_access allow user1 permit_user1 rede_interna #Efetivando a acl
http_access allow user2 permit_user2 rede_interna
http_access allow user3 permit_user3 rede_interna
http_access allow user4 permit_user4 rede_interna
http_access allow user5 permit_user5 rede_interna
http_access allow user6 permit_user6 rede_interna
http_access allow user7 permit_user7 rede_interna
http_access allow user8 permit_user8 rede_interna
http_access allow user9 permit_user9 rede_interna
http_access allow user10 permit_user10 rede_interna
http_access allow user11 permit_user11 rede_interna
http_access allow user12 permit_user12 rede_interna
http_access allow user13 permit_user13 rede_interna
http_access allow user14 permit_user14 rede_interna
http_access allow user15 permit_user15 rede_interna
http_access allow user16 permit_user16 rede_interna
http_access allow user17 permit_user17 rede_interna
http_access allow user18 permit_user18 rede_interna
http_access allow user19 permit_user19 rede_interna
http_access deny all
http_reply_access allow all
icp_access allow all
Deixa eu explicar os parâmetros acima. Criei uma pasta chamada "usuarios" dentro de /etc/squid. Nesta pasta há um arquivo para cada usuário. Também criei uma pasta chamada acessos, onde há um arquivo para cada usuário.
Na pasta acessos estão os arquivos que vou editar e colocar os sites permitidos para navegação de cada usuário. Por exemplo, se tivermos vários usuários com mesma permissão de acesso aos sites, simplesmente edito um arquivo da pasta usuarios e coloco todos em único usuário e na pasta "acessos" coloco os sites permitidos para esse grupo de usuários em um arquivo. Exemplo:
# vim /etc/squid/usuarios/user1
pedro
# vim /etc/squid/acessos/user1
www.vivaolinux.com.br
www.kernel.org
www.freebsd.org
www.kernel.org
www.freebsd.org
Se repararmos veremos que "pedro" tem acesso aos sites que estão no arquivo user1 dentro de acessos.
Excelente artigo.