{"id":156,"date":"2025-10-29T16:31:17","date_gmt":"2025-10-29T19:31:17","guid":{"rendered":"https:\/\/administracaoderedes.com.br\/?p=156"},"modified":"2025-10-29T16:31:19","modified_gmt":"2025-10-29T19:31:19","slug":"ssh-seguro-parte-1","status":"publish","type":"post","link":"https:\/\/administracaoderedes.com.br\/index.php\/2025\/10\/29\/ssh-seguro-parte-1\/","title":{"rendered":"SSH Seguro &#8211; Parte 1"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">Torne o seu acesso SSH seguro de verdade, vamos usar chaves e fail2ban para deixar tudo muito mais robusto.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">O que \u00e9 o SSH : &nbsp;<a href=\"https:\/\/www.google.com\/search?sca_esv=df6bb7b4e6fcd0a4&amp;sxsrf=AE3TifM68VZbji0OgL78KVSfHeaxVrR-iQ%3A1759430644726&amp;q=Secure+Shell&amp;sa=X&amp;ved=2ahUKEwib1df0lYaQAxUHJrkGHX8xL4sQxccNegQIJBAB&amp;mstk=AUtExfCmeJsQ2Ou2WZX7kDld6BeZdnYTYgKFnseRzLPbeS2Rw3d-_mMe6E2WkZHt1poYZy2S5YC1M1Y9BRSD8wbxFzraO_q6OLC5NfTf9o3LG-XfLRBBNw57PgoOjrKsGK6NCTYFsLWzBnvRLPD4xrvGbSEPsFoehf_27Cdpb3Uyr9hFfpiYvfbOp1_3P3HZpBbhu02qR_2a1ePhLPRx2a4KAZIZXTavWm24BJBh4YlSnMUSfBz0LoZDs_IjKJ3mu4yhXZ-zdB5TZh3nNrrRaGlcKHYm&amp;csui=3\" target=\"_blank\" rel=\"noreferrer noopener\">Secure Shell<\/a>,&nbsp;<mark>\u00e9 um protocolo de rede que permite acesso remoto seguro a computadores e servidores, realizando tarefas como login e transfer\u00eancia de arquivos atrav\u00e9s de uma conex\u00e3o criptografada e autenticada<\/mark>.&nbsp;Ele protege dados sens\u00edveis em redes inseguras, garantindo a confidencialidade e a integridade das informa\u00e7\u00f5es trocadas, e \u00e9 amplamente utilizado para administra\u00e7\u00e3o de sistemas, desenvolvimento de software e acesso a reposit\u00f3rios como o GitHub.&nbsp;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">O que \u00e9 o fail2ban : <mark>\u00e9 uma ferramenta gratuita de c\u00f3digo aberto para&nbsp;<strong>prevenir ataques de for\u00e7a bruta<\/strong>&nbsp;em servidores Linux<\/mark>, monitorando arquivos de log em busca de tentativas de login falhas e bloqueando automaticamente os endere\u00e7os IP mal-intencionados usando um firewall (como iptables) por um tempo determinado. Ele \u00e9 flex\u00edvel, pode ser configurado para proteger diferentes servi\u00e7os (como SSH e Apache) e ajuda a aumentar a seguran\u00e7a geral de um servidor.&nbsp;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"wp-block-paragraph\">Mas se o SSH j\u00e1 \u00e9 seguro , porque melhorar ainda mais a seguran\u00e7a ?<\/p>\n<\/blockquote>\n\n\n\n<p class=\"wp-block-paragraph\">Deixa eu explicar uma coisa, voc\u00ea pode investir em toda tecnologia do mundo, mas quase sempre vai ter um individuo de natureza despreocupada que vai usar por comodidade ou pura pregui\u00e7a uma senha do tipo &#8220;sodeussalva&#8221; ou &#8220;P@$$w0rd&#8221; ou o pr\u00f3prio nome como senha, para este tipo de pessoa, o melhor \u00e9 n\u00e3o permitir que ele digite uma senha para se autentica, d\u00ea para ele uma chave privada, que permita  o acesso sem senha , pode parecer algo antag\u00f4nico a seguran\u00e7a tal ideia, mas vamos a alguns fatos.<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"wp-block-paragraph\"><strong>Autentica\u00e7\u00e3o por usu\u00e1rio + senha<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Ataque mais comum: for\u00e7a bruta (brute force), onde bots tentam milh\u00f5es de combina\u00e7\u00f5es de usu\u00e1rio\/senha. Problema: mesmo senhas fortes podem cair em vazamentos ou ataques de dicion\u00e1rio.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Exposi\u00e7\u00e3o real: pesquisas de seguran\u00e7a mostram que servidores SSH abertos na internet recebem milhares de tentativas de login por senha por dia (quase sempre automatizadas).<\/p>\n<\/blockquote>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"wp-block-paragraph\"><strong>Autentica\u00e7\u00e3o por chave p\u00fablica (public\/private key)<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">A chave privada \u00e9 um arquivo criptogr\u00e1fico; n\u00e3o h\u00e1 senha para tentar adivinhar diretamente. O servidor s\u00f3 valida se a chave enviada corresponde \u00e0 p\u00fablica cadastrada no authorized_keys. Para que um invasor acesse, precisaria roubar sua chave privada e <\/p>\n\n\n\n<p class=\"wp-block-paragraph\">descobrir a passphrase dela (se voc\u00ea configurou uma).<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><em>For\u00e7a bruta contra chave SSH moderna (ex.: Ed25519, RSA 4096) \u00e9 computacionalmente invi\u00e1vel.<\/em><\/p>\n<\/blockquote>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p class=\"wp-block-paragraph\">Explicado os fatos vamos para o m\u00e3o na massa :<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Estamos admitindo que voc\u00ea j\u00e1 tem o seu servidor configurado e rodando o servi\u00e7o de sshd, e para efeitos de didatica vamos estabelecer o seguinte cen\u00e1rio <\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Servidor : SRV001<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Sistema operacional : Debian 12<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">IP Privado : 192.168.10.10\/24<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">observa\u00e7\u00f5es:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">O SSH j\u00e1 est\u00e1 configurado para n\u00e3o aceitar autentica\u00e7\u00e3o como root , sim isso \u00e9 uma boa pr\u00e1tica de seguran\u00e7a.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Existe um usuario  userteste com a senha : 123@VouMudar<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Esta\u00e7\u00e3o : DESK01<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Sistema Operacional : Linuxmint <\/p>\n\n\n\n<p class=\"wp-block-paragraph\">IP Privado : (DHCP)<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p class=\"wp-block-paragraph\">Usertest \u00e9 um daqueles indiv\u00edduos antes citado, pregui\u00e7oso por natureza, que insiste em nunca mudar a senha fraca pois ele j\u00e1 sabe decorada, ele esta na esta\u00e7\u00e3o dele e resolve que n\u00e3o quer mais nem digitar a senha de acesso e para isso pede ajuda ao administrador da rede.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">No terminal da maquina do Usertest ele inicia os trabalhos : <\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>DESK01:~$ ssh-keygen -t ed25519 -f ~\/.ssh\/id_usertest -a 100 -C \"Chave do UserTest\"\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Vamos explicar algumas coisas , o ss-keygen, pelo pr\u00f3prio nome \u00e9 autoexplicativo, a op\u00e7\u00e3o -t  define o algoritmo da chave , veja tabela abaixo<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><tbody><tr><td>Algoritmo<\/td><td>Considera\u00e7\u00f5es<\/td><\/tr><tr><td>ed25519<\/td><td><strong>mais recomendado hoje<\/strong> (seguro, r\u00e1pido e chave curta).<\/td><\/tr><tr><td>rsa<\/td><td>ainda usado, mas precisa ser longo (<code>-b 4096<\/code>).<\/td><\/tr><tr><td>ecdsa<\/td><td>baseado em curvas el\u00edpticas, menos comum.<\/td><\/tr><tr><td>dsa<\/td><td><strong>obsoleto<\/strong>, n\u00e3o use.<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">A op\u00e7\u00e3o -b informa o n\u00famero de bits da chave , deve ser usada somente quando aplic\u00e1vel, para o ed25519 n\u00e3o \u00e9 necess\u00e1rio<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">A op\u00e7\u00e3o -f, determina o local onde devem ser salvas as chaves , por padr\u00e3o devem ser salvas no diretorio .ssh do usu\u00e1rio , no exemplo ser\u00e1 criado as chaves com o nome id_usertest no diret\u00f3rio .ssh do usu\u00e1rio logado (~).<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Para determinar as itera\u00e7\u00f5es para derivar a chave da senha , use a op\u00e7\u00e3o -a n\u00famero, onde n\u00famero determina a quantidade de rodados do KDF (Key Derivation Function), quanto maior, mais lento para testar senhas em ataque de for\u00e7a bruta.<strong>Recomendado: pelo menos 100.<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">O -C adiciona uma etiqueta na chave p\u00fablica.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p class=\"wp-block-paragraph\">Voc\u00ea digitou o comando e algumas coisas v\u00e3o acontecer , uma dela \u00e9 que o ssh-keygen vai solicitar uma Passphrase<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Generating public\/private ed25519 key pair.\nEnter passphrase (empty for no passphrase): \n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Voc\u00ea pode at\u00e9 ficar tentado a deixa sem uma passphrase, mas confie neste autor, coloque uma , algo significativo como &#8216;cafecomleiteemuitobom&#8217;<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Enter same passphrase again: \nYour identification has been saved in \/home\/usertest\/.ssh\/id_usertest\nYour public key has been saved in \/home\/usertest\/.ssh\/id_usertest.pub\nThe key fingerprint is:\nSHA256:ASTq3JuBu1FHLYr9VEFUJcz\/i105Ez4qb7VWRXHnbvc Chave do UserTest\nThe key's randomart image is:\n+--&#91;ED25519 256]--+\n|    ..oo++o..  .+|\n|   . . o .o.   .+|\n|  .   o +  .   ..|\n| o = o o .  .  o.|\n|  = * o S    .. B|\n|   o B        .O=|\n|  o o .      oooE|\n|   o       ..ooo |\n|  .         +..  |\n+----&#91;SHA256]-----+\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Pronto voc\u00ea confirmou sua passphrase e ele gerou as duas chaves, a p\u00fablica e a privada.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Ufa! Mas n\u00e3o acabou, temos de publicar no servidor nossa chave publica, para isso vamos usar outra aplica\u00e7\u00e3o o ssh-copy-id.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>DESK01:~$ ssh-copy-id -i ~\/.ssh\/id_usertest.pub usertest@192.168.10.10<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">O que faz este comando, ele vai at\u00e9 o servidor onde deve ser publicado a chave p\u00fablica,  fazer uma conex\u00e3o via ssh usando as credencias do usertest e c\u00f3pia a chave p\u00fablica em sua estrutura. <\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Pois bem, neste momento o que deveriamos fazer no DESK01, est\u00e1 quase concluso, mais ainda a algo para fazer .  Se uma passphrase foi definida, sempre que for feita tentativa de conex\u00e3o ele vai pedir a passphrase,  para isso  devo ativar o ssh-agent conforme comando abaixo <\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>eval \"$(ssh-agent -s)\"\nssh-add ~\/.ssh\/id_usertest<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">No caso do Linuxmint se estiver em um ambiente gr\u00e1fico ele vai aparecer uma janela pedindo para salvar a passphase.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Acabou para o nosso amigo pregui\u00e7oso, mas aten\u00e7\u00e3o, o problema foi resolvido no DEKS01, ainda \u00e9 poss\u00edvel acessar o ssh com usu\u00e1rio e senha em outra esta\u00e7\u00e3o, e isso ainda \u00e9 um problema, ent\u00e3o para nosso destemido administrador de rede a luta apenas come\u00e7ou. No pr\u00f3ximo artigo, SSH sem usu\u00e1rio e senha e outras configura\u00e7\u00f5es.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Por enquanto \u00e9 s\u00f3.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Torne o seu acesso SSH seguro de verdade, vamos usar chaves e fail2ban para deixar tudo muito mais robusto. O que \u00e9 o SSH : &nbsp;Secure Shell,&nbsp;\u00e9 um protocolo de rede que permite acesso remoto seguro a computadores e servidores, realizando tarefas como login e transfer\u00eancia de arquivos atrav\u00e9s de uma conex\u00e3o criptografada e autenticada.&nbsp;Ele [&hellip;]<\/p>\n","protected":false},"author":3,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_regular_price":[],"currency_symbol":[],"pagelayer_contact_templates":[],"_pagelayer_content":"","footnotes":""},"categories":[6],"tags":[],"class_list":["post-156","post","type-post","status-publish","format-standard","hentry","category-conceitos"],"post_slider_layout_featured_media_urls":{"thumbnail":"","post_slider_layout_landscape_large":"","post_slider_layout_portrait_large":"","post_slider_layout_square_large":"","post_slider_layout_landscape":"","post_slider_layout_portrait":"","post_slider_layout_square":"","full":""},"_links":{"self":[{"href":"https:\/\/administracaoderedes.com.br\/index.php\/wp-json\/wp\/v2\/posts\/156","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/administracaoderedes.com.br\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/administracaoderedes.com.br\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/administracaoderedes.com.br\/index.php\/wp-json\/wp\/v2\/users\/3"}],"replies":[{"embeddable":true,"href":"https:\/\/administracaoderedes.com.br\/index.php\/wp-json\/wp\/v2\/comments?post=156"}],"version-history":[{"count":7,"href":"https:\/\/administracaoderedes.com.br\/index.php\/wp-json\/wp\/v2\/posts\/156\/revisions"}],"predecessor-version":[{"id":164,"href":"https:\/\/administracaoderedes.com.br\/index.php\/wp-json\/wp\/v2\/posts\/156\/revisions\/164"}],"wp:attachment":[{"href":"https:\/\/administracaoderedes.com.br\/index.php\/wp-json\/wp\/v2\/media?parent=156"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/administracaoderedes.com.br\/index.php\/wp-json\/wp\/v2\/categories?post=156"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/administracaoderedes.com.br\/index.php\/wp-json\/wp\/v2\/tags?post=156"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}