Servidor de autenticação de dois fatores LinOTP

Servidor de autenticação de dois fatores LinOTP

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

Por que precisamos disso?
Esta é uma solução totalmente gratuita e conveniente, dentro de uma rede própria, independente de fornecedores terceiros.

Este serviço é muito conveniente, bastante visual, ao contrário 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)). Através da API, integra-se com serviços de envio de sms (LinOTP Config->Provider Config->SMS Provider), gera códigos para aplicações mobile como Google Authentificator e muito mais. Acho que é mais conveniente do que o serviço discutido em статье.

Este servidor funciona perfeitamente com Cisco ASA, servidor OpenVPN, Apache2 e, em geral, com quase tudo que suporta autenticação via servidor RADIUS (por exemplo, para SSH no data center).

exige:

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

Home:

Instalando o Debian 8.

Adicione o repositório LinOTP:

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

Adicionando chaves:

# gpg --search-keys 913DFF12F86258E5

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

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. Tudo bem. Basta executar o comando novamente.
Para a pergunta do Debian:

gpg: поиск "913DFF12F86258E5" на hkp сервере keys.gnupg.net
(1)	LSE LinOTP2 Packaging <[email protected]>
	  2048 bit RSA key F86258E5, создан: 2010-05-10
Keys 1-1 of 1 for "913DFF12F86258E5".  Введите числа, N) Следующий или Q) Выход>

Nós respondemos: 1

Seguinte:

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

# apt-get update

Instale o mysql. Em teoria, você pode usar outro sql server, mas para simplificar vou usá-lo conforme recomendado para LinOTP.

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

# apt-get install mysql-server

# apt-get update

(não faria mal nenhum verificar as atualizações novamente)
Instale LinOTP e módulos adicionais:

# apt-get install linotp

Respondemos às perguntas do instalador:
Usar Apache2: sim
Crie uma senha para administrador Linotp: “Sua senha”
Gerar certificado autoassinado?: sim
Usar MySQL?: sim
Onde está localizado o banco de dados: localhost
Crie um banco de dados LinOTP (nome base) no servidor: LinOTP2
Crie um usuário separado para o banco de dados: LinOTP2
Definimos uma senha para o usuário: “Sua Senha”
Devo criar um banco de dados agora? (algo como “Tem certeza que quer...”): sim
Digite a senha root do MySQL que você criou ao instalá-lo: “YourPassword”
Concluído.

(opcional, você não precisa instalá-lo)

# apt-get install linotp-adminclient-cli 

(opcional, você não precisa instalá-lo)

# apt-get install libpam-linotp  

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

"<b>https</b>: //IP_сервера/manage"

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

Agora, o mais importante! Criamos o FreeRadius e o vinculamos ao Linotp.

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

# apt-get install freeradius linotp-freeradius-perl

faça backup das configurações do raio do cliente e dos 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

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

# nano /etc/freeradius/clients.conf

client 192.168.188.0/24 {
secret  = passwd # пароль для подключения клиентов
}

Em seguida, crie um arquivo de usuários:

# touch /etc/freeradius/users

Editamos o arquivo, informando ao radius que usaremos 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 especificar o caminho para o script perl linotp no parâmetro do módulo:

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

.....
A seguir, criamos um arquivo no qual dizemos de qual (domínio, banco de dados ou arquivo) retirar os dados.

# touch /etc/linotp2/rlm_perl.ini

# nano /etc/linotp2/rlm_perl.ini

URL=https://IP_вашего_LinOTP_сервера(192.168.X.X)/validate/simplecheck
REALM=webusers1c
RESCONF=LocalUser
Debug=True
SSL_CHECK=False

Vou entrar em mais detalhes aqui porque é 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 web do LinOTP.)
REALM = rearmar1
#Nome do grupo de usuários criado no focinho da web LinOTP.
RESCONF=arquivo_plano
#opcional: comente se tudo parece funcionar bem
Depurar = Verdadeiro
#opcional: use isto, se você tiver certificados autoassinados, caso contrário comente (SSL se criarmos nosso próprio certificado e quisermos verificá-lo)
SSL_CHECK=Falso

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 há necessidade de editar nada):

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 USERREALM 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
}

A seguir criaremos um link SIM:

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

Pessoalmente, eu mato sites Radius padrão, mas se precisar deles, você pode editar suas configurações ou desativá-los.

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

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

# service freeradius reload

Agora vamos voltar ao web face e examiná-lo com mais detalhes:
No canto superior direito clique em LinOTP Config -> UserIdResolvers -> Novo
Escolhemos o que queremos: 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 -> New.
e dê um nome aos nossos REALMS, e também clique nos UserIdResolvers criados anteriormente.

O FreeRadius precisa de todos esses dados no arquivo /etc/linotp2/rlm_perl.ini, como escrevi acima, então se você não os editou, faça-o agora.

O servidor está todo configurado.

Adição:

Configurando LinOTP no Debian 9:

Установка:

# 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 definição de uma senha de root, é claro que você pode deixá-la vazia, mas se você ler as notícias, isso muitas vezes leva a “falhas épicas”, então vamos defini-la de qualquer forma)

# mysql -u root -p
use mysql;
UPDATE user SET Password = PASSWORD('тут_пароль') WHERE User = 'root';
exit
# 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 pelo JuriM, obrigado por isso!):

servidor linotp {
ouvir {
ipaddr = *
porta = 1812
tipo=autenticação
}
ouvir {
ipaddr = *
porta = 1813
tipo = conta
}
autorizar {
pré-processamento
atualizar {
&control: Tipo de autenticação := Perl
}
}
autenticar {
Perl de tipo de autenticação {
perl
}
}
contabilidade {
unix
}
}

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

perl {
nome do arquivo = /usr/share/linotp/radius_linotp.pm
func_authenticate = autenticar
func_authorize = autorizar
}

Infelizmente, no Debian 9 a biblioteca radius_linotp.pm não é instalada nos repositórios, então iremos retirá-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 editar /etc/freeradius/3.0/clients.conf

servidores clientes {
endereço IP = 192.168.188.0/24
segredo = sua senha
}

Agora vamos corrigir o nano /etc/linotp2/rlm_perl.ini

Colamos o mesmo código da instalação no debian 8 (descrito acima)

isso está tudo de acordo com a ideia. (ainda não testado)

Deixarei abaixo alguns links sobre como configurar sistemas que na maioria das vezes precisam ser protegidos com autenticação de dois fatores:
Configurando a autenticação de dois fatores em Apache2

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

VPN com autenticação de dois fatores

Fixação autenticação de dois fatores em ssh (LinOTP também é usado lá) - obrigado ao autor. Lá você também pode encontrar coisas interessantes sobre como configurar políticas LiOTP.

Além disso, o cms de muitos sites suporta autenticação de dois fatores (para WordPress, o LinOTP ainda possui seu próprio módulo especial para github), por exemplo, se você deseja criar uma seção protegida em seu site corporativo para funcionários da empresa.
FATO IMPORTANTE! NÃO marque a caixa “Google autenficator” para usar o Google Authenticator! O código QR não é legível então... (fato estranho)

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

Obrigado aos autores.

Fonte: habr.com

Adicionar um comentário