Servidor Debian - Parte 3 - Firewall e Proxy





 Em um rede é essencial ter segurança.

 

 Squid

Para configurar o proxy, utilizaremos o Squid-cache.


apt install squid

  • Conf:/etc/squid3/squid.conf
  • Dica: Para saber a quantidade total de memória para definição do cache, utilizar o comando free -mt
  • Dica: Para saber a quantidade total do uso do disco para definição do cache, utilizar o comando df -h
Ex.:
# Porta do Squid
http_port 10357 

# Nome do servidor
visible_hostname squidServer

# Cache
cache_mem 64 MB
maximum_object_size_in_memory 1 MB
maximum_object_size 512 MB
minimum_object_size 3 KB
cache_swap_low 90
cache_swap_high 95
cache_dir ufs /var/spool/squid3/cache 2048 16 256

# Logs de acesso
cache_access_log /var/log/squid3/access.log
cache_log /var/log/squid3/cache.log
logfile_rotate 6
error_directory /usr/share/squid3/errors/pt-br

#padrão de utilização do cache
refresh_pattern ^ftp: 15 20% 2280
refresh_pattern ^gopher: 15 0% 2280
refresh_pattern . 15 20% 2280

# Autenticacao por nomes e senhas do Samba
auth_param basic program /usr/lib/squid3/smb_auth -W dominioPDC -U 192.168.2.2
auth_param basic realm Bem vindo a rede ... Por favor entre com o seu Usuario e Senha
auth_param basic children 5
auth_param basic credentialsttl 2 hour
auth_param basic casesensitive off

# Regras acl padrão
#acl all src 0.0.0.0/0.0.0.0
acl network src 192.168.2.0/24
acl manager proto cache_object
acl localhost src 127.0.0.1/32
acl SSL_ports port 443 563 873
acl Safe_ports port 80 # http
acl Safe_ports port 21 # ftp
acl Safe_ports port 443 563 873 # https, snews
acl Safe_ports port 70 # gopher
acl Safe_ports port 210 # wais
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 Safe_ports port 901 # swat
acl Safe_ports port 1025-65535 # portas altas
acl purge method PURGE
acl CONNECT method CONNECT

# Permissões e bloqueios padrão
http_access allow manager localhost
http_access deny manager
http_access allow purge localhost
http_access deny purge
http_access deny !Safe_ports
http_access deny CONNECT !SSL_ports

# Permissão rede local e servidor
acl user_lib src "/etc/squid3/acl/user_lib"
acl cont_lib url_regex -i "/etc/squid3/acl/cont_lib"
acl download url_regex -i "/etc/squid3/acl/download"
acl cont_bloq url_regex -i "/etc/squid3/acl/cont_bloq"
acl user_bloq src "/etc/squid3/acl/user_bloq"
#samba
acl autenticacao proxy_auth REQUIRED
#acl nomes proxy_auth teste

http_access deny !network
http_access allow autenticacao
http_access allow user_lib
http_access allow cont_lib
http_access deny download
http_access deny cont_bloq
http_access allow user_bloq

#regras para limitar consumo de banda
#delay_pools 1
#delay_class 1 2
#delay_parameters 1 114688/114688 16384/16348 #banda total disponível e banda por usuário em bytes, respectivamente (somente para a rede, não para o servidor - localhost)
#delay_access 1 allow network

http_access allow localhost
http_access allow network
http_access deny all



Limpando access.log

  • echo >/var/log/squid3/access.log

Rotacionando arquivo access.log

  • squid3-k rotate

Atualizando o Squid sem reiniciar (sem parar a internet)

  • squid3 -k reconfigure

SARG

  • Instalação: aptitude install sarg
  • Alterar o arquivo /etc/sarg/sarg.conf para apontar o local de saída dos relatórios output_dir /var/www/sarg

Iptables

O firewall é uma ferramenta essencial para garantir a segurança da sua rede, do seu computador, etc.
O IPTables é um sistema muito simples, porém muito eficaz.


Portas

Tudo é feito através de portas...



Ex. de Configuração:
#!/bin/bash

# Declarando as Váriaveis
IF_WAN="eth0"
IF_LAN="eth1"
LAN="192.168.2.0/24"
PORTAS="80,443"
SSH="22"
SQUID="10357"
FTP="21"


function start(){

#apagando as regras
iptables -F
iptables -X
iptables -t nat -F
iptables -t nat -X
iptables -t mangle -F
iptables -t mangle -X

#mudando a politica para o padrao DROP
iptables -P INPUT DROP 
iptables -P OUTPUT DROP 
iptables -P FORWARD DROP

#habilita o suporte do kernel para o forward (roteamento)
echo 1 > /proc/sys/net/ipv4/ip_forward

#cria a ida e volta entre as chains (modulo state)
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT

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

#compartilhamento da internet
iptables -t nat -A POSTROUTING -s $LAN -o $IF_WAN -j MASQUERADE

#proxy transparente - inútil devido à porta 443 (https)
#iptables -t nat -A PREROUTING -s $LAN -p tcp --dport 80 -j REDIRECT --to-port $SQUID

#???redirecionamento, caso não esteja configurado o proxy no navegador
#iptables -t nat -A PREROUTING -s $LAN -p tcp -m multiport --dports $PORTAS -j DNAT --to-dest 192.168.2.2:80

#permite o redirecionamento da conexao remota (é preciso liberar a regra na sessão FORWARD)
#iptables -t nat -A PREROUTING -p tcp --dport 3389 -j DNAT --to-destination 192.168.2.6:3389

###############################
###          INPUT          ###
###############################

#libera o tráfego de entrada na interface de loopback
iptables -A INPUT -i lo -j ACCEPT

#protecao contra ataque DoS (ping da morte)
#aceita somente pings internos
iptables -A INPUT -s $LAN -p icmp --icmp-type echo-request -j ACCEPT
#iptables -A INPUT -p icmp --icmp-type echo-request -m limit --limit 1/s -j ACCEPT
#iptables -A INPUT -p icmp -j DROP

#libera o squid
iptables -A INPUT -s $LAN -p tcp --dport $SQUID -j ACCEPT

#libera o acesso externo via SSH
iptables -A INPUT -p tcp --dport $SSH -j ACCEPT

#libera o acesso a porta para que possam acessar o apache 
iptables -A INPUT -p tcp --dport 80 -j ACCEPT

#ibera o acesso ao SAMBA tcp (smbd)
iptables -A INPUT -s $LAN -p tcp -m multiport --dports 139,445 -j ACCEPT

#libera o acesso ao SAMBA udp (nmbd)
iptables -A INPUT -s $LAN -p udp -m multiport --dports 137,138 -j ACCEPT

#libera o acesso ao FTP
iptables -A INPUT -p tcp --dport $FTP -j ACCEPT
iptables -A INPUT -p tcp --dport 27000:28000 -j ACCEPT

###############################
###         OUTPUT          ###
###############################

#libera a saida para o squid (caso este servidor esteja com o proxy configurado no navegador) 
iptables -A OUTPUT -p tcp --dport $SQUID -j ACCEPT

#libera a saida para as portas da variável
iptables -A OUTPUT -p tcp -m multiport --dports $PORTAS -j ACCEPT

#libera DNS
iptables -A OUTPUT -p udp --dport 53 -j ACCEPT

#libera ping originado no servidor
iptables -A OUTPUT -p icmp --icmp-type 8 -j ACCEPT

##libera o acesso a FTP externo 
##iptables -A OUTPUT -p tcp -m multiport --dports 21,22 -j ACCEPT

#libera o acesso ao SAMBA udp
iptables -A OUTPUT -s $LAN -p udp -m multiport --dports 137,138 -j ACCEPT

#libera a autenticação smb_auth para o proxy autenticado
iptables -A OUTPUT -s $LAN -p tcp -m multiport --dports 139,445 -j ACCEPT

#libera o acesso ao NTP (atualização do relógio) 
iptables -A OUTPUT -p udp --dport 123 -j ACCEPT

###############################
###        FORWARD          ###
###############################

#permite acesso remoto para uma máquina específica da rede (juntamente com o DNAT na sessão NAT) 
#iptables -A FORWARD -p tcp --dport 3389 -j ACCEPT

#liberando o acesso ao DNS
#iptables -A FORWARD -p udp --dport 53 -j ACCEPT

#ignora qualquer regra e permite acesso
#iptables -A FORWARD -s $LAN -p tcp --dport 443 -j ACCEPT

#ignora qualquer regra e permite acesso ao google pela porta de https
#iptables -A FORWARD -s $LAN -d www.google.com.br -p tcp --dport 443 -j ACCEPT

}









function stop(){
#limpando todas as regras
iptables -F
iptables -X
iptables -t nat -F
iptables -t nat -X
iptables -t mangle -F
iptables -t mangle -X

#tornando como padrão o ACCEPT
iptables -P INPUT ACCEPT
iptables -P OUTPUT ACCEPT
iptables -P FORWARD ACCEPT

#compartilhando a internet com a rede
modprobe iptable_nat
echo 1 > /proc/sys/net/ipv4/ip_forward
iptables -t nat -A POSTROUTING -s $LAN -o $IF_WAN -j MASQUERADE
}

case $1 in

    start)
    start
    ;;

    stop)
    stop
    ;;

    restart)
    stop
    start
    ;;

    *)
    echo "Insira um parametro para /etc/initd/firewall.../start|stop|restart"
    exit 0
    ;;

esac
Fontes:
https://e-tinet.com/linux/squid-proxy/

Mais vistos:

Utilitários

Disco 100% no Windows 10