Squid + Iptables [RESOLVIDO]

1. Squid + Iptables [RESOLVIDO]

jonatan rader
RADER

(usa Ubuntu)

Enviado em 20/03/2018 - 18:10h

Olá pessoal.....configurei um gateway para a rede com 45 maquinas, e pretendia rodar um proxy transparente, tudo esta rodando blz, o Squid, Iptables, Samba, tudo roda sem erro.
Porém quando acesso os bloqueios pŕe estabelecidos por mim na maquina cliente, nada esta bloqueando, vou no navegador e seto as configurações do proxy, ai bloqueia tudo http e https.....nada fica liberado. Meu intuito é de bloquear sem precisar configurar na maquina do user, e por hora não quero autenticar. Pois temos programas que rodam pela rede e acessam um servidor de fora, preciso só mesmo bloquear alguns downloads, alguns sites, algumas regras básicas mesmo. Tente3i alguma coisa na pagina do squid mas não funcionou.. O que fiz de errado????

Segue:

#Portas de Escuta
http_port 3127
http_port 3128 intercept (ja usei os dois e nenhum rodou)
http_port 3128 transparent

visible_hostname FIREWALL

#-----------------------------------------------------------------------------
#Endereços do Cache
#hierarchy_stoplist cgi-bin?
acl QUERY urlpath_regex cgi-bin \?
no_cache deny QUERY
cache_mem 1024 MB
maximum_object_size_in_memory 100 KB
maximum_object_size 6144 KB
minimum_object_size 0 KB
ipcache_size 1024
ipcache_low 90
ipcache_high 95
cache_replacement_policy lru
memory_replacement_policy lru
logformat squid %ts.%03tu %6tr %>a %Ss/%03Hs %<st %rm %ru %un %Sh/%<A %mt
access_log /var/log/squid/access.log squid
cache_swap_low 90
cache_swap_high 95
cache_dir ufs /var/spool/squid 3000 16 256
cache_access_log /var/log/squid/access.log
cache_store_log /var/log/squid/store.log
cache_log /var/log/squid/cache.log
cache_swap_log /var/spool/squid/swap.log
pid_filename /var/log/squid/squid.pid
#mime_table /usr/share/squid/mime.conf
access_log /var/log/squid/access.log squid
cache_mgr ti@enterco.com.br
coredump_dir /var/spool/squid
refresh_pattern ^ftp: 15 20% 2280
refresh_pattern ^gopher: 15 0% 2280
refresh_pattern . 15 20% 2280
#-----------------------------------------------------------------------------

#REGRAS ACL ALL SRC ALL
acl all src all
#acl all src 192.168.100.0/255.255.255.0
acl manager proto cache_object
acl localhost src 127.0.0.1/32
#acl to_localhost dst 127.0.0.1/24
acl SSL_ports port 443 563 # snews
acl Safe_ports port 443 563 # https, snews
acl Safe_ports port 80 # http
acl Safe_ports port 21 # ftp
acl Safe_ports port 70 # gopher
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 Safe_ports port 407 1863 5190 # msn
acl Safe_ports port 25 # smtp
acl Safe_ports port 110 # pop
acl purge method PURGE
acl CONNECT method CONNECT

#-----------------------------------------------------------------------------
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
http_access allow localhost
http_access allow to_localhost
#http_access deny to_localhost


#-----------------------------------------------------------------------------

# ACLs PARA LIBERACAO TOTAL POR MAC
acl liberados_mac arp "/etc/squid/bloqueios/liberados_mac"
http_access allow liberados_mac

# Bloqueios geral
acl Proibido url_regex "/etc/squid/bloqueios/proibido"
acl DownloadsLiberados url_regex -i "/etc/squid/bloqueios/downloads.allow"
acl DownloadsBloqueados url_regex -i "/etc/squid/bloqueios/downloads.deny"
acl PalavrasBloqueadas url_regex -i "/etc/squid/bloqueios/palavras.deny"
acl SitesBloqueados url_regex -i "/etc/squid/bloqueios/sites.deny"
acl Diretoria src "//etc/squid/bloqueios/ip.diretoria"
#-----------------------------------------------------------------------------



#-----------------------------------------------------------------------------
http_access allow liberados_mac
http_access allow Diretoria
http_access allow DownloadsLiberados
http_access deny DownloadsBloqueados
http_access deny PalavrasBloqueadas
http_access deny SitesBloqueados
http_access deny Proibido
http_access allow all
#----------------------------


Segue as regras NAT do Iptables
enp1s0 rede externa

enp3s0 rede interna (local)


-A PREROUTING -i enp1s0 -p tcp -m tcp --dport 80 -j REDIRECT --to-ports 3128
-A PREROUTING -i enp3s0 -p tcp -m tcp --dport 80 -j DNAT --to-destination 192.168.100.10:3128
-A PREROUTING -s 192.168.100.0/24 -p tcp -m tcp --dport 80 -j ACCEPT
-A PREROUTING -p tcp -m tcp --dport 443 -j REDIRECT --to-ports 3129
-A PREROUTING -i enp3s0 -p tcp -m tcp --dport 80 -j REDIRECT --to-ports 3127




  


2. Re: Squid + Iptables [RESOLVIDO]

Leandro Silva
LSSilva

(usa Outra)

Enviado em 20/03/2018 - 22:58h

Dessa forma que esta querendo fazer (sem configurar nada nas máquinas clientes), irá funcionar apenas com sites HTTP normais. HTTPS (que é o caso de facebook e youtube) não irá funcionar neste esquema, pois envolveria alterar a configuração do squid, criar certificado e adicionar nas máquinas dos clientes, o que dá mais trabalho que configurar proxy nelas e tal.
Seria legal também adicionar um "src" para sua rede local, exemplo (se for na faixa 192.168.100.0/24):
acl redelocal src 192.168.100.0/24 

E depois no fim do arquivo:
http_access deny !redelocal 

Pra melhorar um pouco a segurança.

Mais não irei inserir não, fica a seu gosto.
Eu faria da forma abaixo, com algumas poucas explicações sobre as configurações alteradas, outras alterei sem explicação mesmo.


#Portas de Escuta
#http_port, utilize so uma instancia
#Utilize intercept (ativa proxy transparente) - transparent esta defasado
http_port 3128 intercept

visible_hostname FIREWALL
cache_mgr ti@enterco.com.br

cache_mem 1024 MB
maximum_object_size_in_memory 200 KB
#Elevar maximum_object_size para melhor desemp com heap LFUDA
maximum_object_size 60 MB
minimum_object_size 2 KB

#Heap LFUDA melhora hit rate (mantem objetos mais populares, independente de tamanho)
cache_replacement_policy heap LFUDA
memory_replacement_policy heap LFUDA

logformat squid %ts.%03tu %6tr %>a %Ss/%03Hs %<st %rm %ru %un %Sh/%<A %mt

#Cuidado com o disco...
access_log /var/log/squid/access.log squid
cache_access_log /var/log/squid/access.log
cache_store_log /var/log/squid/store.log
cache_log /var/log/squid/cache.log
cache_swap_log /var/spool/squid/swap.log

cache_swap_low 90
cache_swap_high 95

#Eu usaria aufs e aumentaria um pouco o espaco disponivel, se disponivel.
cache_dir aufs /var/spool/squid 10000 16 256

coredump_dir /var/spool/squid
refresh_pattern ^ftp: 15 20% 2280
refresh_pattern ^gopher: 15 0% 2280
refresh_pattern . 15 20% 2280

#Dependendo da versão isto não é mais necessario
acl all src all

acl manager proto cache_object
acl localhost src 127.0.0.1/32

#Portas
acl SSL_ports port 443 563 # https, snews
acl Safe_ports port 443 563 # https, snews
acl Safe_ports port 80 # http
acl Safe_ports port 21 # ftp
acl Safe_ports port 70 # gopher
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 Safe_ports port 407 1863 5190 # msn
acl Safe_ports port 25 # smtp
acl Safe_ports port 110 # pop
acl purge method PURGE
acl CONNECT method CONNECT

#Liberacao por MAC
acl liberados_mac arp "/etc/squid/bloqueios/liberados_mac"

#Source diretoria
acl Diretoria src "/etc/squid/bloqueios/ip.diretoria"

# Bloqueios geral
acl Proibido url_regex "/etc/squid/bloqueios/proibido"
acl DownloadsLiberados url_regex -i "/etc/squid/bloqueios/downloads.allow"
acl DownloadsBloqueados url_regex -i "/etc/squid/bloqueios/downloads.deny"
# Para palavras, utilziar dstdom_regex
acl PalavrasBloqueadas dstdom_regex -i "/etc/squid/bloqueios/palavras.deny"
acl SitesBloqueados url_regex -i "/etc/squid/bloqueios/sites.deny"

http_access allow localhost
http_access allow liberados_mac
http_access allow Diretoria
http_access allow DownloadsLiberados
http_access deny DownloadsBloqueados
http_access deny PalavrasBloqueadas
http_access deny SitesBloqueados
http_access deny Proibido
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


Com relação ao firewall:

O seu está assim né:

enp1s0 rede externa
enp3s0 rede interna (local)


-A PREROUTING -i enp1s0 -p tcp -m tcp --dport 80 -j REDIRECT --to-ports 3128
-A PREROUTING -i enp3s0 -p tcp -m tcp --dport 80 -j DNAT --to-destination 192.168.100.10:3128
-A PREROUTING -s 192.168.100.0/24 -p tcp -m tcp --dport 80 -j ACCEPT
-A PREROUTING -p tcp -m tcp --dport 443 -j REDIRECT --to-ports 3129
-A PREROUTING -i enp3s0 -p tcp -m tcp --dport 80 -j REDIRECT --to-ports 3127


Mais...
*Com isso: "-A PREROUTING -i enp1s0 -p tcp -m tcp --dport 80 -j REDIRECT --to-ports 3128", está direcionando tráfego da WEB para seu proxy interno, isso não é certo nem recomendado.
*Com isso: "-A PREROUTING -i enp3s0 -p tcp -m tcp --dport 80 -j DNAT --to-destination 192.168.100.10:3128", está fazendo port-forwarding da rede interna para um outro host da rede interna que também é um proxy? Isso não vai funcionar, não deveria existir.
*Com isso: "-A PREROUTING -s 192.168.100.0/24 -p tcp -m tcp --dport 80 -j ACCEPT", está agora removendo seu proxy transparente da jogada. Isso está causando um nó aqui na minha cabeça, pois não especificou interface, só range de IP.
*Com isso: "-A PREROUTING -p tcp -m tcp --dport 443 -j REDIRECT --to-ports 3129", está direcionando tráfego HTTPS, de qualquer interface, (o que é errado!) para a porta 3129, que nem existe no proxy (Como disse no inicio deste post, a configuração de proxy HTTPS é muito mais complexa e depende de mais coisas).
*Com isso: "-A PREROUTING -i enp3s0 -p tcp -m tcp --dport 80 -j REDIRECT --to-ports 3127", está direcionando novamente o tráfego para uma porta que tem duplicada no squid (recomendável só uma porta HTTP), dessa vez especificou interface de rede local, o que é bom.

Você precisa do seguinte com esta configuração do squid que estou sugerindo:
1 - Direcionar tráfego da porta 80, src da sua rede local, interface de rede local, para a porta 3128 do seu proxy.
2 - Fazer liberação de tráfego para facebook e youtube no proxy para ips da diretoria no firewall e bloquear para demais hosts da rede (isso tem que ser feito no firewall, pois não está usando um proxy autenticado, nem transparente https).

Vamos a um exemplo de firewall (não vou colocar o shebang, nem nada adicional, apenas as regras:


#Direciona http para proxy, rede interna, interface de rede interna.
iptables -t nat -A PREROUTING -i enp3s0 -s 192.168.100.0/24 -p tcp --dport 80 -j REDIRECT --to-port 3128
#Faz MASQUERADE
iptables -t nat -A POSTROUTING -s 192.168.100.0/24 -o enp1s0 -j MASQUERADE
#Liberar facebook e youtube para diretoria (vamos supor que são estes 3 ips aí abaixo), bloquear para demais
#Libera para diretoria
diretoria="192.168.100.20 192.168.100.30 192.168.100.40"
for ip in $diretoria
do
iptables -A FORWARD -p tcp -i enp3s0 -s $ip -m multiport --dports 80,443 -m string --algo bm --string "facebook.com" -j ACCEPT
iptables -A FORWARD -p tcp -i enp3s0 -s $ip -m multiport --dports 80,443 -m string --algo bm --string "youtube.com" -j ACCEPT
done
#Bloqueia para demais
iptables -A FORWARD -p tcp -i enp3s0 -m multiport --dports 80,443 -m string --algo bm --string "facebook.com" -j DROP
iptables -A FORWARD -p tcp -i enp3s0 -m multiport --dports 80,443 -m string --algo bm --string "youtube.com" -j DROP


Depois tu vai no "/etc/sysctl.conf" e descomenta a linha: "net.ipv4.ip_forward=1" e executa o seguinte comando "sysctl -p", como root.

Com isto você já deve conseguir algum resultado.


3. Re: Squid + Iptables [RESOLVIDO]

jonatan rader
RADER

(usa Ubuntu)

Enviado em 21/03/2018 - 18:26h

Muito obrigado pela explicação......entendi muito bem....A config do squid que mostrei, são as formas que já tinha configurado, mais um exemplo do que tinha feito na verdade, mas entendi suas mudanças, eu utilizei a porta como intercept, mas não deu nada no momento, e sim eu iria configurar o squid com autenticação mas por hora não tenho esta necessidade.
E quanto ao Iptables tentei cada uma das regras separadas, também foi um apanhado das regras utilizadas, as configurações do bloqueio Https já havia implementado no iptables e estão ok.


Estas duas regras retirei do site do Squid, dei uma estudada la nestes capitulos.....Linux traffic Interception using DNAT,
Linux traffic Interception with Squid and the Browser on the same box
As outras foi tentativa e erro mesmo......

-A PREROUTING -i enp1s0 -p tcp -m tcp --dport 80 -j REDIRECT --to-ports 3128
-A PREROUTING -i enp3s0 -p tcp -m tcp --dport 80 -j DNAT --to-destination 192.168.100.10:3128

O sistema é um centOS 7, squid 3.5

realmente não é necessário:
"
#Dependendo da versão isto não é mais necessario
acl all src all

acl manager proto cache_object
acl localhost src 127.0.0.1/32

"

Dei uma organizada no Squid
Fiz como vc havia falado, porém não teve efeito algum, somente os bloqueios feitos pelo iptables, face, twiter etc....estão efetivos.....
dei mais uma estudada lá no site do squid...... https://wiki.squid-cache.org/ConfigExamples/Intercept/IptablesPolicyRoute
Não sei se tem haver.
Segue a saída do iptables, por que o squid esta conforme vc colocou:
squid.conf

# Mensagens de erro em Portugues
error_directory /usr/share/squid/errors/pt-br

#Portas de Escuta

http_port 3128 intercept

visible_hostname FIREWALL

#-----------------------------------------------------------------------------
#Endereços do Cache
#hierarchy_stoplist cgi-bin?
acl QUERY urlpath_regex cgi-bin \?
no_cache deny QUERY
cache_mem 1024 MB
maximum_object_size_in_memory 300 KB
maximum_object_size 90 MB
minimum_object_size 2 KB
ipcache_size 1024
ipcache_low 90
ipcache_high 95

#-----------------------------------------------------------------------------
cache_replacement_policy heap LFUDA
memory_replacement_policy heap LFUDA


#cache_replacement_policy lru
#memory_replacement_policy lru

logformat squid %ts.%03tu %6tr %>a %Ss/%03Hs %<st %rm %ru %un %Sh/%<A %mt


access_log /var/log/squid/access.log squid
cache_swap_low 90
cache_swap_high 95
cache_dir aufs /var/spool/squid 5000 16 256
cache_access_log /var/log/squid/access.log
cache_store_log /var/log/squid/store.log
cache_log /var/log/squid/cache.log
cache_swap_log /var/spool/squid/swap.log

#-----------------------------------------------------------------------------
pid_filename /var/log/squid/squid.pid
#mime_table /usr/share/squid/mime.conf
access_log /var/log/squid/access.log squid
cache_mgr ti@entercomercial.com.br

#-----------------------------------------------------------------------------
coredump_dir /var/spool/squid
refresh_pattern ^ftp: 15 20% 2280
refresh_pattern ^gopher: 15 0% 2280
refresh_pattern . 15 20% 2280
#-----------------------------------------------------------------------------

#REGRAS ACL ALL SRC ALL
#acl all src all
#acl all src 192.168.100.0/255.255.255.0
acl manager proto cache_object
#acl localhost src 127.0.0.1/32
#acl to_localhost dst 127.0.0.1/24
acl SSL_ports port 443 563 # https, snews
acl Safe_ports port 443 563 # https, snews
acl Safe_ports port 80 # http
acl Safe_ports port 21 # ftp
acl Safe_ports port 70 # gopher
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 Safe_ports port 407 1863 5190 # msn
acl Safe_ports port 25 # smtp
acl Safe_ports port 110 # pop
acl purge method PURGE
acl CONNECT method CONNECT

#LIBERA OU BLOQUEIA POR MAC
#acl user1 arp XX:XX:XX:XX:XX
#acl user2 arp 11:12:13:14:15:16
#http_access allow user1
#http_access deny user2
#http_access deny all





#-----------------------------------------------------------------------------




#-----------------------------------------------------------------------------

# ACLs PARA LIBERACAO TOTAL POR MAC
acl liberados_mac arp "/etc/squid/bloqueios/liberados_mac"

#-----------------------------------------------------------------------------



# Bloqueios geral
acl Proibido url_regex "/etc/squid/bloqueios/proibido"
acl DownloadsLiberados url_regex -i "/etc/squid/bloqueios/downloads.allow"
acl DownloadsBloqueados url_regex -i "/etc/squid/bloqueios/downloads.deny"
acl PalavrasBloqueadas dstdom_regex -i "/etc/squid/bloqueios/palavras.deny"
acl SitesBloqueados url_regex -i "/etc/squid/bloqueios/sites.deny"

#-----------------------------------------------------------------------------
acl Diretoria src "/etc/squid/bloqueios/ip.diretoria"
#-----------------------------------------------------------------------------


#-----------------------------------------------------------------------------

http_access allow localhost
http_access allow liberados_mac
http_access allow Diretoria
http_access allow DownloadsLiberados
http_access deny DownloadsBloqueados
http_access deny PalavrasBloqueadas
http_access deny SitesBloqueados
http_access deny Proibido
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
http_access allow localhost
#http_access allow to_localhost
#http_access deny to_localhost
#-----------------------------------------------------------------------------


iptables -S
-P INPUT ACCEPT
-P FORWARD ACCEPT
-P OUTPUT ACCEPT
-A INPUT -i virbr0 -p udp -m udp --dport 53 -j ACCEPT
-A INPUT -i virbr0 -p tcp -m tcp --dport 53 -j ACCEPT
-A INPUT -i virbr0 -p udp -m udp --dport 67 -j ACCEPT
-A INPUT -i virbr0 -p tcp -m tcp --dport 67 -j ACCEPT
-A INPUT -p icmp -m icmp --icmp-type 8 -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -i enp3s0 -p udp -m udp --sport 53 -j ACCEPT
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -s 192.168.100.0/24 -p tcp -m tcp --dport 53 -j ACCEPT
-A INPUT -p udp -m udp --dport 137 -j ACCEPT
-A INPUT -p udp -m udp --dport 138 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 139 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 445 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 22 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 10000 -j ACCEPT
-A FORWARD -d 192.168.122.0/24 -o virbr0 -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -s 192.168.122.0/24 -i virbr0 -j ACCEPT
-A FORWARD -i virbr0 -o virbr0 -j ACCEPT
-A FORWARD -o virbr0 -j REJECT --reject-with icmp-port-unreachable
-A FORWARD -i virbr0 -j REJECT --reject-with icmp-port-unreachable
-A FORWARD -p tcp -m tcp --dport 443 -m string --string "facebook" --algo bm --to 65535 -j DROP
-A FORWARD -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -d 192.168.1.0/24 -i enp1s0 -m string --string "facebook.com" --algo bm --to 65535 -j DROP
-A FORWARD -d 192.168.1.0/24 -i enp1s0 -m string --string "twitter.com" --algo bm --to 65535 -j DROP
-A FORWARD -i enp3s0 -p tcp -m tcp --dport 443 -m string --string "facebook.com" --algo bm --to 65535 -m limit --limit 6/min --limit-burst 1
-A FORWARD -i enp3s0 -p tcp -m tcp --dport 443 -m string --string "facebook.com" --algo bm --to 65535 -j DROP
-A FORWARD -s 192.168.1.0/24 -p tcp -m tcp --dport 443 -m string --string "facebook.com" --algo bm --to 65535 -j DROP
-A FORWARD -d 192.168.1.0/24 -p tcp -m tcp --dport 443 -m string --string "facebook.com" --algo bm --to 65535 -j DROP
-A FORWARD -d 192.168.1.0/24 -i enp3s0 -p tcp -m multiport --dports 80,443 -m string --string "facebook.com" --algo bm --to 65535 -j DROP
-A FORWARD -p tcp -m multiport --dports 25,110,587,995 -j ACCEPT
-A OUTPUT -o virbr0 -p udp -m udp --dport 68 -j ACCEPT
-A OUTPUT -p icmp -m icmp --icmp-type 8 -j ACCEPT
-A OUTPUT -o lo -j ACCEPT
-A OUTPUT -o enp3s0 -p udp -m udp --dport 53 -j ACCEPT
-A OUTPUT -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT
-A OUTPUT -p udp -m udp --sport 137 -j ACCEPT
-A OUTPUT -p udp -m udp --sport 138 -j ACCEPT
-A OUTPUT -p tcp -m tcp --sport 22 -j ACCEPT
-A OUTPUT -p tcp -m tcp --sport 10000 -j ACCEPT
-A OUTPUT -p tcp -m tcp --dport 53 -j ACCEPT
-A OUTPUT -p udp -m udp --dport 53 -j ACCEPT
-A OUTPUT -p tcp -m tcp --dport 53 -j ACCEPT
-A OUTPUT -p udp -m udp --dport 53 -j ACCEPT

[root@entercomercial ti]# iptables -L
Chain INPUT (policy ACCEPT)
target prot opt source destination
ACCEPT udp -- anywhere anywhere udp dpt:domain
ACCEPT tcp -- anywhere anywhere tcp dpt:domain
ACCEPT udp -- anywhere anywhere udp dpt:bootps
ACCEPT tcp -- anywhere anywhere tcp dpt:bootps
ACCEPT icmp -- anywhere anywhere icmp echo-request
ACCEPT all -- anywhere anywhere
ACCEPT udp -- anywhere anywhere udp spt:domain
ACCEPT all -- anywhere anywhere state RELATED,ESTABLISHED
ACCEPT all -- anywhere anywhere
ACCEPT tcp -- 192.168.100.0/24 anywhere tcp dpt:domain
ACCEPT udp -- anywhere anywhere udp dpt:netbios-ns
ACCEPT udp -- anywhere anywhere udp dpt:netbios-dgm
ACCEPT tcp -- anywhere anywhere tcp dpt:netbios-ssn
ACCEPT tcp -- anywhere anywhere tcp dpt:microsoft-ds
ACCEPT tcp -- anywhere anywhere tcp dpt:ssh
ACCEPT tcp -- anywhere anywhere tcp dpt:ndmp

Chain FORWARD (policy ACCEPT)
target prot opt source destination
ACCEPT all -- anywhere 192.168.122.0/24 ctstate RELATED,ESTABLISHED
ACCEPT all -- 192.168.122.0/24 anywhere
ACCEPT all -- anywhere anywhere
REJECT all -- anywhere anywhere reject-with icmp-port-unreachable
REJECT all -- anywhere anywhere reject-with icmp-port-unreachable
DROP tcp -- anywhere anywhere tcp dpt:https STRING match "facebook" ALGO name bm TO 65535
ACCEPT all -- anywhere anywhere state NEW,RELATED,ESTABLISHED
DROP all -- anywhere 192.168.1.0/24 STRING match "facebook.com" ALGO name bm TO 65535
DROP all -- anywhere 192.168.1.0/24 STRING match "twitter.com" ALGO name bm TO 65535
tcp -- anywhere anywhere tcp dpt:https STRING match "facebook.com" ALGO name bm TO 65535 limit: avg 6/min burst 1
DROP tcp -- anywhere anywhere tcp dpt:https STRING match "facebook.com" ALGO name bm TO 65535
DROP tcp -- 192.168.1.0/24 anywhere tcp dpt:https STRING match "facebook.com" ALGO name bm TO 65535
DROP tcp -- anywhere 192.168.1.0/24 tcp dpt:https STRING match "facebook.com" ALGO name bm TO 65535
DROP tcp -- anywhere 192.168.1.0/24 multiport dports http,https STRING match "facebook.com" ALGO name bm TO 65535
ACCEPT tcp -- anywhere anywhere multiport dports smtp,pop3,submission,pop3s

Chain OUTPUT (policy ACCEPT)
target prot opt source destination
ACCEPT udp -- anywhere anywhere udp dpt:bootpc
ACCEPT icmp -- anywhere anywhere icmp echo-request
ACCEPT all -- anywhere anywhere
ACCEPT udp -- anywhere anywhere udp dpt:domain
ACCEPT all -- anywhere anywhere state NEW,RELATED,ESTABLISHED
ACCEPT udp -- anywhere anywhere udp spt:netbios-ns
ACCEPT udp -- anywhere anywhere udp spt:netbios-dgm
ACCEPT tcp -- anywhere anywhere tcp spt:ssh
ACCEPT tcp -- anywhere anywhere tcp spt:ndmp
ACCEPT tcp -- anywhere anywhere tcp dpt:domain
ACCEPT udp -- anywhere anywhere udp dpt:domain
ACCEPT tcp -- anywhere anywhere tcp dpt:domain
ACCEPT udp -- anywhere anywhere udp dpt:domain



4. Re: Squid + Iptables [RESOLVIDO]

Leandro Silva
LSSilva

(usa Outra)

Enviado em 21/03/2018 - 23:45h

Cria a acl da redelocal no squid (vide meu post anterior), dá "http_access allow redelocal" e descomenta o "http_access deny all", no final do arquivo.

Posta saída do comando:

"iptables -t nat -S"
e
"iptables -t nat -nL"

Com relação à tabela FILTER, um firewall que faz a mesma coisa que o seu faz:
Seu código:

-P INPUT ACCEPT
-P FORWARD ACCEPT
-P OUTPUT ACCEPT
-A INPUT -i virbr0 -p udp -m udp --dport 53 -j ACCEPT
-A INPUT -i virbr0 -p tcp -m tcp --dport 53 -j ACCEPT
-A INPUT -i virbr0 -p udp -m udp --dport 67 -j ACCEPT
-A INPUT -i virbr0 -p tcp -m tcp --dport 67 -j ACCEPT
-A INPUT -p icmp -m icmp --icmp-type 8 -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -i enp3s0 -p udp -m udp --sport 53 -j ACCEPT
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -s 192.168.100.0/24 -p tcp -m tcp --dport 53 -j ACCEPT
-A INPUT -p udp -m udp --dport 137 -j ACCEPT
-A INPUT -p udp -m udp --dport 138 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 139 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 445 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 22 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 10000 -j ACCEPT
-A FORWARD -d 192.168.122.0/24 -o virbr0 -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -s 192.168.122.0/24 -i virbr0 -j ACCEPT
-A FORWARD -i virbr0 -o virbr0 -j ACCEPT
-A FORWARD -o virbr0 -j REJECT --reject-with icmp-port-unreachable
-A FORWARD -i virbr0 -j REJECT --reject-with icmp-port-unreachable
-A FORWARD -p tcp -m tcp --dport 443 -m string --string "facebook" --algo bm --to 65535 -j DROP
-A FORWARD -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -d 192.168.1.0/24 -i enp1s0 -m string --string "facebook.com" --algo bm --to 65535 -j DROP
-A FORWARD -d 192.168.1.0/24 -i enp1s0 -m string --string "twitter.com" --algo bm --to 65535 -j DROP
-A FORWARD -i enp3s0 -p tcp -m tcp --dport 443 -m string --string "facebook.com" --algo bm --to 65535 -m limit --limit 6/min --limit-burst 1
-A FORWARD -i enp3s0 -p tcp -m tcp --dport 443 -m string --string "facebook.com" --algo bm --to 65535 -j DROP
-A FORWARD -s 192.168.1.0/24 -p tcp -m tcp --dport 443 -m string --string "facebook.com" --algo bm --to 65535 -j DROP
-A FORWARD -d 192.168.1.0/24 -p tcp -m tcp --dport 443 -m string --string "facebook.com" --algo bm --to 65535 -j DROP
-A FORWARD -d 192.168.1.0/24 -i enp3s0 -p tcp -m multiport --dports 80,443 -m string --string "facebook.com" --algo bm --to 65535 -j DROP
-A FORWARD -p tcp -m multiport --dports 25,110,587,995 -j ACCEPT
-A OUTPUT -o virbr0 -p udp -m udp --dport 68 -j ACCEPT
-A OUTPUT -p icmp -m icmp --icmp-type 8 -j ACCEPT
-A OUTPUT -o lo -j ACCEPT
-A OUTPUT -o enp3s0 -p udp -m udp --dport 53 -j ACCEPT
-A OUTPUT -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT
-A OUTPUT -p udp -m udp --sport 137 -j ACCEPT
-A OUTPUT -p udp -m udp --sport 138 -j ACCEPT
-A OUTPUT -p tcp -m tcp --sport 22 -j ACCEPT
-A OUTPUT -p tcp -m tcp --sport 10000 -j ACCEPT
-A OUTPUT -p tcp -m tcp --dport 53 -j ACCEPT
-A OUTPUT -p udp -m udp --dport 53 -j ACCEPT
-A OUTPUT -p tcp -m tcp --dport 53 -j ACCEPT
-A OUTPUT -p udp -m udp --dport 53 -j ACCEPT

Código (seu) equivalente:

-P INPUT ACCEPT
-P FORWARD ACCEPT
-P OUTPUT ACCEPT
-A FORWARD -o virbr0 -j REJECT --reject-with icmp-port-unreachable
-A FORWARD -i virbr0 -j REJECT --reject-with icmp-port-unreachable
-A FORWARD -p tcp -m tcp --dport 443 -m string --string "facebook" --algo bm --to 65535 -j DROP
-A FORWARD -d 192.168.1.0/24 -i enp1s0 -m string --string "facebook.com" --algo bm --to 65535 -j DROP
-A FORWARD -d 192.168.1.0/24 -i enp1s0 -m string --string "twitter.com" --algo bm --to 65535 -j DROP
-A FORWARD -i enp3s0 -p tcp -m tcp --dport 443 -m string --string "facebook.com" --algo bm --to 65535 -m limit --limit 6/min --limit-burst 1
-A FORWARD -i enp3s0 -p tcp -m tcp --dport 443 -m string --string "facebook.com" --algo bm --to 65535 -j DROP
-A FORWARD -s 192.168.1.0/24 -p tcp -m tcp --dport 443 -m string --string "facebook.com" --algo bm --to 65535 -j DROP
-A FORWARD -d 192.168.1.0/24 -p tcp -m tcp --dport 443 -m string --string "facebook.com" --algo bm --to 65535 -j DROP
-A FORWARD -d 192.168.1.0/24 -i enp3s0 -p tcp -m multiport --dports 80,443 -m string --string "facebook.com" --algo bm --to 65535 -j DROP

Por quê eu retirei todos os ACCEPTS do seu firewall? Porque está utilizando política ACCEPT, logo, regras com ACCEPT não surtirão efeito.

Vamos à uma análise da sua tabela Filter:

-A FORWARD -o virbr0 -j REJECT --reject-with icmp-port-unreachable
-A FORWARD -i virbr0 -j REJECT --reject-with icmp-port-unreachable

Por que está utilizando interface de virtualização nas regras do seu firewall? O seu gateway também é hypervisor? Sabe o que é "virbr0"?


-A FORWARD -d 192.168.1.0/24 -i enp1s0 -m string --string "facebook.com" --algo bm --to 65535 -j DROP
-A FORWARD -d 192.168.1.0/24 -i enp1s0 -m string --string "twitter.com" --algo bm --to 65535 -j DROP
-A FORWARD -i enp3s0 -p tcp -m tcp --dport 443 -m string --string "facebook.com" --algo bm --to 65535 -m limit --limit 6/min --limit-burst 1

Você está bloqueando comunicação de fora pra dentro (internet -> rede interna) nas duas primeiras regras, não é necessário se bloquear de dentro pra fora (rede interna -> internet), como sugeri anteriormente. Por que criar o burst na terceira regra? Isso pode causar complicações pra você. Mais você quem sabe, não vou opinar.


-A FORWARD -i enp3s0 -p tcp -m tcp --dport 443 -m string --string "facebook.com" --algo bm --to 65535 -j DROP
-A FORWARD -s 192.168.1.0/24 -p tcp -m tcp --dport 443 -m string --string "facebook.com" --algo bm --to 65535 -j DROP
-A FORWARD -d 192.168.1.0/24 -p tcp -m tcp --dport 443 -m string --string "facebook.com" --algo bm --to 65535 -j DROP
-A FORWARD -d 192.168.1.0/24 -i enp3s0 -p tcp -m multiport --dports 80,443 -m string --string "facebook.com" --algo bm --to 65535 -j DROP

A primeira faz o bloqueio do "facebook.com" no firewall. A segunda faz a mesma coisa da primeira (talvez, não está muito claro quais são suas faixas de IP), a terceira faz o mesmo, porém vindo de fora. A quarta não tem lógica, pois como virão pacotes de fora (internet) originados da interface de rede interna?.

Bom, te aconselho a limpar sua table FILTER e NAT e aplicar as regras que te passei no ultimo post. Acredito que funcionará.

Tá aí o firewall prontinho pra você testar:


!/bin/sh
# Start/stop the firewall daemon.
#
### BEGIN INIT INFO
# Provides: firewall
# Required-Start: $remote_fs $syslog $time
# Required-Stop: $remote_fs $syslog $time
# Should-Start: $network $named
# Should-Stop: $network $named
# Default-Start: 2 3 4 5
# Default-Stop:
# Short-Description: firewall
# Description: script de firewall
### END INIT INFO

faixarede="192.168.100.0/24";
ifaceinterna="enp3s0";
ifaceexterna="enp1s0";
diretoria="192.168.100.2 192.168.100.3 192.168.100.4";

start() {

#Limpa regras
iptables -t nat -F
iptables -t nat -X
iptables -F
iptables -X

#Direciona http para proxy, rede interna, interface de rede interna.
iptables -t nat -A PREROUTING -i $ifaceinterna -s $faixarede -p tcp --dport 80 -j REDIRECT --to-port 3128
#Faz MASQUERADE
iptables -t nat -A POSTROUTING -s $faixarede -o $ifaceexterna -j MASQUERADE
#Liberar facebook e youtube para diretoria (vamos supor que são estes 3 ips aí abaixo), bloquear para demais
#Libera para diretoria
for ip in $diretoria
do
iptables -A FORWARD -p tcp -i enp3s0 -s $ip -m multiport --dports 80,443 -m string --algo bm --string "facebook.com" -j ACCEPT
iptables -A FORWARD -p tcp -i enp3s0 -s $ip -m multiport --dports 80,443 -m string --algo bm --string "youtube.com" -j ACCEPT
done
#Bloqueia para demais
iptables -A FORWARD -p tcp -i enp3s0 -m multiport --dports 80,443 -m string --algo bm --string "facebook.com" -j DROP
iptables -A FORWARD -p tcp -i enp3s0 -m multiport --dports 80,443 -m string --algo bm --string "youtube.com" -j DROP

}
stop (){

iptables -t nat -F
iptables -t nat -X
iptables -F
iptables -X

}

case $1 in
start) start;;
stop) stop;;
restart) stop; start;;
*) echo "Use start/stop/restart";;
esac



A única coisa que vai ter que fazer é ajustar sua rede na variável "faixarede" e os ip's da diretoria, que terão que ser separados por espaço. Terá também que criar um script e jogar este conteúdo dentro e colocar na inicialização do sistema, tem vários tutoriais ensinando isso, é bem simples. Porém te aconselho a testar primeiro.

Não esquece de descomentar no "/etc/sysctl.conf" a configuração que te requisitei no último post.


5. Re: Squid + Iptables [RESOLVIDO]

jonatan rader
RADER

(usa Ubuntu)

Enviado em 22/03/2018 - 16:48h

Muito obrigado, esta me ajudando muito a entender as regras, pois eu trabalhei sempre em server Windows, mas enfim.....

Segue os comandos:

iptables -t nat -nL
Chain PREROUTING (policy ACCEPT)
target prot opt source destination
REDIRECT tcp -- 192.168.100.0/24 0.0.0.0/0 tcp dpt:80 redir ports 3128

Chain INPUT (policy ACCEPT)
target prot opt source destination

Chain OUTPUT (policy ACCEPT)
target prot opt source destination

Chain POSTROUTING (policy ACCEPT)
target prot opt source destination
MASQUERADE all -- 0.0.0.0/0 0.0.0.0/0
[root@entercomercial ti]# iptables -t nat -S
-P PREROUTING ACCEPT
-P INPUT ACCEPT
-P OUTPUT ACCEPT
-P POSTROUTING ACCEPT
-A PREROUTING -s 192.168.100.0/24 -i enp3s0 -p tcp -m tcp --dport 80 -j REDIRECT --to-ports 3128
-A POSTROUTING -o enp1s0 -j MASQUERADE


Não mexi no Squid, só no firewall, como vc comentou sobre o sysctl.conf, já havia configurado, todas as maquinas clientes tem internet e compartilham informações entre si.
Quanto as faixas de ip, é que tinha 3 placas na maquina, havia dois Links fazendo um failover. AInda não tive exito com squid.




6. Re: Squid + Iptables [RESOLVIDO]

jonatan rader
RADER

(usa Ubuntu)

Enviado em 24/03/2018 - 12:51h

Muito obrigado pela ajuda......consegui, esta tudo certinho.....irei me aprofundar em Server Linux.






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts