====== IRC ErgoD ====== ===== Instalação ===== Por padrão realizamos o processo de segurança criando um usuário para ter globalizar todo serviço. # useradd -m ergo -s /bin/bash Logamos com o usuário e criamos o diretório $HOME/server # su ergo # mkdir -v server Baixamos a última release em: [[https://github.com/ergochat/ergo/releases/]]. Descompactamos e movemos todo o conteúdo do diretório récem descompactado para o diretório **server/** # wget https://github.com/ergochat/ergo/releases/download/v2.7.0/ergo-2.7.0-linux-x86_64.tar.gz # tar -xvf ergo-2.7.0-linux-x86_64.tar.gz # mv -v ergo-2.7.0-linux-x86_64/ server/ # rm *.tar.gz ===== Configuração ===== $ cd ~/server Primeiramente faça a verificação se você esta no diretório aonde descompactou os arquivos, o diretório deve ser: ///home/ergo/server/// $ pwd /home/ergo/server Tambem é altamente recomendado fazer a verificação se você ainda está com usuário ergo.Se retornar ergo está tudo ok e você pode continuar. Se não entre com o usuário ergo novamente. $ echo $USER ergo Começamos nossa configuração do ergo renomeando dois arquivos que precisam estar com outro nome. A documentação oficial do ergo pede isso, então vamos seguir fielmente. Faça uma listagem no diretório e veja se você está com estes arquivos: $ ls CHANGELOG.md default.yaml docs ergo ergo.motd languages README traditional.yaml Caso você não esteja vendo estes arquivos você deve voltar ao diretório servidor que criamos. Os arquivos que devemos mover são: default.yaml e ergo.motd. O arquivo default.yaml é a configuração do servidor IRC em si e o ergo.motd é a mensagem de boas vindas que você pode setar de acordo com sua necessidade. mv -v default.yaml ircd.yaml mv -v ergo.motd ircd.motd Abra o arquivo recém renomeado ircd.yaml com seu editor de texto favorito e vamos começar alterando o nome do servidor para o seu dominio. Busque pelo seguinte bloco: # network configuration network: # name of the network name: **ErgoTest** Altere a linha: name: **ErgoTest** pelo nome do seu servidor! Não podem haver espaços no nome do servidor, use traços ou underlines. # network configuration network: # name of the network name: **Servidor-do-Jeffe** Vamos agora alterar o dominio de exemplo para o seu dominio. Procure pela linha: # server configuration server: # server name name: **ergo.test** Substitua a linha name: ergo.test pelo seu dominio. Caso você não tenha um dominio você pode adicionar o endereço IP do servidor. # server configuration server: # server name name: **slackjeff.com.br** ===== Segurança ===== O primeiro passo é limitar a quantidade de conexões por IP. Limite a um número baixo variando entre 2 e 4 conexões simultâneas. Isso vai ajudar a proteger em casao de ataque DoS. # maximum concurrent connections per IP/CIDR max-concurrent-connections: **2** O IRC mostra o ip de usuários na rede, você pode ver o mesmo com o comando /whois Usuario por exemplo, ou ao entrar e sair. Para dar mais privacidade aos usuários o ergo define por padrão o Cloaking. Ou seja ao invés de mostrar o ip do usuário mostrará algo "falso" no lugar ficando: //exemplo@12349198897NOMErede//. Para alterar o nome de Cloaking procure pela linha netname e altere para o nome que quiser. # fake TLD at the end of the hostname, e.g., pwbs2ui4377257x8.irc # you may want to use your network name here netname: "irc" Eu alterei para slackjeffHONOR # fake TLD at the end of the hostname, e.g., pwbs2ui4377257x8.irc # you may want to use your network name here netname: "slackjeffHONOR" Vamos agora definir a senha do Operador (OPER). Feche e salve o documento com editor de texto e execute o comando ergo. ./ergo genpasswd Vai ser gerado uma hash por exemplo: $2a$04$c4nA4uEf2NzmaJJEIan0HO4sgRRXhFJ/3ichSJ4bRrDoXxlQfMS4y Esta hash você precisa guardar para alterar no documento a seguir. Feito o processo localize a linha # ircd operators e troca a linha password O hash foi gerado anteriormente com o comando ./ergo genpasswd. password: "$2a$04$0123456789abcdef0123456789abcdef0123456789abcdef01234" Por padrão as mensagens em geral do IRC não são gravadas em arquivos mas ficam disponiveis (de uma forma não persistente) na memória RAM do servidor/máquina até o reboot. Esta opção vem habilitada, por questões de privacidade é interessante desabilitar. Afinal as mensagems se o usuário desejar devem ser armazenadas no computador do mesmo e não no servidor. Altere a linha: enabled: true para: enabled: false history: # should we store messages for later playback? # by default, messages are stored in RAM only; they do not persist # across server restarts. however, you may want to understand how message # history interacts with the GDPR and/or any data privacy laws that apply # in your country and the countries of your users. enabled: false ===== Criação de certificados ===== Hoje é normal se conectar na porta 6697 que indica que a conexão é criptografada nos servidores IRC. Antigamente utilizava a porta 6667 (até hoje em dia se utilizada) é uma porta que não está criptografada. Normalmente utilizamos criptografia na conexão de entrada e saida impedindo bisbilhoteiros de snifar o trafego do usuário. Esta opção já está habilitada por padrão e você deve apenas gerar o certificado! O certificado será auto assinado, ou seja o usuário a se conectar terá uma mensagem dizendo que o certificado pode não ser seguro justamento por ser auto assinado por você. Esta mensagem é apenas um aviso e se o certificado ser gerado corretamente terá criptografia na conexão. Para gerar o certificado rode o comando ergo! ./ergo mkcerts Você deve ter uma saida parecida com esta: $ ./ergo mkcerts 2021/09/21 22:07:21 making self-signed certificates 2021/09/21 22:07:21 making cert for :6697 listener 2021/09/21 22:07:21 Certificate created at fullchain.pem : privkey.pem Caso você queira gerar um certificado com Let's Encrypt você pode utilizar o certbot para isso. É a maneira mais fácil. Certifique-se de ter o certbot instalado na sua distribuição GNU/Linux. Após a instalação o processo é feito da seguinte forma: Para esta operação você precisa se logar como usuário root para ter acesso a estes arquivos! # certbot certonly --standalone --preferred-challenges http -d exemplo.com.br Troque o dominio exemplo.com.br pelo seu dominio. O certificado se gerado será encontrado no diretório /etc/letsencrypt/live/exemplo.com.br copie o certificado fullchain.pem e sua chave privada privkey.pem para o diretório do servidor do ergo. Em nosso caso: /home/ergo/server/ . # cp -v /etc/letsencrypt/live/exemplo.com.br/fullchain.pem /home/ergo/server/ # cp -v etc/letsencrypt/live/example.com/privkey.pem /home/ergo/server/ Ambos certificados precisam ter como dono/grupo o usuário ergo. # chown ergo:ergo /home/ergo/server/*.pem O certificado expira a cada 3 meses. Você pode fazer um script em Shell para a cada 1 mês por exemplo renovar o certificado, não se esqueça que você deve copiar o certificado e chave pública para o diretório do ergo /home/ergo/server/ ===== Iniciando servidor IRC como serviço com systemd. ===== Para as coisas ficarem mais profissionais é interessante criarmos um daemon. Com o systemd é simples, primeiramente vamos criar um script em shell para executar o ergo! Isto deve ser feito no diretório do ergo: /home/ergo/server. Vamos tambem dar a permissão de execução para este script. $ cat << EOF > start.sh #!/bin/bash ./ergo run EOF $ chmod +x start.sh Vamos agora criar o serviço ergo.service. $ cat << EOF > ergo.service [Unit] Description=Ergo IRC server After=network.target # If you are using MySQL for history storage, comment out the above line # and uncomment these two instead (you must independently install and configure # MySQL for your system): # Wants=mysql.service # After=network.target mysql.service [Service] Type=simple User=ergo WorkingDirectory=/home/ergo/server ExecStart=/home/ergo/server/start.sh ExecReload=/bin/kill -HUP $MAINPID Restart=on-failure LimitNOFILE=1048576 # Uncomment this for a hidden service: # PrivateNetwork=true [Install] WantedBy=multi-user.target EOF Vamos agorar instalar e habilitar o serviço para o systemd conseguir "enxergar". Para isso você deve estar logado como root. # ln -s /home/ergo/server/ergo.service /etc/systemd/system/ergo.service # systemctl enable ergo # systemctl start ergo