Servidor de autenticação de dois fatores LinOTP

Servidor de autenticação de dois fatores LinOTP

Hoje eu quero compartilhar como configurar um servidor de autenticação de dois fatores, para proteger a rede corporativa, sites e serviços, ssh. O servidor funcionará com a combinação: LinOTP + FreeRadius.

Por que precisamos disso?
É uma solução totalmente gratuita e conveniente, dentro da sua rede, que não depende de provedores externos.

Este serviço é muito prático e transparente, diferentemente de outros produtos open source, e também suporta uma grande variedade de funções e políticas (por exemplo, login + senha + (PIN + OTPToken)). Integra-se via API com serviços de envio de sms (LinOTP Config->Provider Config->SMS Provider), gera códigos para aplicativos móveis como Google Authenticator e muito mais. Eu acho que ele é mais conveniente do que o serviço considerado em artigo.

Este servidor funciona muito bem com Cisco ASA, servidor OpenVPN, Apache2 e, na verdade, praticamente com tudo que suporta autenticação via servidor RADIUS (por exemplo, para SSH em um datacenter).

É necessário:

1) Debian 8 (jessie) — Com certeza! (a instalação de teste no debian 9 é descrita no final do artigo)

Começo:

Instalamos o Debian 8.

Adicionamos o repositório LinOTP:

# echo 'deb http://www.linotp.org/apt/debian jessie linotp' > /etc/apt/sources.list.d/linotp.list

Adicionamos as chaves:

# gpg --search-keys 913DFF12F86258E5

Às vezes, em uma instalação 'limpa', após executar este comando, o Debian apresenta:

gpg: diretório `\/root\/.gnupg' criado
gpg: novo arquivo de configuração `\/root\/.gnupg\/gpg.conf' criado
gpg: ATENÇÃO: parâmetros em `\/root\/.gnupg\/gpg.conf' ainda não estão ativos nesta execução
gpg: tabela de chaves `\/root\/.gnupg\/secring.gpg' criada
gpg: tabela de chaves `\/root\/.gnupg\/pubring.gpg' criada
gpg: servidores de chaves não definidos (use --keyserver)
gpg: falha na busca no servidor de chaves: URI ruim

Esta é a configuração inicial do gnupg. Não se preocupe. Apenas execute o comando novamente.
Na pergunta do Debian:

gpg: buscando "913DFF12F86258E5" no servidor hkp keys.gnupg.net
(1)	LSE LinOTP2 Packaging 
	  chave RSA de 2048 bits F86258E5, criada: 2010-05-10
Chaves 1-1 de 1 para "913DFF12F86258E5". Digite números, N) Próximo ou Q) Sair>

Respondemos: 1

Próximo:

# gpg --export 913DFF12F86258E5 | apt-key add -

# apt-get update

Instalamos o mysql. Em teoria, é possível usar outro servidor sql, mas para simplificar, usarei o recomendado para LinOTP.

(informações adicionais, incluindo sobre reconfiguração do banco de dados LinOTP, podem ser encontradas na documentação oficial de link. Lá também você pode encontrar o comando: dpkg-reconfigure linotp para alterar as configurações se você já instalou o mysql).

# apt-get install mysql-server

# apt-get update

(verificar atualizações mais uma vez não faz mal)
Instalamos o LinOTP e módulos adicionais:

# apt-get install linotp

Respondemos às perguntas do instalador:
Usar Apache2: sim
Crie uma senha para o admin do Linotp: "SuaSenha"
Gerar certificado autoassinado?: sim
Usar MySQL?: sim
Onde está o banco de dados: localhost
Criando o banco LinOTP (nome do banco) no servidor: LinOTP2
Criando um usuário separado para o banco de dados: LinOTP2
Definindo a senha do usuário: «SuaSenha»
Criar o banco agora? (algo como "Você tem certeza que deseja ..."): sim
Inserindo a senha root do MySQL que foi criada durante a instalação: «SuaSenha»
Pronto.

(opcional, pode não ser necessário)

# apt-get install linotp-adminclient-cli 

(opcional, pode não ser necessário)

# apt-get install libpam-linotp  

Assim, nossa interface web LinOTP agora está disponível no endereço:

"<b>https<\/b>: \/\/IP_servidor\/manage"

Falarei sobre as configurações na interface web um pouco mais tarde.

Agora, o mais importante! Levantar o FreeRadius e vinculá-lo ao LinOTP.

Instalando o FreeRadius e o módulo para trabalhar com o LinOTP

# apt-get install freeradius linotp-freeradius-perl

fazendo backup das configurações client e Users do radius.

# mv /etc/freeradius/clients.conf  /etc/freeradius/clients.old

# mv /etc/freeradius/users  /etc/freeradius/users.old

Criando um arquivo vazio do cliente:

# touch /etc/freeradius/clients.conf

Editando nosso novo arquivo de configuração (o arquivo de backup pode ser usado como exemplo)

# nano /etc/freeradius/clients.conf

client 192.168.188.0/24 {
secret  = passwd # senha para conectar clientes
}

Em seguida, criamos o arquivo users:

# touch /etc/freeradius/users

Editando o arquivo e informando ao radius que usaremos perl para autenticação.

# nano /etc/freeradius/users

DEFAULT Auth-type := perl

Em seguida, editamos o arquivo /etc/freeradius/modules/perl

# nano /etc/freeradius/modules/perl

Precisamos inserir o caminho para o script perl linotp no parâmetro module:

Perl { .......
.........
module = /usr/lib/linotp/radius_linotp.pm

…..
Em seguida, criamos um arquivo informando de qual (domínio, banco ou arquivo) obter dados.

# touch /etc/linotp2/rlm_perl.ini

# nano /etc/linotp2/rlm_perl.ini

URL=https://IP_do_seu_servidor_LinOTP(192.168.X.X)/validate/simplecheck
REALM=webusers1c
RESCONF=LocalUser
Debug=True
SSL_CHECK=False

Aqui eu vou parar um pouco mais detalhadamente, pois isso é importante:

Descrição completa do arquivo com comentários:
#IP of the linotp server (IP адрес нашего LinOTP сервера)
URL=https://172.17.14.103/validate/simplecheck
#Наша область которую мы создадим в веб интерфейсе LinOTP.)
REALM=rearm1
#Имя группы юзверей которая создается в вебморде LinOTP.
RESCONF=flat_file
#optional: comment out if everything seems to work fine
Debug=True
#optional: use this, if you have selfsigned certificates, otherwise comment out (SSL если мы создаем свой сертификат и хотим его проверять)
SSL_CHECK=False

Em seguida, criaremos o arquivo /etc/freeradius/sites-available/linotp

# touch /etc/freeradius/sites-available/linotp

# nano /etc/freeradius/sites-available/linotp

E copiaremos a configuração para ele (não é necessário alterar nada):

authorize {
# normaliza solicitações malformadas do cliente antes de serem entregues a outros módulos (veja '/etc/freeradius/modules/preprocess')
preprocess
# Se você estiver usando vários tipos de realms, provavelmente
# deseja definir "ignore_null = yes" para todos eles.
# Caso contrário, quando o primeiro estilo de realm não corresponder,
# os outros estilos não serão verificados.
# permite uma lista de realm (veja '/etc/freeradius/modules/realm')
IPASS
# entende algo como USER@REALM e pode distinguir os componentes (veja '/etc/freeradius/modules/realm')
suffix
# entende USERREALM e pode distinguir os componentes (veja '/etc/freeradius/modules/realm')
ntdomain
# Leia o arquivo 'users' para aprender sobre configurações especiais que devem ser aplicadas para
# certos usuários (veja '/etc/freeradius/modules/files')
files
# permite que a autenticação expire (veja '/etc/freeradius/modules/expiration')
expiration
# permite definir horários de serviço válidos (veja '/etc/freeradius/modules/logintime')
logintime
# Não temos radius_shortname_map!
pap
}
# aqui o módulo perl linotp é chamado para processamento posterior
authenticate {
perl
}

Em seguida, faremos um link simbólico:

# ln -s ../sites-available/linotp /etc/freeradius/sites-enabled

Pessoalmente, eu elimino os sites padrão do Radius, mas se você precisar deles, pode ou editar a configuração ou desativá-los.

# rm /etc/freeradius/sites-enabled/default

# rm /etc/freeradius/sites-enabled/inner-tunnel

# service freeradius reload

Agora vamos voltar à interface da web e examiná-la com mais detalhes:
No canto superior direito, clique em LinOTP Config -> UserIdResolvers -> Novo
Escolha o que deseja: LDAP (AD win, LDAP samba), ou SQL, ou usuários locais do sistema Flatfile.

Preencha os campos obrigatórios.

Em seguida, criamos REALMS:
No canto superior direito, clique em LinOTP Config -> Realms -> Novo.
e dê um nome ao nosso REALM, além de clicar no UserIdResolvers que criamos anteriormente.

Todas essas informações são necessárias para o freeRadius no arquivo /etc/linotp2/rlm_perl.ini, como mencionei acima, portanto, se você não o editou naquele momento, faça isso agora.

Tudo está configurado no servidor.

Adicional:

Configuração do LinOTP no Debian 9:

Instalação:

# echo 'deb http://linotp.org/apt/debian stretch linotp' > /etc/apt/sources.list.d/linotp.list 
# apt-get install dirmngr

# apt-key adv --recv-keys 913DFF12F86258E5
# apt-get update

# apt-get install mysql-server

(por padrão, no Debian 9 mysql (mariaDB) não oferece a opção de definir uma senha para o root, claro que você pode deixá-la em branco, mas se você acompanha as notícias, com frequência isso leva a "fails épicos", por isso vamos configurá-la)

# mysql -u root -p
use mysql;
UPDATE user SET Password = PASSWORD('aqui_senha') WHERE User = 'root';
sigreturn
# apt-get install linotp
# apt-get install linotp-adminclient-cli
# apt-get install python-ldap
# apt install freeradius
# nano /etc/freeradius/3.0/sites-enabled/linotp

Cole o código (enviado por JuriM, agradecemos!):

server linotp {
listen {
ipaddr = *
port = 1812
type = auth
}
listen {
ipaddr = *
port = 1813
type = acct
}
authorize {
preprocess
update {
&control:Auth-Type := Perl
}
}
authenticate {
Auth-Type Perl {
perl
}
}
accounting {
unix
}
}

Edite /etc/freeradius/3.0/mods-enabled/perl

perl {
filename = /usr/share/linotp/radius_linotp.pm
func_authenticate = authenticate
func_authorize = authorize
}

Infelizmente, no Debian 9, a biblioteca radius_linotp.pm não é instalada dos repositórios, por isso vamos pegá-la do github.

# apt install git
# git clone https://github.com/LinOTP/linotp-auth-freeradius-perl
# cd linotp-auth-freeradius-perl/
# cp radius_linotp.pm /usr/share/linotp/radius_linotp.pm

Agora vamos ajustar /etc/freeradius/3.0/clients.conf

client servers {
ipaddr = 192.168.188.0/24
secret = suasenha
}

agora vamos ajustar nano /etc/linotp2/rlm_perl.ini

Cole lá o mesmo código que foi usado na instalação no debian 8 (descrito acima)

teoricamente é tudo. (ainda não testado)

Vou deixar abaixo alguns links sobre a configuração de sistemas que normalmente precisam ser protegidos com autenticação de dois fatores:
Configuração de autenticação de dois fatores em Apache2

Configuração com Cisco ASA(lá é usado outro servidor de geração de tokens, mas as configurações da ASA são as mesmas).

VPN com autenticação de dois fatores

Configuração autenticação de dois fatores no ssh (lá também é usado LinOTP) — agradeço ao autor. Lá também pode-se encontrar informações interessantes sobre a configuração de políticas LiOTP.

Além disso, muitos CMS de sites suportam autenticação de dois fatores (para WordPress, o LinOTP até possui um módulo especial em github), por exemplo, se você quiser criar uma seção segura para os funcionários da empresa no seu site corporativo.
FATO IMPORTANTE! NÃO marque a opção «Google autenteficator» para usar a autenticação do Google! O QR code não será lido dessa forma... (fato curioso)

Para a redação deste artigo, foram utilizados os seguintes textos:
itnan.ru/post.php?c=1&p=270571
www.digitalbears.net/?p=469

Obrigado aos autores.

Fonte: habr.com

Compre hospedagem confiável para sites com proteção contra DDoS, servidores VPS VDS 🔥 Compre hospedagem confiável para sites com proteção contra DDoS, servidores VPS VDS | ProHoster