(M)  s i s t e m a   o p e r a c i o n a l   m a g n u x   l i n u x ~/ · documentação · suporte · sobre

  Página seguinte Página anterior Índice

277. Introdução

Como as firewalls estão amplamente mais e mais usadas na segurança de Internet e Intranet, a capacidade de fazer boas VPNs é importante. Aqui estão as minhas experiências, e comentários são bem-vindos.

277.1 Convenções

Usarei os termos "firewall mestre" e "firewall escravo", apesar de uma VPN não ser feita com uma arquitetura cliente-servidor. Eu simplesmente me referi a elas como participantes ativos e passivos da configuração da conexão. A máquina que é o início da configuração será referida como mestre, e o participante passivo seráo escravo.

277.2 Planejamento

Antes de você iniciar a configuração do seu sistema, você deve conhecer os detalhes da rede. Eu assumo que você tem duas firewalls protegendo uma intranet por firewall, e ambas estão conectadas a internet. Então agora você deve duas interfaces de rede (pelo menos) por firewall. Pegue um pedaço de papel, e escreva o seu endereço IP e sua máscara de rede. Você precisará de mais de um endereço IP por firewall para a VPN que você quer construir agora. Aqueles endereços deve ser exteriores a suas subredes existentes; eu sugiro usar os endereços do grupo de endereços "privado". Eles são os seguintes:

  • 10.0.0.0 - 10.255.255.255
  • 172.16.0.0 - 172.31.255.255
  • 192.168.0.0 - 192.168.255.255

Por causa do exemplo, aqui está uma amostra de configuração: As duas fortalezas são chamadas fellini e polanski. Elas tem uma interface para a internet (-out), uma para intranet (-in) euma para a vpn (-vpn). Os endereços e as máscaras de rede:

  • fellini-out: 193.6.34.12 255.255.255.0
  • fellini-in: 193.6.35.12 255.255.255.0
  • fellini-vpn: 192.168.0.1 point-to-point
  • polanski-out: 193.6.36.12 255.255.255.0
  • polanski-in: 193.6.37.12 255.255.255.0
  • polanski-vpn: 192.168.0.2 point-to-point

Deste modo nós temos um plano.

277.3 Juntando as Ferramentas

Você precisará de:

  • Uma Firewall do Linux;
  • Um kernel;
  • Uma configuração mínima;
  • ipfwadm;
  • fwtk;
  • Ferramentas para a VPN;
  • ssh;
  • pppd;
  • sudo;
  • pty-redir.

Versões atuais:

  • kernel: 2.0.29 Use um kernel estável, e ele deve ser mais novo que o 2.0.20, por causa do bug do ping. Então o kernel 2.0.30 é o último "estável", mas tem alguns erros. Se você quiser ter o código de rede rápido introduzido nele, tente o prepatch.
  • Sistema Base: eu prefiro o Debian. YMMV. Você não precisa absolutamente usar nenhum pacote grande e você não precisa usar até mesmo o sendmail, é claro. Você também definitivamente não precisa habilitar telnet, ftp, e os comandos 'r'(como sempre no caso de quaisquer outras máquinas Unix).
  • ipfwadm: Eu usei o 2.3.0.
  • fwtk: Eu usei o 1.3.
  • ssh: >= 1.2.20. Existem problemas com o protocolo base em versões anteriores.
  • pppd: Eu usei o 2.2.0f para os testes, mas eu não tenho certeza se ele é seguro, por isso eu desliguei o bit setuid, e usei o sudo.
  • sudo: 1.5.2.
  • pty-redir: é escrita por mim. Tente ftp://ftp.vein.hu/ssa/contrib/mag/pty-redir-0.1.tar.gz. Sua versão agora é a 0.1. Fale-me se existir algum problema com ela.

277.4 Compilar e Instalar

Compile ou instale as ferramentas coletadas. Olhe cada uma das documentações (e o COMO FAZER do firewall) para detalhes. Agora nós temos as ferramentas.

277.5 Configure os outros subsistemas

Configure sua firewall. Você precisa habilitar o tráfego do ssh entre as duas máquinas da firewall; significa uma conexão para a porta 22 no escravo originado do mestre. Inicie o sshd no escravo e verifique se você pode efetuar o login. Este pass é sem teste, por favor fale-me de seus resultados.

277.6 Configure as contas para a VPN

Crie uma conta na firewall escravo usando a sua ferramenta favorita (por exemplo, vi, mkdir, chown, chmod). Você deve criar uma conta no mestre também, mas eu acho que você precisa configurar a conexão na hora da inicialização, desta maneira a sua conta de root fará. Qualquer um pode apontar os riscos do uso da conta de root no mestre?

277.7 Gerar uma chave ssh para a conta do mestre

Use o programa ssh-keygen. Ajuste a senha vazia para a chave privada se você quiser fazer a configuração automática da VPN.

277.8 Configure login automático do ssh para a conta do escravo

Copie a chave pública recentemente gerada na conta do escravo no .ssh/authorized_keys, e as permissões do arquivo de configuração como a seguir:

drwx------ 2 slave slave 1024 Apr 7 23:49 ./  
drwx------ 4 slave slave 1024 Apr 24 14:05 ../  
-rwx------ 1 slave slave 328 Apr 7 03:04 authorized_keys  
-rw------- 1 slave slave 660 Apr 14 15:23 known_hosts  
-rw------- 1 slave slave 512 Apr 21 10:03 random_seed  

A primeira linha sendo o ~slave/.ssh, e a segunda a ~slave.

277.9 Segurança ssh estreita

Isto refere-se aos recursos na minha configuração no sshd_conf:

PermitRootLogin no  
IgnoreRhosts yes  
StrictModes yes  
QuietMode no  
FascistLogging yes  
KeepAlive yes  
RhostsAuthentication no  
RhostsRSAAuthentication no  
RSAAuthentication yes  
PasswordAuthentication no  
PermitEmptyPasswords no 

A autenticação da senha é desligada, então o acesso só é possível com chaves autoriazadas (é claro que você desligou telnet e os comandos 'r').

277.10 Habilite a execução do ppp e da rota para ambas as contas

Como a conta do mestre é o root no meu caso, não há nada a fazer. Para a conta do escravo, as linhas a seguir aparecem em /etc/sudoers:

Cmnd_Alias VPN=/usr/sbin/pppd,/usr/local/vpn/route  
slave ALL=NOPASSWD: VPN  

Como você pode ver, estou usando alguns scripts para configurar o ppp e as tabelas de roteamento no escravo.

277.11 Faça os scripts

No mestre existe um script de inicialização completamente desenvolvido que eu estou usando:

#! /bin/sh
# skeleton      arquivo de exemplo para a construção de scripts /etc/init.d/.
#               Este arquivo deve ser usado para construir scripts para o /etc/init.d.
#
#               Escrito por Miquel van Smoorenburg <miquels@cistron.nl>.
#               Modificado pela Debian GNU/Linux
#               por Ian Murdock <imurdock@gnu.ai.mit.edu>.
#
# Versão:        @(#)skeleton  1.6  11-Nov-1996  miquels@cistron.nl
#

PATH=/usr/local/sbin:/sbin:/bin:/usr/sbin:/usr/bin:/usr/bin/X11/:
PPPAPP=/home/slave/ppp
ROUTEAPP=/home/slave/route
PPPD=/usr/sbin/pppd
NAME=VPN
REDIR=/usr/local/bin/pty-redir
SSH=/usr/bin/ssh
MYPPPIP=192.168.0.1
TARGETIP=192.168.0.2
TARGETNET=193.6.37.0
MYNET=193.6.35.0
SLAVEWALL=polanski-out
SLAVEACC=slave

test -f $PPPD || exit 0

set -e

case "$1" in
  start)
        echo setting up vpn
        $REDIR $SSH -o 'Batchmode yes' -t -l $SLAVEACC $SLAVEWALL sudo $PPPAPP >/tmp/device
        TTYNAME=`cat /tmp/device`
echo tty is $TTYNAME
        sleep 10s
        if [ ! -z $TTYNAME ]
        then
        $PPPD $TTYNAME ${MYPPPIP}:${TARGETIP}
        else
                echo FAILED!
                logger "vpn setup failed"
        fi
        sleep 5s
        route add -net $TARGETNET gw $TARGETIP
        $SSH -o 'Batchmode yes' -l $SLAVEACC $SLAVEWALL sudo $ROUTEAPP
    ;;
  stop)
        ps -ax | grep "ssh -t -l $SLAVEACC " | grep -v grep | awk '{print $1}' | xargs kill
    ;;
  *)
    # echo "Usage: /etc/init.d/$NAME {start|stop|reload}"
    echo "Usage: /etc/init.d/$NAME {start|stop}"
    exit 1
    ;;
esac

exit 0
 

O escravo usa um script para configuração do roteador (/usr/local/vpn/route):

#!/bin/bash  
/sbin/route add -net 193.6.35.0 gw 192.168.0.1  

e o seu .ppprc consiste do seguinte:

passive  

Página seguinte Página anterior Índice