Servidor - dhcp + firewall + proxy

Iniciado por lucascatani, 20 de Abril de 2012, 16:15

tópico anterior - próximo tópico

lucascatani

Citação de: cpaynes online 05 de Maio de 2012, 14:38
CitarAssim ele vai ficar transparente, eu quero que quem não colocar no navegador o proxy não consiga acessar a internet.

Isso você limita no teu proxy com parâmetros de Auth

Citar
# Liberando o ssh
iptables -A FORWARD -i $REDELOCAL -o $INTERNET -p tcp --dport 22 -j ACCEPT
iptables -A INPUT -i $REDELOCAL -p tcp --dport 22 -j ACCEPT

Simples:
Na cadeia FORWARD você especifica as conexoes que passam pelo teu firewall para fora ou para dentro
Na cadeia INPUT você aceita conexões diretamente ao teu host

as regras de FORWARD da porta 80 e 8080 não funcionaram. Alguma dica?

FORWARD tem q vir antes do input ou depois, ou nao muda nada?

lucascatani

Citação de: lucascatani online 05 de Maio de 2012, 14:52
Citação de: cpaynes online 05 de Maio de 2012, 14:38
CitarAssim ele vai ficar transparente, eu quero que quem não colocar no navegador o proxy não consiga acessar a internet.

Isso você limita no teu proxy com parâmetros de Auth

Citar
# Liberando o ssh
iptables -A FORWARD -i $REDELOCAL -o $INTERNET -p tcp --dport 22 -j ACCEPT
iptables -A INPUT -i $REDELOCAL -p tcp --dport 22 -j ACCEPT

Simples:
Na cadeia FORWARD você especifica as conexoes que passam pelo teu firewall para fora ou para dentro
Na cadeia INPUT você aceita conexões diretamente ao teu host

as regras de FORWARD da porta 80 e 8080 não funcionaram. Alguma dica?

FORWARD tem q vir antes do input ou depois, ou nao muda nada?

Achei, tem liberar o DNS também

iptables -A FORWARD -i $REDELOCAL -o $INTERNET -p udp -m multiport --dports 53,5353 -j ACCEPT

lucascatani

Somente a questão do SQUID ainda não está muito clara. Preciso que:

1 - Se o usuário não colocar o proxy no navegador, não consiga navegar nem em http e nem em https >:(

2 - Se o usuário não colocar o proxy no navegador, possa utilizar o compartilhamento samba da rede e o ssh normalmente ;D

3 - Se o usuário colocar o proxy no navegador, todas suas requisições passem pelo SQUID, sem usuário e senha. ::)

zekkerj

Citação de: cpaynes online 05 de Maio de 2012, 13:34
Citar# Contra Syn-flood
iptables -A FORWARD -p tcp -m limit --limit 1/s -j ACCEPT

esta linha esta no teu firewall, isso não protege contra synflood, com isso teu firewall poderá levar você a uma negação de serviço.
da uma olhada neste artigo sobre isto. Um excelente artigo do Elgio!
http://www.vivaolinux.com.br/artigo/Iptables-protege-contra-SYN-FLOOD/

Esse trecho é fácil de consertar, pq a regra está bem próxima do aceitável. Da forma como está, o firewall só vai aceitar um pacote tcp por segundo, independente da origem, e independente do tipo de pacote. Precisamos melhorar essa regra:
1. Essencial: Só limitar os pacotes de abertura de conexão ("TCP Syn").
2. Opcional: Aumentar a quantidade de novas conexões aceitas.
3. Opcional: Controlar os pedidos de conexão vindos da mesma origem.

Ao só limitar os pacotes de abertura de conexão, a gente não interfere nas conexões que já estão abertas. Isso é feito observando se o segmento TCP tem o flag "Syn" ligado. [opções "-p tcp --syn" na linha do iptables]

Outra coisa que se pode fazer é aumentar o limite de conexões aceitas; uma máquina atual aceita facilmente centenas de conexões por segundo. Podemos então mudar esse limite de "1/s" para "10/s" ou "100/s" sem medo da máquina ficar sobrecarregada.

Controlando as novas conexões vindas da mesma máquina, fica mais difícil um ataque de DoS --- apesar de não proteger contra um DDoS (se bem que contra um DDoS, só o provedor pode te ajudar). Nesse caso as regras são um pouco diferentes, pq vão envolver um outro módulo ("recent").
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

#49
Citação de: lucascatani online 05 de Maio de 2012, 15:39
Somente a questão do SQUID ainda não está muito clara. Preciso que:

1 - Se o usuário não colocar o proxy no navegador, não consiga navegar nem em http e nem em https >:(
Mole: Bloqueie tudo que vá passar da rede interna pra externa.

iptables -A FORWARD -p tcp -j DROP

Depois libere só os acessos legítimos, tipo, correio eletrônico:

iptables -A FORWARD -p tcp --dport 25 -j ACCEPT

Só tenha cuidado que, apesar de eu ter dito "depois", a regra de liberação tem que vir antes, no script.

Citar
2 - Se o usuário não colocar o proxy no navegador, possa utilizar o compartilhamento samba da rede e o ssh normalmente ;D
Seu script de firewall só vai controlar o que passar pelo firewall; compartilhamentos samba da rede não passam pelo firewall, a menos que o servidor de arquivos seja justamente o firewall. Nesse caso, é um tráfego que está entrando (INPUT), não atravessando (FORWARD). É só incluir a liberação na cadeia correta.

Sobre o ssh... é pra liberar ssh no servidor, ou pra fora? ???

Citar3 - Se o usuário colocar o proxy no navegador, todas suas requisições passem pelo SQUID, sem usuário e senha. ::)


iptables -A INPUT -p tcp --dport 3128 -j ACCEPT ;)

Ah!!! Informe-se sobre o WPAD. Assim o usuário não vai precisar colocar o proxy no navegador: basta selecionar "detectar automaticamente".
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

cpaynes

#50
CitarOutra coisa que se pode fazer é aumentar o limite de conexões aceitas; uma máquina atual aceita facilmente centenas de conexões por segundo. Podemos então mudar esse limite de "1/s" para "10/s" ou "100/s" sem medo da máquina ficar sobrecarregada.

zekkerj, mas limitar não seria furada? pois quem for a conexão numero 2, 11 ou 101 estará sendo dropada, mesmo que seja legitima!

zekkerj

No meio de um ataque DoS, um SynFlood, vc consegue diferenciar quem é legítimo, e quem não é?
Limitando a uma certa quantidade de tentativas de abertura de conexão por segundo da mesma origem, vc torna mais difícil bloquear sua máquina, e não impede máquinas legítimas de conectar.
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

lucascatani

#52
Citação de: zekkerj online 05 de Maio de 2012, 18:35
Citação de: lucascatani online 05 de Maio de 2012, 15:39
Somente a questão do SQUID ainda não está muito clara. Preciso que:

1 - Se o usuário não colocar o proxy no navegador, não consiga navegar nem em http e nem em https >:(
Mole: Bloqueie tudo que vá passar da rede interna pra externa.

iptables -A FORWARD -p tcp -j DROP

Depois libere só os acessos legítimos, tipo, correio eletrônico:

iptables -A FORWARD -p tcp --dport 25 -j ACCEPT

Só tenha cuidado que, apesar de eu ter dito "depois", a regra de liberação tem que vir antes, no script.

Citar
2 - Se o usuário não colocar o proxy no navegador, possa utilizar o compartilhamento samba da rede e o ssh normalmente ;D
Seu script de firewall só vai controlar o que passar pelo firewall; compartilhamentos samba da rede não passam pelo firewall, a menos que o servidor de arquivos seja justamente o firewall. Nesse caso, é um tráfego que está entrando (INPUT), não atravessando (FORWARD). É só incluir a liberação na cadeia correta.

Sobre o ssh... é pra liberar ssh no servidor, ou pra fora? ???

Citar3 - Se o usuário colocar o proxy no navegador, todas suas requisições passem pelo SQUID, sem usuário e senha. ::)


iptables -A INPUT -p tcp --dport 3128 -j ACCEPT ;)

Ah!!! Informe-se sobre o WPAD. Assim o usuário não vai precisar colocar o proxy no navegador: basta selecionar "detectar automaticamente".
Bom dia. Meu servidor está rodando firewall + dhcp + proxy + samba + ssh.
O ssh é para as pessoas acessarem o servidor... tanto da rede externa quanto da rede interna.

Esse esquema da ordem das regras é um tanto confuso, pois diz-se que o interpretador lê de cima para baixo. MAs se eu fizer isso:

iptabbles Libere o ssh para o ip 192.168.0.2
iptables bloqueie tudo

Ele vai deixar liberado o ssh para o ip 192.168.0.2

Então na verdade, se pensarmos bem, a regra de baixo não prevalece sobre a de cima, a de cima prevalece. É ao contrário de um css por exemplo.

Mas se eu setar uma política padrão em cima, e uma liberaçao embaixo, ele libera, justamente ao contrario do exemplo anterior!!!!

iptables -P INPUT DROP
itables -A INPUT -p tcp --dport 80 -j ACCEPT


lucascatani

Outra dúvida. Tem alguma necessidade em trabalhar com a política iptables -P OUTPUT DROP?

lucascatani

Outra coisa, se eu quiser que um ip da rede, por exemplo 192.168.0.99 tenha tudo liberado e não precise passar pelo proxy, qual o regra e onde coloco ela?

cpaynes

#55
CitarNo meio de um ataque DoS, um SynFlood, vc consegue diferenciar quem é legítimo, e quem não é?
Limitando a uma certa quantidade de tentativas de abertura de conexão por segundo da mesma origem, vc torna mais difícil bloquear sua máquina, e não impede máquinas legítimas de conectar

Ai que ta Zekkerj, em um synflood envolve falsificação de números Ips e diversas máquinas atuando em conjunto, mesmo que limite a origem, essas serão sempre diferentes, mesmo que use o modulo recent nao conseguiria isso... Ligando a opção "echo 1 > /proc/sys/net/ipv4/tcp_syncookies", pois quando recebe o SYN, ele devolve o SYN/ACK mas apenas aloca os recursos do TCP quando  receber o ACK final..

CitarEntão na verdade, se pensarmos bem, a regra de baixo não prevalece sobre a de cima, a de cima prevalece. É ao contrário de um css por exemplo.
Mas se e setar uma política padrão em cima, e uma liberaçao embaixo, ele libera, justamente ao contrario do exemplo anterior!!!!
iptables -P INPUT DROP
itables -A INPUT -p tcp --dport 80 -j ACCEPT

você esta se referindo a politica padrão, onde você estabelece como vai funcionar teu firewall, se tu bloqueia tudo e libera o que necessita ou se tu libera tudo e bloqueia o que necessita, ela vem sempre por primeiro.

CitarOutra dúvida. Tem alguma necessidade em trabalhar com a política iptables -P OUTPUT DROP?

um EX: se tu tiver alguma coisa maliciosa no teu server e ele enviar dados para fora do teu server, ele vai estar usando a cadeia OUTPUT do teu firewall, então se tu tratar o que realmente deve sair, quase certo que este elemento não vai conseguir enviar nada para fora, e vai bater no teu firewall. Ainda pode colocar para logar estas saídas indevidas com uma regra no final do teu firewall

cpaynes

#56
CitarOutra coisa, se eu quiser que um ip da rede, por exemplo 192.168.0.99 tenha tudo liberado e não precise passar pelo proxy, qual o regra e onde coloco ela?
Duas formas:
essa regra tu insere antes do redirecionamento pro proxy
IPTABLES -t nat -A PREROUTING -s 192.168.0.99 -p tcp --dport 80 -j ACCEPT

ou tu faz o redirecionamento assim:
iptables -t nat -A PREROUTING -i $REDELOCAL -s ! 192.168.0.99 -p tcp --dport 80 -j REDIRECT --to-port 3128

lucascatani

Citação de: cpaynes online 06 de Maio de 2012, 12:27
CitarOutra coisa, se eu quiser que um ip da rede, por exemplo 192.168.0.99 tenha tudo liberado e não precise passar pelo proxy, qual o regra e onde coloco ela?
Duas formas:
essa regra tu insere antes do redirecionamento pro proxy
IPTABLES -t nat -A PREROUTING -s 192.168.0.99 -p tcp --dport 80 -j ACCEPT

ou tu faz o redirecionamento assim:
iptables -t nat -A PREROUTING -i $REDELOCAL -s ! 192.168.0.99 -p tcp --dport 80 -j REDIRECT --to-port 3128


Não uso proxy transparente. Todos os usuários tem que colocar o proxy no navegador.

Um dos usuários é o DONO da empresa, quero que a máquina dele não passe pelo squid.

Não estou usando nada de PREROUTING no meu firewall.

Essa regra serve? iptables -A FORWARD -s 192.168.0.3 -j ACCEPT

lucascatani

Vou utilizar o sarg para analisar os logs do SQUID. Preciso ter um servidor web rodando na máquina para usar o sarg?

cpaynes

CitarNão estou usando nada de PREROUTING no meu firewall.
Essa regra serve? iptables -A FORWARD -s 192.168.0.3 -j ACCEPT

Entao e isso mesmo. Insere esta regra antes do iptables -A FORWARD  -j DROP

CitarVou utilizar o sarg para analisar os logs do SQUID. Preciso ter um servidor web rodando na máquina para usar o sarg?

Precisa ter o apache2.