Fórum Ubuntu Linux - PT
Suporte Técnico => Servidores => Tópico iniciado por: Said Dias em 18 de Fevereiro de 2012, 02:19
-
amigos bom dia
Uso o ubuntu 10.04 com apache2, bind9 e um firewall
os clientes que usam a internet são redirecionados para uma pagina remota onde ele tem que colocar seus dados para que possam usar a internet.
Depois de colocar os dados ele click no botao conectar, esse botao executa um script dentro do meu servidor esse script libera o IP dele no meu firewall assim ele poderá acessar a internet. O problema é que o comando IPTABLES que esta dentro desse script nao é executado.
SCRIPT QUE O APACHE DEVE EXECUTAR:
#!/bin/bash
PATH=/bin:/usr/bin:/sbin:/usr/sbin
echo -e "Content-type: text/html\n"
iptables -t nat -I novaempreasa -s 10.172.13.11 -j ACCEPT
iptables -I novaempreasa -s 10.172.13.11 -j ACCEPT
iptables -I novaempreasa -d 10.172.13.11 -j ACCEPT
Olhe o meu /var/log/apache2/error.log
[Sat Feb 18 01:28:16 2012] [error] [client 10.172.13.11] iptables: not found, referer: http://www.novaempreasa.com.br
[Sat Feb 18 01:28:16 2012] [error] [client 10.172.13.11] , referer: http://www.novaempreasa.com.br
[Sat Feb 18 01:28:16 2012] [error] [client 10.172.13.11] /var/www/cgi-bin/autoriza.sh: 63: , referer: http://www.novaempreasa.com.br
[Sat Feb 18 01:28:16 2012] [error] [client 10.172.13.11] iptables: not found, referer: http://www.novaempreasa.com.br
[Sat Feb 18 01:28:16 2012] [error] [client 10.172.13.11] , referer: http://www.novaempreasa.com.br
[Sat Feb 18 01:28:16 2012] [error] [client 10.172.13.11] /var/www/cgi-bin/autoriza.sh: 64: , referer: http://www.novaempreasa.com.br
[Sat Feb 18 01:28:16 2012] [error] [client 10.172.13.11] iptables: not found, referer: http://www.novaempreasa.com.br
[Sat Feb 18 01:28:16 2012] [error] [client 10.172.13.11] , referer: http://www.novaempreasa.com.br
Mas se eu executo esses mesmo comandos pelo terminal manualmente ele roda perfeitamente
Olhe como estão as permissões para o script
#ls -l
-rwxrwxrwx 1 root root 5707 2012-02-15 23:22 autoriza.sh
Versão do iptables
#iptables -v
iptables v1.4.4
Ja tentei muita coisa, mas ainda nao consegui, ate atualizei meu kernel
Linux servidor.said 2.6.32-24-generic #39-Ubuntu SMP Wed Jul 28 06:07:29 UTC 2010 i686 GNU/Linux
Por favor aceito qualquer dica.
Grato
Said.
-
Um script CGI é executado com permissão de usuário (o mesmo usuário que executa o apache, no caso do Ubuntu, o usuário "www-data").
O iptables precisa ser executado com permissão de super-usuário.
Eu recomendo veementemente que você nunca tente se tornar super-usuário a partir de um programa CGI. Com certeza há formas melhores de fazer isso, que não exponha toda sua máquina a invasão.
-
Caro zekkerj Obrigado pela resposta,
E como eu faria isso da forma melhor?
-
Que tipo de clientes são esses? É um provedor, tipo provedor de rádio ou wireless? Se for, vc poderia usar autenticação 802.1X na conexão deles.
-
é um sistema que usamos aqui na empresa, ele bloqueia a internet, a internet só é liberada quando o usuario colocar alguns dados, as conexoes são tanto pela rede sem fio ou pela rede local. Deveria ser mesmo desta forma que lhe falei, irei dar uma olhada nesse usuario www-data que voce me informou, mas se puder me ajudar fico grato.
so quero que me cgi-bin execute esses comando do IPTABLES.
-
Você leu o que eu disse? Isso é totalmente não recomendado, e há outras formas de fazê-lo, que não exigem expor sua máquina a invasão, nem quebrar totalmente seu Apache (que foi todo configurado "de fábrica" pra não permitir fazer isso).
Pq não estuda sobre autenticação 802.1X? Isso pode ser feito diretamente nos switches, o usuário que não passar por essa autenticação não vai ter nem sinal de rede local. E o melhor: é totalmente compatível com rede wireless. Não apenas isso, a autenticação WPA2-Enterprise é totalmente baseada nisso.
-
Não sei se ficou claro... o iptables só pode ser executado pelo root. Uma solução simples seria pegar seu script e fazê-lo SUID-root; mas o Apache se recusa a executar scripts SUID-root. Então você tem que fazer seu script executar outro script que seja SUID-root, e rezar pro Apache não ter desabilitado isso.
Isso pq? Pq é extremamente inseguro executar scripts CGI-BIN SUID-root.
-
Entendi sobre a questao da segurnaça, mas o primeiro ponto é que são 12 empresas e cada empresa deve ter uns 7 AP cada um. se fosse somente um AP ou ate um pouco mais eu poderia colocar essa filtro dentro dos APs, o problema e que são muitos e ficaria inviável fazer isso em todos eles. E tem outra questão, a autentificação dos usuários deve ser feitos em um só servidor que fica hospedado no UOL, assim o funcionário de uma empresa poderia e pode acessar a internet das outras filiais. em qualquer das filiais quando o usuário tentar acessar a internet é redirecionado para uma pagina que fica nesse servidor do UOL, depois dele colocar as credenciais um script é executado dentro do meu apache e ai libera a internet pro cada.
Em cada filial nos temos um servidor somente para isso, então acho que a questão da segurança não seria problema já que não temos mas nada nesses servidores.
Me fale sobre esse usuário do apache o www-data, não sei nada sobre isso. cai de paraquedas aqui nesta empresa.
Grato.
-
Filtro? Não é um filtro que vc precisa, é WPA-Enterprise, isso é uma função do AP, faz parte dele da mesma forma como o WPA-Personal que vc deve estar usando agora.
A autenticação passa a ser feita em um servidor RADIUS, os APs funcionando em modo WPA-Enterprise vão consultar o servidor RADIUS pra saber se o usuário pode acessar a internet ou não. Isso sem vc precisar quebrar a cabeça criando scriptizinho, nem fazer gambiarra de iptables.
Em cada filial nos temos um servidor somente para isso, então acho que a questão da segurança não seria problema já que não temos mas nada nesses servidores.
Pô bacana, esse é o pior erro que vc pode cometer. Um servidor tem sempre três recursos que interessam ao invasor: ele tem um processador, ele tem memória, e ele tem uma conexão internet. Se um invasor toma controle sobre seu servidor, ele ganha um trampolim de onde ele pode atacar outras máquinas sem se expor diretamente.
Além disso, você está considerando que todos os que te atacarem são invasores com algum propósito; isso não é verdade, pois há muitos que atacam apenas por atacar, sem propósito nenhum --- puro vandalismo. Outro erro é achar que o fato de você esconder alguma coisa, como um serviço como esse, garante que ninguém irá atacá-lo. Os invasores procuram, vasculham, experimentam, e mais cedo ou mais tarde descobrem as suas vulnerabilidades.
Um servidor exposto na internet é sempre um ponto fraco, e por isso tem que receber um tratamento cuidadoso de proteção contra invasões.
-
Ok, irei dar uma estudada nesse RADIUS, assim irei ver se me atende.
-
Dá uma olha em captive portal. Teve um que eu vi, que usava radius por baixo dos panos.