├── README.md ├── breeze.sh ├── changelog.txt └── zpanel.sh /README.md: -------------------------------------------------------------------------------- 1 | # Breeze-Easy-Shell 2 | Скрипт, который за вас выполняет некоторые типовые действия на Linux. Например, сам настроит VPN-сервер или Proxy-сервер. Поможет настроить firewall - например, поможет открыть нужный порт, не вникая в тонкости iptables. Поможет с антивирусом или просто почистить диск от накопившихся логов. Также просто расскажет о железе и сделает бенчмарк (процессора или диска), чтобы сравнить реальную производительность с заявленной. 3 | 4 | Описание есть на хабре: https://habr.com/ru/post/309628/ 5 | 6 | Работает только на CentOS (и прочих дистрибутивах RHEL). В перспективе есть мысли расширить его функционал на Debian/Ubuntu, но пока не дошли руки. :( 7 | -------------------------------------------------------------------------------- /breeze.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | ver="v1.9.2" 3 | title="Breeze Easy Shell" 4 | title_full="$title $ver" 5 | #----------------- 6 | #типовые функции 7 | #----------------- 8 | 9 | #для рабты с цветами 10 | normal="\033[0m" 11 | green="\033[32m" 12 | red="\033[1;31m" 13 | blue="\033[1;34m" 14 | black="\033[40m" 15 | textcolor=$green 16 | bgcolor=$black 17 | 18 | color() 19 | { 20 | case "$1" in 21 | normal|default) 22 | sed -i -e 's/^textcolor=.*/textcolor=$normal/' -e 's/^bgcolor=.*/bgcolor=$normal/' breeze.sh #меняем переменную в самом скрипте 23 | textcolor=$normal #меняем переменную в текущей сессии 24 | bgcolor=$normal #меняем переменную в текущей сессии 25 | chosen=0 #выходим из терминала в главное меню 26 | ;; 27 | green) 28 | sed -i -e 's/^textcolor=.*/textcolor=$green/' -e 's/^bgcolor=.*/bgcolor=$black/' breeze.sh #меняем переменную в самом скрипте 29 | textcolor=$green #меняем переменную в текущей сессии 30 | bgcolor=$black #меняем переменную в текущей сессии 31 | chosen=0 #выходим из терминала в главное меню 32 | ;; 33 | blue) 34 | sed -i -e 's/^textcolor=.*/textcolor=$blue/' -e 's/^bgcolor=.*/bgcolor=$black/' breeze.sh #меняем переменную в самом скрипте 35 | textcolor=$blue #меняем переменную в текущей сессии 36 | bgcolor=$black #меняем переменную в текущей сессии 37 | chosen=0 #выходим из терминала в главное меню 38 | ;; 39 | red) 40 | sed -i -e 's/^textcolor=.*/textcolor=$red/' -e 's/^bgcolor=.*/bgcolor=$black/' breeze.sh #меняем переменную в самом скрипте 41 | textcolor=$red #меняем переменную в текущей сессии 42 | bgcolor=$black #меняем переменную в текущей сессии 43 | chosen=0 #выходим из терминала в главное меню 44 | ;; 45 | *) 46 | echo "цвет указан неверно. Поддерживается только green, blue, red и default/normal" 47 | ;; 48 | esac 49 | } 50 | 51 | my_clear() 52 | { 53 | echo -e "$textcolor$bgcolor" 54 | clear 55 | } 56 | 57 | #функция, которая запрашивает только один символ 58 | myread() 59 | { 60 | temp="" 61 | while [ -z "$temp" ] #защита от пустых значений 62 | do 63 | read -n 1 temp 64 | done 65 | eval $1=$temp 66 | echo 67 | } 68 | 69 | #функция, которая запрашивает только да или нет 70 | myread_yn() 71 | { 72 | temp="" 73 | while [[ "$temp" != "y" && "$temp" != "Y" && "$temp" != "n" && "$temp" != "N" ]] #запрашиваем значение, пока не будет "y" или "n" 74 | do 75 | echo -n "y/n: " 76 | read -n 1 temp 77 | echo 78 | done 79 | eval $1=$temp 80 | } 81 | 82 | #функция, которая запрашивает только цифру 83 | myread_dig() 84 | { 85 | temp="" 86 | counter=0 87 | while [[ "$temp" != "0" && "$temp" != "1" && "$temp" != "2" && "$temp" != "3" && "$temp" != "4" && "$temp" != "5" && "$temp" != "6" && "$temp" != "7" && "$temp" != "8" && "$temp" != "9" ]] #запрашиваем значение, пока не будет цифра 88 | do 89 | if [ $counter -ne 0 ]; then echo -n "Неправильный выбор. Ведите цифру: "; fi 90 | let "counter=$counter+1" 91 | read -n 1 temp 92 | echo 93 | done 94 | eval $1=$temp 95 | } 96 | 97 | #функция установки с проверкой не установлен ли уже пакет 98 | myinstall() 99 | { 100 | if [ -z `rpm -qa $1` ]; then 101 | yum -y install $1 102 | else 103 | echo "Пакет $1 уже установлен" 104 | br 105 | fi 106 | } 107 | 108 | title() 109 | { 110 | my_clear 111 | echo "$title" 112 | } 113 | 114 | menu() 115 | { 116 | my_clear 117 | echo "$menu" 118 | echo "Выберите пункт меню:" 119 | } 120 | 121 | wait() 122 | { 123 | echo "Нажмите любую клавишу, чтобы продолжить..." 124 | read -s -n 1 125 | } 126 | 127 | br() 128 | { 129 | echo "" 130 | } 131 | 132 | updatescript() 133 | { 134 | wget $updpath/$filename -r -N -nd --no-check-certificate 135 | chmod 777 $filename 136 | } 137 | 138 | settimezone() 139 | { 140 | /bin/cp /usr/share/zoneinfo/$1/$2 /etc/localtime 141 | echo "Новый часовой пояс установлен. Текущее время: $(date +%H:%M)." 142 | wait 143 | } 144 | repo () { 145 | osver1_repo=$osver1 #дальше будем работать с локальной переменной 146 | if [ $osver1_repo -eq 0 ]; then 147 | echo "Мы не смогли определить версию Вашей ОС, но Вы можете выбрать её сами на свой страх и риск:" 148 | echo "4) CentOS 4.x (или другой дистрибутив на базе RHEL 4)" 149 | echo "5) CentOS 5.x (или другой дистрибутив на базе RHEL 5)" 150 | echo "6) CentOS 6.x (или другой дистрибутив на базе RHEL 6)" 151 | echo "7) CentOS 7.x (или другой дистрибутив на базе RHEL 7)" 152 | echo "0) Любая другая ОС" 153 | myread_dig osver_user 154 | if [ $osver_user -eq 0 ]; then echo "Никакие другие ОС пока не поддерживаются." 155 | else 156 | osver1_repo=$osver_user 157 | fi 158 | fi 159 | case "$osver1_repo" in 160 | 4) 161 | echo "Будут добавлены репозитории для CentOS 4" 162 | wait 163 | echo "Устанавливаем репозитории..." 164 | case "$arc" in 165 | 32) 166 | wget http://packages.sw.be/rpmforge-release/rpmforge-release-0.5.2-2.el4.rf.i386.rpm 167 | rpm -Uvh rpmforge-release-0.5.2-2.el4.rf.i386.rpm 168 | ;; 169 | 64) 170 | wget http://packages.sw.be/rpmforge-release/rpmforge-release-0.5.2-2.el4.rf.x86_64.rpm 171 | rpm -Uvh rpmforge-release-0.5.2-2.el4.rf.x86_64.rpm 172 | ;; 173 | esac 174 | ;; 175 | 5) 176 | echo "Будут добавлены репозитории EPEL, REMI, RepoForge (бывший RPMForge) и ELRepo для CentOS 5" 177 | wait 178 | echo "Устанавливаем репозитории..." 179 | yum -y install epel-release 180 | rpm -Uvh http://rpms.remirepo.net/enterprise/remi-release-5.rpm 181 | case "$arc" in 182 | 32) 183 | rpm -ivh http://repository.it4i.cz/mirrors/repoforge/redhat/el5/en/i386/rpmforge/RPMS/rpmforge-release-0.5.3-1.el5.rf.i386.rpm 184 | ;; 185 | 64) 186 | rpm -ivh http://repository.it4i.cz/mirrors/repoforge/redhat/el5/en/x86_64/rpmforge/RPMS/rpmforge-release-0.5.3-1.el5.rf.x86_64.rpm 187 | ;; 188 | esac 189 | rpm -Uvh http://www.elrepo.org/elrepo-release-5-5.el5.elrepo.noarch.rpm 190 | ;; 191 | 6) 192 | echo "Будут добавлены репозитории EPEL, REMI, RepoForge (бывший RPMForge) и ELRepo для CentOS 6" 193 | wait 194 | echo "Устанавливаем репозитории..." 195 | #epel remi 196 | wget https://dl.fedoraproject.org/pub/epel/epel-release-latest-6.noarch.rpm 197 | wget https://rpms.remirepo.net/enterprise/remi-release-6.rpm 198 | rpm -Uvh remi-release-6.rpm epel-release-latest-6.noarch.rpm 199 | #RepoForge 200 | case "$arc" in 201 | 32) 202 | rpm -ivh http://repository.it4i.cz/mirrors/repoforge/redhat/el6/en/i386/rpmforge/RPMS/rpmforge-release-0.5.3-1.el6.rf.i686.rpm 203 | ;; 204 | 64) 205 | rpm -ivh http://repository.it4i.cz/mirrors/repoforge/redhat/el6/en/x86_64/rpmforge/RPMS/rpmforge-release-0.5.3-1.el6.rf.x86_64.rpm 206 | ;; 207 | esac 208 | #elrepo 209 | rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org 210 | yum install https://www.elrepo.org/elrepo-release-6-8.el6.elrepo.noarch.rpm 211 | ;; 212 | 7) 213 | echo "Будут добавлены репозитории EPEL, REMI, RepoForge (бывший RPMForge), ELRepo для CentOS 7" 214 | wait 215 | echo "Устанавливаем репозитории..." 216 | #RepoForge 217 | rpm -ivh http://repository.it4i.cz/mirrors/repoforge/redhat/el7/en/x86_64/rpmforge/RPMS/rpmforge-release-0.5.3-1.el7.rf.x86_64.rpm 218 | #epel remi 219 | wget https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm 220 | wget https://rpms.remirepo.net/enterprise/remi-release-7.rpm 221 | rpm -Uvh remi-release-7.rpm epel-release-latest-7.noarch.rpm 222 | #Elrepo 223 | rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org 224 | yum install https://www.elrepo.org/elrepo-release-7.0-3.el7.elrepo.noarch.rpm -y 225 | ;; 226 | *) #сюда мы попали только если при ручном вводе версии RHEL указали несуществующую версию 227 | echo "Неправильно указана версия RHEL." 228 | ;; 229 | esac 230 | } 231 | 232 | iptables_save() 233 | { 234 | #проверка CentOS 7 235 | if [ $osver1 -eq 7 ]; then 236 | myinstall iptables-services | tee > /dev/null 237 | fi 238 | service iptables save 239 | } 240 | 241 | openport() 242 | { 243 | chain=$(echo $1 | tr [:lower:] [:upper:]) 244 | if [ "$chain" == "IN" ]; then chain="INPUT"; t1="dport" 245 | else 246 | if [ "$chain" == "OUT" ]; then chain="OUTPUT"; t1="sport" 247 | else 248 | if [ "$chain" == "FWD" ]; then chain="FORWARD"; t1="sport" 249 | iptables -I $chain -p $2 --dport $3 -j ACCEPT #дополнительная строка для варианта с FORWARD 250 | else 251 | echo "неправильно указано направление правила для открытия порта" 252 | wait 253 | fi 254 | fi 255 | fi 256 | iptables -I $chain -p $2 --$t1 $3 -j ACCEPT #возможно в будущем предусмотрю выбор ключа -I или -A 257 | iptables_save 258 | } 259 | 260 | webuzo_install() 261 | { 262 | openport in tcp 2004 263 | openport in tcp 2002 264 | wget http://files.webuzo.com/install.sh -r -N -nd 265 | sh install.sh 266 | rm -f install.sh 267 | } 268 | 269 | cwp_install() 270 | { 271 | openport in tcp 2030 272 | openport in tcp 2031 273 | wget http://centos-webpanel.com/cwp-latest 274 | sh cwp-latest 275 | rm -f cwp-latest 276 | } 277 | 278 | zpanel_install() 279 | { 280 | wget https://raw.githubusercontent.com/Brizovsky/Breeze-Easy-Shell/master/zpanel.sh 281 | sh zpanel.sh 282 | rm -f zpanel.sh 283 | } 284 | 285 | ajenti_install() 286 | { 287 | openport in tcp 8000 288 | rpm -i http://repo.ajenti.org/ajenti-repo-1.0-1.noarch.rpm 289 | echo "Устанавливаем Ajenti" 290 | yum -y install ajenti 291 | echo "Устанавливаем Ajenti V" 292 | yum -y install ajenti-v ajenti-v-nginx ajenti-v-mysql ajenti-v-php-fpm php-mysql 293 | echo "Отключаем SSL для админки" 294 | sed -i -e 's/"enable": true/"enable": false/' /etc/ajenti/config.json 295 | whatismyipext 296 | echo "Выставляем наш внешний IP в конфиг" 297 | sed -i -e "s/\"host\": \"0.0.0.0\"/\"host\": \"$ipext\"/" /etc/ajenti/config.json 298 | echo "Устанавливаем русский язык по умолчанию" 299 | sed -i -e 's/ "bind": {/ "language": "ru_RU",\n "bind": {/' /etc/ajenti/config.json 300 | echo "Перезапускаем Ajenti" 301 | service ajenti restart 302 | br 303 | echo "Панель управления Ajenti и Ajenti V были установлены. Теперь можете управлять сервером из браузера." 304 | echo "Адрес: http://$ipext:8000" 305 | echo "Логин: root" 306 | echo "Пароль: admin" 307 | br 308 | wait 309 | } 310 | 311 | mtu_change() 312 | { 313 | ifconfig $1 mtu $2 314 | } 315 | #Функция проверки установленного приложения, exist возвращает true если установлена и false, если нет. 316 | installed() 317 | { 318 | if [ "$2" == "force" ]; then exist=`rpm -qa $1` #добавили возможности форсированно использовать длинный вариант проверки 319 | else #если нет ключа force, используем старый двойной вариант 320 | exist=`whereis $1 | awk {'print $2'}` #вариант быстрый, но не всегда эффективный 321 | if [ -z $exist ] 322 | then #будем использовать оба варианта 323 | exist=`rpm -qa $1` #вариант медленнее, но эффективнее 324 | fi 325 | fi 326 | 327 | if [ -n "$exist" ] 328 | then 329 | exist=true 330 | else 331 | exist=false 332 | fi 333 | } 334 | 335 | #функция которая открывает на редактирование файл в приоритете: mc, nano, vi 336 | edit() 337 | { 338 | installed mc 339 | if [ $exist == true ]; then mcedit $1 340 | else 341 | installed nano 342 | if [ $exist == true ]; then nano $1 343 | else 344 | vi $1 345 | fi 346 | fi 347 | } 348 | 349 | #функция удаления. 350 | uninstall() 351 | { 352 | if [ $osver1 -eq 5 ]; then yum erase $1 $2 $3 $4 $5; 353 | else 354 | myinstall yum-remove-with-leaves | tee > /dev/null 355 | yum --remove-leaves remove $1 $2 $3 $4 $5 356 | fi 357 | } 358 | 359 | #Определяем активный внешний интерфейс 360 | whatismyiface() 361 | { 362 | if [ $osver1 -eq 7 ]; then 363 | installed net-tools 364 | if [ $exist == false ]; then yum -y install net-tools | tee > /dev/null; fi 365 | fi 366 | if [ -n "$(ifconfig | grep eth0)" ]; then iface="eth0" 367 | else 368 | if [ -n "$(ifconfig | grep venet0:0)" ]; then iface=venet0:0; fi 369 | fi 370 | } 371 | 372 | #определяем ip на внешнем интерфейсе 373 | whatismyip() 374 | { 375 | whatismyiface 376 | case "$osver1" in 377 | 4|5|6) 378 | ip=`ifconfig $iface | grep 'inet addr' | awk {'print $2'} | sed s/.*://` 379 | ;; 380 | 7) 381 | ip=`ifconfig $iface | grep 'inet' | sed q | awk {'print $2'}` 382 | ;; 383 | *) 384 | echo "Версия ОС неизвестна. Выходим." 385 | wait 386 | ;; 387 | esac 388 | } 389 | 390 | #определяем внешний IP через запрос 391 | whatismyipext() 392 | { 393 | installed wget 394 | if [ $exist == false ]; then myinstall wget; fi 395 | ipext=`wget --no-check-certificate -qO- https://2ip.ru/index.php | grep "Ваш IP адрес:" | sed s/.*button\"\>// | sed s_"<"_" "_ | awk {'print $1'}` 396 | } 397 | 398 | whatismyip_full() 399 | { 400 | whatismyip 401 | echo "Ваш внешний IP: $ip?" 402 | myread_yn ans 403 | case "$ans" in 404 | y|Y) 405 | #ничего не делаем, выходим из case 406 | ;; 407 | n|N|т|Т) 408 | echo "Если был неправильно определен IP, вы можете произвести настройку в ручном режиме." 409 | echo "Для этого Вам нужно определить как называется Ваш сетевой интерфейс, через который Вы выходите в интернет." 410 | echo "Если хотите вывести на экран все сетевые интерфейсы, чтобы определить какой из них внешний - нажмите 1." 411 | myread ans 412 | if [ "$ans" == "1" ]; then ifconfig; br; wait; fi 413 | br 414 | echo "Укажите название интерфейса, который имеет внешний IP (обычно eth0, venet0 или venet0:0)" 415 | read int 416 | ip=`ifconfig $int | grep 'inet addr' | awk {'print $2'} | sed s/.*://` 417 | #centOS7 418 | if [ $osver1 -eq 7 ]; then ip=`ifconfig $int | grep 'inet' | sed q | awk {'print $2'}`; fi 419 | echo "Ваш внешний IP: $ip?" 420 | myread_yn ans 421 | case "$ans" in 422 | y|Y) 423 | ;; 424 | n|N|т|Т) 425 | echo "Тогда введите IP вручную:" 426 | read ip 427 | ;; 428 | *) 429 | echo "Неправильный ответ. Выходим." 430 | wait 431 | sh $0 432 | exit 0 433 | ;; 434 | esac 435 | ;; 436 | *) 437 | echo "Неправильный ответ. Выходим." 438 | wait 439 | sh $0 440 | exit 0 441 | ;; 442 | esac 443 | } 444 | 445 | bench_cpu () { 446 | threads=$cpu_cores #делаем кол-во потоков, равное кол-ву ядер 447 | if [ -z $threads ]; then threads=1; fi #если по какой-то причине мы не знаем сколько ядер, ставим в один поток 448 | #if [ -z $cpu_clock ]; then cpu_clock=2394; fi #если по какой-то причине мы не знаем свою частоту, то берем эталонную 449 | totalspeed=$(sysbench cpu --cpu-max-prime=10000 run --num-threads=$threads | grep "events per second:" | awk {'print $4'}) #записали общую скорость 450 | temp=$(echo "${totalspeed/./}") #убрали точку, т.е. умножили на 100. 451 | if [ ${temp:0:1} -eq 0 ]; then temp=$(echo "${temp:1}"); fi #проверили нет ли нуля в начале, если есть - убрали 452 | reference=75000 #скорость на эталонном процессоре, умноженная на 100. 453 | #let "discountpower = $power * 2394 / $cpu_clock" #сколько тестов он бы прошёл при той же частоте, что и эталонный процессор 454 | let "powerpercent = $temp * 1000 / $reference" #мощность этого процессора делим на мощность эталлонного процессора и выражаем в процентах с десятыми долями (но без точки) 455 | powerpercent=$(echo $powerpercent|sed 's/.$/.&/') #добавили точку 456 | #let "discountpowerpercent = $discountpower * 100 / $reference " #мощность этого процессора делим на мощность эталлонного процессора и выражаем в процентах 457 | if [ $threads -gt 1 ]; then #если ядер больше одного, посчитаем еще относительную мощность одного ядра к эталону 458 | let "speedpercore= $temp / $threads" #тут скорость уже умножена на 100 459 | let "powerpercorepercent = $speedpercore * 1000 / $reference " #мощность одного ядра этого процессора к мощности эталонного процессора, выражено в процентах с десятыми долями, но без точки 460 | powerpercorepercent=$(echo $powerpercorepercent|sed 's/.$/.&/') #добавили точку 461 | fi 462 | } 463 | 464 | 465 | bench_hdd () { 466 | # Measuring disk speed with DD 467 | io=$( ( dd if=/dev/zero of=test_$$ bs=64k count=16k conv=fdatasync && rm -f test_$$ ) 2>&1 | awk -F, '{io=$NF} END { print io}' | sed 's/^[ \t]*//;s/[ \t]*$//' ) 468 | echo " Первый прогон: $io" 469 | io2=$( ( dd if=/dev/zero of=test_$$ bs=64k count=16k conv=fdatasync && rm -f test_$$ ) 2>&1 | awk -F, '{io=$NF} END { print io}' | sed 's/^[ \t]*//;s/[ \t]*$//' ) 470 | echo " Второй прогон: $io2" 471 | io3=$( ( dd if=/dev/zero of=test_$$ bs=64k count=16k conv=fdatasync && rm -f test_$$ ) 2>&1 | awk -F, '{io=$NF} END { print io}' | sed 's/^[ \t]*//;s/[ \t]*$//' ) 472 | echo " Третий прогон: $io3" 473 | # Calculating avg I/O (better approach with awk for non int values) 474 | if [ $(echo $io | awk '{print $2}') = "GB/s" ] #проверили а не гигабайты ли это 475 | then #гигабайты 476 | ioraw=$( echo $io | awk 'NR==1 {print $1}' ) #взяли только число 477 | gb=$(echo $ioraw | sed 's/\./ /' | awk '{print $1}') #взяли кол-во гигабайт 478 | mb=$(echo $ioraw | sed 's/\./ /' | awk '{print $2}') #взяли кол-во мегабайт 479 | if [ ${#mb} -eq 1 ]; then let "mb=$mb*1024/10"; else #переводим десятые доли гигабайт в мегабайты 480 | if [ ${#mb} -eq 2 ]; then let "mb=$mb*1024/100"; else #переводим сотвые долги гигабайт в мегабайты 481 | if [ ${#mb} -eq 3 ]; then let "mb=$mb*1024/1000"; else #переводим тысячные долги гигабайт в мегабайты 482 | mb=0 483 | fi 484 | fi 485 | fi 486 | let "ioraw=$gb*1024+$mb" 487 | else ioraw=$( echo $io | awk 'NR==1 {print $1}' ) 488 | fi 489 | 490 | if [ $(echo $io2 | awk '{print $2}') = "GB/s" ] #проверили а не гигабайты ли это 491 | then #гигабайты 492 | ioraw2=$( echo $io2 | awk 'NR==1 {print $1}' ) #взяли только число 493 | gb=$(echo $ioraw2 | sed 's/\./ /' | awk '{print $1}') #взяли кол-во гигабайт 494 | mb=$(echo $ioraw2 | sed 's/\./ /' | awk '{print $2}') #взяли кол-во мегабайт 495 | if [ ${#mb} -eq 1 ]; then let "mb=$mb*1024/10"; else #переводим десятые доли гигабайт в мегабайты 496 | if [ ${#mb} -eq 2 ]; then let "mb=$mb*1024/100"; else #переводим сотвые долги гигабайт в мегабайты 497 | if [ ${#mb} -eq 3 ]; then let "mb=$mb*1024/1000"; else #переводим тысячные долги гигабайт в мегабайты 498 | mb=0 499 | fi 500 | fi 501 | fi 502 | let "ioraw2=$gb*1024+$mb" 503 | else ioraw2=$( echo $io2 | awk 'NR==1 {print $1}' ) 504 | fi 505 | 506 | if [ $(echo $io3 | awk '{print $2}') = "GB/s" ] #проверили а не гигабайты ли это 507 | then #гигабайты 508 | ioraw3=$( echo $io3 | awk 'NR==1 {print $1}' ) #взяли только число 509 | gb=$(echo $ioraw3 | sed 's/\./ /' | awk '{print $1}') #взяли кол-во гигабайт 510 | mb=$(echo $ioraw3 | sed 's/\./ /' | awk '{print $2}') #взяли кол-во мегабайт 511 | if [ ${#mb} -eq 1 ]; then let "mb=$mb*1024/10"; else #переводим десятые доли гигабайт в мегабайты 512 | if [ ${#mb} -eq 2 ]; then let "mb=$mb*1024/100"; else #переводим сотвые долги гигабайт в мегабайты 513 | if [ ${#mb} -eq 3 ]; then let "mb=$mb*1024/1000"; else #переводим тысячные долги гигабайт в мегабайты 514 | mb=0 515 | fi 516 | fi 517 | fi 518 | let "ioraw3=$gb*1024+$mb" 519 | else ioraw3=$( echo $io3 | awk 'NR==1 {print $1}' ) 520 | fi 521 | 522 | ioall=$( awk 'BEGIN{print '$ioraw' + '$ioraw2' + '$ioraw3'}' ) 523 | ioavg=$( awk 'BEGIN{print '$ioall'/3}' ) 524 | 525 | echo "Среднее значение: $ioavg MB/s" 526 | } 527 | 528 | 529 | showinfo() 530 | { 531 | echo "┌──────────────────────────────────────────────────────────────┐" 532 | echo "│ Информация о системе │" 533 | echo "└──────────────────────────────────────────────────────────────┘" 534 | echo " CPU: $cpu_cores x $cpu_clock MHz ($cpu_model)" 535 | if [ $swap_mb -eq 0 ]; then echo " RAM: $mem_mb Mb"; else 536 | echo " RAM: $mem_mb Mb (Плюс swap $swap_mb Mb)"; fi 537 | #Определяем диск (делаем это при каждом выводе, т.к. данные меняются) 538 | hdd_total=`df | awk '(NR == 2)' | awk '{print $2}'` 539 | let "hdd_total_mb=$hdd_total / 1024" 540 | hdd_free=`df | awk '(NR == 2)' | awk '{print $4}'` 541 | let "hdd_free_mb=$hdd_free / 1024" 542 | #Определяем uptime системы (делаем это при каждом выводе) 543 | uptime=$(uptime | sed -e "s/ * / /g") #сразу берем аптайм без двойных пробелов 544 | uptime=$(echo "${uptime%,* user*}") 545 | uptime=$(echo "${uptime#*up }") 546 | echo " HDD: $hdd_total_mb Mb (свободно $hdd_free_mb Mb)" 547 | echo " ОС: $osfamily $osver2" 548 | echo " Разрядность ОС: $arc bit" 549 | echo " Версия ядра Linux: $kern" 550 | echo " Аптайм системы: $uptime" 551 | if [ ${#iface} -eq 4 ]; then #проверяем какой сетевой интерфейс. Если мы его не определили, то вообще не выводим эту строку 552 | echo " Ваш IP на интерфейсе $iface: $ip"; fi #длина строки подобрана под eth0 553 | if [ ${#iface} -eq 8 ]; then 554 | echo " Ваш IP на интерфейсе $iface: $ip"; fi #длина строки подобрана под venet0:0 555 | echo "Ваш внешний IP определяется как: $ipext" 556 | } 557 | 558 | about() 559 | { 560 | echo "Данную утилиту написал Павел Евтихов (aka Brizovsky). 561 | г. Екатеринбург, Россия. 562 | 2016-2019 год. 563 | " 564 | } 565 | changelog() 566 | { 567 | wget $updpath/changelog.txt -r -N -nd 568 | cat changelog.txt 569 | br 570 | } 571 | 572 | log() 573 | { 574 | changelog 575 | } 576 | 577 | release() #функция принудительной загрузки релиза 578 | { 579 | wget https://raw.githubusercontent.com/Brizovsky/Breeze-Easy-Shell/master/$filename -r -N -nd --no-check-certificate 580 | chmod 777 $filename 581 | sh $0 582 | exit 583 | } 584 | 585 | beta() #функция принудительной загрузки Бета-версии 586 | { 587 | wget https://raw.githubusercontent.com/Brizovsky/Breeze-Easy-Shell/beta/$filename -r -N -nd --no-check-certificate 588 | chmod 777 $filename 589 | sh $0 590 | exit 591 | } 592 | 593 | #----------------- 594 | #задаем переменные 595 | #----------------- 596 | #Задаём переменную с нужным количеством пробелов, чтобы меню не разъезжалось от смены версии 597 | title_full_len=${#title_full} 598 | title_len=${#title} 599 | space="" 600 | let "space_len=43-$title_full_len" 601 | while [ "${#space}" -le $space_len ] 602 | do 603 | space=$space" " 604 | done 605 | 606 | space2="" 607 | let "space2_len=30-$title_len" 608 | while [ "${#space2}" -le $space2_len ] 609 | do 610 | space2=$space2" " 611 | done 612 | 613 | filename='breeze.sh' 614 | #updpath='https://raw.githubusercontent.com/Brizovsky/Breeze-Easy-Shell/master' #релиз 615 | updpath='https://raw.githubusercontent.com/Brizovsky/Breeze-Easy-Shell/beta' #бета 616 | 617 | #определяем сколько RAM 618 | mem_total=`cat /proc/meminfo | grep MemTotal | awk '{print $2}'` 619 | swap_total=`cat /proc/meminfo | grep SwapTotal | awk '{print $2}'` 620 | let "mem_mb=$mem_total / 1024" 621 | let "swap_mb=$swap_total / 1024" 622 | 623 | #Определяем данные процессора 624 | cpu_clock=`cat /proc/cpuinfo | grep "cpu MHz" | awk {'print $4'} | sed q` 625 | let "cpu_clock=$(printf %.0f $cpu_clock)" 626 | #cpu_cores=`cat /proc/cpuinfo | grep "cpu cores" | awk {'print $4'}` 627 | cpu_cores=`grep -o "processor" <<< "$(cat /proc/cpuinfo)" | wc -l` 628 | cpu_model=`cat /proc/cpuinfo | grep "model name" | sed q | sed -e "s/model name//" | sed -e "s/://" | sed -e 's/^[ \t]*//' | sed -e "s/(tm)/™/g" | sed -e "s/(C)/©/g" | sed -e "s/(R)/®/g"` 629 | #уберём двойные пробелы: 630 | cpu_model=`echo $cpu_model | sed -e "s/ * / /g"` 631 | 632 | #Определяем ОС 633 | if [ "$(cat /etc/redhat-release | awk {'print $2'})" == "release" ] 634 | then 635 | osfamily=$(cat /etc/redhat-release | awk {'print $1'}) 636 | osver2=$(cat /etc/redhat-release | awk {'print $3'}) 637 | else 638 | if [ "$(cat /etc/redhat-release | awk {'print $3'})" == "release" ] 639 | then 640 | osfamily=$(cat /etc/redhat-release | awk {'print $1'})" "$(cat /etc/redhat-release | awk {'print $2'}) 641 | osver2=$(cat /etc/redhat-release | awk {'print $4'}) 642 | else osver2=0 643 | fi 644 | fi 645 | osver1=`echo $osver2 | cut -c 1` #берём только первый символ от версии для определения поколения 646 | if [ "$osfamily" == "CentOS Linux" ]; then osfamily="CentOS"; fi 647 | 648 | #Определяем разрядность ОС 649 | arc=`arch` 650 | if [ "$arc" == "x86_64" ]; then arc=64 #В теории возможно обозначение "IA-64" и "AMD64", но я не встречал 651 | else arc=32 #Чтобы не перебирать все возможные IA-32, x86, i686, i586 и т.д. 652 | fi 653 | 654 | #определяем версию ядра Linux 655 | kern=`uname -r | sed -e "s/-/ /" | awk {'print $1'}` 656 | 657 | menu=" 658 | ┌─────────────────────────────────────────────┐ 659 | │ $title $ver$space│ 660 | ├───┬─────────────────────────────────────────┤ 661 | │ 1 │ Информация о системе │ 662 | ├───┼─────────────────────────────────────────┤ 663 | │ 2 │ Работа с ОС │ 664 | ├───┼─────────────────────────────────────────┤ 665 | │ 3 │ Установить панель управления хостингом │ 666 | ├───┼─────────────────────────────────────────┤ 667 | │ 4 │ Установка и настройка VPN-сервера │ 668 | ├───┼─────────────────────────────────────────┤ 669 | │ 5 │ Работа с Proxy │ 670 | ├───┼─────────────────────────────────────────┤ 671 | │ 6 │ Работа с файлами и программами │ 672 | ├───┼─────────────────────────────────────────┤ 673 | │ 7 │ Очистка системы │ 674 | ├───┼─────────────────────────────────────────┤ 675 | │ 8 │ Терминал │ 676 | ├───┼─────────────────────────────────────────┤ 677 | │ 9 │ Обновить $title$space2│ 678 | ├───┼─────────────────────────────────────────┤ 679 | │ 0 │ Выход │ 680 | └───┴─────────────────────────────────────────┘ 681 | " 682 | menu1=" 683 | ● Информация о системе: 684 | │ 685 | │ ┌───┬──────────────────────────────────────┐ 686 | ├─┤ 1 │ Показать общую информацию о системе │ 687 | │ ├───┼──────────────────────────────────────┤ 688 | ├─┤ 2 │ Провести тест скорости CPU │ 689 | │ ├───┼──────────────────────────────────────┤ 690 | ├─┤ 3 │ Провести тест скорости диска │ 691 | │ ├───┼──────────────────────────────────────┤ 692 | ├─┤ 4 │ Описание теста производительности │ 693 | │ ├───┼──────────────────────────────────────┤ 694 | └─┤ 0 │ Выйти на уровень вверх │ 695 | └───┴──────────────────────────────────────┘ 696 | " 697 | menu2=" 698 | ● Работа с ОС: 699 | │ 700 | │ ┌───┬──────────────────────────────────────┐ 701 | ├─┤ 1 │ Добавить внешние репозитории │ 702 | │ ├───┼──────────────────────────────────────┤ 703 | ├─┤ 2 │ Обновить ОС │ 704 | │ ├───┼──────────────────────────────────────┤ 705 | ├─┤ 3 │ Установить популярные приложения │ 706 | │ ├───┼──────────────────────────────────────┤ 707 | ├─┤ 4 │ Антивирус │ 708 | │ ├───┼──────────────────────────────────────┤ 709 | ├─┤ 5 │ Firewall (iptables) │ 710 | │ ├───┼──────────────────────────────────────┤ 711 | ├─┤ 6 │ Планировщик задач (cron) │ 712 | │ ├───┼──────────────────────────────────────┤ 713 | ├─┤ 7 │ Установить часовой пояс │ 714 | │ ├───┼──────────────────────────────────────┤ 715 | ├─┤ 8 │ Сменить пароль текущего пользователя │ 716 | │ ├───┼──────────────────────────────────────┤ 717 | └─┤ 0 │ Выйти на уровень вверх │ 718 | └───┴──────────────────────────────────────┘ 719 | " 720 | menu24=" 721 | ● Работа с ОС: 722 | │ 723 | └─● Антивирус: 724 | │ 725 | │ ┌───┬───────────────────────────┐ 726 | ├─┤ 1 │ Установить Антивирус │ 727 | │ ├───┼───────────────────────────┤ 728 | ├─┤ 2 │ Обновить антивирус │ 729 | │ ├───┼───────────────────────────┤ 730 | ├─┤ 3 │ Проверить папку на вирусы │ 731 | │ ├───┼───────────────────────────┤ 732 | ├─┤ 4 │ Удалить антивирус │ 733 | │ ├───┼───────────────────────────┤ 734 | └─┤ 0 │ Выйти на уровень вверх │ 735 | └───┴───────────────────────────┘ 736 | " 737 | menu25=" 738 | ● Работа с ОС: 739 | │ 740 | └─● Firewall (iptables): 741 | │ 742 | │ ┌───┬───────────────────────────────────────────────┐ 743 | ├─┤ 1 │ Включить firewall (помощник настройки) │ 744 | │ ├───┼───────────────────────────────────────────────┤ 745 | ├─┤ 2 │ Отключить firewall (рарешить все подключения) │ 746 | │ ├───┼───────────────────────────────────────────────┤ 747 | ├─┤ 3 │ Временно выключить firewall │ 748 | │ ├───┼───────────────────────────────────────────────┤ 749 | ├─┤ 4 │ Перезапустить firewall │ 750 | │ ├───┼───────────────────────────────────────────────┤ 751 | ├─┤ 5 │ Открыть порт в iptables │ 752 | │ ├───┼───────────────────────────────────────────────┤ 753 | ├─┤ 6 │ Закрыть ранее открытый порт в iptables │ 754 | │ ├───┼───────────────────────────────────────────────┤ 755 | ├─┤ 7 │ Посмотреть текущую политику firewall │ 756 | │ ├───┼───────────────────────────────────────────────┤ 757 | ├─┤ 8 │ Сохранить текущие правила firewall │ 758 | │ ├───┼───────────────────────────────────────────────┤ 759 | └─┤ 0 │ Выйти на уровень вверх │ 760 | └───┴───────────────────────────────────────────────┘ 761 | " 762 | menu26=" 763 | ● Работа с ОС: 764 | │ 765 | └─● Планировщик задач (cron): 766 | │ 767 | │ ┌───┬─────────────────────────────────────────┐ 768 | ├─┤ 1 │ Проверить запущен ли планировщик (cron) │ 769 | │ ├───┼─────────────────────────────────────────┤ 770 | ├─┤ 2 │ Перезапустить cron │ 771 | │ ├───┼─────────────────────────────────────────┤ 772 | ├─┤ 3 │ Добавить задание в планировщик (cron) │ 773 | │ ├───┼─────────────────────────────────────────┤ 774 | ├─┤ 4 │ Открыть файл с заданиями cron │ 775 | │ ├───┼─────────────────────────────────────────┤ 776 | ├─┤ 5 │ Выключить планировщик (cron) │ 777 | │ ├───┼─────────────────────────────────────────┤ 778 | └─┤ 0 │ Выйти на уровень вверх │ 779 | └───┴─────────────────────────────────────────┘ 780 | " 781 | menu27=" 782 | ● Работа с ОС: 783 | │ 784 | └─● Установить часовой пояс: 785 | │ 786 | │ ┌───┬────────────────────────┐ 787 | ├─┤ 1 │ Калининград │ 788 | │ ├───┼────────────────────────┤ 789 | ├─┤ 2 │ Москва │ 790 | │ ├───┼────────────────────────┤ 791 | ├─┤ 3 │ Самара │ 792 | │ ├───┼────────────────────────┤ 793 | ├─┤ 4 │ Екатеринбург │ 794 | │ ├───┼────────────────────────┤ 795 | ├─┤ 5 │ Новосибирск │ 796 | │ ├───┼────────────────────────┤ 797 | ├─┤ 6 │ Красноярск │ 798 | │ ├───┼────────────────────────┤ 799 | ├─┤ 7 │ Иркутск │ 800 | │ ├───┼────────────────────────┤ 801 | ├─┤ 8 │ Владивосток │ 802 | │ ├───┼────────────────────────┤ 803 | ├─┤ 9 │ Камчатка │ 804 | │ ├───┼────────────────────────┤ 805 | └─┤ 0 │ Выйти на уровень вверх │ 806 | └───┴────────────────────────┘ 807 | " 808 | menu3=" 809 | ● Установить панель управления хостингом: 810 | │ 811 | │ ┌───┬────────────────────────┐ 812 | ├─┤ 1 │ ISPmanager 4 │ 813 | │ ├───┼────────────────────────┤ 814 | ├─┤ 2 │ ISPmanager 5 │ 815 | │ ├───┼────────────────────────┤ 816 | ├─┤ 3 │ Brainy CP │ 817 | │ ├───┼────────────────────────┤ 818 | ├─┤ 4 │ Vesta CP │ 819 | │ ├───┼────────────────────────┤ 820 | ├─┤ 5 │ Webuzo │ 821 | │ ├───┼────────────────────────┤ 822 | ├─┤ 6 │ CentOS Web Panel (CWP) │ 823 | │ ├───┼────────────────────────┤ 824 | ├─┤ 7 │ ZPanel CP │ 825 | │ ├───┼────────────────────────┤ 826 | ├─┤ 8 │ Ajenti │ 827 | │ ├───┼────────────────────────┤ 828 | └─┤ 0 │ Выйти на уровень вверх │ 829 | └───┴────────────────────────┘ 830 | " 831 | menu4=" 832 | ● Установка и настройка VPN-сервера: 833 | │ 834 | │ ┌───┬────────────────────────────────────────────────┐ 835 | ├─┤ 1 │ Установить VPN-сервер (pptpd) │ 836 | │ ├───┼────────────────────────────────────────────────┤ 837 | ├─┤ 2 │ Добавить пользователей VPN │ 838 | │ ├───┼────────────────────────────────────────────────┤ 839 | ├─┤ 3 │ Открыть файл с логинами/паролями пользователей │ 840 | │ ├───┼────────────────────────────────────────────────┤ 841 | ├─┤ 4 │ Добавить правила для работы VPN в IPTables │ 842 | │ ├───┼────────────────────────────────────────────────┤ 843 | ├─┤ 5 │ Удалить VPN-сервер │ 844 | │ ├───┼────────────────────────────────────────────────┤ 845 | └─┤ 0 │ Выйти на уровень вверх │ 846 | └───┴────────────────────────────────────────────────┘ 847 | " 848 | menu5=" 849 | ● Работа с Proxy: 850 | │ 851 | │ ┌───┬────────────────────────────────────────────────┐ 852 | ├─┤ 1 │ Установить Proxy-сервер (на базе Squid) │ 853 | │ ├───┼────────────────────────────────────────────────┤ 854 | ├─┤ 2 │ Удалить Proxy (Squid) │ 855 | │ ├───┼────────────────────────────────────────────────┤ 856 | ├─┤ 3 │ Поменять MTU для интерфейса │ 857 | │ ├───┼────────────────────────────────────────────────┤ 858 | ├─┤ 4 │ Открыть файл настроек Squid │ 859 | │ ├───┼────────────────────────────────────────────────┤ 860 | ├─┤ 5 │ Добавить пользователя Proxy │ 861 | │ ├───┼────────────────────────────────────────────────┤ 862 | ├─┤ 6 │ Открыть файл с логинами/паролями пользователей │ 863 | │ ├───┼────────────────────────────────────────────────┤ 864 | ├─┤ 7 │ Перезапустить сервис Proxy (Squid) │ 865 | │ ├───┼────────────────────────────────────────────────┤ 866 | └─┤ 0 │ Выйти на уровень вверх │ 867 | └───┴────────────────────────────────────────────────┘ 868 | " 869 | menu6=" 870 | ● Работа с файлами и программами: 871 | │ 872 | │ ┌───┬─────────────────────────────────────────────────────┐ 873 | ├─┤ 1 │ Установить какую-либо программу │ 874 | │ ├───┼─────────────────────────────────────────────────────┤ 875 | ├─┤ 2 │ Удалить какую-либо программу │ 876 | │ ├───┼─────────────────────────────────────────────────────┤ 877 | ├─┤ 3 │ Удалить какую-либо программу со всеми зависимостями │ 878 | │ ├───┼─────────────────────────────────────────────────────┤ 879 | ├─┤ 4 │ Посмотреть сколько свободного места на диске │ 880 | │ ├───┼─────────────────────────────────────────────────────┤ 881 | └─┤ 0 │ Выйти на уровень вверх │ 882 | └───┴─────────────────────────────────────────────────────┘ 883 | " 884 | menu7=" 885 | ● Очистка системы: 886 | │ 887 | │ ┌───┬─────────────────────────────────────────────────┐ 888 | ├─┤ 1 │ Удалить старые установочные пакеты (кэш yum) │ 889 | │ ├───┼─────────────────────────────────────────────────┤ 890 | ├─┤ 2 │ Удалить логи Apache, Nginx, Squid и прочие логи │ 891 | │ ├───┼─────────────────────────────────────────────────┤ 892 | ├─┤ 3 │ Удалить логи Apache конкретного пользователя │ 893 | │ ├───┼─────────────────────────────────────────────────┤ 894 | ├─┤ 4 │ Посмотреть сколько свободного места на диске │ 895 | │ ├───┼─────────────────────────────────────────────────┤ 896 | └─┤ 0 │ Выйти на уровень вверх │ 897 | └───┴─────────────────────────────────────────────────┘ 898 | " 899 | 900 | #----------------- 901 | #Интерфейс 902 | #----------------- 903 | repeat=true 904 | chosen=0 905 | chosen2=0 906 | while [ "$repeat" = "true" ] #выводим меню, пока не надо выйти 907 | do 908 | 909 | #пошёл вывод 910 | if [ $chosen -eq 0 ]; then #выводим меню, только если ещё никуда не заходили 911 | menu 912 | myread_dig pick 913 | else 914 | pick=$chosen 915 | fi 916 | 917 | case "$pick" in 918 | 1) #Информация о системе 919 | chosen=1 920 | my_clear 921 | echo "$title" 922 | echo "$menu1" 923 | myread_dig pick 924 | case "$pick" in 925 | 1) #Показать общую информацию о системе 926 | my_clear 927 | showinfo 928 | br 929 | echo "Вычисляем Ваш IP на интерфейсе..." 930 | whatismyip 931 | my_clear 932 | showinfo 933 | br 934 | echo "Вычисляем Ваш внешний IP..." 935 | whatismyipext 936 | my_clear 937 | showinfo 938 | br 939 | wait 940 | ;; 941 | 2) #Провести тест скорости CPU 942 | my_clear 943 | installed sysbench 944 | if [ $exist == false ]; then 945 | echo "Сейчас будет произведена установка программы sysbench. Но для её установки нужно наличие добавленного репозитория EPEL." 946 | echo "Если вы уже добавляли репозитории сами или с помощью этой программы, то от вас ничего не требуется. В противном случае, их нужно добавить." 947 | echo "Добавить репозитории?" 948 | myread_yn pick 949 | case "$pick" in 950 | y|Y) 951 | repo 952 | echo "Установка репозиториев завершена." 953 | ;; 954 | esac 955 | myinstall sysbench 956 | fi 957 | my_clear 958 | echo "Сейчас будет произведен тест скорости процессора. Ждите..." 959 | bench_cpu 960 | br 961 | echo "Ваш процессор выполнил $totalspeed вычислений в секунду. Количество используемых потоков: $threads" 962 | echo "Мощность вашего процессора соответствует $powerpercent% от эталонного одноядерного процессора." 963 | if [ $cpu_cores -gt 1 ]; then echo "В пересчете на одно ядро мощность вашего процессора составляет $powerpercorepercent% от эталонного."; fi #пересчет на 1 ядро выводим только если ядер больше одного 964 | br 965 | wait 966 | ;; 967 | 3) #Провести тест скорости диска 968 | my_clear 969 | echo "Сейчас будет произведен тест скорости диска. Ждите..." 970 | br 971 | bench_hdd 972 | br 973 | echo "Тест завершен." 974 | br 975 | wait 976 | ;; 977 | 4) #Описание теста производительности 978 | my_clear 979 | echo "Для теста производительности процессора используется утилита sysbench." 980 | echo "В ней используется 10000 проходов. Количество потоков устанавливается равным" 981 | echo "количеству ядер вашего процессора (если не удалось определить количество ядер," 982 | echo "используется однопоточный режим), а конечный результат сравнивается с эталонным" 983 | echo "процессором. За эталонный процессор были взяты виртуальные ядра хостеров Vultr и" 984 | echo "Digital Ocean, работающие на частоте 2,4 Ghz" 985 | br 986 | echo "Для теста скорости диска мы пытаемся записать на диск кусок в 64Кб 16 тысяч раз" 987 | echo "(общий объём данных 1000 Мб). Тест прогоняем трижды, показываем каждый результат" 988 | echo "по отдельности, а также среднее значение. Заодно вы сможете оценить насколько" 989 | echo "сильно \"плавает\" это значение от одного прохода к другому." 990 | br 991 | wait 992 | ;; 993 | 0) 994 | chosen=0 995 | ;; 996 | esac 997 | ;; 998 | 2) #Работа с ОС 999 | chosen=2 1000 | my_clear 1001 | if [ $chosen2 -eq 0 ]; then #выводим меню, только если ещё никуда не заходили 1002 | echo "$title" 1003 | echo "$menu2" 1004 | myread_dig pick 1005 | else 1006 | pick=$chosen2 1007 | fi 1008 | case "$pick" in 1009 | 1) #Добавить внешние репозитории 1010 | repo 1011 | br 1012 | echo "Установка репозиториев завершена." 1013 | br 1014 | wait 1015 | ;; 1016 | 2) #Обновить ОС 1017 | echo "Начинаем обновление ОС..." 1018 | yum update -y 1019 | echo "ОС была успешно обновлена." 1020 | wait 1021 | ;; 1022 | 3) #Установить популярные приложения 1023 | echo "Сечас будут установлены следующие программы:" 1024 | echo "mc - Midnigh Commander (файловый менеджер)" 1025 | echo "htop (более продвинутый мониторинг ресурсов)" 1026 | echo "nano (простейший текстовый редактор)" 1027 | if [ $osver1 -ne 5 ]; then echo "аддон для yum, который позволяет удалять программы со всеми зависимостями"; fi #Не для CentOS 5 1028 | if [ $osver1 -eq 7 ]; then echo "net-tools (чтобы вернуть команду ifconfig)"; fi #Только для CentOS 7 1029 | br 1030 | wait 1031 | echo "Начинаем установку программ..." 1032 | yum -y install mc 1033 | yum -y install htop 1034 | yum -y install nano 1035 | if [ $osver1 -ne 5 ]; then yum -y install yum-remove-with-leaves; fi #Не для CentOS 5 1036 | if [ $osver1 -eq 7 ]; then yum -y install net-tools; fi #Только для CentOS 7 1037 | br 1038 | echo "Программы были установлены." 1039 | wait 1040 | ;; 1041 | 4) #Антивирус 1042 | chosen2=4 1043 | my_clear 1044 | echo "$title" 1045 | echo "$menu24" 1046 | myread_dig pick 1047 | case "$pick" in 1048 | 1) #Установить Антивирус 1049 | echo "сейчас будет установлен антивирус ClamAV." 1050 | wait 1051 | yum -y install clamav clamd 1052 | br 1053 | echo "Антивирус был установлен. Сейчас обновим антивирусные базы" 1054 | br 1055 | freshclam 1056 | br 1057 | echo "Базы были обновлены." 1058 | br 1059 | echo "Сейчас мы попробуем запустить этот сервис (демон)." 1060 | chkconfig --levels 235 clamd on 1061 | service clamd restart 1062 | br 1063 | echo "Всё готово!" 1064 | wait 1065 | ;; 1066 | 2) #Обновить антивирус 1067 | installed clamscan 1068 | if [ $exist == true ]; then 1069 | freshclam 1070 | br 1071 | wait 1072 | else 1073 | echo "У вас не установлен антивирус." 1074 | wait 1075 | fi 1076 | ;; 1077 | 3) #Проверить папку на вирусы 1078 | installed clamscan 1079 | if [ $exist == true ]; then 1080 | echo 'Укажите папку, которую нужно просканировать (введите "/", если весь сервер):' 1081 | read scandir 1082 | echo "Нужно ли сохранить лог сканирования в файл?" 1083 | myread_yn avlog 1084 | case "$avlog" in 1085 | y|Y) 1086 | echo 'Укажите путь для сохранения лога сканирования (начиная с "/")' 1087 | read avlogdir 1088 | echo "Сканируем..." 1089 | br 1090 | clamscan $scandir -r -i --log=$avlogdir 1091 | ;; 1092 | n|N|т|Т) 1093 | echo "Сканируем..." 1094 | br 1095 | clamscan $scandir -r 1096 | ;; 1097 | *) 1098 | echo "Неправильный выбор" 1099 | wait 1100 | ;; 1101 | esac 1102 | br 1103 | wait 1104 | else 1105 | echo "У вас не установлен антивирус." 1106 | wait 1107 | fi 1108 | ;; 1109 | 4) #Удалить антивирус 1110 | uninstall clamav* 1111 | br 1112 | wait 1113 | ;; 1114 | 0) 1115 | chosen2=0 1116 | ;; 1117 | esac 1118 | ;; 1119 | 5) #Firewall (iptables) 1120 | chosen2=5 1121 | my_clear 1122 | echo "$title" 1123 | echo "$menu25" 1124 | myread_dig pick 1125 | case "$pick" in 1126 | 1) #Включить firewall (помощник настройки) 1127 | my_clear 1128 | echo "Сейчас будут удалены все правила iptables (если они были), установлен запрет" 1129 | echo "на обработку всех входящих и исходящих пакетов, кроме внутреннего обмена" 1130 | echo "пакетами (localhost), SSH-подключения (22 порт) и всех связанных пакетов" 1131 | echo "(состояние RELATED и ESTABLISHED). А далее вам будет предложен вариант открыть" 1132 | echo "самые распространенные порты (с вашего разрешения). Продолжить?" 1133 | myread_yn ans 1134 | case "$ans" in 1135 | y|Y) 1136 | echo "Начинаем настройку iptables" 1137 | #Проверка на CentOS 7 1138 | if [ $osver1 -eq 7 ]; then 1139 | systemctl stop firewalld 1140 | systemctl mask firewalld 1141 | myinstall iptables-services | tee > /dev/null 1142 | systemctl enable iptables 1143 | fi 1144 | iptables -F 1145 | iptables -X 1146 | iptables -A INPUT -i lo -j ACCEPT 1147 | iptables -A OUTPUT -o lo -j ACCEPT 1148 | iptables -A INPUT -p tcp --dport 22 -j ACCEPT 1149 | iptables -A OUTPUT -p tcp --sport 22 -j ACCEPT 1150 | iptables -P INPUT DROP 1151 | iptables -P OUTPUT DROP 1152 | iptables -P FORWARD DROP 1153 | iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT 1154 | iptables -A OUTPUT -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT 1155 | br 1156 | echo "Готово. Хотите, чтобы этот компьютер пинговался с других компьютеров?" 1157 | myread_yn ans 1158 | case "$ans" in 1159 | y|Y) 1160 | iptables -A INPUT -p icmp --icmp-type 0 -j ACCEPT 1161 | iptables -A INPUT -p icmp --icmp-type 8 -j ACCEPT 1162 | iptables -A OUTPUT -p icmp -j ACCEPT 1163 | ;; 1164 | esac 1165 | br 1166 | echo "Часто люди на серверах открывают следующие порты:" 1167 | echo "web: 80, 443" 1168 | echo "ftp: 21" 1169 | echo "ntp: 123 (для синхронизации часов)" 1170 | echo "dns: 54" 1171 | echo "Хотите открыть их сейчас?" 1172 | myread_yn ans 1173 | case "$ans" in 1174 | y|Y) 1175 | iptables -A INPUT -p tcp --dport 21 -j ACCEPT 1176 | iptables -A OUTPUT -p tcp --dport 21 -j ACCEPT 1177 | iptables -A OUTPUT -p tcp --sport 21 -j ACCEPT 1178 | iptables -A INPUT -p tcp --dport 80 -j ACCEPT 1179 | iptables -A OUTPUT -p tcp --dport 80 -j ACCEPT 1180 | iptables -A OUTPUT -p tcp --sport 80 -j ACCEPT 1181 | iptables -A INPUT -p tcp --dport 443 -j ACCEPT 1182 | iptables -A OUTPUT -p tcp --dport 443 -j ACCEPT 1183 | iptables -A OUTPUT -p tcp --sport 443 -j ACCEPT 1184 | iptables -A OUTPUT -p udp --dport 53 -m state --state NEW -j ACCEPT 1185 | iptables -A OUTPUT -p udp --dport 123 -j ACCEPT 1186 | ;; 1187 | esac 1188 | br 1189 | echo "Хотите открыть порт 3128 для Proxy?" 1190 | myread_yn ans 1191 | case "$ans" in 1192 | y|Y) 1193 | iptables -A INPUT -p tcp --dport 3128 -j ACCEPT 1194 | ;; 1195 | esac 1196 | br 1197 | echo "Хотите открыть порты для VPN-сервера (PPTP)?" 1198 | myread_yn ans 1199 | case "$ans" in 1200 | y|Y) 1201 | whatismyip_full 1202 | iptables -A INPUT -p 47 -j ACCEPT 1203 | iptables -A OUTPUT -p 47 -j ACCEPT 1204 | iptables -A INPUT -p tcp --dport 1723 -j ACCEPT 1205 | iptables -A OUTPUT -p tcp --sport 1723 -j ACCEPT 1206 | iptables -t nat -I POSTROUTING -j SNAT --to $ip 1207 | iptables -A FORWARD -s 10.1.0.0/24 -j ACCEPT 1208 | iptables -A FORWARD -d 10.1.0.0/24 -j ACCEPT 1209 | ;; 1210 | esac 1211 | iptables_save 1212 | br 1213 | echo "Firewall был настроен. Остальные порты вы можете открыть самостоятельно," 1214 | echo 'воспользовавшись разделом "Открыть порт в iptables".' 1215 | wait 1216 | ;; 1217 | esac 1218 | ;; 1219 | 2) #Выключить firewall (рарешить все подключения) 1220 | echo "Сейчас будут удалены все правила iptables, после чего будут разрешены все подключения. Продолжить?" 1221 | myread_yn ans 1222 | case "$ans" in 1223 | y|Y) 1224 | iptables -F 1225 | iptables -X 1226 | iptables -P INPUT ACCEPT 1227 | iptables -P FORWARD ACCEPT 1228 | iptables -P OUTPUT ACCEPT 1229 | ;; 1230 | esac 1231 | iptables_save 1232 | br 1233 | echo "Готово. Iptables продолжает работать, но в нём разрешены все подключения." 1234 | wait 1235 | ;; 1236 | 3) #Временно выключить firewall 1237 | iptables -F 1238 | iptables -X 1239 | iptables -P INPUT ACCEPT 1240 | iptables -P FORWARD ACCEPT 1241 | iptables -P OUTPUT ACCEPT 1242 | br 1243 | echo "Готово. Были временно сброшены все правила для iptables. Сейчас проходят все" 1244 | echo "подключения. После перезагрузки сервера или перезапуска iptables всё будет" 1245 | echo "как прежде (применятся все правила, которые были до этого)." 1246 | br 1247 | wait 1248 | ;; 1249 | 4) #Перезапустить firewall 1250 | if [ $osver1 -eq 7 ]; then 1251 | myinstall iptables-services | tee > /dev/null 1252 | fi 1253 | service iptables restart 1254 | br 1255 | echo "Готово. " 1256 | wait 1257 | ;; 1258 | 5) #Открыть порт в iptables 1259 | echo "Укажите в какую сторону вы хотите открыть порт:" 1260 | echo "1) Входящие соединения (чтобы к этому серверу можно было подключиться по заданному порту)" 1261 | echo "2) Исходящие соединения (чтобы этот сервер мог подключиться к другим компьютерам по заданному порту)" 1262 | echo "3) Перенаправление пакетов (раздел FORWARD)" 1263 | myread_dig taffic_type 1264 | case "$taffic_type" in 1265 | 1) 1266 | taffic_type=in 1267 | ;; 1268 | 2) 1269 | taffic_type=out 1270 | ;; 1271 | 3) 1272 | taffic_type=fwd 1273 | ;; 1274 | *) 1275 | echo "Неправильный выбор. Аварийный выход." 1276 | wait 1277 | exit 1278 | ;; 1279 | esac 1280 | br 1281 | echo "Укажите какой порт вы хотите открыть:" 1282 | read port 1283 | br 1284 | echo "Выберите протокол, по которому его нужно открыть:" 1285 | echo "1) TCP" 1286 | echo "2) UDP" 1287 | echo "3) TCP и UDP" 1288 | myread_dig protocol 1289 | case "$protocol" in 1290 | 1) 1291 | openport $taffic_type tcp $port 1292 | ;; 1293 | 2) 1294 | openport $taffic_type udp $port 1295 | ;; 1296 | 3) 1297 | openport $taffic_type tcp $port 1298 | openport $taffic_type udp $port 1299 | ;; 1300 | *) 1301 | echo "Неправильный выбор." 1302 | ;; 1303 | esac 1304 | br 1305 | echo "Готово." 1306 | wait 1307 | ;; 1308 | 6) #Закрыть ранее открытый порт в iptables 1309 | br 1310 | iptables --list --line-numbers 1311 | br 1312 | echo "Из какого раздела вы хотите удалить правило?" 1313 | echo "1) Входящие соединения (раздел INPUT)" 1314 | echo "2) Исходящие соединения (раздел OUTPUT)" 1315 | echo "3) Перенаправление пакетов (раздел FORWARD)" 1316 | myread_dig section 1317 | case "$section" in 1318 | 1) 1319 | section=INPUT 1320 | ;; 1321 | 2) 1322 | section=OUTPUT 1323 | ;; 1324 | 3) 1325 | section=FORWARD 1326 | ;; 1327 | *) 1328 | echo "Неправильный выбор. Аварийный выход." 1329 | wait 1330 | exit 1331 | ;; 1332 | esac 1333 | echo "Правило под каким номером нужно удалить?" 1334 | myread_dig rule_number 1335 | iptables -D $section $rule_number 1336 | iptables_save 1337 | br 1338 | echo "Правило удалено" 1339 | wait 1340 | ;; 1341 | 7) #Посмотреть текущую политику firewall 1342 | iptables -nvL 1343 | br 1344 | wait 1345 | ;; 1346 | 8) #Сохранить текущие правила firewall 1347 | iptables_save 1348 | br 1349 | echo "Готово." 1350 | wait 1351 | ;; 1352 | 0) 1353 | chosen2=0 1354 | ;; 1355 | esac 1356 | ;; 1357 | 6) #Планировщик задач (cron) 1358 | chosen2=6 1359 | my_clear 1360 | echo "$title" 1361 | echo "$menu26" 1362 | myread_dig pick 1363 | case "$pick" in 1364 | 1) #Проверить запущен ли планировщик (cron) 1365 | installed crond 1366 | if [ $exist == false ]; then 1367 | echo "Сервис Cron не установлен. Установить?" 1368 | myread_yn pick 1369 | case "$pick" in 1370 | y|Y) 1371 | case "$osver1" in 1372 | 4|5|6) 1373 | myinstall vixie-cron crontabs 1374 | ;; 1375 | 7) 1376 | myinstall cronie 1377 | ;; 1378 | esac 1379 | br 1380 | echo "Установка завершена, продолжаем работу..." 1381 | wait 1382 | my_clear 1383 | ;; 1384 | esac 1385 | fi 1386 | if [[ -n $(service crond status | grep "is running") ]]; then 1387 | echo "Планировщик Cron работает..." 1388 | wait 1389 | else 1390 | echo "Планировщик Cron в данный момент не запущен. Попробовать запустить?" 1391 | myread_yn pick 1392 | case "$pick" in 1393 | y|Y) 1394 | service crond start 1395 | br 1396 | echo "Готово. Хотите добавить Cron в автозагрузку, чтобы он запускался после каждой перезагрузки?" 1397 | myread_yn pick 1398 | case "$pick" in 1399 | y|Y) 1400 | echo "Добавляем..." 1401 | chkconfig crond on 1402 | echo "Готово." 1403 | br 1404 | wait 1405 | ;; 1406 | esac 1407 | ;; 1408 | esac 1409 | fi 1410 | ;; 1411 | 2) #Перезапустить cron 1412 | service crond restart 1413 | br 1414 | wait 1415 | ;; 1416 | 3) #Добавить задание в планировщик (cron) 1417 | my_clear 1418 | echo "Введите команду, которую должен выполнять планировщик:" 1419 | read cron_task 1420 | br 1421 | echo "Выберите интервал, с которым должна выполняться эта задача:" 1422 | echo "1) При каждой загрузке системы" 1423 | echo "2) Один или несколько раз в час" 1424 | echo "3) Один или несколько раз в день" 1425 | echo "4) Один раз в неделю" 1426 | echo "5) Один раз в месяц" 1427 | echo "0) Не нужно выполнять, я передумал" 1428 | myread_dig pick 1429 | case "$pick" in 1430 | 1) 1431 | echo "@reboot $cron_task" >> /var/spool/cron/$(whoami) 1432 | echo "Готово. Задание будет выполняться после каждой загрузки системы." 1433 | ;; 1434 | 2) 1435 | br 1436 | echo "Выберите интервал" 1437 | echo "1) Каждый час" 1438 | echo "2) Два раза в час (каждые 30 минут)" 1439 | echo "3) Три раза в час (каждые 20 минут)" 1440 | echo "4) Четыре раза в час (каждые 15 минут)" 1441 | echo "5) Шесть раз в час (каждые 10 минут)" 1442 | echo "6) Двенадцать раз в час (каждые 5 минут)" 1443 | echo "7) Тридцать раз в час (каждые 2 минуты)" 1444 | echo "8) Шестьдесят раз в час (каждую минуту)" 1445 | echo "0) Не нужно выполнять, я передумал" 1446 | myread_dig pick 1447 | case "$pick" in 1448 | 1) 1449 | echo "0 * * * * $cron_task" >> /var/spool/cron/$(whoami) # @hourly 1450 | echo "Готово. Задание будет выполняться в 0 минут каждого часа." 1451 | ;; 1452 | 2) 1453 | echo "*/30 * * * * $cron_task" >> /var/spool/cron/$(whoami) 1454 | echo "Готово. Задание будет выполняться каждые 30 минут" 1455 | ;; 1456 | 3) 1457 | echo "*/20 * * * * $cron_task" >> /var/spool/cron/$(whoami) 1458 | echo "Готово. Задание будет выполняться каждые 20 минут" 1459 | ;; 1460 | 4) 1461 | echo "*/15 * * * * $cron_task" >> /var/spool/cron/$(whoami) 1462 | echo "Готово. Задание будет выполняться каждые 15 минут" 1463 | ;; 1464 | 5) 1465 | echo "*/10 * * * * $cron_task" >> /var/spool/cron/$(whoami) 1466 | echo "Готово. Задание будет выполняться каждые 10 минут" 1467 | ;; 1468 | 6) 1469 | echo "*/5 * * * * $cron_task" >> /var/spool/cron/$(whoami) 1470 | echo "Готово. Задание будет выполняться каждые 5 минут" 1471 | ;; 1472 | 7) 1473 | echo "*/2 * * * * $cron_task" >> /var/spool/cron/$(whoami) 1474 | echo "Готово. Задание будет выполняться каждые 2 минуты" 1475 | ;; 1476 | 8) 1477 | echo "* * * * * $cron_task" >> /var/spool/cron/$(whoami) 1478 | echo "Готово. Задание будет выполняться каждую минуту" 1479 | ;; 1480 | 0) 1481 | ;; 1482 | *) 1483 | echo "Неправильный выбор..." 1484 | ;; 1485 | esac 1486 | ;; 1487 | 3) 1488 | br 1489 | echo "Выберите интервал" 1490 | echo "1) Каждый день (можно выбрать в какой час)" 1491 | echo "2) Два раза в день (каждые 12 часов)" 1492 | echo "3) Три раза в день (каждые 8 часов)" 1493 | echo "4) Четыре раза в день (каждые 6 часов)" 1494 | echo "5) Шесть раз в день (каждые 4 часа)" 1495 | echo "6) Двенадцать раз в день (каждые 2 часа)" 1496 | echo "0) Не нужно выполнять, я передумал" 1497 | myread_dig pick 1498 | case "$pick" in 1499 | 1) 1500 | br 1501 | echo "Укажите в какой час запускать задание (0-23)" 1502 | read temp 1503 | let temp2=$temp+0 1504 | if [[ $temp2 -gt 0 && $temp2 -le 23 ]]; then #введён правильно 1505 | echo "0 $temp * * * $cron_task" >> /var/spool/cron/$(whoami) 1506 | echo "Готово. Задание будет выполняться каждый $temp-й час" 1507 | else #возможно введён неправильно 1508 | if [[ "$temp" = "0" ]]; then #всё-таки введён правильно 1509 | echo "0 $temp * * * $cron_task" >> /var/spool/cron/$(whoami) 1510 | echo "Готово. Задание будет выполняться каждый $temp-й час" 1511 | else #точно введён неправильно 1512 | echo "Неправильно указали час" 1513 | fi 1514 | fi 1515 | ;; 1516 | 2) 1517 | echo "0 */12 * * * $cron_task" >> /var/spool/cron/$(whoami) 1518 | echo "Готово. Задание будет выполняться каждые 12 часов" 1519 | ;; 1520 | 3) 1521 | echo "0 */8 * * * $cron_task" >> /var/spool/cron/$(whoami) 1522 | echo "Готово. Задание будет выполняться каждые 8 часов" 1523 | ;; 1524 | 4) 1525 | echo "0 */6 * * * $cron_task" >> /var/spool/cron/$(whoami) 1526 | echo "Готово. Задание будет выполняться каждые 6 часов" 1527 | ;; 1528 | 5) 1529 | echo "0 */4 * * * $cron_task" >> /var/spool/cron/$(whoami) 1530 | echo "Готово. Задание будет выполняться каждые 4 часа" 1531 | ;; 1532 | 6) 1533 | echo "0 */2 * * * $cron_task" >> /var/spool/cron/$(whoami) 1534 | echo "Готово. Задание будет выполняться каждые 2 часа" 1535 | ;; 1536 | 0) 1537 | ;; 1538 | *) 1539 | echo "Неправильный выбор..." 1540 | ;; 1541 | esac 1542 | ;; 1543 | 4) 1544 | br 1545 | echo "Выберите день недели, в который надо запускать задание" 1546 | echo "1) Понедельник" 1547 | echo "2) Вторник" 1548 | echo "3) Среда" 1549 | echo "4) Четверг" 1550 | echo "5) Пятница" 1551 | echo "6) Суббота" 1552 | echo "7) Воскресенье" 1553 | echo "0) Не нужно выполнять, я передумал" 1554 | myread_dig pick 1555 | case "$pick" in 1556 | 1|2|3|4|5|6|7) 1557 | echo "0 4 * * $pick $cron_task" >> /var/spool/cron/$(whoami) 1558 | case "$pick" in 1559 | 1) day="каждый понедельник" 1560 | ;; 1561 | 2) day="каждый вторник" 1562 | ;; 1563 | 3) day="каждую среду" 1564 | ;; 1565 | 4) day="каждый четверг" 1566 | ;; 1567 | 5) day="каждую пятницу" 1568 | ;; 1569 | 6) day="каждую субботу" 1570 | ;; 1571 | 7) day="каждое воскресенье" 1572 | ;; 1573 | esac 1574 | echo "Готово. Задание будет выполняться $day в 4 часа утра." 1575 | ;; 1576 | 0) 1577 | ;; 1578 | *) 1579 | echo "Неправильный выбор..." 1580 | ;; 1581 | esac 1582 | ;; 1583 | 5) 1584 | br 1585 | echo "Укажите в какой день месяца запускать задание" 1586 | read temp 1587 | let temp=$temp+0 1588 | if [[ $temp -gt 0 && $temp -le 31 ]]; then #введён правильно 1589 | echo "0 4 $temp * * $cron_task" >> /var/spool/cron/$(whoami) 1590 | echo "Готово. Задание будет выполняться каждое $temp-ое часло каждого месяца в 4 часа утра." 1591 | else # введён неправильно 1592 | echo "Неправильно выбрано число" 1593 | fi 1594 | ;; 1595 | 0) 1596 | ;; 1597 | *) 1598 | echo "Неправильный выбор..." 1599 | ;; 1600 | esac 1601 | service crond reload | tee > /dev/null 1602 | br 1603 | wait 1604 | ;; 1605 | 4) #Открыть файл с заданиями cron 1606 | edit /var/spool/cron/$(whoami) 1607 | ;; 1608 | 5) #Выключить планировщик (cron) 1609 | echo "Планировщик не рекомендуется отключать. Вы уверены что хотите отключить его?" 1610 | myread_yn pick 1611 | case "$pick" in 1612 | y|Y) 1613 | br 1614 | service crond stop 1615 | br 1616 | echo "Планировщик был выключен. Если он стоял в автозагрузке, то он вновь будет запущен после перезагрузки системы" 1617 | br 1618 | wait 1619 | ;; 1620 | esac 1621 | ;; 1622 | 0) #Выйти на уровень вверх 1623 | chosen2=0 1624 | ;; 1625 | esac 1626 | ;; 1627 | 7) #Установить часовой пояс 1628 | my_clear 1629 | echo "$title" 1630 | echo "$menu27" 1631 | echo "Текущее время на этом компьютере: $(date +%H:%M). Выберите часовой пояс, который хотите установить." 1632 | myread_dig pick 1633 | case "$pick" in 1634 | 1) 1635 | settimezone Europe Kaliningrad 1636 | ;; 1637 | 2) 1638 | settimezone Europe Moscow 1639 | ;; 1640 | 3) 1641 | settimezone Europe Samara 1642 | ;; 1643 | 4) 1644 | settimezone Asia Yekaterinburg 1645 | ;; 1646 | 5) 1647 | settimezone Asia Novosibirsk 1648 | ;; 1649 | 6) 1650 | settimezone Asia Krasnoyarsk 1651 | ;; 1652 | 7) 1653 | settimezone Asia Irkutsk 1654 | ;; 1655 | 8) 1656 | settimezone Asia Vladivostok 1657 | ;; 1658 | 9) 1659 | settimezone Asia Kamchatka 1660 | ;; 1661 | 0) 1662 | ;; 1663 | *) 1664 | echo "Неправильный выбор." 1665 | wait 1666 | esac 1667 | ;; 1668 | 8) #Сменить пароль текущего пользователя 1669 | passwd 1670 | br 1671 | wait 1672 | ;; 1673 | 0) 1674 | chosen=0 1675 | ;; 1676 | *) 1677 | echo "Неправильный выбор" 1678 | wait 1679 | ;; 1680 | esac 1681 | ;; 1682 | 3) #Установить панель управления хостингом 1683 | chosen=3 1684 | my_clear 1685 | echo "$title" 1686 | echo "$menu3" 1687 | myread_dig pick 1688 | case "$pick" in 1689 | 1) #ISPmanager 4 1690 | my_clear 1691 | echo 'Панель управления "ISPManager 4"' 1692 | echo 'Поддержка ОС: CentOS | RHEL | Debian | Ubuntu' 1693 | echo 'Системные требования: минимальные не определены' 1694 | echo 'Лицензия: Панель управления ПЛАТНАЯ! Без лицензии, активированной на ваш IP даже не установится.' 1695 | echo 'Язык: Русский' 1696 | echo 'Хотите установить?' 1697 | myread_yn pick 1698 | case "$pick" in 1699 | y|Y) 1700 | wget "http://download.ispsystem.com/install.4.sh" -r -N -nd 1701 | sh install.4.sh 1702 | wait 1703 | rm -f install.4.sh 1704 | ;; 1705 | esac 1706 | ;; 1707 | 2) #ISPmanager 5 1708 | my_clear 1709 | echo 'Панель управления "ISPManager 5"' 1710 | echo 'Поддержка ОС: CentOS | RHEL | Debian | Ubuntu' 1711 | echo 'Системные требования: минимальные не определены' 1712 | echo 'Лицензия: Панель управления ПЛАТНАЯ! После установки будет Trial на 14 дней.' 1713 | echo 'Язык: Русский' 1714 | echo 'Хотите установить?' 1715 | myread_yn pick 1716 | case "$pick" in 1717 | y|Y) 1718 | wget http://cdn.ispsystem.com/install.sh -r -N -nd 1719 | sh install.sh 1720 | rm -f install.sh 1721 | ;; 1722 | esac 1723 | ;; 1724 | 3) #Brainy CP 1725 | my_clear 1726 | echo 'Панель управления "Brainy"' 1727 | echo 'Поддержка ОС: CentOS 7 64bit (и только эта ОС!)' 1728 | echo 'Системные требования (минимальные): 512 Mb RAM + 1Gb SWAP, HDD 2 Gb в корневом разделе' 1729 | echo 'Системные требования (рекомендованные): 2 Gb RAM + 2Gb SWAP, HDD 3 Gb в корневом разделе' 1730 | echo 'Лицензия: Панель абсолютно бесплатная' 1731 | echo 'Язык: Русский, Английский, Польский' 1732 | echo 'Хотите установить?' 1733 | myread_yn pick 1734 | case "$pick" in 1735 | y|Y) 1736 | yum clean all && yum install -y wget && wget http://core.brainycp.com/install.sh && bash ./install.sh 1737 | wait 1738 | ;; 1739 | esac 1740 | ;; 1741 | 4) #Vesta CP 1742 | my_clear 1743 | echo 'Панель управления "Vesta CP"' 1744 | echo 'Поддержка ОС: CentOS | RHEL | Debian | Ubuntu' 1745 | echo 'Системные требования: минимальные не определены' 1746 | echo 'Лицензия: Панель управления полностью бесплатна.' 1747 | echo 'Язык: Английский, русский' 1748 | echo 'Хотите установить?' 1749 | myread_yn pick 1750 | case "$pick" in 1751 | y|Y) 1752 | if [[ $(pidof httpd) != "" ]] #проверяем установлен ли httpd 1753 | then 1754 | echo "У вас установлен http-сервер, а Vesta CP требует установки на чистую машину." 1755 | echo 'Хотите удалить его перед установкой "Vesta CP"?' 1756 | myread_yn pick 1757 | case "$pick" in 1758 | y|Y) 1759 | service httpd stop 1760 | yum erase httpd -y 1761 | ;; 1762 | esac 1763 | fi 1764 | br 1765 | echo 'Начинаем установку...' 1766 | openport in tcp 8083 1767 | wget http://vestacp.com/pub/vst-install.sh -r -N -nd 1768 | sh vst-install.sh --force 1769 | rm -f vst-install.sh 1770 | ;; 1771 | esac 1772 | ;; 1773 | 5) #Webuzo 1774 | my_clear 1775 | echo 'Панель управления "Webuzo"' 1776 | echo 'Поддержка ОС: CentOS 5.x, 6.x | RHEL 5.x, 6.x | Scientific Linux 5.x, 6.x | Ubuntu LTS' 1777 | echo 'Системные требования: 512 Mb RAM (minimum)' 1778 | echo 'Лицензия: Панель управления имеет платную и бесплатную версию. Установите без лицензии для использования бесплатной версии.' 1779 | echo 'Язык: Английский' 1780 | echo 'Хотите установить?' 1781 | myread_yn pick 1782 | case "$pick" in 1783 | y|Y) 1784 | case "$osver1" in 1785 | 5|6) 1786 | webuzo_install 1787 | ;; 1788 | 7) 1789 | echo 'У вас CentOS 7.x. Данная панель управления не поддерживает эту версию. Выходим.' 1790 | wait 1791 | ;; 1792 | 0) 1793 | echo 'нам не удалось определить Вашу ОС. Возможно, она не поддерживается Webuzo.' 1794 | echo 'Хотите всё равно установить данную панель управления на свой страх и риск?' 1795 | myread_yn ans 1796 | case "$ans" in 1797 | y|Y) 1798 | webuzo_install 1799 | ;; 1800 | n|N|т|Т) 1801 | ;; 1802 | *) 1803 | echo 'Неправильный выбор. Выходим.' 1804 | wait 1805 | ;; 1806 | esac 1807 | ;; 1808 | esac 1809 | ;; 1810 | n|N|т|Т) 1811 | ;; 1812 | *) 1813 | echo 'Неправильный выбор. Выходим.' 1814 | wait 1815 | ;; 1816 | esac 1817 | ;; 1818 | 6) #CentOS Web Panel (CWP) 1819 | my_clear 1820 | echo 'Панель управления "CentOS Web Panel (CWP)"' 1821 | echo 'Поддержка ОС: CentOS 6.x | RHEL 6.x | CloudLinux 6.x' 1822 | echo 'Системные требования: 512 MB RAM (minimum)' 1823 | echo 'Лицензия: Панель управления полностью бесплатна.' 1824 | echo 'Язык: Английский' 1825 | br 1826 | echo "ВНИМАНИЕ! Данная панель будет устанавливаться очень долго (до 1 часа)!" 1827 | br 1828 | echo 'Хотите установить?' 1829 | myread_yn pick 1830 | case "$pick" in 1831 | y|Y) 1832 | case "$osver1" in 1833 | 5|7) 1834 | echo "У вас CentOS $osver1.x. Данная панель управления не поддерживает эту версию. Выходим." 1835 | wait 1836 | ;; 1837 | 6) 1838 | cwp_install 1839 | ;; 1840 | 0) 1841 | echo 'нам не удалось определить Вашу ОС. Возможно, она не поддерживается Webuzo.' 1842 | echo 'Хотите всё равно установить данную панель управления на свой страх и риск?' 1843 | myread_yn ans 1844 | case "$ans" in 1845 | y|Y) 1846 | cwp_install 1847 | ;; 1848 | n|N|т|Т) 1849 | ;; 1850 | *) 1851 | echo 'Неправильный выбор. Выходим.' 1852 | wait 1853 | ;; 1854 | esac 1855 | ;; 1856 | esac 1857 | ;; 1858 | n|N|т|Т) 1859 | ;; 1860 | *) 1861 | echo 'Неправильный выбор. Выходим.' 1862 | wait 1863 | ;; 1864 | esac 1865 | ;; 1866 | 7) #ZPanel CP 1867 | my_clear 1868 | echo 'Панель управления "ZPanel CP"' 1869 | echo 'Поддержка ОС: CentOS 6.x | RHEL 6.x' 1870 | echo 'Системные требования: не указаны разработчиком' 1871 | echo 'Лицензия: Панель управления полностью бесплатна.' 1872 | echo 'Язык: Английский, немецкий' 1873 | br 1874 | echo 'ВНИМАНИЕ! Поддержка данной панели давно прекращена, русификации нет. Устанавливайте на свой страх и риск.' 1875 | br 1876 | echo 'Хотите установить?' 1877 | myread_yn pick 1878 | case "$pick" in 1879 | y|Y) 1880 | case "$osver1" in 1881 | 5|7) 1882 | echo "У вас CentOS $osver1.x. Данная панель управления не поддерживает эту версию. Выходим." 1883 | wait 1884 | ;; 1885 | 6) 1886 | zpanel_install 1887 | ;; 1888 | 0) 1889 | echo 'нам не удалось определить Вашу ОС. Возможно, она не поддерживается Webuzo.' 1890 | echo 'Хотите всё равно установить данную панель управления на свой страх и риск?' 1891 | myread_yn ans 1892 | case "$ans" in 1893 | y|Y) 1894 | zpanel_install 1895 | ;; 1896 | n|N|т|Т) 1897 | ;; 1898 | *) 1899 | echo 'Неправильный выбор. Выходим.' 1900 | wait 1901 | ;; 1902 | esac 1903 | ;; 1904 | esac 1905 | ;; 1906 | n|N|т|Т) 1907 | ;; 1908 | *) 1909 | echo 'Неправильный выбор. Выходим.' 1910 | wait 1911 | ;; 1912 | esac 1913 | ;; 1914 | 8) #Ajenti 1915 | my_clear 1916 | echo 'Панель управления "Ajenti"' 1917 | echo 'Поддержка ОС: CentOS 6, 7 | Debian 6, 7, 8 | Ubuntu | Gentoo' 1918 | echo 'Системные требования: 35 Mb RAM ' 1919 | echo 'Лицензия: Панель имеет как бесплатную версию, так и платную' 1920 | echo 'Описание: Ajenti - это панель управления сервером, но к ней есть Addon под названием Ajenti V,' 1921 | echo ' с помощью которого можно управлять хостингом.' 1922 | echo 'Язык: Английский, русский и ещё 42 других языка' 1923 | echo 'Хотите установить?' 1924 | myread_yn pick 1925 | case "$pick" in 1926 | y|Y) 1927 | case "$osver1" in 1928 | 4|5) 1929 | echo "У вас CentOS $osver1.x. Данная панель управления не поддерживает эту версию. Выходим." 1930 | wait 1931 | ;; 1932 | 6|7) 1933 | ajenti_install 1934 | ;; 1935 | 0) 1936 | echo 'нам не удалось определить Вашу ОС. Возможно, она не поддерживается Webuzo.' 1937 | echo 'Хотите всё равно установить данную панель управления на свой страх и риск?' 1938 | myread_yn ans 1939 | case "$ans" in 1940 | y|Y) 1941 | ajenti_install 1942 | ;; 1943 | n|N|т|Т) 1944 | ;; 1945 | *) 1946 | echo 'Неправильный выбор. Выходим.' 1947 | wait 1948 | ;; 1949 | esac 1950 | ;; 1951 | esac 1952 | ;; 1953 | n|N|т|Т) 1954 | ;; 1955 | *) 1956 | echo 'Неправильный выбор. Выходим.' 1957 | wait 1958 | ;; 1959 | esac 1960 | ;; 1961 | 0) 1962 | chosen=0 1963 | ;; 1964 | *) 1965 | echo "Неправильный выбор." 1966 | wait 1967 | ;; 1968 | esac 1969 | ;; 1970 | 4) #Установка и настройка VPN-сервера 1971 | chosen=4 1972 | my_clear 1973 | echo "$title" 1974 | echo "$menu4" 1975 | myread_dig pick 1976 | case "$pick" in 1977 | 1) #Установить VPN-сервер (pptpd) 1978 | echo "Внимание! Данный скрипт работает ТОЛЬКО на centOS!" 1979 | echo "Внимание! Для работы VPN нужен интерфейс PPP, который обычно отключен при виртуализации" 1980 | echo "на OpenVZ. Его можно включить через тех.поддержку или в панели управления сервером." 1981 | echo "Если у вас технология виртуализации XEN или KVM, то всё нормально." 1982 | br 1983 | echo "Далее будет произведено обновление ОС и установка нужных компонентов для VPN-сервера." 1984 | wait 1985 | br 1986 | echo "установка PPTP" 1987 | #CentOS 5 1988 | if [ $osver1 -eq 5 ]; then rpm -Uvh http://pptpclient.sourceforge.net/yum/stable/rhel5/pptp-release-current.noarch.rpm; fi 1989 | #yum update -y 1990 | yum -y install ppp pptpd pptp 1991 | br 1992 | whatismyip_full 1993 | #открываем порты и настраиваем маршрутизацию 1994 | br 1995 | echo "Открываем порты в firewall для работы VPN" 1996 | br 1997 | iptables -I INPUT -p 47 -j ACCEPT 1998 | iptables -I OUTPUT -p 47 -j ACCEPT 1999 | openport in tcp 1723 2000 | openport out tcp 1723 2001 | iptables -t nat -I POSTROUTING -j SNAT --to $ip 2002 | iptables -I FORWARD -s 10.1.0.0/24 -j ACCEPT 2003 | iptables -I FORWARD -d 10.1.0.0/24 -j ACCEPT 2004 | #теперь делаем так, чтобы сохранились правила после перезагрузки 2005 | iptables_save 2006 | br 2007 | echo "Введите имя пользователя, которое нужно создать (н.п.. client1 or john):" 2008 | read u 2009 | echo "Введите пароль для этого пользователя:" 2010 | read p 2011 | br 2012 | echo "Создание конфигурации сервера" 2013 | cat > /etc/ppp/pptpd-options <> /etc/sysctl.conf 2029 | sysctl -p 2030 | # setting up pptpd.conf 2031 | echo "option /etc/ppp/pptpd-options" > /etc/pptpd.conf 2032 | echo "logwtmp" >> /etc/pptpd.conf 2033 | echo "localip $ip" >> /etc/pptpd.conf 2034 | echo "remoteip 10.1.0.1-100" >> /etc/pptpd.conf 2035 | #autostart pptpd 2036 | chkconfig pptpd on 2037 | # adding new user 2038 | echo "$u * $p *" >> /etc/ppp/chap-secrets 2039 | # правим mtu для 10 ppp-юзеров 2040 | sed -i -e '/exit 0/d' /etc/ppp/ip-up #Удаляем exit 0 в конце файла 2041 | cat >> /etc/ppp/ip-up <> /etc/ppp/chap-secrets 2073 | echo 2074 | echo "Дополнительный пользователь создан!" 2075 | echo "Имя пользователя (логин):$u ##### Пароль: $p" 2076 | br 2077 | wait 2078 | ;; 2079 | 3) #Открыть файл с логинами/паролями пользователей 2080 | edit /etc/ppp/chap-secrets 2081 | ;; 2082 | 4) #Добавить правила для работы VPN в IPTables 2083 | whatismyip_full 2084 | iptables -I INPUT -p 47 -j ACCEPT 2085 | iptables -I OUTPUT -p 47 -j ACCEPT 2086 | openport in tcp 1723 2087 | openport out tcp 1723 2088 | iptables -t nat -I POSTROUTING -j SNAT --to $ip 2089 | iptables -I FORWARD -s 10.1.0.0/24 -j ACCEPT 2090 | iptables -I FORWARD -d 10.1.0.0/24 -j ACCEPT 2091 | br 2092 | echo 'Хотите, чтобы это правило сохранялось после перезагрузки?' 2093 | myread_yn ans 2094 | case "$ans" in 2095 | y|Y) 2096 | iptables_save 2097 | ;; 2098 | esac 2099 | br 2100 | wait 2101 | ;; 2102 | 5) #Удалить VPN-сервер 2103 | my_clear 2104 | echo "Внимание! Будет полностью удален VPN-сервер, файл с логинами/паролями и файл настроек" 2105 | echo "Продолжить?" 2106 | myread_yn ans 2107 | case "$ans" in 2108 | y|Y) 2109 | uninstall -y pptpd pptp 2110 | rm -f /etc/ppp/chap-secrets 2111 | rm -f /etc/pptpd.conf 2112 | sed -i -e '/ifconfig ppp0 mtu 1400/d' /etc/ppp/ip-up #Удаляем строки, которые добавляли 2113 | sed -i -e '/ifconfig ppp1 mtu 1400/d' /etc/ppp/ip-up #Удаляем строки, которые добавляли 2114 | sed -i -e '/ifconfig ppp2 mtu 1400/d' /etc/ppp/ip-up #Удаляем строки, которые добавляли 2115 | sed -i -e '/ifconfig ppp3 mtu 1400/d' /etc/ppp/ip-up #Удаляем строки, которые добавляли 2116 | sed -i -e '/ifconfig ppp4 mtu 1400/d' /etc/ppp/ip-up #Удаляем строки, которые добавляли 2117 | sed -i -e '/ifconfig ppp5 mtu 1400/d' /etc/ppp/ip-up #Удаляем строки, которые добавляли 2118 | sed -i -e '/ifconfig ppp6 mtu 1400/d' /etc/ppp/ip-up #Удаляем строки, которые добавляли 2119 | sed -i -e '/ifconfig ppp7 mtu 1400/d' /etc/ppp/ip-up #Удаляем строки, которые добавляли 2120 | sed -i -e '/ifconfig ppp8 mtu 1400/d' /etc/ppp/ip-up #Удаляем строки, которые добавляли 2121 | sed -i -e '/ifconfig ppp9 mtu 1400/d' /etc/ppp/ip-up #Удаляем строки, которые добавляли 2122 | echo "Готово." 2123 | br 2124 | wait 2125 | ;; 2126 | n|N) 2127 | ;; 2128 | *) 2129 | echo "Неправильный ответ" 2130 | wait 2131 | ;; 2132 | esac 2133 | ;; 2134 | 0) 2135 | chosen=0 2136 | ;; 2137 | *) 2138 | echo "Неправильный выбор" 2139 | wait 2140 | ;; 2141 | esac 2142 | ;; 2143 | 5) #Работа с Proxy 2144 | chosen=5 2145 | my_clear 2146 | echo "$title" 2147 | echo "$menu5" 2148 | myread_dig pick 2149 | case "$pick" in 2150 | 1) #Установить Proxy-сервер (на базе Squid) 2151 | echo "Начинаем установку squid" 2152 | yum -y install squid 2153 | echo "Squid был установлен" 2154 | sed -i "/http_access deny all/d" "/etc/squid/squid.conf" #удаляем строку с запретом доступа (ниже добавим снова при необходимости) 2155 | echo "#Ниже добавлены наши наcтройки" >> /etc/squid/squid.conf 2156 | br 2157 | echo 'По умолчанию Proxy работает на порту 3128, но его можно поменять. Хотите изменить порт?' 2158 | myread_yn ans 2159 | port=3128 #ставим порт по умолчанию, далее, если надо, его переопределяем 2160 | case "$ans" in 2161 | y|Y) 2162 | echo 'Укажите порт, на котором должен работать Proxy?' 2163 | read port 2164 | sed -i "/http_port/d" "/etc/squid/squid.conf" #удаляем строку с настройкой порта 2165 | echo "http_port $port" >> /etc/squid/squid.conf #добавляем строку с настройкой порта 2166 | ;; 2167 | esac 2168 | br 2169 | echo "Выберите вариант авторизации на Proxy:" 2170 | echo "1) Свободный доступ (любой, кто знает IP и порт - может воспользоваться)" 2171 | echo "2) Доступ по логину/паролю" 2172 | myread_dig ans 2173 | case "$ans" in 2174 | 1) 2175 | echo "http_access allow all" >> /etc/squid/squid.conf 2176 | echo 'Был открыт доступ всем пользователям' 2177 | br 2178 | ;; 2179 | 2) 2180 | case "$osver1" in 2181 | 4|5) 2182 | installed htpasswd 2183 | if [ $exist == false ]; then yum -y install httpd; fi #устанавливаем httpd ради htpasswd, если её ещё нет 2184 | ;; 2185 | 6|7) 2186 | installed htpasswd 2187 | if [ $exist == false ]; then yum -y install httpd-tools; fi #устанавливаем утилиту htpasswd, если её нет 2188 | ;; 2189 | esac 2190 | touch /etc/squid/internet_users #создаем файл с логинами-паролями 2191 | chmod 440 /etc/squid/internet_users #выставляем права на этот файл 2192 | chown squid:squid /etc/squid/internet_users 2193 | ncsa_path=$(find / -name "ncsa_auth") #определяем путь ncsa_auth 2194 | if [ "$ncsa_path" == "" ]; then ncsa_path=$(find / -name "basic_ncsa_auth"); fi #если ncsa_auth не найден, пробуем искать basic_ncsa_auth 2195 | if [ "$ncsa_path" == "" ]; then ncsa_path=$(find / -name "*ncsa_auth"); fi #если и теперь ncsa_auth не найден, пробуем искать другой ncsa_auth 2196 | br 2197 | echo "Укажите логин пользователя:" 2198 | read login 2199 | login_lower=$(echo $login | tr [:upper:] [:lower:]) #Перевели логин в нижний регстр, без этого авторизация вообще не будет проходить 2200 | htpasswd /etc/squid/internet_users $login_lower 2201 | echo "auth_param basic program $ncsa_path /etc/squid/internet_users " >> /etc/squid/squid.conf 2202 | echo "auth_param basic children 32" >> /etc/squid/squid.conf #кол-во юзеров 2203 | echo "auth_param basic realm Enter login and password to use this Proxy " >> /etc/squid/squid.conf #приветственная фраза 2204 | echo "auth_param basic credentialsttl 8 hours " >> /etc/squid/squid.conf #На сколько запоминать авторизацию 2205 | echo "acl internet_users proxy_auth REQUIRED " >> /etc/squid/squid.conf 2206 | echo "http_access allow internet_users " >> /etc/squid/squid.conf 2207 | echo "http_access deny all " >> /etc/squid/squid.conf #запретили доступ всем, кроме авторизованных пользователей 2208 | ;; 2209 | *) 2210 | echo "Неправильный выбор. Аварийный выход." 2211 | wait 2212 | exit 2213 | ;; 2214 | esac 2215 | #открываем порт в iptables 2216 | br 2217 | echo "Сейчас откроем порт в iptables, чтобы можно было подключиться к серверу" 2218 | openport in tcp $port 2219 | br 2220 | echo 'По умолчанию Proxy не является анонимным и можно определить Ваш IP, когда Вы им пользуетесь' 2221 | echo 'Хотите сделать Ваш Proxy полностью анонимным?' 2222 | myread_yn ans 2223 | case "$ans" in 2224 | y|Y) 2225 | br 2226 | echo 'Имейте ввиду, что такой Proxy-сервер нарушает правила протокола HTTP и является НЕЗАКОННЫМ.' 2227 | echo 'Всю ответственность за такой сервер - несёте вы. Всё ещё хотите продолжить?' 2228 | myread_yn ans 2229 | case "$ans" in 2230 | y|Y) 2231 | cat >> /etc/squid/squid.conf <> /etc/squid/squid.conf #возвращаем ее назад в закомментированном виде" 2247 | ;; 2248 | esac 2249 | br 2250 | echo "Добавляем Squid в автозагрузку..." 2251 | chkconfig squid on 2252 | br 2253 | service squid restart 2254 | br 2255 | echo "Proxy-сервер был успешно настроен. Если подключение к нему есть, но трафик не идёт, то, возможно" 2256 | echo "проблема в MTU. Вы можете его настроить в соответствующем разделе." 2257 | br 2258 | whatismyipext 2259 | echo "Параметры вашего Proxy:" 2260 | echo "IP: $ipext" 2261 | echo "Порт: $port" 2262 | echo "Пользователь: $login" 2263 | br 2264 | wait 2265 | ;; 2266 | 2) #Удалить Proxy (Squid) 2267 | echo "Будет удален Proxy-сервер (Squid), а также файл настроек и файл" 2268 | echo "с логинами/паролями пользователей. Продолжить?" 2269 | myread_yn ans 2270 | case "$ans" in 2271 | y|Y) 2272 | echo "Начинаем удаление squid..." 2273 | uninstall -y squid 2274 | rm -f /etc/squid/squid.conf 2275 | rm -f /etc/squid/internet_users 2276 | br 2277 | echo 'Squid был удален' 2278 | wait 2279 | ;; 2280 | esac 2281 | ;; 2282 | 3) #Поменять MTU для интерфейса 2283 | echo 'На каком интерфейсе вы хотите поменять mtu? (обычно на VPS это venet0:0 или eth0)' 2284 | read interface 2285 | echo 'Какой mtu установить?' 2286 | read mtu 2287 | mtu_change $interface $mtu 2288 | echo 'Для интерфейса '$interface' был успешно установлен MTU '$mtu 2289 | wait 2290 | ;; 2291 | 4) #Открыть файл настроек Squid 2292 | edit /etc/squid/squid.conf 2293 | ;; 2294 | 5) #Добавить пользователей Proxy 2295 | br 2296 | case "$osver1" in 2297 | 4|5) 2298 | installed htpasswd 2299 | if [ $exist == false ]; then yum -y install httpd; fi #устанавливаем httpd ради htpasswd, если её ещё нет 2300 | ;; 2301 | 6|7) 2302 | installed htpasswd 2303 | if [ $exist == false ]; then yum -y install httpd-tools; fi #устанавливаем утилиту htpasswd, если её нет 2304 | ;; 2305 | esac 2306 | br 2307 | echo "Укажите логин пользователя:" 2308 | read login 2309 | login_lower=$(echo $login | tr [:upper:] [:lower:]) #Перевели логин в нижний регстр, без этого авторизация вообще не будет проходить 2310 | htpasswd /etc/squid/internet_users $login_lower 2311 | br 2312 | echo "Пользователь $login был успешно добавлен в файл настроек" 2313 | wait 2314 | ;; 2315 | 6) #Открыть файл с логинами/паролями пользователей Proxy 2316 | my_clear 2317 | br 2318 | echo "ВНИМАНИЕ! В этом файле содержатся не пароли пользователей, а их хэш-суммы!" 2319 | echo "Редактировать пароли в этом файле нельзя! Вы можете отредактировать только логин." 2320 | echo "Из этого файла Вы можете просто посмотреть какие у Вас есть пользователи и можете удалить кого-то." 2321 | echo "Для удаления пользователя просто сотрите соответствующую строку и сохраните файл." 2322 | echo "Если нужно изменить пароль - просто создайте заново пользователя с тем же логином." 2323 | br 2324 | wait 2325 | edit /etc/squid/internet_users 2326 | ;; 2327 | 7) #Перезапустить сервис Proxy (Squid) 2328 | service squid restart 2329 | echo 'Готово' 2330 | wait 2331 | ;; 2332 | 0) 2333 | chosen=0 2334 | ;; 2335 | *) 2336 | echo "Неправильный выбор" 2337 | wait 2338 | ;; 2339 | esac 2340 | ;; 2341 | 6) #Работа с файлами и программами 2342 | chosen=6 2343 | my_clear 2344 | echo "$title" 2345 | echo "$menu6" 2346 | myread_dig pick 2347 | case "$pick" in 2348 | 1) #Установить какую-либо программу 2349 | echo "Укажите название пакета который нужно установить" 2350 | read answer 2351 | yum -y install $answer 2352 | br 2353 | echo "Готово." 2354 | wait 2355 | ;; 2356 | 2) #Удалить какую-либо программу 2357 | echo "Укажите название пакета который нужно удалить" 2358 | read answer 2359 | yum erase $answer 2360 | br 2361 | echo "Готово." 2362 | wait 2363 | ;; 2364 | 3) #Удалить какую-либо программу со всеми зависимостями 2365 | #CentOS5 2366 | if [ $osver1 -eq 5 ]; then echo "Данная функция не поддерживается на CentOS 5.x"; wait 2367 | else 2368 | echo "Укажите название пакета который нужно полностью удалить" 2369 | read answer 2370 | uninstall $answer 2371 | br 2372 | echo "Готово." 2373 | wait 2374 | fi 2375 | ;; 2376 | 4) #Посмотреть сколько свободного места на диске 2377 | br 2378 | df -h 2379 | br 2380 | wait 2381 | ;; 2382 | 0) 2383 | chosen=0 2384 | ;; 2385 | *) 2386 | echo "Неправильный выбор" 2387 | wait 2388 | ;; 2389 | esac 2390 | ;; 2391 | 7) #Очистка системы 2392 | chosen=7 2393 | my_clear 2394 | echo "$title" 2395 | echo "$menu7" 2396 | myread_dig pick 2397 | case "$pick" in 2398 | 1) #Очистить кэш yum 2399 | yum clean all 2400 | br 2401 | echo "Готово." 2402 | wait 2403 | ;; 2404 | 2) #Удалить логи Apache, Nginx, Squid и прочие логи 2405 | echo "Внимание! Будут удалены все архивные логи Apache и NginX, кроме сегодняшних." 2406 | echo "А также будут удалены все логи Squid (Proxy), логи неудачного входа в систему" 2407 | echo "(btmp, secure), которые часто копятся из-за попыток взлома." 2408 | echo "Продолжить?" 2409 | myread_yn ans 2410 | case "$ans" in 2411 | y|Y) 2412 | usedspace1=`df | awk '(NR == 2)' | awk {'print $3'}` #запоминаем сколько было занято места до очистки 2413 | rm -f -v /var/www/httpd-logs/*.gz #удаляем архивные логи Apache 2414 | rm -f -v /var/log/nginx/*.gz #удаляем архивные логи Nginx 2415 | del_squid() #упаковали удаление этих логов в функцию потому, что без этого, почему-то не скрывается вывод ошибок. о_О 2416 | { 2417 | cat /dev/null > /var/log/squid/access.log #удаляем логи squid 2418 | cat /dev/null > /var/log/squid/cache.log #удаляем логи squid 2419 | } 2420 | del_squid 2>/dev/null 2421 | cat /dev/null > /var/log/btmp #очищаем логи неудачных попыток входа 2422 | rm /var/log/btmp-* -f #удаляет логи за другие даты 2423 | cat /dev/null > /var/log/secure #очищаем сообщения безопасности/авторизации 2424 | rm /var/log/secure-* -f #удаляет логи за другие даты 2425 | service httpd restart 2>/dev/null 2426 | service nginx restart 2>/dev/null 2427 | usedspace2=`df | awk '(NR == 2)' | awk {'print $3'}` #смотрим сколько занято теперь 2428 | let freespace=$usedspace1-$usedspace2 #столько места освободили в байтах 2429 | let freespace=$freespace/1024 #столько места освободили в Мб 2430 | br 2431 | echo "Готово. Логи были очищены и было освобождено $freespace Мб." 2432 | br 2433 | wait 2434 | ;; 2435 | esac 2436 | ;; 2437 | 3) #Удалить логи Apache конкретного пользователя 2438 | br 2439 | echo "Введите логин ispmanager (обычно в нижнем регистре!) для удаления его старых логов:" 2440 | read answer 2441 | rm -f /var/www/$answer/data/logs/*.gz 2442 | br 2443 | echo "Готово." 2444 | wait 2445 | ;; 2446 | 4) #Посмотреть сколько свободного места на диске 2447 | br 2448 | df -h 2449 | br 2450 | wait 2451 | ;; 2452 | 0) 2453 | chosen=0 2454 | ;; 2455 | *) 2456 | echo "Неправильный выбор. Нажмите любую клавишу, чтобы продолжить." 2457 | wait 2458 | ;; 2459 | esac 2460 | ;; 2461 | 8) #терминал 2462 | chosen=8 2463 | my_clear 2464 | echo '┌──────────┐' 2465 | echo '│ Терминал │' 2466 | echo '└──────────┘' 2467 | echo "Здесь вы можете ввести любую команду, которую поддерживает bash." 2468 | echo "Кроме этого, поддерживаются внутренние команды $title" 2469 | echo 'Такие как: myinstall, uninstall, openport, changelog, updatescript, about и др.' 2470 | echo 'Для выхода из терминала наберите "exit" или "quit".' 2471 | br 2472 | echo "Введите команду:" 2473 | read cmd 2474 | if [[ "$cmd" == "exit" || "$cmd" == "quit" ]] 2475 | then 2476 | chosen=0 2477 | else 2478 | br 2479 | $cmd 2480 | br 2481 | wait 2482 | fi 2483 | ;; 2484 | 9) #Обновить Breeze Easy Shell 2485 | echo "обновляю..." 2486 | updatescript 2487 | repeat=false 2488 | sh $0 2489 | exit 0 2490 | ;; 2491 | 0) 2492 | repeat=false 2493 | ;; 2494 | *) 2495 | echo "Неправильный выбор." 2496 | wait 2497 | ;; 2498 | esac 2499 | done 2500 | echo "Скрипт ожидаемо завершил свою работу." 2501 | echo -e "$normal" 2502 | clear -------------------------------------------------------------------------------- /changelog.txt: -------------------------------------------------------------------------------- 1 | v0.90 2 | Первая оформленная версия. Несколько простеньких команд, объединенных вместе. 3 | 4 | v0.94 (10.02.2016) 5 | ● Первая версия, с которой началось ведение логов изменений 6 | ● Появилась функция самостоятельного обновления скрипта. Работает по FTP. 7 | ● Появилась функция установки аддона yum для удаления программ с зависимостями 8 | и, собственно, команда на такое удаление. 9 | 10 | v0.96 (10.02.2016) 11 | ● Появилась возможность проверить трафик по iptables 12 | ● Добавлена возможность удаления логов Apache и Nginx 13 | 14 | v0.97 (11.02.2016) 15 | ● Переписано действие "Добавить правило маршрутизации в IPTABLES". Теперь 16 | спрашивает какой интерфейс у нас выходит в интернет (вместо установки venet0:0 17 | по умолчанию) 18 | 19 | v1.00 Alpha 1 (11.02.2016) 20 | Было принято решение полностью переписать модуль с нуля. 21 | ● Создан скелет. Ни одна функция не работает. 22 | ● Заложено многоуровневое меню. При входе в один пункт меню видим его подпункты. 23 | ● Всё что можно теперь записывается в переменные и отдельные функции. 24 | Это позволит эффективней поддерживать и обновлять скрипт. 25 | ● Скрипт не перезапускает сам себя каждый раз после завершения какого-либо 26 | действия, а заново отрисовывает меню в цикле while. 27 | ● Проверка выбора пользователя теперь идёт через case. 28 | 29 | v1.00 Alpha 8 (12.02.2016) 30 | ● Составлено меню первого уровня. Пока второго уровня нет (но предполагается). 31 | ● На все пункты меню стоит "заглушка". 32 | ● Работает пока только один пункт - автообновление скрипта. 33 | 34 | v1.00 Alpha 13 (12.02.2016) 35 | ● Меню закончено полностью. Во-первых, оно теперь двухуровневое и полностью 36 | заполнено. Во-вторых, оно теперь сделано в виде таблички (нарисовано 37 | псевдографикой). 38 | ● На первом уровне все пункты открываются и работают (ну правда там только одна 39 | функция - обновление). 40 | ● На втором уровне меню абсолютно везде "заглушка". 41 | ● Обновление утилиты переведено на протокол http. В итоге обновлется почти 42 | мгновенно. 43 | 44 | v1.00 Alpha 16 (13.02.2016) 45 | ● Внезапно и внепланово был добавлен новый функционал: установка часовых поясов. 46 | Взял все основные российские зоны (всего - 9). Для этого впервые было сделано 47 | меню третьего уровня. 48 | ● Ещё появилась недокументированная функция "about". Выводит сведения о 49 | разработчике 50 | 51 | v1.00 Beta 1 (13.02.2016) 52 | ● Перенесён весь функционал из v0.97. Теперь работают все разделы, кроме двух 53 | (установка VPN-сервера и добавление пользователей VPN). 54 | 55 | v1.00 Beta 2 (13.02.2016) 56 | ● Появилась возможность просмотра лога изменений (команды: changelog или log) 57 | 58 | v1.00 RC 1 (13.02.2016) 59 | ● Работают абсолютно все разделы меню, включая установку VPN-сервера. 60 | Готов к обкатке на живой системе. 61 | 62 | v1.00 RC 2 (13.02.2016) 63 | ● Поправлено описание при установке ISPmanager. Добавлены подсказки "нажмите 64 | любую клавишу", там где система ждёт реакции пользователя. 65 | ● Установка clamAV стала бесшумной, добавил этап обновления баз после установки. 66 | ● Добавлены пустые строки, там где текст сливался. 67 | ● Поправлены недочёты при установке VPN-сервера. 68 | ● При установке Vesta CP добавлена возможность удалить httpd (на него ругается 69 | установщик). 70 | 71 | v1.00 RC 3 (14.02.2016) 72 | ● Исправлена настройка VPN-сервера из-за которой VPN-сервер не настраивался. 73 | 74 | v1.00 Release (14.02.2016) 75 | Наконец выпущен релиз. 76 | ● Был серьезно доработан скрипт установки VPN-сервера. Теперь не нужно вручную 77 | править настройки mtu. 78 | ● Добавлены подсказки о том, что скрипт начал выполнять то или иное действие 79 | после выбора пользователя (в некоторых ситуациях скрипт долго думал и было 80 | непонятно - выбрали мы действие или нет). 81 | 82 | v1.1 (15.02.2016) 83 | ● Появилась полная поддержка CentOS 7. Скрипт сам проверяет версию CentOS при 84 | добавлении репозиториев, при установке программ (для CentOS 7 ставится ещё 85 | net-tools) и при установке VPN-сервера (немного другие настройки и алгоритм 86 | определения IP). 87 | 88 | v1.1.2 (16.02.2016) 89 | ● Добавлена поддержка CentOS 7 при отдельном добавлении правила на маршрутизацию 90 | с vpn. 91 | ● Для выбора пункта меню больше не надо нажимать "ввод", скрипт ждёт только 1 92 | символ. 93 | ● Как следствие, временно была убрана возможность ввода кастомных команд. 94 | Появится позже в виде отдельного пункта меню. 95 | 96 | v1.2 (18.02.2016) 97 | ● Добавлена установка панелей CWP и Webuzo с проверкой версии ОС. 98 | ● Поправлена установка Vesta CP (выдает предложение об удалении httpd только 99 | если он есть). 100 | ● Добавлено описание Vesta CP 101 | 102 | v1.3 (19.02.2016) 103 | ● Добавлен новый раздел в главном меню - "Работа с Proxy". Теперь умеем на любом 104 | CentOS поднимать Proxy Server. 105 | ● Все текстовые файлы, которые открываются из скрипта - открываются в MC, nano 106 | или VIm (в зависимости от того, что установлено на сервере, но именно в таком 107 | приоритете). 108 | ● Теперь всё что мы удаляем из скрипта - удаляется со всеми зависимостями (если 109 | соответствующий плагин не установлен - он ставится сам). 110 | 111 | v1.3.1 (19.02.2016) 112 | ● При создании Proxy дополнительно открываем порт в IPTABLES. 113 | ● Появилась возможность сделать Proxy анонимным. 114 | ● Поправлено кое что при создании VPN из-за чего сервис iptables мог не 115 | запускаться вообще после перезагрузки (неверный конфиг). 116 | 117 | v1.4 (20.02.2016) 118 | ● Появилась полная поддержка CentOS 5.x во всех сценариях. 119 | ● Было исправлено добавление правил IPTables. Теперь должно работать всегда. 120 | ● Поменян порядок устаноки антивируса (теперь сначала базы обновляет, потом 121 | перезапускает демона). 122 | ● Было произведено тестирование на 32-битных ОС (CentOS 5/6), все функции 123 | работают. 124 | 125 | v1.5 (25.02.2016) 126 | ● Добавлен раздел "информация о системе", который показывают всю информацию о 127 | железе и ОС. 128 | ● Теперь, при установке VPN, IP определяется автоматически и только если он 129 | определился неправильно - предлагается ручной ввод. Причём, сначала ручной 130 | ввод через указание интерфейса и только в самом конце - ручной ввод IP. Это 131 | позволит настроить VPN-сервер вообще в любой ситуации. 132 | ● Установка net-tools (для CentOS 7) теперь будет происходить только если она не 133 | установлена, а не каждый раз. 134 | ● Добавил установку ещё двух панелей управления - "ZPanel CP" и "Ajenti". 135 | Для первой пришлось самостоятельно переписать инсталлятор, для второй после 136 | установки править конфиг. 137 | 138 | v1.6 (28.02.2016) 139 | ● Появился полноценный раздел работы с антивирусом (установка, обновление, 140 | удаление, сканирование). Находится на третьем уровне меню. 141 | ● Теперь, после выполнения какого-либо действия на втором уровне меню, мы 142 | остаемся именно там, а не оказываемся в главном меню. Особенно это стало 143 | актуально после введения третьего уровня меню. 144 | ● Появился раздел "терминал", где можно вводить команды bash или прочие 145 | служебные команды Breeze Easy Shell (например, install, uninstall, openport) 146 | 147 | v1.7 (14.03.2016) 148 | ● Был добавлен раздел работы с IPtables для удобной настройки Firewall. Можно 149 | с нуля включить Firewall (есть "мастер настройки", который сам откроет нужные 150 | порты по запросу), а также выключить Firewall временно или полностью. Там же 151 | есть раздел открытия порта (скрипт спрашивает в каком направлении и по какому 152 | протоколу), возможность посмотреть текущие настройки iptables, сохранить их 153 | или перезапустить iptables. Поддерживается во всех версиях CentOS, 154 | включая v7.x (iptables устанавливается взамен firewalld). 155 | ● Появилась возможность настраивать прокси-сервер с авторизацией по логину/ 156 | паролю. Соответственно, отдельно появился пункт "добавить пользователя". 157 | ● Появился раздел "Удаление VPN-сервера". В этом случае удаляется pptp и pptpd, 158 | удаляются все конфиги pptpd и файл с логинами/паролями пользователей. А также, 159 | из конфигов системы удаляются строки, которые добавлялись при установке pptpd. 160 | ● Поправлена установка Proxy, теперь нормально открываем порт в iptables, чтобы 161 | squid работал 162 | ● Изменены функции через которые происходит запрос ответа пользователя. Теперь 163 | есть защита от неправильных ответов при запросе "y/n", а также, при выборе 164 | пункта меню (ждёт только цифры) и во всех прочих случаях - защита от пустых 165 | вводов. 166 | ● Изменена функция определения установленности пакета. Стало чуть медленнее, но, 167 | зато, более универсально работает 168 | ● Изменена функция открытия портов 169 | 170 | v1.7.1 (24.03.2016) 171 | ● Была расширена поддержка CentOS 7.x при работе с iptables. 172 | ● Было поправлено открытие портов для VPN в iptables при включении firewall с 173 | помощью помощника (ранее подключение по VPN не производилось, даже если 174 | добавить все правила, когда помощник предложит). 175 | ● Был добавлен запрос подтверждения при полном отключении (обнулении) firewall. 176 | 177 | v1.7.2 (27.03.2016) 178 | ● Добавлен запрос подтверждения перед удалением Proxy-сервера. 179 | ● Теперь htpasswd не будет каждый раз пытаться установиться при добавлении 180 | нового пользователя Proxy. 181 | 182 | v1.8 (15.08.2016) 183 | ● Появился раздел работы с планировщиком (Cron), можно ставить задачи в 184 | планировщик, выбрав нужный интервал. 185 | ● Появилась возможность открыть файл с пользователями Proxy для их удаления. 186 | ● После окончания настройки Proxy-сервера, на экран выводятся реквизиты доступа. 187 | ● В "Информации о системе", свободное место вычисляется теперь перед каждым 188 | выводом информации (ранее только при запуске скрипта). 189 | ● Опция "Очистить кэш yum" была переименована в более дружелюбную (функционал 190 | не изменился) и вынесена на первое место в списке. 191 | ● Функция определения установленности пакета была усовершенствована. Теперь 192 | работает более надежно и быстрее. 193 | ● Была обновлена ссылка для установки репозитория EPEL, т.к. старая перестала 194 | работать. 195 | 196 | v1.8.1 (01.09.2016) 197 | ● Теперь при установке Proxy (squid) он добавляется в автозагрузку (ранее после 198 | перезагрузки сервера, прокси переставал работать). 199 | ● Исправлена проблема, когда при использовании заглавных букв в логине 200 | пользователя Прокси, потом невозможно было авторизоваться (логин/пароль не 201 | подходил). Теперь логин не регистрозависимый. Писать можно любыми буквами 202 | и подходить будет любыми буквами. 203 | ● При настройке Прокси появилась возможность предусмотреть поддержку приложений 204 | типа Proxifier. 205 | ● После долгих раздумий функция открытия порта была переписана таким образом, 206 | что все правила теперь добавляются в начало цепочки. В связи с этим теперь при 207 | любом преднастроенном фаерволе к Proxy всегда можно будет подключиться. 208 | 209 | v1.8.2 (12.01.2017) 210 | ● Появилась проверка на установленность Cron. Если он не установлен - предлагает 211 | установить. Далее проверяется версия ОС - в зависимости от нее ставятся разные 212 | Cron'ы. 213 | ● Теперь модуль обновляется с github. И все сторонние файлы тоже качаются с 214 | github. 215 | 216 | v1.8.3 (31.01.2017) 217 | ● Обновлены ссылки репозиториев RPMForge, ATRPMS 218 | ● Для RPMForge и ATRPMS появилось разделение на 32 и 64 бит 219 | ● ATRPMS теперь устанавливаются так же для CentOS v6.x и v5.x 220 | ● Добавлена пауза после установки ISPManager 4 (чтобы можно было прочитать 221 | ошибку, если она есть) 222 | 223 | v1.8.4 (07.02.2017) 224 | ● Улучшена поддержка различных сценариев при настройке Proxy 225 | ● Для CentOS 4 и 5 теперь корректно устанавливается htpasswd, ранее, без неё, 226 | нельзя было настроить прокси с авторизацией. 227 | ● В CentOS 7 ранее могла не работать авторизация по паролю в Proxy, теперь 228 | сценарий поиска ncsa_auth расширился и таких проблем быть не должно 229 | 230 | v1.8.5 (22.03.2017) 231 | ● В информации о системе добавлен аптайм 232 | ● Раздел "информация о системе" теперь выводится иначе (сделано центрирование) 233 | ● В модели процессора корректно убираем лишние пробелы (изменена функция) 234 | 235 | v1.9 (31.07.2017) 236 | ● Появился бенчмарк - тестирует скорость процессора и диска 237 | ● Расширена функция очистки диска - чистит еще множество логов (которые могут 238 | разрастаться при попытке взлома сервера (брутфорс), а также показывает сколько 239 | места было очищено 240 | ● Для CentOS 7 Minimal теперь будет устанавливаться ifconfig 241 | ● Исправлено несколько мелких визуальных недочетов 242 | 243 | v1.9.1 (05.03.2019) 244 | ● Поправил бенчмарк под новую версию. Поменялся механизм оценки, поэтому старая 245 | версия скрипта с некоторых пор на любом железе показывала одну и ту же 246 | производительность. 247 | ● Добавил установку ещё одной бесплатной и очень мощной панели управления 248 | сервером и хостингом - Brainy CP. 249 | ● Появилась возможность открывать порты в iptables в секции FORWARD. 250 | ● Появилась возможность закрывать ранее открытые порты в iptables 251 | (по сути - просто удалять ранее введенное правило). 252 | ● Обновил ссылки на установку репозиториев. ATRPMS убрал вообще, он мёртв. 253 | Ссылки правил только для CentOS 6.x и 7.x, вероятно для 4.x и 5.x уже ничего 254 | не установится. 255 | 256 | v1.9.2 (01.04.2019) 257 | ● Очистка логов стала лучше. Теперь, если логи бьются на несколько файлов по 258 | датам, то мы чистим их все, а не только текущий. 259 | ● Добавлена цветовая схема скрипта. Теперь он по умолчанию будет показываться 260 | зеленым цветом на черном фоне. Но в терминале можно поменять цвет командой 261 | color, в том числе на стандартный (color default). При выходе из программы 262 | цвета сбрасываются на стандартные, но если было аварийное завершение - этого 263 | не произойдет и нужно еще раз запустить скрипт и выйти из него корректно. 264 | ● Появилась возможность легко и удобно перейти с релизной версии на бету и 265 | наоборот. Делается командой "beta" и "release" в терминале. -------------------------------------------------------------------------------- /zpanel.sh: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brizovsky/Breeze-Easy-Shell/3feb38254b443568b5bb21d5f15ccf35c7d9f0ba/zpanel.sh --------------------------------------------------------------------------------