Servidor de autorização de dois fatores LinOTP

imagem

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

Por que precisamos disso?
Esta é uma solução totalmente gratuita e conveniente, dentro de sua rede, independente de fornecedores terceirizados.

Este serviço é muito conveniente, bastante visual, diferente de outros produtos de código aberto, e também suporta um grande número de funções e políticas (por exemplo, login + senha + (PIN + OTPToken)). Por meio da API, ele se integra aos serviços de envio de sms (LinOTP Config-> Provider Config-> SMS Provider), gera códigos para aplicativos móveis, como o Google Autentificator e muito mais. Eu acho que é mais conveniente do que o serviço considerado no artigo .

Este servidor funciona bem com o Cisco ASA, servidor OpenVPN, Apache2 e, de fato, com quase tudo que suporta autenticação através de um servidor RADIUS (por exemplo, para SSH no datacenter).

É necessário:

1) Debian 8 (jessie) - obrigatório! (a instalação de avaliação no debian 9 é descrita no final do artigo)

Início:

Instalando Debian 8.

Adicione o repositório LinOTP:

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

Adicione chaves:

 # gpg --search-keys 913DFF12F86258E5 

Às vezes, com uma instalação “limpa”, após executar este comando, o Debian emite:

 gpg:   `/root/.gnupg' gpg:     `/root/.gnupg/gpg.conf' gpg: :   `/root/.gnupg/gpg.conf'       gpg:    `/root/.gnupg/secring.gpg' gpg:    `/root/.gnupg/pubring.gpg' gpg:     ( --keyserver) gpg:      :  URI 

Esta é a configuração inicial do gnupg. Nada para se preocupar. Basta executar o comando novamente.
Perguntado por Debiana:

 gpg:  "913DFF12F86258E5"  hkp  keys.gnupg.net (1) LSE LinOTP2 Packaging <linotp2@lsexperts.de> 2048 bit RSA key F86258E5, : 2010-05-10 Keys 1-1 of 1 for "913DFF12F86258E5".  , N)   Q) > 

Resposta: 1

Seguinte:

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

 # apt-get update 

Instale o mysql. Em teoria, você pode usar um servidor sql diferente, mas por simplicidade eu o usarei, conforme recomendado para o LinOTP.

(informações adicionais, incluindo a reconfiguração do banco de dados LinOTP, podem ser encontradas na documentação oficial no link . No mesmo local, 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 novamente não fará mal)
Instale o LinOTP e os módulos complementares:

 # apt-get install linotp 

Respondemos às perguntas do instalador:
Use Apache2: sim
Crie uma senha para o administrador Linotp: "YourPassword"
Gerar certificado autoassinado?: Sim
Use o MySQL?: Sim
Onde está o banco de dados: localhost
Crie o banco de dados LinOTP (nome do banco de dados) no servidor: LinOTP2
Crie um usuário separado para o banco de dados: LinOTP2
Definimos a senha para o usuário: "YourPassword"
Devo criar uma base agora? (algo como "Tem certeza de que deseja ..."): sim
Digite a senha root do MySQL que foi criada durante sua instalação: “YourPassword”
Feito.

(opcional, você não pode definir)

 # apt-get install linotp-adminclient-cli 

(opcional, você não pode definir)

 # apt-get install libpam-linotp 

E assim nossa interface da web Linotp está agora disponível em:

 "<b>https</b>: //IP_/manage" 

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

Agora, a coisa mais importante! Aumente o FreeRadius e vincule-o ao Linotp.

Instale o FreeRadius e o módulo LinOTP

 # apt-get install freeradius linotp-freeradius-perl 

cliente de backup e configurações de raio de usuários.

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

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

Crie um arquivo de cliente vazio:

 # touch /etc/freeradius/clients.conf 

Editamos nosso novo arquivo de configuração (uma configuração de backup pode ser usada como exemplo)

 # nano /etc/freeradius/clients.conf 

 client 192.168.188.0/24 { secret = passwd #     } 

Em seguida, crie o arquivo de usuários:

 # touch /etc/freeradius/users 

Editamos o arquivo, informando o raio em que usaremos o perl para autenticação.

 # nano /etc/freeradius/users 

 DEFAULT Auth-type := perl 

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

 # nano /etc/freeradius/modules/perl 

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

 Perl { ....... ......... <source lang="bash">module = /usr/lib/linotp/radius_linotp.pm 

.....
Em seguida, criamos um arquivo no qual dizemos a partir de qual (domínio, banco de dados ou arquivo) coletar dados.

 # touch /etc/linotp2/rlm_perl.ini 

 # nano /etc/linotp2/rlm_perl.ini 

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

Aqui vou morar um pouco mais, pois isso é importante:

Descrição completa do arquivo com comentários:
#IP do servidor linotp (endereço IP do nosso servidor LinOTP)
URL = https: //172.17.14.103/validate/simplecheck
# Nossa área que criaremos na interface da web LinOTP.)
REALM = rearm1
# O nome do grupo juzverej criado no webmord LinOTP.
RESCONF = flat_file
#optional: comente se tudo parece funcionar bem
Debug = True
#optional: use isso, se você tiver certificados autoassinados, caso contrário, comente (SSL, se criarmos nosso certificado e queremos verificá-lo)
SSL_CHECK = False

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

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

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

E copie a configuração para ele (não edite nada de forma inadequada):

 authorize { #normalizes maleformed client request before handed on to other modules (see '/etc/freeradius/modules/preprocess') preprocess # If you are using multiple kinds of realms, you probably # want to set "ignore_null = yes" for all of them. # Otherwise, when the first style of realm doesn't match, # the other styles won't be checked. #allows a list of realm (see '/etc/freeradius/modules/realm') IPASS #understands something like USER@REALM and can tell the components apart (see '/etc/freeradius/modules/realm') suffix #understands USER\REALM and can tell the components apart (see '/etc/freeradius/modules/realm') ntdomain # Read the 'users' file to learn about special configuration which should be applied for # certain users (see '/etc/freeradius/modules/files') files # allows to let authentification to expire (see '/etc/freeradius/modules/expiration') expiration # allows to define valid service-times (see '/etc/freeradius/modules/logintime') logintime # We got no radius_shortname_map! pap } #here the linotp perl module is called for further processing authenticate { perl } 

Em seguida, faça um link sim:

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

Pessoalmente, eu mato os sites de raio padrão, mas se você precisar deles, você pode editar sua configuração ou desativá-los.

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

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

 # service freeradius reload 

Agora, de volta ao rosto da web e considere-o com mais detalhes:
No canto superior direito, clique em LinOTP Config -> UserIdResolvers -> Novo
Escolha o que queremos: usuários LDAP (AD win, LDAP samba) ou SQL ou Flatfile local.

Preencha os campos obrigatórios.

Em seguida, crie REALMS:
No canto superior direito, clique em LinOTP Config -> Domínios -> Novo.
e dê um nome aos nossos REALMS, bem como clique nos UserIdResolvers criados anteriormente.

Todos esses dados são necessários pelo freeRadius no arquivo /etc/linotp2/rlm_perl.ini, como escrevi acima, portanto, se você não os editou, faça-o agora.

Todo o servidor está configurado.

Adição:

Configurando o LinOTP no Debian 9 (Graças a prikhodkov )
# Adicione o repositório LinOTP ao /etc/apt/sources.list.d/linotp.list e atualize os nabos:

echo "deb linotp.org/apt/debian stretch linotp"> /etc/apt/sources.list.d/linotp.list
atualização apt-get
apt-get install dirmngr
apt-key adv --recv-keys 913DFF12F86258E5

# Instale e configure o servidor mysql basicamente:

apt-get install mysql-server

# Instalar pacotes linotp e freeradius

O apt-get install linotp linotp-adminclient-cli python-ldap freeradius python-passlib python-bcrypt git libio-all-lwp-perl libconfig-arquivo-perl libtry-tiny-perl
# Crie links simbólicos para arquivos de configuração do freeradius

ln -s /etc/freeradius/3.0/sites-available / etc / freeradius / sites-available
ln -s /etc/freeradius/3.0/sites-enabled / etc / freeradius / sites-enabled
ln -s /etc/freeradius/3.0/clients.conf /etc/freeradius/clients.conf
ln -s /etc/freeradius/3.0/users / etc / freeradius / users

# Instale o módulo linotp-auth-freeradius-perl

git clone github.com/LinOTP/linotp-auth-freeradius-perl
cd linotp-auth-freeradius-perl /
cp radius_linotp.pm /usr/share/linotp/radius_linotp.pm

# Trazemos o arquivo de configuração freeradius para linotp para este formulário

cat / etc / freeradius / sites-enabled / linotp

linotp do servidor {
ouça {
ipaddr = *
port = 1812
type = auth
}
ouça {
ipaddr = *
port = 1813
type = acct
}
autorizar {
pré-processo
atualização {
& controle: Tipo de autenticação: = Perl
}
}
autenticar {
Tipo de autenticação Perl {
perl
}
}
contabilidade {
unix
}
}
# Nos sites habilitados para freeradius, deixamos apenas linotp

ls / etc / freeradius / sites-enabled
linotp

# Adicione hosts a partir dos quais permitimos conexões no freeradius

cat /etc/freeradius/clients.conf

host1 do cliente {
ipaddr = IP_1
netmask = 32
secret = 'SECRET_1'
}
cliente host2 {
ipaddr = IP_2
netmask = 32
secret = 'SECRET_2'
}
# Como base de usuários, usamos o conector perl

cat / etc / freeradius / users

PADRÃO Tipo de autenticação: = perl
}

cat /etc/freeradius/3.0/mods-available/perl

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

}
# No diretório mods-enabled, faça links simbólicos no diretório mods-available para o módulo perl e remova o eap

ln -s /etc/freeradius/3.0/mods-available/perl /etc/freeradius/3.0/mods-enabled/perl
rm /etc/freeradius/3.0/mods-enabled/eap

# Crie auditkey para executar linotp

linotp-create-auditkeys -f linotp.ini
# Criamos uma configuração do conector para verificar o DD que chega ao raio

cat /etc/linotp2/rlm_perl.ini

URL = https: // IP_LINOTP_SRV / validate / simplecheck
REALM = realm
RESCONF = LocalUser
Debug = True
SSL_CHECK = False

Deixarei abaixo alguns links para configurar sistemas, que geralmente precisam ser protegidos por autenticação de dois fatores:
Configurando a autenticação de dois fatores no Apache2

Instalação com o Cisco ASA (outro servidor de geração de token é usado lá, mas as configurações do próprio ASA são as mesmas).

VPN com autenticação de dois fatores

Configurando a autenticação de dois fatores no ssh (o LinOTP também é usado aqui) - graças ao autor. Você também pode encontrar coisas interessantes sobre a configuração de políticas LiOTP lá.

Além disso, cms de muitos sites suportam autenticação de dois fatores (para Wordpress, o LinOTP ainda possui seu próprio módulo especial no github ), por exemplo, se você deseja criar uma seção segura para os funcionários da empresa em seu site corporativo.
FATO IMPORTANTE! NÃO marque a caixa "Google autenteficator" para usar o Google Authenticator! O código QR não pode ser lido então ... (fato estranho)

Para escrever o artigo, foram usadas informações dos seguintes artigos:
itnan.ru/post.php?c=1&p=270571
www.digitalbears.net/?p=469

Graças aos autores.

Source: https://habr.com/ru/post/pt462523/


All Articles