Iptables + Squid lento

Iniciado por slavik, 09 de Outubro de 2013, 16:28

tópico anterior - próximo tópico

slavik

Coloquei o protocolo e resolveu.
Ficou assim:

$IPT -t nat -A PREROUTING -i $IF_INT -d $IP_WEB -p tcp --dport 80 -j RETURN

zekkerj

Citação de: slavik online 15 de Outubro de 2013, 15:15
Sim, tentei com o ip local e o ip externo.
Os dois geraram erro.

E outra coisa, a regra

$IPT -A INPUT -p tcp -i $IF_WEB --dport 80 -j ACCEPT

Não supriria? Porque ela está liberando a entrada de pacotes na porta 80, certo?

Não, não é a mesma coisa. Aí vc está autorizando o recebimento de pacotes destinados à porta 80 de sua máquina quando a interface por onde eles foram recebidos for a designada na variável IF_WEB.

Na regra que eu te passei, você está determinando que quando o pacote for destinado à porta 80, no endereço IP designado na variável MEU_IP, ele não vai ter nenhum processamento de NAT --- não é questão de permitir ou bloquear, e sim se vai ter NAT ou não.
Pesquise antes de perguntar, sua dúvida pode já ter sido respondida.
Não respondo dúvidas por MP, coloque sua dúvida no fórum onde ela pode ser pesquisada pelos seus colegas!
Não venha ao fórum apenas para perguntar. Se você sabe a resposta de um problema, porque não ajudar seu colega? ;D

zekkerj

Citação de: slavik online 15 de Outubro de 2013, 15:18
Coloquei o protocolo e resolveu.
Ficou assim:

$IPT -t nat -A PREROUTING -i $IF_INT -d $IP_WEB -p tcp --dport 80 -j RETURN

Bem lembrado, eu sempre esqueço disso.
Pesquise antes de perguntar, sua dúvida pode já ter sido respondida.
Não respondo dúvidas por MP, coloque sua dúvida no fórum onde ela pode ser pesquisada pelos seus colegas!
Não venha ao fórum apenas para perguntar. Se você sabe a resposta de um problema, porque não ajudar seu colega? ;D

slavik

Então se eu fizer isso

$IPT -A INPUT -p tcp --dport 80 -j ACCEPT

Eu estarei aceitando absolutamente tudo, em todas as interfaces, em todos os ip's?

slavik


zekkerj

Citação de: slavik online 15 de Outubro de 2013, 15:30
Então se eu fizer isso

$IPT -A INPUT -p tcp --dport 80 -j ACCEPT

Eu estarei aceitando absolutamente tudo, em todas as interfaces, em todos os ip's? [Na porta 80, é claro]

Exato.
Pesquise antes de perguntar, sua dúvida pode já ter sido respondida.
Não respondo dúvidas por MP, coloque sua dúvida no fórum onde ela pode ser pesquisada pelos seus colegas!
Não venha ao fórum apenas para perguntar. Se você sabe a resposta de um problema, porque não ajudar seu colega? ;D

slavik

Então, nesse caso essa linha

$IPT -t nat -A PREROUTING -i $IF_INT -d $IP_WEB -p tcp --dport 80 -j RETURN

Seria desnecessária?

zekkerj

Não, essa linha tem outra função.
Pesquise antes de perguntar, sua dúvida pode já ter sido respondida.
Não respondo dúvidas por MP, coloque sua dúvida no fórum onde ela pode ser pesquisada pelos seus colegas!
Não venha ao fórum apenas para perguntar. Se você sabe a resposta de um problema, porque não ajudar seu colega? ;D

Arthur Bernardes

Você percebe lentidão quando usa a internet sem passar pelo Squid? Tentou fazer esse teste?

slavik

Bom dia

Depois de umas alterações aqui, vi que as coisas ficaram um pouco melhores.
Porém, estou com um problema no acesso ao meu servidor Zimbra.
Ele simplesmente não acessa (pelo menos da rede interna).
Tenho todas as regras de DNAT para o servidor, e simplesmente não vai.
Alguém saberia me dizer o porquê?

zekkerj

Pode mostrar seu firewall depois das mudanças?
Pesquise antes de perguntar, sua dúvida pode já ter sido respondida.
Não respondo dúvidas por MP, coloque sua dúvida no fórum onde ela pode ser pesquisada pelos seus colegas!
Não venha ao fórum apenas para perguntar. Se você sabe a resposta de um problema, porque não ajudar seu colega? ;D

slavik

Iptables


#!/bin/sh

# variaveis

# web
IF_WEB="eth1"
IP_WEB="IP_externo"

# intern
IF_INT="eth0"
IP_INT="IP_rede_interna"
# sapl
IP_SAP="IP_sistema"
# zimbra
IP_ZIM="IP_zimbra"
# mascara de rede
NTWRK="10.0.0.0/24"

# atalho para o iptables
IPT=`which iptables`

$IPT -F
$IPT -F -t nat
$IPT -F -t mangle
$IPT -X
$IPT -X -t nat
$IPT -X -t mangle
$IPT -Z
$IPT -Z -t nat
$IPT -Z -t mangle


# ativacao de modulos
modprobe ip_tables
modprobe ip_conntrack
modprobe iptable_filter
modprobe iptable_nat
modprobe ipt_LOG
modprobe ipt_limit
modprobe ipt_state
modprobe ipt_MASQUERADE
modprobe ip_nat_ftp
modprobe ip_conntrack_ftp


# compartilhamento de internet
echo 1 > /proc/sys/net/ipv4/ip_forward
echo 1 > /proc/sys/net/ipv4/tcp_syncookies
echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts
echo 1 > /proc/sys/net/ipv4/icmp_ignore_bogus_error_responses



# politicas padrao
$IPT -P INPUT DROP
$IPT -P FORWARD DROP
$IPT -P OUTPUT ACCEPT

###### regras de NAT ######
for ZIMPORT in `cat /etc/init.d/zimbra_ports`; do
    $IPT -t nat -A PREROUTING -d $IP_WEB -p tcp --dport $ZIMPORT -j DNAT --to-destination $IP_ZIM:$ZIMPORT
done
$IPT -t nat -A PREROUTING -d $IP_WEB -p udp --dport 25 -j DNAT --to-destination $IP_ZIM:25
$IPT -t nat -A PREROUTING -d $IP_WEB -p udp --dport 26 -j DNAT --to-destination $IP_ZIM:26
# ips liberados
for IP in `cat /etc/init.d/ips`; do
    $IPT -t nat -A POSTROUTING -s $IP/32 -o $IF_WEB -j MASQUERADE
done
# mascarando trafego em geral
for PORT in `cat /etc/init.d/ports`; do
    $IPT -t nat -A POSTROUTING -p tcp -s $NTWRK -o $IF_WEB --dport $PORT -j MASQUERADE
    $IPT -t nat -A POSTROUTING -p udp -s $NTWRK -o $IF_WEB --dport $PORT -j MASQUERADE
done
# nat do squid
$IPT -t nat -A PREROUTING -i $IF_INT -p tcp --dport 80 -j REDIRECT --to-port 3128
# nat do apache
$IPT -t nat -A PREROUTING -i $IF_INT -d $IP_WEB -p tcp --dport 80 -j RETURN


###### regras de INPUT ######
# loopback
$IPT -A INPUT -i lo -j ACCEPT
# dns
$IPT -A INPUT -p tcp --dport 53 -j ACCEPT
$IPT -A INPUT -p udp --dport 53 -j ACCEPT
# ssh
$IPT -A INPUT -p tcp --dport 22 -j ACCEPT
# protecao contra ip spoofing
$IPT -A INPUT -i $IF_WEB -s 10.0.0.0/8 -j DROP
$IPT -A INPUT -i $IF_WEB -s 10.0.0.0/8 -m limit --limit 3/s -j LOG --log-level info --log-prefix "FIREWALL: Spoofing - 10. --"
$IPT -A INPUT -i $IF_WEB -s 172.16.0.0/16 -j DROP
$IPT -A INPUT -i $IF_WEB -s 172.16.0.0/16 -m limit --limit 3/s -j LOG --log-level info --log-prefix "FIREWALL: Spoofing - 172.16. --"
$IPT -A INPUT -i $IF_WEB -s 192.168.0.0/16 -j DROP
$IPT -A INPUT -i $IF_WEB -s 192.168.0.0/16 -m limit --limit 3/s -j LOG --log-level info --log-prefix "FIREWALL: Spoofing - 192.168. --"
# apache
$IPT -A INPUT -p tcp -d $IP_WEB --dport 80 -j ACCEPT
# mascarando trafego em geral
for PORT in `cat /etc/init.d/ports`; do
    $IPT -A INPUT -p tcp -i $IF_WEB --dport $PORT -j ACCEPT
    $IPT -A INPUT -p udp -i $IF_WEB --dport $PORT -j ACCEPT
done
# squid
$IPT -A INPUT -p tcp -s $NTWRK --dport 3128 -j ACCEPT


###### regras de FORWARD #####
# loopback
$IPT -A FORWARD -i lo -j ACCEPT
# dns
$IPT -A FORWARD -p tcp --dport 53 -j ACCEPT
$IPT -A FORWARD -p udp --dport 53 -j ACCEPT
# protecao contra synflood
$IPT -A FORWARD -p tcp --syn -m limit --limit 2/s -j ACCEPT
# protecao contra ping da morte
$IPT -A FORWARD -p icmp --icmp-type echo-request -m limit --limit 1/s -j ACCEPT
$IPT -A FORWARD -i $IF_WEB -p tcp --tcp-flags SYN,ACK,FIN,RST RST -m limit --limit 1/s -j ACCEPT

###### logging ######
# log de navegacao
$IPT -A INPUT -m limit --limit 3/m --limit-burst 3 -j LOG --log-level info --log-prefix "Firewall: INPUT --"
$IPT -A OUTPUT -m limit --limit 3/m --limit-burst 3 -j LOG --log-level info --log-prefix "Firewall: OUTPUT --"
$IPT -A FORWARD -m limit --limit 3/m --limit-burst 3 -j LOG --log-level info --log-prefix "Firewall: FORWARD --"
$IPT -t nat -A PREROUTING -m limit --limit 3/m --limit-burst 3 -j LOG --log-level info --log-prefix "Firewall: NAT [pre] --"
$IPT -t nat -A POSTROUTING -m limit --limit 3/m --limit-burst 3 -j LOG --log-level info --log-prefix "Firewall: NAT [post] --"


Rodando esse script através de uma VM, a velocidade de navegação passando pelo squid ou não é basicamente a mesma.
O problema mesmo, é o acesso ao zimbra...

zekkerj

Você incluiu as portas do zimbra entre as portas a serem liberadas na entrada (/etc/init.d/ports)?

Em tempo: o diretório /etc/init.d é pra scripts, não pra arquivos de configuração. Sugiro fortemente que vc coloque seu arquivo de configuração em outro diretório.

Outra coisa, da forma como vc configurou, não será possível acessar o endereço externo do zimbra a partir da rede interna, mesmo que vc libere essas portas na cadeia INPUT.
Pesquise antes de perguntar, sua dúvida pode já ter sido respondida.
Não respondo dúvidas por MP, coloque sua dúvida no fórum onde ela pode ser pesquisada pelos seus colegas!
Não venha ao fórum apenas para perguntar. Se você sabe a resposta de um problema, porque não ajudar seu colega? ;D

slavik

Sim, as portas do zimbra estão no arquivo ports.
E isso que você citou é justamente o meu problema, o acesso do zimbra através da rede interna.
O que eu preciso fazer?

zekkerj

Use o endereço interno do zimbra nas conexões internas.
Pesquise antes de perguntar, sua dúvida pode já ter sido respondida.
Não respondo dúvidas por MP, coloque sua dúvida no fórum onde ela pode ser pesquisada pelos seus colegas!
Não venha ao fórum apenas para perguntar. Se você sabe a resposta de um problema, porque não ajudar seu colega? ;D