Última atividade 1752586391

Автоматизира рутинните задачи по началната настройка на Ubuntu сървър

ubuntu_server_Initial_setup.sh Bruto
1#!/bin/bash
2
3# Ubuntu Server Initial Setup Script
4# Автор: Fedya Serafiev
5# Дата: 15 юли 2025
6# Версия: 2.2
7#
8# Този скрипт извършва основните задачи за първоначална настройка на Ubuntu Server
9# Включва: актуализация на системата, настройка на защитна стена, инсталиране на полезни пакети,
10# конфигуриране на SSH, създаване на нов потребител с административни права и базова защита
11
12# Цветове за терминала
13RED='\033[0;31m'
14GREEN='\033[0;32m'
15YELLOW='\033[1;33m'
16BLUE='\033[0;34m'
17CYAN='\033[0;36m'
18MAGENTA='\033[0;35m'
19NC='\033[0m' # No Color
20
21# Проверка за root привилегии
22if [[ $EUID -ne 0 ]]; then
23 echo -e "${RED}Този скрипт трябва да се изпълни като root потребител${NC}"
24 echo -e "${YELLOW}Моля, стартирайте го отново с: sudo $0${NC}"
25 exit 1
26fi
27
28# Функция за показване на прогрес
29show_progress() {
30 echo -e "${BLUE}================================================${NC}"
31 echo -e "${GREEN}>>> $1${NC}"
32 echo -e "${BLUE}================================================${NC}"
33}
34
35# Функция за проверка на успех
36check_success() {
37 if [ $? -eq 0 ]; then
38 echo -e "${GREEN}[УСПЕХ] $1${NC}"
39 else
40 echo -e "${RED}[ГРЕШКА] $2${NC}"
41 if [ "$3" = "exit" ]; then
42 exit 1
43 fi
44 fi
45}
46
47# Функция за пауза
48pause() {
49 echo -e "${YELLOW}Натиснете Enter за да продължите...${NC}"
50 read -r
51}
52
53# Генериране на системна информация
54generate_system_info() {
55 local hostname=$(hostname)
56 local ip_address=$(hostname -I | awk '{print $1}')
57 local date=$(date +"%Y-%m-%d %H:%M:%S")
58 local os_info=$(lsb_release -d | cut -f2-)
59 local kernel=$(uname -r)
60 local uptime=$(uptime -p)
61
62 echo -e "${CYAN}*************************************************************************${NC}"
63 echo -e "${MAGENTA} ВНИМАНИЕ!${NC}"
64 echo -e "${YELLOW} Този сървър е частна собственост. Неоторизираният достъп"
65 echo -e " е забранен и подлежи на наказателна отговорност."
66 echo -e " Всички действия се записват и следят.${NC}"
67 echo -e ""
68 echo -e "${GREEN} Системна информация:${NC}"
69 echo -e " * Хост: $hostname"
70 echo -e " * IP адрес: $ip_address"
71 echo -e " * Дата: $date"
72 echo -e " * ОС: $os_info"
73 echo -e " * Ядро: $kernel"
74 echo -e " * Uptime: $uptime"
75 echo -e "${CYAN}*************************************************************************${NC}"
76}
77
78# Задаване на времева зона (по подразбиране е Europe/Sofia)
79set_timezone() {
80 show_progress "Настройка на времева зона на Europe/Sofia"
81 timedatectl set-timezone Europe/Sofia
82 check_success "Времевата зона е настроена" "Грешка при настройка на времева зона"
83 echo -e "${YELLOW}Текуща времева зона: $(timedatectl | grep "Time zone" | awk '{print $3}')${NC}"
84}
85
86# Актуализиране на системата
87update_system() {
88 show_progress "Актуализиране на системните пакети"
89 echo -e "${YELLOW}Извършване на apt update...${NC}"
90 apt update -q
91 check_success "Репотарите са актуализирани" "Грешка при актуализация на репотарите"
92
93 echo -e "${YELLOW}Извършване на apt upgrade...${NC}"
94 DEBIAN_FRONTEND=noninteractive apt upgrade -y -q
95 check_success "Пакетите са обновени" "Грешка при обновяване на пакети"
96
97 echo -e "${YELLOW}Извършване на apt dist-upgrade...${NC}"
98 DEBIAN_FRONTEND=noninteractive apt dist-upgrade -y -q
99 check_success "Дистрибутивните обновления са приложени" "Грешка при dist-upgrade"
100
101 echo -e "${YELLOW}Извършване на apt autoremove...${NC}"
102 apt autoremove -y -q
103 apt autoclean -q
104 check_success "Излишните пакети са премахнати" "Грешка при премахване на излишни пакети"
105}
106
107# Инсталиране на основни пакети
108install_essential_packages() {
109 show_progress "Инсталиране на полезни пакети"
110
111 # Основен списък с пакети
112 BASE_PACKAGES=(
113 curl wget vim git htop net-tools nmap tmux unzip zip
114 ufw fail2ban logwatch ncdu tree dnsutils bash-completion
115 apt-transport-https ca-certificates gnupg-agent software-properties-common
116 jq rsync screen iftop iotop lsof strace sysstat
117 )
118
119 # Инсталиране на основни пакети
120 echo -e "${YELLOW}Инсталиране на основни пакети...${NC}"
121 apt install -y -q "${BASE_PACKAGES[@]}"
122 check_success "Основните пакети са инсталирани" "Грешка при инсталиране на основни пакети"
123
124 # Допълнителни пакети за Docker (ако е нужно)
125 read -p "Искате ли да инсталирате Docker? (y/n): " -n 1 -r INSTALL_DOCKER
126 echo
127 if [[ $INSTALL_DOCKER =~ ^[Yy]$ ]]; then
128 echo -e "${YELLOW}Инсталиране на Docker...${NC}"
129 curl -fsSL https://download.docker.com/linux/ubuntu/gpg | apt-key add -
130 add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
131 apt update -q
132 apt install -y -q docker-ce docker-ce-cli containerd.io
133 check_success "Docker е инсталиран" "Грешка при инсталиране на Docker"
134
135 # Добавяне на текущия потребител към групата docker
136 if [ -n "$SUDO_USER" ]; then
137 usermod -aG docker $SUDO_USER
138 check_success "Потребителят $SUDO_USER е добавен към групата docker" "Грешка при добавяне към docker група"
139 fi
140 fi
141
142 # Допълнителни пакети за мониторинг
143 read -p "Искате ли да инсталирате пакети за мониторинг (cockpit, netdata)? (y/n): " -n 1 -r INSTALL_MONITORING
144 echo
145 if [[ $INSTALL_MONITORING =~ ^[Yy]$ ]]; then
146 echo -e "${YELLOW}Инсталиране на cockpit...${NC}"
147 apt install -y -q cockpit
148 systemctl enable --now cockpit.socket
149 check_success "Cockpit е инсталиран и активиран" "Грешка при инсталиране на cockpit"
150
151 echo -e "${YELLOW}Инсталиране на netdata...${NC}"
152 bash <(curl -Ss https://my-netdata.io/kickstart.sh) --non-interactive
153 check_success "Netdata е инсталиран" "Грешка при инсталиране на netdata"
154 fi
155}
156
157# Конфигуриране на защитна стена (UFW)
158configure_firewall() {
159 show_progress "Конфигуриране на защитната стена (UFW)"
160
161 # Разрешаване на SSH
162 ufw allow ssh
163 check_success "SSH портът е разрешен" "Грешка при разрешаване на SSH порт"
164
165 # Питане за разрешаване на други портове
166 read -p "Искате ли да разрешите HTTP трафик (порт 80)? (y/n): " -n 1 -r HTTP_RESPONSE
167 echo
168 if [[ $HTTP_RESPONSE =~ ^[Yy]$ ]]; then
169 ufw allow 80/tcp
170 check_success "HTTP трафик разрешен" "Грешка при разрешаване на HTTP порт"
171 fi
172
173 read -p "Искате ли да разрешите HTTPS трафик (порт 443)? (y/n): " -n 1 -r HTTPS_RESPONSE
174 echo
175 if [[ $HTTPS_RESPONSE =~ ^[Yy]$ ]]; then
176 ufw allow 443/tcp
177 check_success "HTTPS трафик разрешен" "Грешка при разрешаване на HTTPS порт"
178 fi
179
180 read -p "Искате ли да разрешите други портове? (y/n): " -n 1 -r OTHER_PORTS
181 echo
182 if [[ $OTHER_PORTS =~ ^[Yy]$ ]]; then
183 read -p "Въведете портове, разделени с интервал (напр. 8080 8443): " -a PORTS_ARRAY
184 for port in "${PORTS_ARRAY[@]}"; do
185 ufw allow "$port/tcp"
186 check_success "Порт $port/tcp е разрешен" "Грешка при разрешаване на порт $port"
187 done
188 fi
189
190 # Активиране на защитната стена
191 ufw --force enable
192 check_success "Защитната стена е активирана" "Грешка при активиране на защитната стена"
193
194 echo -e "${YELLOW}Текущ статус на защитната стена:${NC}"
195 ufw status verbose
196}
197
198# Конфигуриране на Fail2ban
199configure_fail2ban() {
200 show_progress "Конфигуриране на Fail2ban за защита от brute-force атаки"
201
202 # Проверка дали fail2ban е инсталиран
203 if ! command -v fail2ban-server &> /dev/null; then
204 apt install -y -q fail2ban
205 check_success "Fail2ban е инсталиран" "Грешка при инсталиране на fail2ban"
206 fi
207
208 # Създаване на конфигурационен файл, ако не съществува
209 if [ ! -f /etc/fail2ban/jail.local ]; then
210 cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
211 fi
212
213 # Добавяне на базова конфигурация
214 cat << EOF >> /etc/fail2ban/jail.local
215
216# Потребителска конфигурация
217[sshd]
218enabled = true
219port = ssh
220filter = sshd
221logpath = /var/log/auth.log
222maxretry = 5
223bantime = 3600
224findtime = 600
225ignoreip = 127.0.0.1/8 ::1
226
227[sshd-ddos]
228enabled = true
229port = ssh
230filter = sshd
231logpath = /var/log/auth.log
232maxretry = 5
233findtime = 600
234bantime = 86400
235EOF
236
237 # Рестартиране на услугата
238 systemctl restart fail2ban
239 check_success "Fail2ban услугата е рестартирана" "Грешка при рестартиране на fail2ban"
240
241 systemctl enable fail2ban
242 check_success "Fail2ban е конфигуриран да се стартира автоматично" "Грешка при активиране на fail2ban"
243
244 echo -e "${YELLOW}Текущ статус на Fail2ban:${NC}"
245 fail2ban-client status
246}
247
248# Създаване на нов администраторски потребител
249create_admin_user() {
250 show_progress "Създаване на нов потребител с sudo права"
251
252 read -p "Въведете име за новия потребител: " NEW_USER
253
254 # Проверка дали потребителят вече съществува
255 if id "$NEW_USER" &>/dev/null; then
256 echo -e "${YELLOW}Потребителят $NEW_USER вече съществува!${NC}"
257 read -p "Искате ли да добавите потребителя към групата sudo? (y/n): " -n 1 -r ADD_SUDO
258 echo
259 if [[ $ADD_SUDO =~ ^[Yy]$ ]]; then
260 usermod -aG sudo $NEW_USER
261 check_success "Потребителят $NEW_USER е добавен към групата sudo" "Грешка при добавяне към sudo група"
262 fi
263 else
264 # Създаване на потребителя
265 adduser --gecos "" $NEW_USER
266 check_success "Потребителят $NEW_USER е създаден" "Грешка при създаване на потребител"
267
268 # Добавяне към групата sudo
269 usermod -aG sudo $NEW_USER
270 check_success "Потребителят $NEW_USER е добавен към групата sudo" "Грешка при добавяне към sudo група"
271
272 # Настройка на SSH ключове за новия потребител
273 read -p "Искате ли да настроите SSH ключове за $NEW_USER? (y/n): " -n 1 -r SSH_KEY_RESPONSE
274 echo
275
276 if [[ $SSH_KEY_RESPONSE =~ ^[Yy]$ ]]; then
277 mkdir -p /home/$NEW_USER/.ssh
278 chmod 700 /home/$NEW_USER/.ssh
279
280 read -p "Въведете публичния SSH ключ: " SSH_KEY
281 echo $SSH_KEY > /home/$NEW_USER/.ssh/authorized_keys
282 chmod 600 /home/$NEW_USER/.ssh/authorized_keys
283 chown -R $NEW_USER:$NEW_USER /home/$NEW_USER/.ssh
284 check_success "SSH ключът е добавен за потребителя $NEW_USER" "Грешка при добавяне на SSH ключ"
285 fi
286 fi
287
288 # Забрана за вход с парола за root и новия потребител
289 if [ -f /etc/ssh/sshd_config ]; then
290 sed -i "/^#*PermitRootLogin/c\PermitRootLogin prohibit-password" /etc/ssh/sshd_config
291
292 if grep -q "^#*PasswordAuthentication" /etc/ssh/sshd_config; then
293 sed -i "/^#*PasswordAuthentication/c\PasswordAuthentication no" /etc/ssh/sshd_config
294 else
295 echo "PasswordAuthentication no" >> /etc/ssh/sshd_config
296 fi
297
298 systemctl restart sshd
299 check_success "SSH конфигурацията е обновена" "Грешка при обновяване на SSH конфигурация"
300 fi
301}
302
303# Подобряване на конфигурацията на SSH
304harden_ssh() {
305 show_progress "Подобряване на SSH конфигурацията"
306
307 # Създаване на резервно копие на SSH конфигурационния файл
308 cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak
309 check_success "Резервно копие на sshd_config е създадено" "Грешка при създаване на резервно копие"
310
311 # Настройки за по-добра сигурност
312 sed -i 's/#PermitRootLogin yes/PermitRootLogin prohibit-password/' /etc/ssh/sshd_config
313 sed -i 's/#PasswordAuthentication yes/PasswordAuthentication no/' /etc/ssh/sshd_config
314 sed -i 's/X11Forwarding yes/X11Forwarding no/' /etc/ssh/sshd_config
315 sed -i 's/#MaxAuthTries 6/MaxAuthTries 3/' /etc/ssh/sshd_config
316 sed -i 's/#ClientAliveInterval 0/ClientAliveInterval 300/' /etc/ssh/sshd_config
317 sed -i 's/#ClientAliveCountMax 3/ClientAliveCountMax 0/' /etc/ssh/sshd_config
318
319 # Добавяне на допълнителни настройки за сигурност
320 if ! grep -q "^UsePAM" /etc/ssh/sshd_config; then
321 echo "UsePAM yes" >> /etc/ssh/sshd_config
322 fi
323
324 if ! grep -q "^PrintLastLog" /etc/ssh/sshd_config; then
325 echo "PrintLastLog yes" >> /etc/ssh/sshd_config
326 fi
327
328 if ! grep -q "^AllowAgentForwarding" /etc/ssh/sshd_config; then
329 echo "AllowAgentForwarding no" >> /etc/ssh/sshd_config
330 fi
331
332 if ! grep -q "^AllowTcpForwarding" /etc/ssh/sshd_config; then
333 echo "AllowTcpForwarding no" >> /etc/ssh/sshd_config
334 fi
335
336 read -p "Желаете ли да промените SSH порта? (y/n): " -n 1 -r CHANGE_PORT
337 echo
338
339 if [[ $CHANGE_PORT =~ ^[Yy]$ ]]; then
340 read -p "Въведете нов SSH порт (препоръчително > 1024): " NEW_SSH_PORT
341
342 # Проверка за валиден порт
343 if [[ "$NEW_SSH_PORT" =~ ^[0-9]+$ ]] && [ "$NEW_SSH_PORT" -ge 1 ] && [ "$NEW_SSH_PORT" -le 65535 ]; then
344 sed -i "s/#Port 22/Port $NEW_SSH_PORT/" /etc/ssh/sshd_config
345
346 # Разрешаване на новия порт в защитната стена
347 ufw allow $NEW_SSH_PORT/tcp
348 ufw delete allow ssh
349
350 check_success "SSH портът е променен на $NEW_SSH_PORT" "Грешка при промяна на SSH порт"
351 echo -e "${YELLOW}ВАЖНО: Не затваряйте текущата SSH сесия, докато не проверите, че можете да се свържете на новия порт!${NC}"
352 else
353 echo -e "${RED}Невалиден порт. Пропускане на промяната.${NC}"
354 fi
355 fi
356
357 # Рестартиране на SSH услугата
358 systemctl restart sshd
359 check_success "SSH услугата е рестартирана" "Грешка при рестартиране на SSH"
360}
361
362# Настройка на автоматични актуализации
363setup_automatic_updates() {
364 show_progress "Настройка на автоматични обновления"
365
366 apt install -y -q unattended-upgrades apt-listchanges
367
368 # Конфигуриране на автоматичните обновления
369 cat << EOF > /etc/apt/apt.conf.d/50unattended-upgrades
370Unattended-Upgrade::Origins-Pattern {
371 "origin=Debian,codename=\${distro_codename}-updates";
372 "origin=Debian,codename=\${distro_codename}-proposed-updates";
373 "origin=Debian,codename=\${distro_codename},label=Debian";
374 "origin=Debian,codename=\${distro_codename},label=Debian-Security";
375 "origin=Ubuntu,codename=\${distro_codename}-updates";
376 "origin=Ubuntu,codename=\${distro_codename}-proposed-updates";
377 "origin=Ubuntu,codename=\${distro_codename},label=Ubuntu";
378 "origin=Ubuntu,codename=\${distro_codename},label=UbuntuESM";
379 "origin=Ubuntu,codename=\${distro_codename}-security";
380};
381Unattended-Upgrade::Package-Blacklist {
382};
383Unattended-Upgrade::DevRelease "false";
384Unattended-Upgrade::Remove-Unused-Dependencies "true";
385Unattended-Upgrade::Automatic-Reboot "true";
386Unattended-Upgrade::Automatic-Reboot-Time "02:00";
387Unattended-Upgrade::AutoFixInterruptedDpkg "true";
388EOF
389
390 # Активиране на автоматичните обновления
391 cat << EOF > /etc/apt/apt.conf.d/20auto-upgrades
392APT::Periodic::Update-Package-Lists "1";
393APT::Periodic::Download-Upgradeable-Packages "1";
394APT::Periodic::AutocleanInterval "7";
395APT::Periodic::Unattended-Upgrade "1";
396EOF
397
398 systemctl restart unattended-upgrades
399 check_success "Автоматичните обновления са конфигурирани" "Грешка при конфигуриране на автоматични обновления"
400
401 echo -e "${YELLOW}Текущ статус на автоматичните обновления:${NC}"
402 systemctl status unattended-upgrades.service --no-pager
403}
404
405# Настройка на swap файл (ако е необходимо)
406configure_swap() {
407 show_progress "Проверка за swap пространство"
408
409 # Проверка на наличния swap
410 CURRENT_SWAP=$(free -m | awk '/^Swap:/ {print $2}')
411 TOTAL_MEM=$(free -m | awk '/^Mem:/ {print $2}')
412 RECOMMENDED_SWAP=$((TOTAL_MEM * 2))
413
414 if [ "$CURRENT_SWAP" -eq 0 ]; then
415 read -p "Няма конфигуриран swap. Искате ли да създадете swap файл? (y/n): " -n 1 -r CREATE_SWAP
416 echo
417
418 if [[ $CREATE_SWAP =~ ^[Yy]$ ]]; then
419 read -p "Въведете размер на swap файла в GB (рекомендация: $RECOMMENDED_SWAP MB за $TOTAL_MEM MB RAM): " SWAP_SIZE
420
421 # Създаване на swap файл
422 fallocate -l ${SWAP_SIZE}G /swapfile
423 chmod 600 /swapfile
424 mkswap /swapfile
425 swapon /swapfile
426
427 # Добавяне на swap файла в /etc/fstab
428 echo '/swapfile none swap sw 0 0' >> /etc/fstab
429
430 # Настройка на swappiness
431 echo 'vm.swappiness=10' >> /etc/sysctl.conf
432 echo 'vm.vfs_cache_pressure=50' >> /etc/sysctl.conf
433 sysctl -p
434
435 check_success "Swap файл от ${SWAP_SIZE}GB е създаден и конфигуриран" "Грешка при създаване на swap файл"
436 fi
437 else
438 echo -e "${YELLOW}Системата вече има ${CURRENT_SWAP}MB swap пространство${NC}"
439 echo -e "${YELLOW}Обща RAM памет: ${TOTAL_MEM}MB${NC}"
440 echo -e "${YELLOW}Рекомендуван swap размер: ${RECOMMENDED_SWAP}MB${NC}"
441
442 read -p "Искате ли да промените swap настройките? (y/n): " -n 1 -r CHANGE_SWAP
443 echo
444
445 if [[ $CHANGE_SWAP =~ ^[Yy]$ ]]; then
446 read -p "Въведете нова стойност за vm.swappiness (по подразбиране 10): " SWAPPINESS
447 read -p "Въведете нова стойност за vm.vfs_cache_pressure (по подразбиране 50): " CACHE_PRESSURE
448
449 sed -i '/vm.swappiness/d' /etc/sysctl.conf
450 sed -i '/vm.vfs_cache_pressure/d' /etc/sysctl.conf
451
452 echo "vm.swappiness=$SWAPPINESS" >> /etc/sysctl.conf
453 echo "vm.vfs_cache_pressure=$CACHE_PRESSURE" >> /etc/sysctl.conf
454 sysctl -p
455
456 check_success "Swap настройките са променени" "Грешка при промяна на swap настройки"
457 fi
458 fi
459}
460
461# Настройка на NTP (Network Time Protocol)
462configure_ntp() {
463 show_progress "Настройка на NTP за синхронизация на времето"
464
465 # Инсталиране на NTP
466 apt install -y -q chrony
467
468 # Конфигуриране на Chrony
469 cat << EOF > /etc/chrony/chrony.conf
470pool ntp.ubuntu.com iburst
471keyfile /etc/chrony/chrony.keys
472driftfile /var/lib/chrony/chrony.drift
473logdir /var/log/chrony
474maxupdateskew 100.0
475hwclockfile /etc/adjtime
476rtcsync
477makestep 1 3
478EOF
479
480 # Рестартиране на услугата
481 systemctl restart chrony
482 check_success "Chrony услугата е рестартирана" "Грешка при рестартиране на chrony"
483
484 systemctl enable chrony
485 check_success "Chrony е конфигуриран да се стартира автоматично" "Грешка при активиране на chrony"
486
487 echo -e "${YELLOW}Текущ статус на NTP синхронизацията:${NC}"
488 chronyc tracking
489 chronyc sources
490}
491
492# Добавяне на основен банер
493add_banner() {
494 show_progress "Добавяне на системен банер"
495
496 # Създаване на банер файл с динамична системна информация
497 cat << 'EOF' > /etc/issue.net
498*************************************************************************
499 ВНИМАНИЕ!
500 Този сървър е частна собственост. Неоторизираният достъп
501 е забранен и подлежи на наказателна отговорност.
502 Всички действия се записват и следят.
503
504 Системна информация:
505EOF
506
507 # Добавяне на динамична информация
508 echo " * Хост: $(hostname)" >> /etc/issue.net
509 echo " * IP адрес: $(hostname -I | awk '{print $1}')" >> /etc/issue.net
510 echo " * Дата: $(date +"%Y-%m-%d %H:%M:%S")" >> /etc/issue.net
511 echo " * ОС: $(lsb_release -d | cut -f2-)" >> /etc/issue.net
512 echo " * Ядро: $(uname -r)" >> /etc/issue.net
513 echo " * Uptime: $(uptime -p)" >> /etc/issue.net
514 echo "*************************************************************************" >> /etc/issue.net
515
516 # Активиране на банера в SSH
517 if grep -q "^#Banner" /etc/ssh/sshd_config; then
518 sed -i 's|^#Banner.*|Banner /etc/issue.net|' /etc/ssh/sshd_config
519 else
520 echo "Banner /etc/issue.net" >> /etc/ssh/sshd_config
521 fi
522
523 systemctl restart sshd
524 check_success "Системният банер е конфигуриран" "Грешка при конфигуриране на банер"
525
526 # Показване на банера
527 echo -e "${CYAN}Системният банер ще изглежда така:${NC}"
528 generate_system_info
529}
530
531# Настройка на базови sysctl параметри
532configure_sysctl() {
533 show_progress "Настройка на базови системни параметри"
534
535 # Създаване на резервно копие
536 cp /etc/sysctl.conf /etc/sysctl.conf.bak
537
538 # Добавяне на параметри за подобрена сигурност и производителност
539 cat << EOF >> /etc/sysctl.conf
540
541# Настройки за мрежова сигурност
542net.ipv4.conf.all.rp_filter=1
543net.ipv4.conf.default.rp_filter=1
544net.ipv4.conf.all.accept_redirects=0
545net.ipv4.conf.default.accept_redirects=0
546net.ipv4.conf.all.secure_redirects=0
547net.ipv4.conf.default.secure_redirects=0
548net.ipv4.icmp_echo_ignore_broadcasts=1
549net.ipv4.icmp_ignore_bogus_error_responses=1
550net.ipv4.tcp_syncookies=1
551net.ipv4.tcp_max_syn_backlog=2048
552net.ipv4.tcp_synack_retries=2
553net.ipv4.tcp_syn_retries=2
554
555# Настройки за мрежова производителност
556net.ipv4.tcp_window_scaling=1
557net.ipv4.tcp_keepalive_time=600
558net.ipv4.tcp_keepalive_probes=5
559net.ipv4.tcp_keepalive_intvl=15
560net.ipv4.tcp_fin_timeout=30
561net.ipv4.tcp_tw_reuse=1
562net.ipv4.tcp_max_tw_buckets=1440000
563
564# Настройки за защита от DDoS атаки
565net.ipv4.tcp_syncookies=1
566net.ipv4.netfilter.ip_conntrack_max=655360
567EOF
568
569 # Прилагане на промените
570 sysctl -p
571 check_success "Sysctl параметрите са конфигурирани" "Грешка при конфигуриране на sysctl параметри"
572}
573
574# Инсталиране и конфигуриране на ClamAV (антивирус)
575install_clamav() {
576 show_progress "Инсталиране на ClamAV антивирус"
577
578 apt install -y -q clamav clamav-daemon
579
580 # Обновяване на вирусните дефиниции
581 freshclam
582
583 # Конфигуриране на автоматично сканиране
584 cat << EOF > /etc/cron.daily/clamav-scan
585#!/bin/bash
586SCAN_DIR="/home /var/www"
587LOG_FILE="/var/log/clamav/scan.log"
588/usr/bin/clamscan -i -r $SCAN_DIR >> $LOG_FILE
589EOF
590
591 chmod +x /etc/cron.daily/clamav-scan
592
593 systemctl restart clamav-daemon
594 systemctl enable clamav-daemon
595
596 check_success "ClamAV е инсталиран и конфигуриран" "Грешка при инсталиране на ClamAV"
597}
598
599# Настройка на journald за по-добро логване
600configure_journald() {
601 show_progress "Настройка на системното логване"
602
603 # Конфигуриране на journald
604 cat << EOF > /etc/systemd/journald.conf
605[Journal]
606Storage=persistent
607Compress=yes
608SystemMaxUse=1G
609SystemMaxFileSize=100M
610SystemMaxFiles=10
611EOF
612
613 systemctl restart systemd-journald
614 check_success "Системното логване е конфигурирано" "Грешка при конфигуриране на journald"
615}
616
617# Инсталиране и конфигуриране на RKHunter (rootkit detector)
618install_rkhunter() {
619 show_progress "Инсталиране на RKHunter за откриване на rootkits"
620
621 apt install -y -q rkhunter
622
623 # Конфигуриране на RKHunter
624 sed -i 's/UPDATE_MIRRORS=0/UPDATE_MIRRORS=1/' /etc/rkhunter.conf
625 sed -i 's/MIRRORS_MODE=1/MIRRORS_MODE=0/' /etc/rkhunter.conf
626 sed -i 's/CRON_DAILY_RUN=""/CRON_DAILY_RUN="true"/' /etc/default/rkhunter
627 sed -i 's/CRON_DB_UPDATE=""/CRON_DB_UPDATE="true"/' /etc/default/rkhunter
628
629 # Обновяване на базата данни
630 rkhunter --update
631 rkhunter --propupd
632
633 # Изпълнение на проверка
634 rkhunter --check --sk
635
636 check_success "RKHunter е инсталиран и конфигуриран" "Грешка при инсталиране на RKHunter"
637}
638
639# Настройка на мрежови параметри
640configure_network() {
641 show_progress "Настройка на мрежови параметри"
642
643 # Конфигуриране на hosts файла
644 cat << EOF > /etc/hosts
645127.0.0.1 localhost
646127.0.1.1 $(hostname)
647
648# IPv6
649::1 localhost ip6-localhost ip6-loopback
650ff02::1 ip6-allnodes
651ff02::2 ip6-allrouters
652EOF
653
654 # Конфигуриране на hostname
655 read -p "Искате ли да промените hostname на сървъра? (текущо: $(hostname)) (y/n): " -n 1 -r CHANGE_HOSTNAME
656 echo
657
658 if [[ $CHANGE_HOSTNAME =~ ^[Yy]$ ]]; then
659 read -p "Въведете ново hostname: " NEW_HOSTNAME
660 hostnamectl set-hostname $NEW_HOSTNAME
661 check_success "Hostname е променен на $NEW_HOSTNAME" "Грешка при промяна на hostname"
662 fi
663
664 # Конфигуриране на SSMTP за изпращане на имейли
665 if command -v apt &> /dev/null; then
666 apt install -y -q ssmtp mailutils
667 fi
668
669 check_success "Мрежовите параметри са конфигурирани" "Грешка при конфигуриране на мрежови параметри"
670}
671
672# Създаване на базов backup скрипт
673create_backup_script() {
674 show_progress "Създаване на базов backup скрипт"
675
676 cat << 'EOF' > /usr/local/bin/backup-server.sh
677#!/bin/bash
678
679# Базов backup скрипт за сървър
680# Автор: Fedya Serafiev
681# Дата: $(date +%Y-%m-%d)
682
683BACKUP_DIR="/backups"
684LOG_FILE="/var/log/backup.log"
685DATE=$(date +%Y-%m-%d_%H-%M-%S)
686BACKUP_NAME="backup_$DATE.tar.gz"
687
688# Създаване на директория за backup, ако не съществува
689mkdir -p $BACKUP_DIR
690
691# Функция за логване
692log() {
693 echo "[$(date +'%Y-%m-%d %H:%M:%S')] $1" >> $LOG_FILE
694}
695
696log "Стартиране на backup процеса"
697
698# Създаване на backup
699tar -czf $BACKUP_DIR/$BACKUP_NAME \
700 /etc \
701 /home \
702 /var/www \
703 /var/log \
704 /var/lib/mysql 2>/dev/null
705
706if [ $? -eq 0 ]; then
707 log "Backup успешно създаден: $BACKUP_NAME"
708else
709 log "Грешка при създаване на backup"
710 exit 1
711fi
712
713# Изтриване на стари backups (по-стари от 7 дни)
714find $BACKUP_DIR -type f -name "backup_*.tar.gz" -mtime +7 -exec rm -f {} \;
715log "Изтрити са стари backups (по-стари от 7 дни)"
716
717log "Backup процесът завърши успешно"
718EOF
719
720 chmod +x /usr/local/bin/backup-server.sh
721
722 # Добавяне към cron за автоматично изпълнение
723 if [ ! -f /etc/cron.d/backup-job ]; then
724 echo "0 2 * * * root /usr/local/bin/backup-server.sh" > /etc/cron.d/backup-job
725 fi
726
727 check_success "Backup скриптът е създаден" "Грешка при създаване на backup скрипт"
728}
729
730# Основно меню с опции
731main_menu() {
732 while true; do
733 clear
734 generate_system_info
735 echo -e "${BLUE}==============================================${NC}"
736 echo -e "${GREEN} UBUNTU SERVER НАЧАЛНА НАСТРОЙКА ${NC}"
737 echo -e "${BLUE}==============================================${NC}"
738 echo -e "Моля, изберете операциите, които искате да изпълните:"
739 echo ""
740 echo -e "${YELLOW}1) Настройка на времева зона (Europe/Sofia)${NC}"
741 echo -e "${YELLOW}2) Актуализиране на системата${NC}"
742 echo -e "${YELLOW}3) Инсталиране на основни пакети${NC}"
743 echo -e "${YELLOW}4) Конфигуриране на защитна стена (UFW)${NC}"
744 echo -e "${YELLOW}5) Конфигуриране на Fail2ban${NC}"
745 echo -e "${YELLOW}6) Създаване на нов администраторски потребител${NC}"
746 echo -e "${YELLOW}7) Подобряване на SSH конфигурацията${NC}"
747 echo -e "${YELLOW}8) Настройка на автоматични актуализации${NC}"
748 echo -e "${YELLOW}9) Настройка на swap пространство${NC}"
749 echo -e "${YELLOW}10) Настройка на NTP (синхронизация на времето)${NC}"
750 echo -e "${YELLOW}11) Добавяне на системен банер${NC}"
751 echo -e "${YELLOW}12) Настройка на системни параметри (sysctl)${NC}"
752 echo -e "${YELLOW}13) Инсталиране на ClamAV антивирус${NC}"
753 echo -e "${YELLOW}14) Настройка на системно логване${NC}"
754 echo -e "${YELLOW}15) Инсталиране на RKHunter${NC}"
755 echo -e "${YELLOW}16) Настройка на мрежови параметри${NC}"
756 echo -e "${YELLOW}17) Създаване на backup скрипт${NC}"
757 echo ""
758 echo -e "${GREEN}A) Изпълни всички основни операции (1-11)${NC}"
759 echo -e "${GREEN}B) Изпълни всички разширени операции (12-17)${NC}"
760 echo -e "${GREEN}C) Изпълни всички операции (1-17)${NC}"
761 echo -e "${RED}Q) Изход${NC}"
762 echo -e "${BLUE}==============================================${NC}"
763
764 read -p "Въведете вашия избор: " USER_CHOICE
765
766 case $USER_CHOICE in
767 1) set_timezone; pause ;;
768 2) update_system; pause ;;
769 3) install_essential_packages; pause ;;
770 4) configure_firewall; pause ;;
771 5) configure_fail2ban; pause ;;
772 6) create_admin_user; pause ;;
773 7) harden_ssh; pause ;;
774 8) setup_automatic_updates; pause ;;
775 9) configure_swap; pause ;;
776 10) configure_ntp; pause ;;
777 11) add_banner; pause ;;
778 12) configure_sysctl; pause ;;
779 13) install_clamav; pause ;;
780 14) configure_journald; pause ;;
781 15) install_rkhunter; pause ;;
782 16) configure_network; pause ;;
783 17) create_backup_script; pause ;;
784 [Aa])
785 set_timezone
786 update_system
787 install_essential_packages
788 configure_firewall
789 configure_fail2ban
790 create_admin_user
791 harden_ssh
792 setup_automatic_updates
793 configure_swap
794 configure_ntp
795 add_banner
796 echo -e "${GREEN}Всички основни операции са изпълнени успешно!${NC}"
797 pause
798 ;;
799 [Bb])
800 configure_sysctl
801 install_clamav
802 configure_journald
803 install_rkhunter
804 configure_network
805 create_backup_script
806 echo -e "${GREEN}Всички разширени операции са изпълнени успешно!${NC}"
807 pause
808 ;;
809 [Cc])
810 set_timezone
811 update_system
812 install_essential_packages
813 configure_firewall
814 configure_fail2ban
815 create_admin_user
816 harden_ssh
817 setup_automatic_updates
818 configure_swap
819 configure_ntp
820 add_banner
821 configure_sysctl
822 install_clamav
823 configure_journald
824 install_rkhunter
825 configure_network
826 create_backup_script
827 echo -e "${GREEN}Всички операции са изпълнени успешно!${NC}"
828 pause
829 ;;
830 [Qq])
831 echo -e "${GREEN}Изход от скрипта.${NC}"
832 exit 0
833 ;;
834 *)
835 echo -e "${RED}Невалиден избор. Моля, опитайте отново.${NC}"
836 pause
837 ;;
838 esac
839 done
840}
841
842# Стартиране на основното меню
843main_menu