├── LICENSE ├── README.md └── lnxhardening.sh /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2024 Evandro Santos 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | 2 | # LNXHardening - Script de Automação para Hardening de Servidores Linux 3 | 4 | ![Segmento](https://img.shields.io/badge/Segmento_:-Segurança_da_Informação-blue?style=flat-square) 5 | ![Fase](https://img.shields.io/badge/Fase_:-Experimental-orange?style=flat-square) 6 | ![Tecnologias](https://img.shields.io/badge/Tecnologias_:-Shell_Scripting,_Linux,_Hardening-lightyellow?style=flat-square) 7 | ![Versão](https://img.shields.io/badge/versão_:-1.0-darkyellow?style=flat-square) 8 | 9 | Este script Bash automatiza a aplicação de medidas de endurecimento (hardening) em servidores Linux, com foco nas distribuições CentOS/RHEL e Ubuntu/Debian. O objetivo é aumentar a segurança do sistema, seguindo as recomendações do CIS Benchmark. 10 | 11 | ## O que é o CIS Benchmark? 12 | O **CIS Benchmark** (_Center for Internet Security Benchmark_) é um conjunto de boas práticas e configurações de segurança recomendadas para diversos sistemas operacionais e softwares. Ele fornece um guia abrangente para proteger sistemas contra ameaças cibernéticas, ajudando a reduzir a superfície de ataque e minimizar o risco de vulnerabilidades. 13 | 14 | ## Uso 15 | 1. **Clone o repositório** 16 | ```bash 17 | git clone https://github.com/euandros/lnxhardening.git 18 | cd vansor-forensic-collector 19 | ``` 20 | 21 | 2. **Acesse o diretório** 22 | ```bash 23 | cd lnxhardening 24 | ``` 25 | 26 | 3. **Execute o script** 27 | ```bash 28 | ./lnxhardening.sh 29 | ``` 30 | 31 | 4. **Siga as instruções do menu** 32 | * Escolha a opção correspondente à sua distribuição (CentOS/RHEL ou Ubuntu/Debian). 33 | * O script irá executar as etapas de hardening automaticamente. 34 | * Aguarde a conclusão do processo. 35 | 36 | ## Recursos do script 37 | * Automatiza a aplicação de diversas medidas de segurança. 38 | * Suporta CentOS/RHEL e Ubuntu/Debian. 39 | * Baseado nas recomendações do CIS Benchmark. 40 | * Menu interativo para facilitar o uso. 41 | * Inclui comentários explicativos no código. 42 | 43 | ## Considerações importantes 44 | * **Privilégios**: O script requer privilégios de **root** (ou `sudo`) para executar as alterações necessárias no sistema. 45 | * **Responsabilidade**: Utilize o script com cuidado e revise o código antes de executá-lo em um ambiente de produção. 46 | 47 | ## Contribuições 48 | Contribuições são bem-vindas! Sinta-se à vontade para abrir issues ou pull requests para melhorias ou correções.   49 | 50 | **Aviso**: Este script é fornecido "_tal como está_", sem garantias de qualquer tipo. O uso é por sua conta e risco. 51 | -------------------------------------------------------------------------------- /lnxhardening.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | # Nome: LNXHardening 4 | # Descrição: Script de automação para aplicação de hardening de servidores linux 5 | # seja para as distribuições da família RHEL ou distribuições baseadas em Debian. 6 | # Referência: CIS Benchmark 7 | # Sistemas suportados/testados: CentOS 8, RHEL 8, Ubuntu 22.04 e Debian 11. 8 | # Autor: Evandro Santos 9 | # Contato: evandro.santos@tutanota.com 10 | # Data: Segunda-feira, 22 de setembro de 2024, São Paulo. 11 | # Versão: 1.0 12 | 13 | # Função para exibir ASCII art e informações do menu 14 | show_menu() { 15 | clear 16 | echo "===================================================" 17 | echo "LNX Hardening - Script de Automação para Servidores" 18 | echo "===================================================" 19 | echo "Usuário: $(whoami)" 20 | echo "Data e Hora de Execução: $(date '+%Y-%m-%d %H:%M:%S')" 21 | echo "===================================================" 22 | echo "Escolha a opção de hardening:" 23 | echo "" 24 | echo "1. Aplicar Hardening no CentOS/RHEL" 25 | echo "2. Aplicar Hardening no Ubuntu/Debian" 26 | echo "3. Sair" 27 | echo "===================================================" 28 | } 29 | 30 | # Função para o script de hardening CentOS/RHEL 31 | harden_centos_rhel() { 32 | echo "Aplicando o Hardening ao Sistema Linux CentOS/RHEL..." 33 | 34 | # Passo 1: Documentar as informações do host 35 | echo -e "\e[33mDocumentando informações do host...\e[0m" 36 | echo "Hostname: $(hostname)" >> Informacoes_Gerais.txt 37 | echo "Endereço IP: $(hostname -I)" >> Informacoes_Gerais.txt 38 | echo "Sistema Operacional: $(cat /etc/redhat-release)" >> Informacoes_Gerais.txt 39 | echo 40 | 41 | # Passo 2: Proteção do BIOS 42 | echo -e "\e[33mHabilitando proteção do BIOS...\e[0m" 43 | dmidecode -t 0 | grep -i "status de segurança: habilitado" || echo "Proteção do BIOS não habilitada" 44 | echo 45 | 46 | # Passo 3: Criptografia do disco rígido 47 | echo -e "\e[33mCriptografando disco rígido...\e[0m" 48 | read -s -p "Por favor, insira a frase de criptografia: " passphrase 49 | if [ -z "$passphrase" ]; then 50 | echo "Frase de criptografia não pode estar vazia. Saindo..." 51 | exit 1 52 | fi 53 | 54 | yum install -y cryptsetup 55 | modprobe dm-crypt 56 | dd if=/dev/zero of=/root/crypt.img bs=1M count=512 57 | echo -n "$passphrase" | cryptsetup -q luksFormat /root/crypt.img 58 | echo -n "$passphrase" | cryptsetup luksOpen /root/crypt.img crypt 59 | mkfs.ext4 /dev/mapper/crypt 60 | mount /dev/mapper/crypt /mnt 61 | echo "/dev/mapper/crypt /mnt ext4 defaults 0 0" >> /etc/fstab 62 | echo 63 | 64 | # Passo 4: Particionamento do disco 65 | echo -e "\e[33mParticionando disco...\e[0m" 66 | parted /dev/sda mklabel msdos 67 | parted -a opt /dev/sda mkpart primary ext4 0% 100% 68 | mkfs.ext4 /dev/sda1 69 | echo "/dev/sda1 /mnt ext4 defaults 0 0" >> /etc/fstab 70 | echo 71 | 72 | # Passo 5: Bloquear o diretório de inicialização 73 | echo -e "\e[33mBloqueando diretório de inicialização...\e[0m" 74 | chattr +i /boot/grub2/grub.cfg 75 | chattr +i /boot/grub2/user.cfg 76 | chattr +i /boot/grub2/device.map 77 | echo 78 | 79 | # Passo 6: Desativar o uso de USB 80 | echo -e "\e[33mDesativando o uso de USB...\e[0m" 81 | echo "install usb-storage /bin/true" > /etc/modprobe.d/usb-storage.conf 82 | echo 83 | 84 | # Passo 7: Atualizar o sistema 85 | echo -e "\e[33mAtualizando o sistema...\e[0m" 86 | yum update -y 87 | echo 88 | 89 | # Passo 8: Verificar os pacotes instalados 90 | echo -e "\e[33mVerificando os pacotes instalados...\e[0m" 91 | yum list installed 92 | echo 93 | 94 | # Passo 9: Verificar as portas abertas 95 | echo -e "\e[33mVerificando as portas abertas...\e[0m" 96 | netstat -tulnp 97 | echo 98 | 99 | # Passo 10: Segurança do SSH 100 | echo -e "\e[33mFortalecendo o SSH...\e[0m" 101 | sed -i 's/^PasswordAuthentication yes/PasswordAuthentication no/g' /etc/ssh/sshd_config 102 | sed -i 's/^PermitRootLogin yes/PermitRootLogin no/g' /etc/ssh/sshd_config 103 | systemctl restart sshd 104 | echo 105 | 106 | # Passo 11: Habilitar o SELinux 107 | echo -e "\e[33mHabilitando o SELinux...\e[0m" 108 | yum install -y selinux-policy-targeted 109 | sed -i 's/SELINUX=disabled/SELINUX=enforcing/' /etc/selinux/config 110 | setenforce 1 111 | echo 112 | 113 | # Passo 12: Configurar parâmetros de rede 114 | echo -e "\e[33mConfigurando parâmetros de rede...\e[0m" 115 | sysctl -w net.ipv4.ip_forward=0 116 | sysctl -w net.ipv4.conf.all.send_redirects=0 117 | sysctl -w net.ipv4.conf.default.send_redirects=0 118 | sysctl -w net.ipv4.tcp_syncookies=1 119 | echo "NETWORKING_IPV6=no" >> /etc/sysconfig/network 120 | echo "IPV6INIT=no" >> /etc/sysconfig/network 121 | echo 122 | 123 | # Passo 13: Gerenciar políticas de senha 124 | echo -e "\e[33mGerenciando políticas de senha...\e[0m" 125 | sed -i 's/^PASS_MAX_DAYS.*/PASS_MAX_DAYS 90/g' /etc/login.defs 126 | sed -i 's/^PASS_MIN_DAYS.*/PASS_MIN_DAYS 7/g' /etc/login.defs 127 | sed -i 's/sha512/sha512 rounds=65536/g' /etc/pam.d/system-auth-ac 128 | echo 129 | 130 | # Passo 14: Permissões e verificações 131 | echo -e "\e[33mRealizando permissões e verificações...\e[0m" 132 | chmod 644 /etc/passwd /etc/group /etc/shadow /etc/gshadow 133 | chown root:root /etc/passwd /etc/shadow 134 | chown root:shadow /etc/shadow 135 | chown root:root /etc/group /etc/gshadow 136 | chown root:shadow /etc/gshadow 137 | chown root:root /boot/grub2/grub.cfg 138 | chmod og-rwx /boot/grub2/grub.cfg 139 | chmod 700 /root 140 | echo 141 | 142 | # Passo 15: Reforçar processos adicionais da distribuição 143 | echo -e "\e[33mReforçando processos adicionais da distribuição...\e[0m" 144 | echo "kernel.randomize_va_space = 2" >> /etc/sysctl.conf 145 | echo "net.ipv6.conf.all.disable_ipv6 = 1" >> /etc/sysctl.conf 146 | echo "net.ipv6.conf.default.disable_ipv6 = 1" >> /etc/sysctl.conf 147 | sysctl -p 148 | echo 149 | 150 | # Passo 16: Remover serviços desnecessários 151 | echo -e "\e[33mRemovendo serviços desnecessários...\e[0m" 152 | systemctl disable avahi-daemon.service 153 | systemctl disable cups.service 154 | systemctl disable dhcpd.service 155 | systemctl disable slapd.service 156 | systemctl disable named.service 157 | systemctl disable xinetd.service 158 | systemctl disable avahi-daemon.service 159 | echo 160 | 161 | # Passo 17: Verificar segurança nos arquivos-chave 162 | echo -e "\e[33mVerificando segurança nos arquivos-chave...\e[0m" 163 | chmod 600 /root/.ssh/authorized_keys 164 | chmod 700 /root/.ssh/ 165 | chown root:root /root/.ssh/ 166 | ls -al /root/.ssh 167 | echo 168 | 169 | # Passo 18: Limitar acesso root usando SUDO 170 | echo -e "\e[33mLimitando acesso root usando SUDO...\e[0m" 171 | echo "root ALL=(ALL) ALL" >> /etc/sudoers.d/root 172 | echo 173 | 174 | # Passo 19: Permitir apenas root acessar o CRON 175 | echo -e "\e[33mLimitando acesso ao CRON apenas para root...\e[0m" 176 | touch /etc/cron.allow 177 | echo "root" > /etc/cron.allow 178 | chmod 400 /etc/cron.allow 179 | chown root:root /etc/cron.allow 180 | echo 181 | 182 | # Passo 20: Configurar acesso remoto e configurações básicas do SSH 183 | echo -e "\e[33mConfigurando acesso remoto e configurações básicas do SSH...\e[0m" 184 | sed -i 's/^#LogLevel.*/LogLevel VERBOSE/g' /etc/ssh/sshd_config 185 | sed -i 's/^#MaxAuthTries.*/MaxAuthTries 4/g' /etc/ssh/sshd_config 186 | systemctl restart sshd 187 | echo 188 | 189 | # Passo 21: Desativar o Xwindow 190 | echo -e "\e[33mDesativando o Xwindow...\e[0m" 191 | systemctl set-default multi-user.target 192 | systemctl isolate multi-user.target 193 | echo 194 | 195 | # Passo 22: Minimizar a instalação de pacotes 196 | echo -e "\e[33mMinimizando a instalação de pacotes...\e[0m" 197 | yum install -y yum-utils 198 | yum-config-manager --disable \* &> /dev/null 199 | yum-config-manager --enable base &> /dev/null 200 | yum-config-manager --enable updates &> /dev/null 201 | yum-config-manager --enable extras &> /dev/null 202 | yum-config-manager --enable epel &> /dev/null 203 | echo 204 | 205 | # Passo 23: Verificar contas com senhas vazias 206 | echo -e "\e[33mVerificando contas com senhas vazias...\e[0m" 207 | awk -F: '($2 == "" ) {print $1}' /etc/shadow 208 | echo 209 | 210 | # Passo 24: Monitorar atividades do usuário 211 | echo -e "\e[33mMonitorando atividades do usuário...\e[0m" 212 | yum install -y audit 213 | sed -i 's/^active.*/active = yes/' /etc/audit/auditd.conf 214 | systemctl enable auditd.service 215 | systemctl start auditd.service 216 | echo 217 | 218 | # Passo 25: Instalar e configurar o fail2ban 219 | echo -e "\e[33mInstalando e configurando o fail2ban...\e[0m" 220 | yum install epel-release -y 221 | yum install fail2ban -y 222 | cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local 223 | sed -i 's/^# bantime =.*/bantime = 3600/g' /etc/fail2ban/jail.local 224 | sed -i 's/^# maxretry =.*/maxretry = 3/g' /etc/fail2ban/jail.local 225 | systemctl enable fail2ban 226 | systemctl start fail2ban 227 | echo 228 | 229 | # Passo 26: Detecção de rootkits 230 | echo -e "\e[33mDetectando rootkits...\e[0m" 231 | yum install rkhunter -y 232 | rkhunter --update 233 | rkhunter --propupd 234 | rkhunter --check 235 | echo 236 | 237 | # Passo 27: Monitorar logs do sistema 238 | echo -e "\e[33mMonitorando logs do sistema...\e[0m" 239 | echo "auth,user.* /var/log/user.log" >> /etc/rsyslog.conf 240 | echo "*.emerg /var/log/emergency.log" >> /etc/rsyslog.conf 241 | systemctl restart rsyslog 242 | echo 243 | 244 | # Passo 28: Habilitar autenticação de 2 fatores 245 | echo -e "\e[33mHabilitando autenticação de 2 fatores...\e[0m" 246 | yum install -y google-authenticator 247 | google-authenticator 248 | sed -i 's/^ChallengeResponseAuthentication.*/ChallengeResponseAuthentication yes/' /etc/ssh/sshd_config 249 | systemctl restart sshd.service 250 | echo 251 | 252 | echo -e "\e[32mFortalecimento completo!\e[0m" 253 | 254 | } 255 | 256 | # Função para o script de hardening Ubuntu/Debian 257 | harden_ubuntu_debian() { 258 | echo "Aplicando o Hardening ao Sistema Linux Ubuntu/Debian..." 259 | # Passo 1: Documentar as informações do host 260 | echo -e "\e[33mPasso 1: Documentando as informações do host\e[0m" 261 | echo "Hostname: $(hostname)" 262 | echo "Versão do Kernel: $(uname -r)" 263 | echo "Distribuição: $(lsb_release -d | cut -f2)" 264 | echo "Informações da CPU: $(lscpu | grep 'Modelo')" 265 | echo "Informações de memória: $(free -h | awk '/Mem/{print $2}')" 266 | echo "Informações do disco: $(lsblk | grep disco)" 267 | echo 268 | 269 | # Passo 2: Proteção do BIOS 270 | echo -e "\e[33mPasso 2: Proteção do BIOS\e[0m" 271 | echo "Verificando se a proteção do BIOS está ativada..." 272 | if [ -f /sys/devices/system/cpu/microcode/reload ]; then 273 | echo "A proteção do BIOS está ativada" 274 | else 275 | echo "A proteção do BIOS não está ativada" 276 | fi 277 | echo "" 278 | 279 | # Passo 3: Criptografia do disco rígido 280 | echo -e "\e[33mPasso 3: Criptografia do disco rígido\e[0m" 281 | echo "Verificando se a criptografia do disco rígido está ativada..." 282 | if [ -d /etc/luks ]; then 283 | echo "A criptografia do disco rígido está ativada" 284 | else 285 | echo "A criptografia do disco rígido não está ativada" 286 | fi 287 | echo "" 288 | 289 | # Passo 4: Particionamento do disco 290 | echo -e "\e[33mPasso 4: Particionamento do disco\e[0m" 291 | echo "Verificando se o particionamento do disco já foi feito..." 292 | if [ -d /home -a -d /var -a -d /usr ]; then 293 | echo "O particionamento do disco já foi feito" 294 | else 295 | echo "O particionamento do disco não foi feito ou está incompleto" 296 | fi 297 | sudo fdisk /dev/sda 298 | sudo mkfs.ext4 /dev/sda1 299 | sudo mkswap /dev/sda2 300 | sudo swapon /dev/sda2 301 | sudo mount /dev/sda1 /mnt 302 | echo 303 | 304 | # Passo 5: Bloquear o diretório de boot 305 | echo -e "\e[33mPasso 5: Bloquear o diretório de boot\e[0m" 306 | echo "Bloqueando o diretório de boot..." 307 | sudo chmod 700 /boot 308 | echo "" 309 | 310 | # Passo 6: Desativar o uso de USB 311 | echo -e "\e[33mPasso 6: Desativar o uso de USB\e[0m" 312 | echo "Desativando o uso de USB..." 313 | echo 'blacklist usb-storage' | sudo tee /etc/modprobe.d/blacklist-usbstorage.conf 314 | echo "" 315 | 316 | # Passo 7: Atualizar o sistema 317 | echo -e "\e[33mPasso 7: Atualizar o sistema\e[0m" 318 | sudo apt-get update && sudo apt-get upgrade -y 319 | echo "" 320 | 321 | # Passo 8: Verificar os pacotes instalados 322 | echo -e "\e[33mPasso 8: Verificar os pacotes instalados\e[0m" 323 | dpkg --get-selections | grep -v deinstall 324 | echo "" 325 | 326 | # Passo 9: Verificar as portas abertas 327 | echo -e "\e[33mPasso 9: Verificar as portas abertas\e[0m" 328 | sudo netstat -tulpn 329 | echo "" 330 | 331 | # Passo 10: Segurança do SSH 332 | echo -e "\e[33mPasso 10: Reforçar a segurança do SSH\e[0m" 333 | sudo sed -i 's/#PermitRootLogin prohibit-password/PermitRootLogin no/g' /etc/ssh/sshd_config 334 | sudo sed -i 's/#PasswordAuthentication yes/PasswordAuthentication no/g' /etc/ssh/sshd_config 335 | sudo systemctl restart sshd 336 | echo 337 | 338 | # Passo 11: Ativar o SELinux 339 | echo -e "\e[33mPasso 11: Ativar o SELinux\e[0m" 340 | echo "Verificando se o SELinux está instalado..." 341 | if [ -f /etc/selinux/config ]; then 342 | echo "O SELinux já está instalado" 343 | else 344 | echo "O SELinux não está instalado, instalando agora..." 345 | sudo apt-get install policycoreutils selinux-utils selinux-basics -y 346 | fi 347 | echo "Ativando o SELinux..." 348 | sudo selinux-activate 349 | echo "" 350 | 351 | # Passo 12: Configurar parâmetros de rede 352 | echo -e "\e[33mPasso 12: Configurar parâmetros de rede\e[0m" 353 | echo "Configurando parâmetros de rede..." 354 | sudo sysctl -p 355 | echo "" 356 | 357 | # Passo 13: Gerenciar políticas de senha 358 | echo -e "\e[33mPasso 13: Gerenciar políticas de senha\e[0m" 359 | echo "Modificando as políticas de senha..." 360 | sudo sed -i 's/PASS_MAX_DAYS\t99999/PASS_MAX_DAYS\t90/g' /etc/login.defs 361 | sudo sed -i 's/PASS_MIN_DAYS\t0/PASS_MIN_DAYS\t7/g' /etc/login.defs 362 | sudo sed -i 's/PASS_WARN_AGE\t7/PASS_WARN_AGE\t14/g' /etc/login.defs 363 | echo "" 364 | 365 | # Passo 14: Permissões e verificações 366 | echo -e "\e[33mPasso 14: Permissões e verificações\e[0m" 367 | echo "Configurando as permissões corretas em arquivos sensíveis..." 368 | sudo chmod 700 /etc/shadow /etc/gshadow /etc/passwd /etc/group 369 | sudo chmod 600 /boot/grub/grub.cfg 370 | sudo chmod 644 /etc/fstab /etc/hosts /etc/hostname /etc/timezone /etc/bash.bashrc 371 | echo "Verificando a integridade dos arquivos do sistema..." 372 | sudo debsums -c 373 | echo "" 374 | 375 | # Passo 15: Reforço adicional do processo de distribuição 376 | echo -e "\e[33mPasso 15: Reforço adicional do processo de distribuição\e[0m" 377 | echo "Desabilitando despejos de núcleo..." 378 | sudo echo '* hard core 0' | sudo tee /etc/security/limits.d/core.conf 379 | echo "Restringindo o acesso aos logs do kernel..." 380 | sudo chmod 640 /var/log/kern.log 381 | echo "Configurando as permissões corretas nos scripts de inicialização..." 382 | sudo chmod 700 /etc/init.d/* 383 | echo "" 384 | 385 | # Passo 16: Remover serviços desnecessários 386 | echo -e "\e[33mPasso 16: Remover serviços desnecessários\e[0m" 387 | echo "Removendo serviços desnecessários..." 388 | sudo apt-get purge rpcbind rpcbind-* -y 389 | sudo apt-get purge nis -y 390 | echo "" 391 | 392 | # Passo 17: Verificar a segurança dos arquivos-chave 393 | echo -e "\e[33mPasso 17: Verificar a segurança dos arquivos-chave\e[0m" 394 | echo "Verificando a segurança dos arquivos-chave..." 395 | sudo find /etc/ssh -type f -name 'ssh_host_*_key' -exec chmod 600 {} \; 396 | echo "" 397 | 398 | # Passo 18: Limitar o acesso root usando o SUDO 399 | echo -e "\e[33mPasso 18: Limitar o acesso root usando o SUDO\e[0m" 400 | echo "Limitando o acesso root usando o SUDO..." 401 | sudo apt-get install sudo -y 402 | sudo groupadd admin 403 | sudo usermod -a -G admin "$(whoami)" 404 | sudo sed -i 's/%sudo\tALL=(ALL:ALL) ALL/%admin\tALL=(ALL:ALL) ALL/g' /etc/sudoers 405 | echo "" 406 | 407 | # Passo 19: Permitir apenas root para acessar o CRON 408 | echo -e "\e[33mPasso 19: Restringir o acesso ao CRON\e[0m" 409 | echo "Permitindo apenas root para acessar o CRON..." 410 | sudo chmod 600 /etc/crontab 411 | sudo chown root:root /etc/crontab 412 | sudo chmod 600 /etc/cron.hourly/* 413 | sudo chmod 600 /etc/cron.daily/* 414 | sudo chmod 600 /etc/cron.weekly/* 415 | sudo chmod 600 /etc/cron.monthly/* 416 | sudo chmod 600 /etc/cron.d/* 417 | echo "" 418 | 419 | # Passo 20: Configurações básicas de acesso remoto e SSH 420 | echo -e "\e[33mPasso 20: Configurações básicas de acesso remoto e SSH\e[0m" 421 | echo "Desabilitando o login root via SSH..." 422 | sudo sed -i 's/PermitRootLogin yes/PermitRootLogin no/g' /etc/ssh/sshd_config 423 | echo "Desabilitando autenticação por senha via SSH..." 424 | sudo sed -i 's/#PasswordAuthentication yes/PasswordAuthentication no/g' /etc/ssh/sshd_config 425 | echo "Desabilitando o encaminhamento X11 via SSH..." 426 | sudo sed -i 's/X11Forwarding yes/X11Forwarding no/g' /etc/ssh/sshd_config 427 | echo "Recarregando o serviço SSH..." 428 | sudo systemctl reload sshd 429 | echo "" 430 | 431 | # Passo 21: Desabilitar o Xwindow 432 | echo -e "\e[33mPasso 21: Desabilitar o Xwindow\e[0m" 433 | echo "Desabilitando o Xwindow..." 434 | sudo systemctl set-default multi-user.target 435 | echo "" 436 | 437 | # Passo 22: Minimizar a instalação de pacotes 438 | echo -e "\e[33mPasso 22: Minimizar a instalação de pacotes\e[0m" 439 | echo "Instalando apenas pacotes essenciais..." 440 | sudo apt-get install --no-install-recommends -y systemd-sysv apt-utils 441 | sudo apt-get --purge autoremove -y 442 | echo "" 443 | 444 | # Passo 23: Verificar contas com senhas vazias 445 | echo -e "\e[33mPasso 23: Verificar contas com senhas vazias\e[0m" 446 | echo "Verificando contas com senhas vazias..." 447 | sudo awk -F: '($2 == "" ) {print}' /etc/shadow 448 | echo "" 449 | 450 | # Passo 24: Monitorar atividades do usuário 451 | echo -e "\e[33mPasso 24: Monitorar atividades do usuário\e[0m" 452 | echo "Instalando auditd para monitoramento de atividades do usuário..." 453 | sudo apt-get install auditd -y 454 | echo "Configurando o auditd..." 455 | sudo echo "-w /var/log/auth.log -p wa -k authentication" | sudo tee -a /etc/audit/rules.d/audit.rules 456 | sudo echo "-w /etc/passwd -p wa -k password-file" | sudo tee -a /etc/audit/rules.d/audit.rules 457 | sudo echo "-w /etc/group -p wa -k group-file" | sudo tee -a /etc/audit/rules.d/audit.rules 458 | sudo systemctl restart auditd 459 | echo "" 460 | 461 | # Passo 25: Instalar e configurar fail2ban 462 | echo -e "\e[33mPasso 25: Instalar e configurar fail2ban\e[0m" 463 | echo "Instalando fail2ban..." 464 | sudo apt-get install fail2ban -y 465 | echo "Configurando fail2ban..." 466 | sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local 467 | sudo sed -i 's/bantime = 10m/bantime = 1h/g' /etc/fail2ban/jail.local 468 | sudo sed -i 's/maxretry = 5/maxretry = 3/g' /etc/fail2ban/jail.local 469 | sudo systemctl enable fail2ban 470 | sudo systemctl start fail2ban 471 | echo "" 472 | 473 | # Passo 26: Detecção de rootkits 474 | echo -e "\e[33mPasso 26: Instalando e executando a detecção de rootkits...\e[0m" 475 | sudo apt-get install rkhunter 476 | sudo rkhunter --update 477 | sudo rkhunter --propupd 478 | sudo rkhunter --check 479 | echo 480 | 481 | # Passo 27: Monitorar logs do sistema 482 | echo -e "\e[33mPasso 27: Monitorar logs do sistema\e[0m" 483 | echo "Instalando logwatch para monitoramento de logs do sistema..." 484 | sudo apt-get install logwatch -y 485 | echo "" 486 | 487 | # Passo 28: Ativar autenticação de dois fatores 488 | echo -e "\e[33mPasso 28: Ativar autenticação de dois fatores\e[0m" 489 | echo "Instalando o Google Authenticator para autenticação de dois fatores..." 490 | sudo apt-get install libpam-google-authenticator -y 491 | echo "Ativando autenticação de dois fatores..." 492 | sudo google-authenticator 493 | echo "Editando as configurações do PAM para autenticação de dois fatores..." 494 | sudo sed -i 's/ChallengeResponseAuthentication no/ChallengeResponseAuthentication yes/g' /etc/ssh/sshd_config 495 | sudo sed -i 's/UsePAM no/UsePAM yes/g' /etc/ssh/sshd_config 496 | sudo sed -i 's/#auth required pam_google_authenticator.so/auth required pam_google_authenticator.so/g' /etc/pam.d/sshd 497 | sudo systemctl reload sshd 498 | echo "" 499 | 500 | echo -e "\e[32mFortificação concluída!\e[0m" 501 | } 502 | 503 | # Menu principal 504 | while true; do 505 | show_menu 506 | read -p "Digite sua opção [1-3]: " option 507 | case $option in 508 | 1) harden_centos_rhel ;; 509 | 2) harden_ubuntu_debian ;; 510 | 3) echo "Saindo..."; exit 0 ;; 511 | *) echo "Opção inválida, tente novamente." ;; 512 | esac 513 | done 514 | --------------------------------------------------------------------------------