Dernière activité 1752586391

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

urocibg a révisé ce gist 1752586391. Aller à la révision

1 file changed, 1 insertion, 1 deletion

ubuntu_server_Initial_setup.sh

@@ -2,7 +2,7 @@
2 2
3 3 # Ubuntu Server Initial Setup Script
4 4 # Автор: Fedya Serafiev
5 - # Дата: 15.юли 2025
5 + # Дата: 15 юли 2025
6 6 # Версия: 2.2
7 7 #
8 8 # Този скрипт извършва основните задачи за първоначална настройка на Ubuntu Server

urocibg a révisé ce gist 1752575893. Aller à la révision

1 file changed, 2 insertions, 2 deletions

ubuntu_server_Initial_setup.sh

@@ -2,8 +2,8 @@
2 2
3 3 # Ubuntu Server Initial Setup Script
4 4 # Автор: Fedya Serafiev
5 - # Дата: 16 май 2025
6 - # Версия: 2.1
5 + # Дата: 15.юли 2025
6 + # Версия: 2.2
7 7 #
8 8 # Този скрипт извършва основните задачи за първоначална настройка на Ubuntu Server
9 9 # Включва: актуализация на системата, настройка на защитна стена, инсталиране на полезни пакети,

urocibg a révisé ce gist 1752554945. Aller à la révision

1 file changed, 843 insertions

ubuntu_server_Initial_setup.sh(fichier créé)

@@ -0,0 +1,843 @@
1 + #!/bin/bash
2 +
3 + # Ubuntu Server Initial Setup Script
4 + # Автор: Fedya Serafiev
5 + # Дата: 16 май 2025
6 + # Версия: 2.1
7 + #
8 + # Този скрипт извършва основните задачи за първоначална настройка на Ubuntu Server
9 + # Включва: актуализация на системата, настройка на защитна стена, инсталиране на полезни пакети,
10 + # конфигуриране на SSH, създаване на нов потребител с административни права и базова защита
11 +
12 + # Цветове за терминала
13 + RED='\033[0;31m'
14 + GREEN='\033[0;32m'
15 + YELLOW='\033[1;33m'
16 + BLUE='\033[0;34m'
17 + CYAN='\033[0;36m'
18 + MAGENTA='\033[0;35m'
19 + NC='\033[0m' # No Color
20 +
21 + # Проверка за root привилегии
22 + if [[ $EUID -ne 0 ]]; then
23 + echo -e "${RED}Този скрипт трябва да се изпълни като root потребител${NC}"
24 + echo -e "${YELLOW}Моля, стартирайте го отново с: sudo $0${NC}"
25 + exit 1
26 + fi
27 +
28 + # Функция за показване на прогрес
29 + show_progress() {
30 + echo -e "${BLUE}================================================${NC}"
31 + echo -e "${GREEN}>>> $1${NC}"
32 + echo -e "${BLUE}================================================${NC}"
33 + }
34 +
35 + # Функция за проверка на успех
36 + check_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 + # Функция за пауза
48 + pause() {
49 + echo -e "${YELLOW}Натиснете Enter за да продължите...${NC}"
50 + read -r
51 + }
52 +
53 + # Генериране на системна информация
54 + generate_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)
79 + set_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 + # Актуализиране на системата
87 + update_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 + # Инсталиране на основни пакети
108 + install_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)
158 + configure_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
199 + configure_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]
218 + enabled = true
219 + port = ssh
220 + filter = sshd
221 + logpath = /var/log/auth.log
222 + maxretry = 5
223 + bantime = 3600
224 + findtime = 600
225 + ignoreip = 127.0.0.1/8 ::1
226 +
227 + [sshd-ddos]
228 + enabled = true
229 + port = ssh
230 + filter = sshd
231 + logpath = /var/log/auth.log
232 + maxretry = 5
233 + findtime = 600
234 + bantime = 86400
235 + EOF
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 + # Създаване на нов администраторски потребител
249 + create_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
304 + harden_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 + # Настройка на автоматични актуализации
363 + setup_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
370 + Unattended-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 + };
381 + Unattended-Upgrade::Package-Blacklist {
382 + };
383 + Unattended-Upgrade::DevRelease "false";
384 + Unattended-Upgrade::Remove-Unused-Dependencies "true";
385 + Unattended-Upgrade::Automatic-Reboot "true";
386 + Unattended-Upgrade::Automatic-Reboot-Time "02:00";
387 + Unattended-Upgrade::AutoFixInterruptedDpkg "true";
388 + EOF
389 +
390 + # Активиране на автоматичните обновления
391 + cat << EOF > /etc/apt/apt.conf.d/20auto-upgrades
392 + APT::Periodic::Update-Package-Lists "1";
393 + APT::Periodic::Download-Upgradeable-Packages "1";
394 + APT::Periodic::AutocleanInterval "7";
395 + APT::Periodic::Unattended-Upgrade "1";
396 + EOF
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 файл (ако е необходимо)
406 + configure_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)
462 + configure_ntp() {
463 + show_progress "Настройка на NTP за синхронизация на времето"
464 +
465 + # Инсталиране на NTP
466 + apt install -y -q chrony
467 +
468 + # Конфигуриране на Chrony
469 + cat << EOF > /etc/chrony/chrony.conf
470 + pool ntp.ubuntu.com iburst
471 + keyfile /etc/chrony/chrony.keys
472 + driftfile /var/lib/chrony/chrony.drift
473 + logdir /var/log/chrony
474 + maxupdateskew 100.0
475 + hwclockfile /etc/adjtime
476 + rtcsync
477 + makestep 1 3
478 + EOF
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 + # Добавяне на основен банер
493 + add_banner() {
494 + show_progress "Добавяне на системен банер"
495 +
496 + # Създаване на банер файл с динамична системна информация
497 + cat << 'EOF' > /etc/issue.net
498 + *************************************************************************
499 + ВНИМАНИЕ!
500 + Този сървър е частна собственост. Неоторизираният достъп
501 + е забранен и подлежи на наказателна отговорност.
502 + Всички действия се записват и следят.
503 +
504 + Системна информация:
505 + EOF
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 параметри
532 + configure_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 + # Настройки за мрежова сигурност
542 + net.ipv4.conf.all.rp_filter=1
543 + net.ipv4.conf.default.rp_filter=1
544 + net.ipv4.conf.all.accept_redirects=0
545 + net.ipv4.conf.default.accept_redirects=0
546 + net.ipv4.conf.all.secure_redirects=0
547 + net.ipv4.conf.default.secure_redirects=0
548 + net.ipv4.icmp_echo_ignore_broadcasts=1
549 + net.ipv4.icmp_ignore_bogus_error_responses=1
550 + net.ipv4.tcp_syncookies=1
551 + net.ipv4.tcp_max_syn_backlog=2048
552 + net.ipv4.tcp_synack_retries=2
553 + net.ipv4.tcp_syn_retries=2
554 +
555 + # Настройки за мрежова производителност
556 + net.ipv4.tcp_window_scaling=1
557 + net.ipv4.tcp_keepalive_time=600
558 + net.ipv4.tcp_keepalive_probes=5
559 + net.ipv4.tcp_keepalive_intvl=15
560 + net.ipv4.tcp_fin_timeout=30
561 + net.ipv4.tcp_tw_reuse=1
562 + net.ipv4.tcp_max_tw_buckets=1440000
563 +
564 + # Настройки за защита от DDoS атаки
565 + net.ipv4.tcp_syncookies=1
566 + net.ipv4.netfilter.ip_conntrack_max=655360
567 + EOF
568 +
569 + # Прилагане на промените
570 + sysctl -p
571 + check_success "Sysctl параметрите са конфигурирани" "Грешка при конфигуриране на sysctl параметри"
572 + }
573 +
574 + # Инсталиране и конфигуриране на ClamAV (антивирус)
575 + install_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
586 + SCAN_DIR="/home /var/www"
587 + LOG_FILE="/var/log/clamav/scan.log"
588 + /usr/bin/clamscan -i -r $SCAN_DIR >> $LOG_FILE
589 + EOF
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 за по-добро логване
600 + configure_journald() {
601 + show_progress "Настройка на системното логване"
602 +
603 + # Конфигуриране на journald
604 + cat << EOF > /etc/systemd/journald.conf
605 + [Journal]
606 + Storage=persistent
607 + Compress=yes
608 + SystemMaxUse=1G
609 + SystemMaxFileSize=100M
610 + SystemMaxFiles=10
611 + EOF
612 +
613 + systemctl restart systemd-journald
614 + check_success "Системното логване е конфигурирано" "Грешка при конфигуриране на journald"
615 + }
616 +
617 + # Инсталиране и конфигуриране на RKHunter (rootkit detector)
618 + install_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 + # Настройка на мрежови параметри
640 + configure_network() {
641 + show_progress "Настройка на мрежови параметри"
642 +
643 + # Конфигуриране на hosts файла
644 + cat << EOF > /etc/hosts
645 + 127.0.0.1 localhost
646 + 127.0.1.1 $(hostname)
647 +
648 + # IPv6
649 + ::1 localhost ip6-localhost ip6-loopback
650 + ff02::1 ip6-allnodes
651 + ff02::2 ip6-allrouters
652 + EOF
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 скрипт
673 + create_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 +
683 + BACKUP_DIR="/backups"
684 + LOG_FILE="/var/log/backup.log"
685 + DATE=$(date +%Y-%m-%d_%H-%M-%S)
686 + BACKUP_NAME="backup_$DATE.tar.gz"
687 +
688 + # Създаване на директория за backup, ако не съществува
689 + mkdir -p $BACKUP_DIR
690 +
691 + # Функция за логване
692 + log() {
693 + echo "[$(date +'%Y-%m-%d %H:%M:%S')] $1" >> $LOG_FILE
694 + }
695 +
696 + log "Стартиране на backup процеса"
697 +
698 + # Създаване на backup
699 + tar -czf $BACKUP_DIR/$BACKUP_NAME \
700 + /etc \
701 + /home \
702 + /var/www \
703 + /var/log \
704 + /var/lib/mysql 2>/dev/null
705 +
706 + if [ $? -eq 0 ]; then
707 + log "Backup успешно създаден: $BACKUP_NAME"
708 + else
709 + log "Грешка при създаване на backup"
710 + exit 1
711 + fi
712 +
713 + # Изтриване на стари backups (по-стари от 7 дни)
714 + find $BACKUP_DIR -type f -name "backup_*.tar.gz" -mtime +7 -exec rm -f {} \;
715 + log "Изтрити са стари backups (по-стари от 7 дни)"
716 +
717 + log "Backup процесът завърши успешно"
718 + EOF
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 + # Основно меню с опции
731 + main_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 + # Стартиране на основното меню
843 + main_menu
Plus récent Plus ancien