└── README.md /README.md: -------------------------------------------------------------------------------- 1 | ## Стартовая настройка сервера Ubuntu 18.04 2 | 3 | ### 1. Если нужен root, включаем, меняем пароль 4 | ``` 5 | sudo -i 6 | sudo passwd root 7 | ``` 8 | 9 | Сделать root неактивным 10 | ``` 11 | sudo passwd -dl root 12 | ``` 13 | 14 | ### 2. Добавляем нового пользователя с root-привилегиями 15 | ``` 16 | adduser 17 | gpasswd -a sudo 18 | ``` 19 | 20 | ### 3. Меняем порт доступа по SSH с 22 на любой другой в конфиге 21 | ``` 22 | sudo nano /etc/ssh/sshd_config 23 | ``` 24 | 25 | Отключение (logout) неактивного пользователя по таймауту 26 | Убираем коммент со строк 27 | ``` 28 | ClientAliveInterval 120 29 | ClientAliveCountMax 0 30 | ``` 31 | Неактивный пользователь будет разлогинен через 120 секунд бездействия 32 | 33 | Перезапускаем SSH 34 | ``` 35 | sudo systemctl restart sshd 36 | ``` 37 | 38 | ### 4. Настраиваем сообщения на почту о попытке входа на сервер под учеткой root 39 | ``` 40 | sudo nano ~/.profile . 41 | ``` 42 | Вставляем в конец строку 43 | 44 | ``` 45 | echo 'ALERT - Root Shell Access on:' `date` `who` | mail -s "Alert: Root Access from `who | awk '{print $6}'`" your@email.com 46 | ``` 47 | 48 | **Установка postfix** 49 | ``` 50 | sudo apt install mailutils 51 | ``` 52 | 53 | При установке выбираем опцию "Internet site" в меню 54 | 55 | Если требуется повторно вызвать меню конфигурации 56 | ``` 57 | sudo dpkg-reconfigure postfix 58 | ``` 59 | Если нужна только отправка сообщений, меняем в конфиге 60 | ``` 61 | sudo nano /etc/postfix/main.cf 62 | ``` 63 | строку 64 | ``` 65 | inet_interfaces = all 66 | ``` 67 | на 68 | ``` 69 | inet_interfaces = loopback-only 70 | ``` 71 | 72 | Затем перегружаем сервис 73 | ``` 74 | sudo systemctl restart postfix 75 | ``` 76 | 77 | Проверяем работоспособность 78 | ``` 79 | echo 'Hello!' | mail -s 'Greeteings' your@email.com 80 | ``` 81 | 82 | Ошибки логируются в файле /var/log/mail.err 83 | 84 | ### 5. Настройка SSH MOTD (сообщение при логине) 85 | ``` 86 | sudo nano /etc/motd 87 | ``` 88 | Пишем приветственное сообщение для хакера. Например: 89 | 90 | “This system is restricted to authorized access only. All activities on 91 | this system are recorded and logged. Unauthorized access will be fully 92 | investigated and reported to the appropriate law enforcement agencies.” 93 | 94 | Или добавляем security login banner 95 | ``` 96 | sudo nano /etc/issue.net 97 | ``` 98 | 99 | Отключаем motd 100 | ``` 101 | sudo nano /etc/pam.d/sshd 102 | ``` 103 | 104 | Комментим строки 105 | ``` 106 | #session optional pam_motd.so motd=/run/motd.dynamic 107 | ​#session optional pam_motd.so noupdate 108 | ``` 109 | 110 | Открываем конфиг ssh 111 | ``` 112 | sudo nano etc/ssh/sshd_config 113 | ``` 114 | 115 | Добавляем строку 116 | ``` 117 | Banner /etc/issue.net 118 | ``` 119 | 120 | Перезапускаем SSH 121 | ``` 122 | sudo systemctl restart sshd 123 | ``` 124 | 125 | ### 6. Устанавливаем fail2ban (защита от брутфорса) 126 | ``` 127 | sudo apt install fail2ban 128 | ``` 129 | 130 | Конфиг-файл 131 | ``` 132 | sudo nano /etc/fail2ban/jail.conf 133 | ``` 134 | 135 | Раскомментируем строки: 136 | 137 | Не учитывать трафик с локальной машины 138 | ``` 139 | ignoreip = 127.0.0.1/8 140 | ``` 141 | Время бана клиента (по умолчанию 10 минут) 142 | ``` 143 | bantime = 600 144 | ``` 145 | Количество попыток подключения maxretry за время findtime (по умолчанию 3 раза за 10 минут) 146 | ``` 147 | findtime = 600 148 | maxretry = 3 149 | ``` 150 | Настройки email 151 | ``` 152 | destemail = root@localhost //куда будет отправлено сообщение 153 | sendername = Fail2Ban // имя отправителя 154 | mta = sendmail // сервис при помощи которого будет отправлен email 155 | ``` 156 | Включаем fail2ban 157 | ``` 158 | enabled = true 159 | ``` 160 | 161 | Запускаем сервис 162 | ``` 163 | sudo service fail2ban start 164 | ``` 165 | 166 | ### 7. Настраиваем фаервол 167 | 168 | Проверить статус UFW 169 | ``` 170 | sudo ufw status verbose 171 | ``` 172 | **Пока не сделаны все настройки не включаем, чтобы не отстрелить себе ногу!** 173 | 174 | Если требуется IPV6 175 | ``` 176 | sudo nano /etc/default/ufw 177 | ``` 178 | Выставляем 179 | ``` 180 | IPV6=yes 181 | ``` 182 | 183 | Сбрасываем все настройки (никого не впускать, всех выпускать) 184 | ``` 185 | sudo ufw default deny incoming 186 | sudo ufw default allow outgoing 187 | ``` 188 | 189 | Разрешаем SSH 190 | ``` 191 | sudo ufw allow ssh или sudo ufw allow 22 192 | ``` 193 | 194 | Если порт был изменен (см. пункт 3), например на 2222, разрешаем коннект к нему 195 | ``` 196 | sudo ufw allow 2222 197 | ``` 198 | 199 | Включаем фаервол 200 | ``` 201 | sudo ufw enable 202 | ``` 203 | 204 | Разрешаем HTTP и HTTPS (если на сервере есть SSL-сертификат) 205 | 206 | `sudo ufw allow http` или `sudo ufw allow 80` 207 | 208 | `sudo ufw allow https` или `sudo ufw allow 443` 209 | 210 | 211 | Разрешаем FTP 212 | 213 | `sudo ufw allow ftp` или `sudo ufw allow 21/tcp` 214 | 215 | 216 | Если нужно запретить коннект, делаем аналогично через deny 217 | 218 | `sudo ufw deny http` или `sudo ufw deny 80` 219 | 220 | 221 | Доступ к диапазону портов (6000-6007) 222 | ``` 223 | sudo ufw allow 6000:6007/tcp 224 | ``` 225 | 226 | Если требуется разрешить доступ с определенных IP 227 | ``` 228 | sudo ufw allow from 15.15.15.51 229 | ``` 230 | 231 | Доступ к конкретному порту 232 | ``` 233 | sudo ufw allow from 15.15.15.51 to any port 22 234 | ``` 235 | 236 | Доступ для подсети (например 15.15.15.1 - 15.15.15.254) 237 | ``` 238 | sudo ufw allow from 15.15.15.0/24 239 | ``` 240 | 241 | #### Удаление правил 242 | По номеру 243 | ``` 244 | sudo ufw status numbered 245 | sudo ufw delete 1 246 | ``` 247 | 248 | По названию правила 249 | ``` 250 | sudo ufw delete allow http 251 | ``` 252 | 253 | Перезагрузка UFW (отключает и удаляет все правила) 254 | ``` 255 | sudo ufw reset 256 | ``` 257 | 258 | Отключить фаервол 259 | ``` 260 | sudo ufw disable 261 | ``` 262 | 263 | ### 8. Защищаем shared memory 264 | ``` 265 | sudo nano /etc/fstab 266 | ``` 267 | 268 | Добавляем в конец 269 | ``` 270 | tmpfs /run/shm tmpfs defaults,noexec,nosuid 0 0 271 | ``` 272 | 273 | Чтобы изменения вступили в силу, нужна перезагрузка сервера 274 | 275 | ``` 276 | sudo reboot 277 | ``` 278 | 279 | ### 9. Сетевая безопасность 280 | ``` 281 | sudo nano /etc/sysctl.conf 282 | ``` 283 | Раскомментируем строки 284 | 285 | ``` 286 | # prevent some spoofing attacks 287 | net.ipv4.conf.default.rp_filter=1 288 | net.ipv4.conf.all.rp_filter=1 289 | # Uncomment the next line to enable TCP/IP SYN cookies 290 | net.ipv4.tcp_syncookies=1 291 | # Do not accept ICMP redirects (prevent MITM attacks) 292 | net.ipv4.conf.all.accept_redirects = 0 293 | net.ipv6.conf.all.accept_redirects = 0 294 | # Do not accept IP source route packets (we are not a router) 295 | net.ipv4.conf.all.accept_source_route = 0 296 | net.ipv6.conf.all.accept_source_route = 0 297 | # Log Martian Packets 298 | net.ipv4.conf.all.log_martians = 1 299 | ``` 300 | 301 | Перезапускаем сервис 302 | ``` 303 | sudo sysctl -p 304 | ``` 305 | 306 | ### 10. Устанавливаем время на сервере 307 | Спросить который час 308 | ``` 309 | date "+%H:%M:%S %d/%m/%y" 310 | ``` 311 | Настраиваем свой часовой пояс 312 | ``` 313 | sudo dpkg-reconfigure tzdata 314 | ``` --------------------------------------------------------------------------------