Autenticacao TOTP Radius Tacacs Debian: mudanças entre as edições
Sem resumo de edição |
Sem resumo de edição |
||
| (8 revisões intermediárias pelo mesmo usuário não estão sendo mostradas) | |||
| Linha 1: | Linha 1: | ||
[[Arquivo:Ssh_totp_radius_tacacs.png|semmoldura|482x482px]]{{DISPLAYTITLE:Autenticação TOTP + Radius/Tacacs no Debian}} | [[Arquivo:Ssh_totp_radius_tacacs.png|semmoldura|482x482px]]{{DISPLAYTITLE:Autenticação TOTP + Radius/Tacacs no Debian}} | ||
__TOC__ | __TOC__ | ||
== | == Introdução == | ||
A administração remota de servidores '''GNU/Linux''' é algo que precisamos estar sempre atentos com a segurança. Filtros de pacotes para bloquear e/ou liberar acessos, ajustes para serviços não ficarem expostos sem necessidade, uso de IPs privados quando possível, aplicar atualizações quando disponíveis, monitoramento dos logs e file system são coisas básicas para todo sysadmin. Boa parte destas tarefas necessitam de acesso remoto aos servidores via '''SSH''' e esse serviço precisa ser bem cuidado para que seu servidor não seja comprometido. Outro fator importante é quando administra diversos servidores em uma empresa juntamente com outros sysadmins e em algum momento alguém é desligado da empresa ou entrou de férias. Imagina ter que entrar em cada servidor para remover ou bloquear os acessos. Imagina fazer isso com 100, 500, 1000 VMs. Neste artigo iremos configurar um servidor Debian para autenticar via '''Radius''' ou '''Tacacs+''' e ainda usar 2FA com Google Authenticator. O '''Radius''' e o '''Tacacs+''' darão controle para administração centralizada da autenticação dos usuários e o '''Google Authenticator''' adiciona uma camada de segurança no acesso '''SSH'''. | A administração remota de servidores '''GNU/Linux''' é algo que precisamos estar sempre atentos com a segurança. Filtros de pacotes para bloquear e/ou liberar acessos, ajustes para serviços não ficarem expostos sem necessidade, uso de IPs privados quando possível, aplicar atualizações quando disponíveis, monitoramento dos logs e file system são coisas básicas para todo sysadmin. Boa parte destas tarefas necessitam de acesso remoto aos servidores via '''SSH''' e esse serviço precisa ser bem cuidado para que seu servidor não seja comprometido. Outro fator importante é quando administra diversos servidores em uma empresa juntamente com outros sysadmins e em algum momento alguém é desligado da empresa ou entrou de férias. Imagina ter que entrar em cada servidor para remover ou bloquear os acessos. Imagina fazer isso com 100, 500, 1000 VMs. Neste artigo iremos configurar um servidor Debian para autenticar via '''Radius''' ou '''Tacacs+''' e ainda usar 2FA com Google Authenticator. O '''Radius''' e o '''Tacacs+''' darão controle para administração centralizada da autenticação dos usuários e o '''Google Authenticator''' adiciona uma camada de segurança no acesso '''SSH'''. | ||
| Linha 9: | Linha 9: | ||
* Um servidor '''Radius''' ou '''Tacacs+''' já em produção. Melhor ainda se estiverem em '''HA (High Availability)''', pois como estamos lidando com acessos críticos de equipamentos e servidores, precisamos garantir que em caso de falha no autenticador principal, um secundário assuma essa função e a operação não seja impactada. | * Um servidor '''Radius''' ou '''Tacacs+''' já em produção. Melhor ainda se estiverem em '''HA (High Availability)''', pois como estamos lidando com acessos críticos de equipamentos e servidores, precisamos garantir que em caso de falha no autenticador principal, um secundário assuma essa função e a operação não seja impactada. | ||
* O servidor precisar ter acesso sainte para a '''Internet''', pode ser através de '''NAT'''. Se faz necessário para instalação dos pacotes e download do projeto '''pam_tacplus''' via '''Github''' caso use autenticação via '''Tacacs+.''' | * O servidor precisar ter acesso sainte para a '''Internet''', pode ser através de '''NAT'''. Se faz necessário para instalação dos pacotes e download do projeto '''pam_tacplus''' via '''Github''' caso use autenticação via '''Tacacs+.''' | ||
* | * Os comandos aqui serão executados em um '''Debian 13 (Trixie)''' mas poderão ser adaptados para serem executados em outras '''distribuições GNU/Linux'''. | ||
== Banner no SSH == | |||
Primeiramente é interessante comentar que ter um banner informando que o acesso só é permitido para pessoas autorizadas, é uma boa prática. Então aqui vai um exemplo de banner, basta criar o arquivo '''/etc/ssh/banner''' com o conteúdo abaixo e alterado para o nome da sua Organização e adicionar em '''/etc/ssh/sshd_config''' com o parâmetro: '''Banner''' '''/etc/ssh/banner'''. Na sequência só reiniciar o serviço sshd com: '''systemctl restart sshd'''. | |||
******************************************************************************* | |||
* ISPFocus * | |||
* Este acesso e unica e exclusivamente para pessoas autorizadas. * | |||
* Voce esta prestes a acessar uma area Restrita/Privada, podendo conter * | |||
* informacao confidencial e/ou privilegiada. Este acesso sera monitorado. * | |||
* * | |||
* Se voce nao foi autorizado, desde ja fica notificado de abster-se a * | |||
* divulgar, copiar, distribuir, examinar, de qualquer forma, utilizar a * | |||
* informacao contida neste servidor, por ser ilegal, sujeitando o infrator as * | |||
* penas da lei. * | |||
* * | |||
* Precione <Ctrl-D> se voce NAO foi autorizado. * | |||
******************************************************************************* | |||
******************************************************************************* | |||
* ISPFocus * | |||
* This access is solely and exclusively for authorized personnel. * | |||
* You are about to access a Restricted/Private area, which may contain * | |||
* confidential and/or privileged information. This access will be monitored. * | |||
* * | |||
* If you are not authorized, you are hereby notified to refrain from * | |||
* disclosing, copying, distributing, reviewing, or otherwise using the * | |||
* information contained on this server, as it is illegal and will subject * | |||
* the violator to penalties under the law. * | |||
* * | |||
* Press <Ctrl-D> if you are NOT authorized. * | |||
******************************************************************************* | |||
== Instalando o Google Authenticator no servidor Debian == | |||
# apt-get install libpam-google-authenticator -y | |||
É necessário que o usuário seja criado localmente no sistema. Exemplo: | |||
# useradd -m -s /bin/bash gondim | |||
Altere em '''/etc/ssh/sshd''' para que esses parâmetros fiquem assim: | |||
KbdInteractiveAuthentication yes | |||
UsePAM yes | |||
PasswordAuthentication yes | |||
Agora vamos gerar os dados para cadastro no '''Google Authenticator''' instalado no smartphone do usuário '''gondim''': | |||
# su - gondim | |||
$ google-authenticator -C -t -d -f -w 3 -Q UTF8 -r 3 -R 30 | |||
[[Arquivo:Qrcode.png|nenhum|miniaturadaimagem|916x916px]] | |||
Quando executamos o comando acima, ele gera informações como neste exemplo. Nele temos o '''QR Code''' que facilita a configuração no '''Google Authenticator''', temos a '''secret key''' que também pode ser usado para cadastro e os códigos de emergência para em caso de perda ou roubo do '''smartphone''', o usuário ainda conseguir logar no sistema. | |||
Seguiremos agora com um exemplo de configuração para autenticação em Servidor Radius. | |||
== Instalando e configurando o módulo PAM para autenticação em Radius Server == | |||
# apt install libpam-radius-auth | |||
Edite o arquivo '''/etc/pam_radius_auth.conf''' e deixe configurado nele o apontamento para seu servidor Radius com a secret: | |||
# server[:port] shared_secret timeout (s) | |||
10.254.254.6 C5or4Zc49z2R 3 | |||
Obs.: no seu servidor Radius você precisará liberar em NAS o IP do seu servidor Debian, senão ele não terá autorização para acessar o Radius. | |||
== Instalando e configurando o módulo PAM para autenticação em Tacacs+ Server == | |||
Para essa configuração precisaremos do módulo '''pam_tacplus''' só que ele não está mais presente nos pacotes do Debian. Nesse caso baixaremos o código fonte do '''Github''', compilaremos e instalaremos no '''Debian'''. | |||
Instalando os pacotes que precisaremos: | |||
# apt install git autoconf build-essential libtool automake libpam-dev libssl-dev gnulib | |||
Baixando do repositório do '''Github''': | |||
# cd /usr/local/src | |||
# git clone <nowiki>https://github.com/kravietz/pam_tacplus.git</nowiki> | |||
Compilando e instalando o '''pam_tacplus''': | |||
# cd pam-tacplus | |||
# gnulib-tool --makefile-name=Makefile.gnulib --libtool --import fcntl crypto/md5 array-list list xlist getrandom realloc-posix explicit_bzero xalloc getopt-gnu | |||
# autoreconf -f -v -i | |||
# ./configure --libdir=/usr/lib/x86_64-linux-gnu | |||
# make | |||
# make install | |||
O módulo usa o serviço PAP no Tacacs+ para autenticação e por isso precisa configurar no seu servidor Tacacs+. Caso esteja usando um servidor Tacacs+ em um GNU/Linux, precisará definir no arquivo de configuração '''tac_plus.conf''' se o '''pap''' usará usuários criados localmente no servidor pelo '''useradd''' ou se usará usuários no próprio arquivo '''tac_plus.conf'''. Abaixo mostro os 2 exemplos: | |||
user = gondim { | |||
member = cgr | |||
pap = file /etc/passwd | |||
} | |||
Neste exemplo acima o usuário foi criado no servidor Tacacs+ com o comando: '''useradd -s /bin/false <user>''' e depois setada a senha com: '''passwd <user>'''. | |||
OU | |||
user = gondim { | |||
member = cgr | |||
pap = cleartext <senha_forte> | |||
} | |||
Nesse último exemplo você precisará definir a senha do usuário no lugar de '''<senha_forte>'''. | |||
== Alterando o PAM do Debian GNU/Linux para autenticar usando Google Authenticator e Radius Server == | |||
Em '''/etc/pam.d/sshd''', antes da linha com '''@include common-auth''', adicione: | |||
auth requisite pam_google_authenticator.so | |||
auth sufficient pam_radius_auth.so | |||
Nesse momento você poderá testar o '''SSH''' para o seu servidor e verá algo assim: | |||
[[Arquivo:Tela autenticacao.png|nenhum|miniaturadaimagem|740x740px]] | |||
Primeiro o sistema irá pedir seu '''token''' do '''Google Authenticator''' e somente se passar o correto é que será solicitada a '''senha cadastrada no seu Radius Server'''. | |||
Caso necessite que o usuário se torne root utilizando '''sudo''', faça a mesma configuração em '''/etc/pam.d/sudo-i''' e adicione o usuário no '''grupo sudo''' com o comando: '''usermod -aG sudo <user>'''. | |||
== Alterando o PAM do Debian GNU/Linux para autenticar usando Google Authenticator e Tacacs+ Server == | |||
Para configurarmos a autenticação usando '''Tacacs+''' e '''Google Authenticator''', faremos a mesma configuração em '''/etc/pam.d/sshd''' e '''/etc/pam.d/sudo-i''' só que um pouco diferente. | |||
auth requisite pam_google_authenticator.so | |||
auth sufficient pam_tacplus.so server=10.254.254.6 secret=<senha_forte> | |||
account sufficient pam_tacplus.so server=10.254.254.6 secret=<senha_forte> | |||
session sufficient pam_tacplus.so server=10.254.254.6 secret=<senha_forte> | |||
Acima o parâmetro '''server=''' é o IP do seu servidor '''Tacacs+''' e '''secret=''' é a '''secret key''' utilizada no seu servidor '''Tacacs+'''. | |||
Gostou deste artigo? Se lhe foi útil compartilhe também com seus colegas este conteúdo. Precisa de configurar um servidor Radius/Tacacs+ para autenticar usuários em seus sistemas e equipamentos? Nos procure em https://ispfocus.net.br ou através do QR Code abaixo. | |||
[[Arquivo:Qrcode ispfocus.png|nenhum|miniaturadaimagem|283x283px]] | |||
[[Categoria:Artigos Técnicos]] | |||
Edição atual tal como às 03h33min de 6 de fevereiro de 2026
Introdução
A administração remota de servidores GNU/Linux é algo que precisamos estar sempre atentos com a segurança. Filtros de pacotes para bloquear e/ou liberar acessos, ajustes para serviços não ficarem expostos sem necessidade, uso de IPs privados quando possível, aplicar atualizações quando disponíveis, monitoramento dos logs e file system são coisas básicas para todo sysadmin. Boa parte destas tarefas necessitam de acesso remoto aos servidores via SSH e esse serviço precisa ser bem cuidado para que seu servidor não seja comprometido. Outro fator importante é quando administra diversos servidores em uma empresa juntamente com outros sysadmins e em algum momento alguém é desligado da empresa ou entrou de férias. Imagina ter que entrar em cada servidor para remover ou bloquear os acessos. Imagina fazer isso com 100, 500, 1000 VMs. Neste artigo iremos configurar um servidor Debian para autenticar via Radius ou Tacacs+ e ainda usar 2FA com Google Authenticator. O Radius e o Tacacs+ darão controle para administração centralizada da autenticação dos usuários e o Google Authenticator adiciona uma camada de segurança no acesso SSH.
Pré-requisitos
Para que nosso ambiente funcione precisaremos:
- Um servidor Radius ou Tacacs+ já em produção. Melhor ainda se estiverem em HA (High Availability), pois como estamos lidando com acessos críticos de equipamentos e servidores, precisamos garantir que em caso de falha no autenticador principal, um secundário assuma essa função e a operação não seja impactada.
- O servidor precisar ter acesso sainte para a Internet, pode ser através de NAT. Se faz necessário para instalação dos pacotes e download do projeto pam_tacplus via Github caso use autenticação via Tacacs+.
- Os comandos aqui serão executados em um Debian 13 (Trixie) mas poderão ser adaptados para serem executados em outras distribuições GNU/Linux.
Banner no SSH
Primeiramente é interessante comentar que ter um banner informando que o acesso só é permitido para pessoas autorizadas, é uma boa prática. Então aqui vai um exemplo de banner, basta criar o arquivo /etc/ssh/banner com o conteúdo abaixo e alterado para o nome da sua Organização e adicionar em /etc/ssh/sshd_config com o parâmetro: Banner /etc/ssh/banner. Na sequência só reiniciar o serviço sshd com: systemctl restart sshd.
******************************************************************************* * ISPFocus * * Este acesso e unica e exclusivamente para pessoas autorizadas. * * Voce esta prestes a acessar uma area Restrita/Privada, podendo conter * * informacao confidencial e/ou privilegiada. Este acesso sera monitorado. * * * * Se voce nao foi autorizado, desde ja fica notificado de abster-se a * * divulgar, copiar, distribuir, examinar, de qualquer forma, utilizar a * * informacao contida neste servidor, por ser ilegal, sujeitando o infrator as * * penas da lei. * * * * Precione <Ctrl-D> se voce NAO foi autorizado. * ******************************************************************************* ******************************************************************************* * ISPFocus * * This access is solely and exclusively for authorized personnel. * * You are about to access a Restricted/Private area, which may contain * * confidential and/or privileged information. This access will be monitored. * * * * If you are not authorized, you are hereby notified to refrain from * * disclosing, copying, distributing, reviewing, or otherwise using the * * information contained on this server, as it is illegal and will subject * * the violator to penalties under the law. * * * * Press <Ctrl-D> if you are NOT authorized. * *******************************************************************************
Instalando o Google Authenticator no servidor Debian
# apt-get install libpam-google-authenticator -y
É necessário que o usuário seja criado localmente no sistema. Exemplo:
# useradd -m -s /bin/bash gondim
Altere em /etc/ssh/sshd para que esses parâmetros fiquem assim:
KbdInteractiveAuthentication yes UsePAM yes PasswordAuthentication yes
Agora vamos gerar os dados para cadastro no Google Authenticator instalado no smartphone do usuário gondim:
# su - gondim $ google-authenticator -C -t -d -f -w 3 -Q UTF8 -r 3 -R 30

Quando executamos o comando acima, ele gera informações como neste exemplo. Nele temos o QR Code que facilita a configuração no Google Authenticator, temos a secret key que também pode ser usado para cadastro e os códigos de emergência para em caso de perda ou roubo do smartphone, o usuário ainda conseguir logar no sistema.
Seguiremos agora com um exemplo de configuração para autenticação em Servidor Radius.
Instalando e configurando o módulo PAM para autenticação em Radius Server
# apt install libpam-radius-auth
Edite o arquivo /etc/pam_radius_auth.conf e deixe configurado nele o apontamento para seu servidor Radius com a secret:
# server[:port] shared_secret timeout (s) 10.254.254.6 C5or4Zc49z2R 3
Obs.: no seu servidor Radius você precisará liberar em NAS o IP do seu servidor Debian, senão ele não terá autorização para acessar o Radius.
Instalando e configurando o módulo PAM para autenticação em Tacacs+ Server
Para essa configuração precisaremos do módulo pam_tacplus só que ele não está mais presente nos pacotes do Debian. Nesse caso baixaremos o código fonte do Github, compilaremos e instalaremos no Debian.
Instalando os pacotes que precisaremos:
# apt install git autoconf build-essential libtool automake libpam-dev libssl-dev gnulib
Baixando do repositório do Github:
# cd /usr/local/src # git clone https://github.com/kravietz/pam_tacplus.git
Compilando e instalando o pam_tacplus:
# cd pam-tacplus # gnulib-tool --makefile-name=Makefile.gnulib --libtool --import fcntl crypto/md5 array-list list xlist getrandom realloc-posix explicit_bzero xalloc getopt-gnu # autoreconf -f -v -i # ./configure --libdir=/usr/lib/x86_64-linux-gnu # make # make install
O módulo usa o serviço PAP no Tacacs+ para autenticação e por isso precisa configurar no seu servidor Tacacs+. Caso esteja usando um servidor Tacacs+ em um GNU/Linux, precisará definir no arquivo de configuração tac_plus.conf se o pap usará usuários criados localmente no servidor pelo useradd ou se usará usuários no próprio arquivo tac_plus.conf. Abaixo mostro os 2 exemplos:
user = gondim {
member = cgr
pap = file /etc/passwd
}
Neste exemplo acima o usuário foi criado no servidor Tacacs+ com o comando: useradd -s /bin/false <user> e depois setada a senha com: passwd <user>.
OU
user = gondim {
member = cgr
pap = cleartext <senha_forte>
}
Nesse último exemplo você precisará definir a senha do usuário no lugar de <senha_forte>.
Alterando o PAM do Debian GNU/Linux para autenticar usando Google Authenticator e Radius Server
Em /etc/pam.d/sshd, antes da linha com @include common-auth, adicione:
auth requisite pam_google_authenticator.so auth sufficient pam_radius_auth.so
Nesse momento você poderá testar o SSH para o seu servidor e verá algo assim:

Primeiro o sistema irá pedir seu token do Google Authenticator e somente se passar o correto é que será solicitada a senha cadastrada no seu Radius Server.
Caso necessite que o usuário se torne root utilizando sudo, faça a mesma configuração em /etc/pam.d/sudo-i e adicione o usuário no grupo sudo com o comando: usermod -aG sudo <user>.
Alterando o PAM do Debian GNU/Linux para autenticar usando Google Authenticator e Tacacs+ Server
Para configurarmos a autenticação usando Tacacs+ e Google Authenticator, faremos a mesma configuração em /etc/pam.d/sshd e /etc/pam.d/sudo-i só que um pouco diferente.
auth requisite pam_google_authenticator.so auth sufficient pam_tacplus.so server=10.254.254.6 secret=<senha_forte> account sufficient pam_tacplus.so server=10.254.254.6 secret=<senha_forte> session sufficient pam_tacplus.so server=10.254.254.6 secret=<senha_forte>
Acima o parâmetro server= é o IP do seu servidor Tacacs+ e secret= é a secret key utilizada no seu servidor Tacacs+.
Gostou deste artigo? Se lhe foi útil compartilhe também com seus colegas este conteúdo. Precisa de configurar um servidor Radius/Tacacs+ para autenticar usuários em seus sistemas e equipamentos? Nos procure em https://ispfocus.net.br ou através do QR Code abaixo.
