
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 .
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.listAdicionamos 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 updateInstalamos 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 . 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-perlfazendo 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.oldCriando um arquivo vazio do cliente:
# touch /etc/freeradius/clients.confEditando nosso novo arquivo de configuração (o arquivo de backup pode ser usado como exemplo)
# nano /etc/freeradius/clients.confclient 192.168.188.0/24 {
secret = passwd # senha para conectar clientes
}Em seguida, criamos o arquivo users:
# touch /etc/freeradius/usersEditando o arquivo e informando ao radius que usaremos perl para autenticação.
# nano /etc/freeradius/usersDEFAULT Auth-type := perlEm seguida, editamos o arquivo /etc/freeradius/modules/perl
# nano /etc/freeradius/modules/perlPrecisamos 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.iniURL=https://IP_do_seu_servidor_LinOTP(192.168.X.X)/validate/simplecheck
REALM=webusers1c
RESCONF=LocalUser
Debug=True
SSL_CHECK=FalseAqui 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/linotpE 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-enabledPessoalmente, 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 -puse 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/linotpCole 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.pmAgora 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
(lá é usado outro servidor de geração de tokens, mas as configurações da ASA são as mesmas).
Configuração (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 ), 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:
Obrigado aos autores.
Fonte: habr.com
