Libro "Linux en acción"

Libro "Linux en acción" Ola, veciños de Khabro! No libro, David Clinton describe 12 proxectos da vida real, incluíndo a automatización do seu sistema de copia de seguridade e recuperación, a configuración dunha nube de ficheiros persoais ao estilo de Dropbox e a creación do seu propio servidor MediaWiki. Explorarás a virtualización, a recuperación ante desastres, a seguridade, a copia de seguridade, a DevOps e a resolución de problemas do sistema a través de interesantes casos prácticos. Cada capítulo remata cunha revisión das mellores prácticas, un glosario de novos termos e exercicios.

Fragmento “10.1. Creando un túnel OpenVPN"

Xa falei moito sobre o cifrado neste libro. SSH e SCP poden protexer os datos transferidos a través de conexións remotas (capítulo 3), o cifrado de ficheiros pode protexer os datos mentres se almacenan no servidor (capítulo 8) e os certificados TLS/SSL poden protexer os datos transferidos entre sitios e navegadores de clientes (capítulo 9). . Pero ás veces hai que protexer os teus datos nunha gama máis ampla de conexións. Por exemplo, quizais algúns dos membros do teu equipo traballen na estrada mentres se conectan á wifi a través de puntos de acceso públicos. Definitivamente non debes asumir que todos eses puntos de acceso son seguros, pero a túa xente necesita un xeito de conectarse aos recursos da empresa, e aí é onde unha VPN pode axudar.

Un túnel VPN deseñado correctamente proporciona unha conexión directa entre os clientes remotos e o servidor dun xeito que oculta os datos mentres viaxan por unha rede insegura. Entón, que? Xa viches moitas ferramentas que poden facelo co cifrado. O verdadeiro valor dunha VPN é que ao abrir un túnel, podes conectar redes remotas coma se fosen todas locais. En certo sentido, está a usar un bypass.

Usando esta rede estendida, os administradores poden realizar o seu traballo nos seus servidores desde calquera lugar. Pero o máis importante é que unha empresa con recursos repartidos en varias localizacións pode facelos todos visibles e accesibles para todos os grupos que os necesiten, estean onde estean (Figura 10.1).

O túnel en si non garante a seguridade. Pero un dos estándares de cifrado pódese incluír na estrutura da rede, o que aumenta significativamente o nivel de seguridade. Os túneles creados co paquete OpenVPN de código aberto usan o mesmo cifrado TLS/SSL sobre o que xa liches. OpenVPN non é a única opción de túnel dispoñible, pero é unha das máis coñecidas. Considérase un pouco máis rápido e seguro que o protocolo de túnel de capa 2 alternativo que usa o cifrado IPsec.

Queres que todos os membros do teu equipo se comuniquen de forma segura entre eles mentres estás na estrada ou traballas en diferentes edificios? Para iso, cómpre crear un servidor OpenVPN para permitir compartir aplicacións e acceder ao contorno de rede local do servidor. Para que isto funcione, só tes que executar dúas máquinas virtuais ou dous contedores: un para actuar como servidor/host e outro para actuar como cliente. Construír unha VPN non é un proceso sinxelo, polo que probablemente paga a pena dedicar uns minutos a ter en conta o panorama xeral.

Libro "Linux en acción"

10.1.1. Configuración do servidor OpenVPN

Antes de comezar, vouche dar algúns consellos útiles. Se o vas facer ti mesmo (e recoméndoo encarecidamente que o fagas), probablemente te atopes traballando con varias fiestras de terminais abertas no teu Escritorio, cada unha conectada a unha máquina diferente. Existe o risco de que nalgún momento introduza o comando incorrecto na xanela. Para evitar isto, pode usar o comando hostname para cambiar o nome da máquina que aparece na liña de comandos por algo que che indique claramente onde estás. Unha vez que fagas isto, terás que pechar sesión no servidor e iniciar sesión de novo para que a nova configuración teña efecto. Este é o que parece:

Libro "Linux en acción"
Seguindo este enfoque e dando nomes apropiados a cada unha das máquinas coas que traballa, pode facilmente facer un seguimento de onde se atopa.

Despois de usar o nome de host, pode atopar mensaxes molestas de Unable to Resolve Host OpenVPN-Server ao executar comandos posteriores. A actualización do ficheiro /etc/hosts co novo nome de host apropiado debería resolver o problema.

Preparando o teu servidor para OpenVPN

Para instalar OpenVPN no teu servidor, necesitas dous paquetes: openvpn e easy-rsa (para xestionar o proceso de xeración da clave de cifrado). Os usuarios de CentOS deberían instalar primeiro o repositorio epel-release se é necesario, como fixeches no capítulo 2. Para poder probar o acceso á aplicación do servidor, tamén podes instalar o servidor web Apache (apache2 en Ubuntu e httpd en CentOS).

Mentres estás configurando o teu servidor, recoméndoche activar un firewall que bloquee todos os portos excepto o 22 (SSH) e o 1194 (o porto predeterminado de OpenVPN). Este exemplo ilustra como funcionaría ufw en Ubuntu, pero estou seguro de que aínda lembras o programa CentOS firewalld do capítulo 9:

# ufw enable
# ufw allow 22
# ufw allow 1194

Para habilitar o enrutamento interno entre interfaces de rede do servidor, cómpre quitar os comentarios dunha liña (net.ipv4.ip_forward = 1) no ficheiro /etc/sysctl.conf. Isto permitirá que os clientes remotos sexan redirixidos segundo sexa necesario unha vez que estean conectados. Para que a nova opción funcione, execute sysctl -p:

# nano /etc/sysctl.conf
# sysctl -p

O teu ambiente de servidor está agora totalmente configurado, pero aínda queda unha cousa máis por facer antes de que esteas listo: terás que completar os seguintes pasos (a continuación imos cubriros en detalle).

  1. Cree un conxunto de claves de cifrado de infraestrutura de clave pública (PKI) no servidor mediante os scripts proporcionados co paquete easy-rsa. Esencialmente, o servidor OpenVPN tamén actúa como a súa propia autoridade de certificación (CA).
  2. Prepara as claves adecuadas para o cliente
  3. Configure o ficheiro server.conf para o servidor
  4. Configura o teu cliente OpenVPN
  5. Comproba a túa VPN

Xeración de claves de cifrado

Para simplificar as cousas, pode configurar a súa infraestrutura clave na mesma máquina na que se está a executar o servidor OpenVPN. Non obstante, as prácticas recomendadas de seguridade suxiren normalmente usar un servidor CA separado para as implantacións de produción. Na Fig. 10.2.

Libro "Linux en acción"
Cando instalou OpenVPN, o directorio /etc/openvpn/ creouse automaticamente, pero aínda non hai nada nel. Os paquetes openvpn e easy-rsa veñen con exemplos de ficheiros de modelos que podes usar como base para a túa configuración. Para iniciar o proceso de certificación, copie o directorio do modelo easy-rsa de /usr/share/ a /etc/openvpn e cambie ao directorio easy-rsa/:

# cp -r /usr/share/easy-rsa/ /etc/openvpn
$ cd /etc/openvpn/easy-rsa

O directorio easy-rsa conterá agora bastantes scripts. Na táboa 10.1 enumera as ferramentas que utilizará para crear claves.

Libro "Linux en acción"

As operacións anteriores requiren privilexios de root, polo que cómpre converterse en root mediante sudo su.

O primeiro ficheiro co que traballarás chámase vars e contén as variables de ambiente que easy-rsa usa ao xerar claves. Debe editar o ficheiro para usar os seus propios valores en lugar dos valores predeterminados que xa están alí. Así será o meu ficheiro (Listado 10.1).

Listaxe 10.1. Fragmentos principais do ficheiro /etc/openvpn/easy-rsa/vars

export KEY_COUNTRY="CA"
export KEY_PROVINCE="ON"
export KEY_CITY="Toronto"
export KEY_ORG="Bootstrap IT"
export KEY_EMAIL="[email protected]"
export KEY_OU="IT"

Ao executar o ficheiro vars pasará os seus valores ao contorno de shell, onde se incluirán no contido das túas novas claves. Por que o comando sudo non funciona por si só? Porque no primeiro paso editamos o script chamado vars e despois aplicamos. Aplicar e significa que o ficheiro vars pasa os seus valores ao contorno de shell, onde se incluirán no contido das túas novas claves.

Asegúrate de volver executar o ficheiro usando un novo shell para completar o proceso inacabado. Cando se faga isto, o script pediralle que execute outro script, clean-all, para eliminar calquera contido do directorio /etc/openvpn/easy-rsa/keys/:

Libro "Linux en acción"
Por suposto, o seguinte paso é executar o script clean-all, seguido de build-ca, que usa o script pkitool para crear o certificado raíz. Solicitarase que confirme a configuración de identidade proporcionada por vars:

# ./clean-all
# ./build-ca
Generating a 2048 bit RSA private key

A continuación vén o script build-key-server. Dado que usa o mesmo script pkitool xunto cun novo certificado raíz, verá as mesmas preguntas para confirmar a creación do par de claves. As claves serán nomeadas en función dos argumentos que pases, que, a non ser que esteas executando varias VPN nesta máquina, normalmente serán servidores, como no exemplo:

# ./build-key-server server
[...]
Certificate is to be certified until Aug 15 23:52:34 2027 GMT (3650 days)
Sign the certificate? [y/n]:y
1 out of 1 certificate requests certified, commit? [y/n]y
Write out database with 1 new entries
Data Base Updated

OpenVPN usa parámetros xerados polo algoritmo Diffie-Hellman (usando build-dh) para negociar a autenticación para novas conexións. O ficheiro creado aquí non precisa ser secreto, pero debe xerarse mediante o script build-dh para as claves RSA que están activas actualmente. Se creas novas claves RSA no futuro, tamén terás que actualizar o ficheiro Diffie-Hellman:

# ./build-dh

As claves do servidor agora acabarán no directorio /etc/openvpn/easy-rsa/keys/, pero OpenVPN non o sabe. Por defecto, OpenVPN buscará claves en /etc/openvpn/, así que cópiaas:

# cp /etc/openvpn/easy-rsa/keys/server* /etc/openvpn
# cp /etc/openvpn/easy-rsa/keys/dh2048.pem /etc/openvpn
# cp /etc/openvpn/easy-rsa/keys/ca.crt /etc/openvpn

Preparación das claves de cifrado do cliente

Como xa viches, o cifrado TLS usa pares de claves coincidentes: unha instalada no servidor e outra instalada no cliente remoto. Isto significa que necesitarás claves de cliente. O noso vello amigo pkitool é exactamente o que necesitas para iso. Neste exemplo, cando executamos o programa no directorio /etc/openvpn/easy-rsa/, pasámoslle o argumento cliente para xerar ficheiros chamados client.crt e client.key:

# ./pkitool client

Os dous ficheiros do cliente, xunto co ficheiro ca.crt orixinal que aínda está no directorio keys/, deberían transferirse de forma segura ao seu cliente. Debido á súa propiedade e aos seus dereitos de acceso, isto pode non ser tan sinxelo. O enfoque máis sinxelo é copiar manualmente o contido do ficheiro fonte (e nada máis que ese contido) nun terminal que se executa no escritorio do teu PC (selecciona o texto, fai clic co botón dereito sobre el e selecciona Copiar no menú). A continuación, pega isto nun ficheiro novo co mesmo nome que creas nun segundo terminal conectado ao teu cliente.

Pero calquera pode cortar e pegar. En vez diso, pensa como un administrador porque non sempre terás acceso á GUI onde sexan posibles operacións de cortar/pegar. Copia os ficheiros no directorio de inicio do teu usuario (para que a operación scp remota poida acceder a eles) e logo use chown para cambiar a propiedade dos ficheiros de root a un usuario normal non root para que se poida realizar a acción scp remota. Asegúrate de que todos os teus ficheiros estean instalados e accesibles. Trasladaraos ao cliente un pouco máis tarde:

# cp /etc/openvpn/easy-rsa/keys/client.key /home/ubuntu/
# cp /etc/openvpn/easy-rsa/keys/ca.crt /home/ubuntu/
# cp /etc/openvpn/easy-rsa/keys/client.crt /home/ubuntu/
# chown ubuntu:ubuntu /home/ubuntu/client.key
# chown ubuntu:ubuntu /home/ubuntu/client.crt
# chown ubuntu:ubuntu /home/ubuntu/ca.crt

Cun conxunto completo de claves de cifrado listo para funcionar, debes indicarlle ao servidor como queres crear a VPN. Isto faise usando o ficheiro server.conf.

Reducir o número de pulsacións de teclas

Hai demasiada escritura? A expansión con corchetes axudará a reducir estes seis comandos a dous. Estou seguro de que podes estudar estes dous exemplos e comprender o que está a pasar. Máis importante aínda, poderás entender como aplicar estes principios a operacións que impliquen decenas ou mesmo centos de elementos:

# cp /etc/openvpn/easy-rsa/keys/{ca.crt,client.{key,crt}} /home/ubuntu/
# chown ubuntu:ubuntu /home/ubuntu/{ca.crt,client.{key,crt}}

Configurando o ficheiro server.conf

Como podes saber como debería ser o ficheiro server.conf? Lembra o modelo de directorio easy-rsa que copiaches de /usr/share/? Cando instalou OpenVPN, quedou cun ficheiro de modelo de configuración comprimido que pode copiar en /etc/openvpn/. Vou partir do feito de que o modelo está arquivado e presentarei unha ferramenta útil: zcat.

Xa sabes como imprimir o contido de texto dun ficheiro na pantalla usando o comando cat, pero e se o ficheiro se comprime usando gzip? Sempre podes descomprimir o ficheiro e entón cat sairá felizmente, pero iso son un ou dous pasos máis do necesario. Pola contra, como xa adiviñaches, podes lanzar o comando zcat para cargar o texto desempaquetado na memoria nun só paso. No seguinte exemplo, en lugar de imprimir texto na pantalla, redirixirao a un novo ficheiro chamado server.conf:

# zcat 
  /usr/share/doc/openvpn/examples/sample-config-files/server.conf.gz 
  > /etc/openvpn/server.conf
$ cd /etc/openvpn

Deixemos de lado a extensa e útil documentación que inclúe o ficheiro e vexamos como pode ser cando remates de editar. Teña en conta que o punto e coma (;) indica a OpenVPN que non lea nin execute a seguinte liña (Listado 10.2).

Libro "Linux en acción"
Imos repasar algunhas destas configuracións.

  • Por defecto, OpenVPN execútase no porto 1194. Podes cambialo, por exemplo, para ocultar aínda máis as túas actividades ou evitar conflitos con outros túneles activos. Dado que 1194 require unha mínima coordinación cos clientes, o mellor é facelo deste xeito.
  • OpenVPN usa o protocolo de control de transmisión (TCP) ou o protocolo de datagramas de usuario (UDP) para transmitir datos. TCP pode ser un pouco máis lento, pero é máis fiable e é máis probable que o entendan as aplicacións que se executan nos dous extremos do túnel.
  • Podes especificar dev tun cando queiras crear un túnel IP máis sinxelo e eficiente que transporte contido de datos e nada máis. Se, pola contra, precisas conectar varias interfaces de rede (e as redes que representan), creando unha ponte Ethernet, terás que escoller dev tap. Se non entendes o que significa todo isto, utiliza o argumento tun.
  • As seguintes catro liñas dan a OpenVPN os nomes dos tres ficheiros de autenticación no servidor e do ficheiro de opcións dh2048 que creaches anteriormente.
  • A liña do servidor establece o rango e a máscara de subrede que se utilizarán para asignar enderezos IP aos clientes ao iniciar sesión.
  • O parámetro push opcional "route 10.0.3.0 255.255.255.0" permite que os clientes remotos accedan a subredes privadas detrás do servidor. Facer que isto funcione tamén require configurar a rede no propio servidor para que a subrede privada coñeza a subrede OpenVPN (10.8.0.0).
  • A liña port-share localhost 80 permítelle redirixir o tráfico do cliente que chega polo porto 1194 a un servidor web local que escoita no porto 80. (Isto será útil se vas usar o servidor web para probar a túa VPN). Isto só funciona. entón cando se selecciona o protocolo tcp.
  • As liñas de usuario nonbody e group nogroup deben activarse eliminando o punto e coma (;). Forzar que os clientes remotos se executen como ninguén e ningún grupo garante que as sesións no servidor estean sen privilexios.
  • log especifica que as entradas de rexistro actuais sobrescribirán as antigas cada vez que se inicia OpenVPN, mentres que log-append engade novas entradas ao ficheiro de rexistro existente. O propio ficheiro openvpn.log escríbese no directorio /etc/openvpn/.

Ademais, adoita engadirse un valor de cliente a cliente ao ficheiro de configuración para que varios clientes poidan verse ademais do servidor OpenVPN. Se estás satisfeito coa túa configuración, podes iniciar o servidor OpenVPN:

# systemctl start openvpn

Debido á natureza cambiante da relación entre OpenVPN e systemd, ás veces pode ser necesaria a seguinte sintaxe para iniciar un servizo: systemctl start openvpn@server.

Executar ip addr para listar as interfaces de rede do teu servidor agora debería mostrar unha ligazón a unha nova interface chamada tun0. OpenVPN crearao para servir aos clientes entrantes:

$ ip addr
[...]
4: tun0: mtu 1500 qdisc [...]
      link/none
      inet 10.8.0.1 peer 10.8.0.2/32 scope global tun0
          valid_lft forever preferred_lft forever

Quizais necesites reiniciar o servidor antes de que todo comece a funcionar completamente. A seguinte parada é o ordenador cliente.

10.1.2. Configurando o cliente OpenVPN

Tradicionalmente, os túneles constrúense con polo menos dúas saídas (se non, chamaríamos covas). Un OpenVPN correctamente configurado no servidor dirixe o tráfico dentro e fóra do túnel por un lado. Pero tamén necesitarás algún software que se execute no lado do cliente, é dicir, no outro extremo do túnel.

Nesta sección, voume centrar na configuración manual dalgún tipo de ordenador Linux para que actúe como cliente OpenVPN. Pero esta non é a única forma na que está dispoñible esta oportunidade. OpenVPN admite aplicacións cliente que se poden instalar e usar en escritorios e portátiles con Windows ou macOS, así como en teléfonos intelixentes e tabletas Android e iOS. Consulte openvpn.net para obter máis detalles.

O paquete OpenVPN terá que estar instalado na máquina cliente tal e como se instalou no servidor, aínda que aquí non hai necesidade de easy-rsa xa que as claves que está a usar xa existen. Debe copiar o ficheiro de modelo client.conf no directorio /etc/openvpn/ que acaba de crear. Esta vez o ficheiro non se comprimirá, polo que o comando cp normal fará o traballo ben:

# apt install openvpn
# cp /usr/share/doc/openvpn/examples/sample-config-files/client.conf 
  /etc/openvpn/

A maioría das configuracións do ficheiro client.conf serán bastante autoexplicativas: deberían coincidir cos valores do servidor. Como podes ver no seguinte ficheiro de exemplo, o parámetro único é remoto 192.168.1.23 1194, que indica ao cliente o enderezo IP do servidor. De novo, asegúrate de que este é o enderezo do teu servidor. Tamén debes forzar ao ordenador cliente a verificar a autenticidade do certificado do servidor para evitar un posible ataque de home-in-the-middle. Unha forma de facelo é engadir o servidor de liña remote-cert-tls (Listado 10.3).

Libro "Linux en acción"
Agora podes ir ao directorio /etc/openvpn/ e extraer as claves de certificación do servidor. Substitúe o enderezo IP do servidor ou o nome de dominio no exemplo polos seus valores:

Libro "Linux en acción"
Probablemente non ocorrerá nada interesante ata que executes OpenVPN no cliente. Xa que necesitas pasar un par de argumentos, farano desde a liña de comandos. O argumento --tls-client indica a OpenVPN que actuará como cliente e conectará mediante o cifrado TLS, e --config apunta ao seu ficheiro de configuración:

# openvpn --tls-client --config /etc/openvpn/client.conf

Lea atentamente a saída do comando para asegurarse de que está conectado correctamente. Se algo sae mal a primeira vez, pode deberse a unha falta de coincidencia na configuración entre os ficheiros de configuración do servidor e do cliente ou a un problema de conexión de rede/firewall. Aquí tes algúns consellos para solucionar problemas.

  • Lea atentamente a saída da operación OpenVPN no cliente. Moitas veces contén consellos valiosos sobre o que non se pode facer exactamente e por que.
  • Comprobe as mensaxes de erro nos ficheiros openvpn.log e openvpn-status.log no directorio /etc/openvpn/ do servidor.
  • Comprobe os rexistros do sistema no servidor e no cliente para ver as mensaxes cronometradas e relacionadas con OpenVPN. (journalctl -ce mostrará as entradas máis recentes.)
  • Asegúrese de ter unha conexión de rede activa entre o servidor e o cliente (máis sobre isto no Capítulo 14).

Sobre o autor

David Clinton - administrador de sistemas, profesor e escritor. Administreu, escribiu e creou materiais educativos para moitas disciplinas técnicas importantes, incluíndo sistemas Linux, cloud computing (especialmente AWS) e tecnoloxías de contedores como Docker. Escribiu o libro Learn Amazon Web Services in a Month of Lunchs (Manning, 2017). Moitos dos seus cursos de formación en vídeo pódense atopar en Pluralsight.com, e as ligazóns aos seus outros libros (sobre administración de Linux e virtualización de servidores) están dispoñibles en bootstrap-it.com.

» Podes atopar máis detalles sobre o libro en sitio web da editorial
» Índice analítico
» Extracto

Para Khabrozhiteley 25% de desconto usando o cupón - Linux
Tras o pagamento da versión en papel do libro, enviarase un libro electrónico por correo electrónico.

Fonte: www.habr.com

Engadir un comentario