├── .github └── workflows │ └── main.yml ├── LICENSE ├── README-EN.md ├── README.md ├── bin └── adss ├── i18n └── en.sh ├── menu ├── autoloading.sh ├── ddos_tool_managment.sh ├── ddoss.sh ├── main_menu.sh ├── menu_init.sh ├── security_configuration.sh └── security_settings.sh ├── services ├── EnvironmentFile ├── db1000n.service ├── distress.service ├── mhddos.service └── x100.service ├── utils ├── datapatch.sh ├── db1000n.sh ├── definitions.sh ├── dialog.sh ├── distress.sh ├── fail2ban.sh ├── mhddos.sh ├── port-extending.sh ├── translate.sh ├── ufw.sh ├── updater.sh └── x100.sh └── version.txt /.github/workflows/main.yml: -------------------------------------------------------------------------------- 1 | on: 2 | release: 3 | types: [ released ] 4 | jobs: 5 | update_version: 6 | runs-on: ubuntu-latest 7 | steps: 8 | - run: echo "${{ github.event.release.tag_name }}" > version.txt 9 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2023 DEV TEAM IT ARMY OF UKRAINE 4 | leernd007 5 | panchvitm 6 | iasyr 7 | OleksandrBlack 8 | 9 | Permission is hereby granted, free of charge, to any person obtaining a copy 10 | of this software and associated documentation files (the "Software"), to deal 11 | in the Software without restriction, including without limitation the rights 12 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 13 | copies of the Software, and to permit persons to whom the Software is 14 | furnished to do so, subject to the following conditions: 15 | 16 | The above copyright notice and this permission notice shall be included in all 17 | copies or substantial portions of the Software. 18 | 19 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 20 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 21 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 22 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 23 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 24 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 25 | SOFTWARE. -------------------------------------------------------------------------------- /README-EN.md: -------------------------------------------------------------------------------- 1 | ## Automatic DDoS Server Starter from IT Army Ukraine (ADSS) 2 | 3 | ADSS is a Shell script that automatically updates itself and determines the version, bitness, and distribution of your Linux OS. 4 | 5 | Tested support for the current version : 6 | 7 | Ubuntu, Debian, Fedora, Centos, Arch Linux, Kali Linux, Parrot Security OS, Rocky Linux, AlmaLinux OS, Manjaro, Oracle Linux, Void Linux (х86,х64,arm) 8 | 9 | #### [Українська версія - нажміть сюди](/README.md) 10 | #### 💁 [Technical support](https://t.me/+H6PnjkydZX0xNDky) 11 | 12 | ### 💽 Installation 13 | 14 | Use this command for installation : 15 | 16 | ``` 17 | curl -sL https://raw.githubusercontent.com/it-army-ua-scripts/ADSS/install/install.sh | bash -s 18 | ``` 19 | 20 | During the installation, the script automatically installs the necessary packages : 21 | 22 | `zip, unzip, gnupg, ca-certificates, curl, git, dialog` 23 | 24 | Working directory: 25 | 26 | `/opt/itarmy` 27 | 28 | ### 🛠 Managing ADSS 29 | 30 | To launch ADSS : 31 | 32 | ``` 33 | adss 34 | ``` 35 | 36 | To launch ADSS in English : 37 | 38 | ``` 39 | adss --lang en 40 | ``` 41 | 42 | This command automatically installs the necessary DDoS tools for your system, sets up brute force protection, installs a firewall, launches MHDDOS, and adds MHDDOS to system auto-start. The log of the process is displayed in real time : 43 | 44 | ``` 45 | adss --auto-install 46 | ``` 47 | 48 | For full script renovation\reinstallation to default settings : 49 | 50 | ``` 51 | adss --restore 52 | ``` 53 | 54 | View current ADSS settings : 55 | 56 | ``` 57 | adss config 58 | ``` 59 | 60 | Uninstall ADSS : 61 | 62 | ``` 63 | adss --uninstall 64 | ``` 65 | 66 | ### ✪ Menu items 67 |
68 | Expand 69 | 70 | - **Install Docker - (optional, not mandatory)** 71 | 72 | - **Extend ports (optional, not mandatory):** 73 | 74 | To increase the efficiency of DDOS attacks, specifically on the Linux OS, it is necessary to allow a multitude of outgoing network connections, you need to increase the local range of TCP ports. This happens by adding the line `net.ipv4.ip_local_port_range=16384 65535` to the `/etc/sysctl.conf` file. 75 | 76 | - **Security Settings - (optional, not mandatory)** 77 | - **Install protection:** 78 | 79 | Automatically installs in the INACTIVE state UFW Firewall and protection against bruteforce Fail2ban 80 | 81 | - **Security Settings - (optional, not mandatory)** 82 | 83 | - **Firewall settings:** 84 | 85 | All incoming traffic is prohibited, except for 22/tcp port for connecting to the machine via SSH, all outgoing traffic is allowed. 86 | 87 | - **Setting up protection against bruteforce:** 88 | 89 | Allows 3 attempts to connect via SSH, in case of unsuccessful attempts (wrong login or password) blocks the attacking ip for 10 minutes. 90 | 91 | - **DDOS** 92 | 93 | - **Installing DDOS tools:** 94 | 95 | Automatic installation of db1000n, distress, mhddos of the appropriate architecture and bit depth for the corresponding machine. For each utility, in addition to downloading, a system service is created. This allows you to monitor its status and in case of a failure or reboot of the machine automatically start it again. 96 | 97 | - **DDOS tool management** 98 | 99 | - **Attack status:** 100 | 101 | View the log of the running utility in real time with automatic update of the output. 102 | 103 | - **Setting up auto-launch:** 104 | 105 | Automatic start of ddos utility when the machine is turned on\rebooted. 106 | 107 | - **Stop the attack:** 108 | 109 | The item is displayed only in the case of an active ddos utility. 110 | 111 | - **MHDDOS** 112 | 113 | - **Start/Stop MHDDOS:** 114 | 115 | Changes depending on the current state. Start a ddos attack. 116 | 117 | - **Setting up MHDDOS:** 118 | 119 | Clear step-by-step fine tuning of the utility to increase\decrease the load on the system, the effectiveness of the attack by adding appropriate launch parameters for the utility. (optional, not mandatory) 120 | 121 | - **MHDDOS status:** 122 | 123 | Displays the current status of the ddos utility service (active\dead) with the current fine-tuning launch parameters. 124 | 125 | - **The "DISTRESS" and "DB1000N" items are similar to "MHDDOS"** 126 | 127 |
128 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | ## Автоматичний старт сервера DDoS від IT Army Ukraine (ADSS) 2 | 3 | ADSS - це скрипт, написаний на Shell, який автоматично оновлює себе і визначає версію, розрядність та дистрибутив вашої ОС Linux. 4 | 5 | Протестована підтримка поточної версії : 6 | 7 | Ubuntu, Debian, Fedora, Centos, Arch Linux, Kali Linux, Parrot Security OS, Rocky Linux, AlmaLinux OS, Manjaro, Oracle Linux, Void Linux (х86,х64,arm) 8 | 9 | #### [English version - click here](/README-EN.md) 10 | #### 💁 [Технічна підтримка](https://t.me/+H6PnjkydZX0xNDky) 11 | 12 | ### 💽 Встановлення та запуск 13 | 14 | Використовуйте цю команду для встановлення : 15 | 16 | ``` 17 | curl -sL https://raw.githubusercontent.com/it-army-ua-scripts/ADSS/install/install.sh | bash -s 18 | ``` 19 | 20 | Під час встановлення скрипт автоматично встановлює потрібні пакети: 21 | 22 | `zip, unzip, gnupg, ca-certificates, curl, git, dialog` 23 | 24 | Робоча директорія: 25 | 26 | `/opt/itarmy` 27 | 28 | ### 🛠 Керування ADSS 29 | 30 | Запуск ADSS : 31 | 32 | ``` 33 | adss 34 | ``` 35 | 36 | Запуск ADSS англійською мовою : 37 | 38 | ``` 39 | adss --lang en 40 | ``` 41 | 42 | Ця команда автоматично встановлює потрібні інструменти DDoS для вашої системи, налаштовує захист від брутфорса, встановлює фаєрвол, запускає MHDDOS і додає MHDDOS до автозавантаження системи. Лог процесу відображається в реальному часі : 43 | 44 | ``` 45 | adss --auto-install 46 | ``` 47 | 48 | Повне відновлення\перевстановлення скрипта до налаштувань за замовчуванням : 49 | 50 | ``` 51 | adss --restore 52 | ``` 53 | 54 | Перегляд поточних налаштувань ADSS : 55 | 56 | ``` 57 | adss config 58 | ``` 59 | 60 | Видалити ADSS : 61 | 62 | ``` 63 | adss --uninstall 64 | ``` 65 | 66 | ### ✪ Пункти меню 67 |
68 | Розгорнути 69 | 70 | - **Встановити Docker - (пункт за бажанням, не є обов’язковим)** 71 | 72 | - **Розширення портів - (пункт за бажанням, не є обов’язковим) :** 73 | 74 | Для підвищення ефективності DDOS атаки, а саме на ОС Linux потрібно дозволити відкривати безліч вихідних мережевих підключень, необхідно збільшити локальний діапазон портів TCP. Це відбувається шляхом додавання до файлу `/etc/sysctl.conf` строки `net.ipv4.ip_local_port_range=16384 65535`. 75 | 76 | - **Налаштування безпеки - (пункт за бажанням, не є обов’язковим)** 77 | - **Встановлення захисту :** 78 | 79 | Автоматично встановлюється у НЕ активному стані UFW Firewall та захист від брутфорса Fail2ban 80 | 81 | - **Налаштування захисту** 82 | 83 | - **Налаштування фаєрвола :** 84 | 85 | Забороняється весь вхідний трафік, окрім по 22/tcp порту для підключення до машини по SSH, дозволяється весь вихідний трафік. 86 | 87 | - **Налаштування захисту від брутфорса :** 88 | 89 | Дозволяє 3 спроби підключення по SSH, у випадку невдалих спроб (не вірний логін чи пароль) блокує атакуючий ip на 10 хвилин. 90 | 91 | - **DDOS** 92 | 93 | - **Встановлення ддос інструментів :** 94 | 95 | Автоматичне встановлення db1000n, distress, mhddos відповідної архітектури та розрядності для відповідної машини. Для кожної утиліти окрім завантаження, створюється системна служба. Це дозволяє стежити за її станом і у випадку збою чи перезавантаження машини автоматично запустити її знову. 96 | 97 | - **Управління ддос інструментами** 98 | 99 | - **Статус атаки :** 100 | 101 | Перегляд логу запущеної утиліти в реальному часі з автоматичним оновленням виводу. 102 | 103 | - **Налаштування автозапуску :** 104 | 105 | Автоматичний запуск ddos утиліти при включенні\перезавантаженні машини. 106 | 107 | - **Зупинити атаку :** 108 | 109 | Пункт відображається тільки у разі активної ддос утиліти. 110 | 111 | - **MHDDOS** 112 | 113 | - **Запуск/Зупинка MHDDOS :** 114 | 115 | Змінюється у залежності від поточного стану. Почати ддос атаку. 116 | 117 | - **Налаштування MHDDOS :** 118 | 119 | Зрозуміле покрокове тонке налаштування утиліти для збільшення\зменшення навантаження на систему, ефективності атаки шляхом додавання відповідних параметрів запуску для утиліти. (пункт за бажанням, не є обов’язковим) 120 | 121 | - **Статус MHDDOS :** 122 | 123 | Відображає поточний статус служби ддос утиліти (активна\мертва) з поточними параметрами запуску тонкого налаштування. 124 | 125 | - **Пункти «DISTRESS» та «DB1000N» аналогічні до «MHDDOS»** 126 | 127 |
-------------------------------------------------------------------------------- /bin/adss: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | export SCRIPT_DIR="$( 4 | cd "$( 5 | dirname "$( 6 | (readlink "${BASH_SOURCE[0]}" || echo "${BASH_SOURCE[0]}") | 7 | sed -e "s#^../#$(dirname "$(dirname "${BASH_SOURCE[0]}")")/#" 8 | )" 9 | )/.." >/dev/null && 10 | pwd 11 | )" 12 | OSARCH=$(uname -m) 13 | source "$SCRIPT_DIR/utils/translate.sh" 14 | 15 | localization_file=$(apply_localization "$@") 16 | if [[ -n "$localization_file" ]]; then 17 | source "$localization_file" 18 | fi 19 | 20 | if [ $? -ne 0 ]; then 21 | echo "$(trans "Неправильний вхідний параметр!")" 22 | 1>&2 23 | exit 1 24 | fi 25 | export TOOL_DIR="$SCRIPT_DIR/bin" 26 | export GREEN='\033[0;32m' 27 | export GRAY='\033[0;37m' 28 | export RED='\033[0;31m' 29 | export NC='\033[0m' 30 | export ORANGE='\033[0;33m' 31 | 32 | source_files_in_directory() { 33 | local directory="$1" 34 | 35 | if [[ -d "$directory" ]]; then 36 | local files=("$directory"/*) 37 | 38 | for file in "${files[@]}"; do 39 | if [[ -f "$file" ]]; then 40 | source "$file" 41 | fi 42 | done 43 | else 44 | echo -e "${RED}$(trans "Не знайдено папку '$directory'.")${NC}" 45 | fi 46 | } 47 | source_files_in_directory "$SCRIPT_DIR/utils" 48 | source_files_in_directory "$SCRIPT_DIR/menu" 49 | 50 | sudo find "/var/log/" -name "adss.log" -size +300M -execdir sh -c 'truncate -s 0 adss.log' \; 51 | 52 | if [[ -f "$TOOL_DIR/db1000n" ]]; then 53 | rm -f "$TOOL_DIR/db1000n" 54 | sudo systemctl stop db1000n.service >/dev/null 2>&1 55 | db1000n_auto_disable >/dev/null 2>&1 56 | sudo rm -r /etc/systemd/system/db1000n.service >/dev/null 2>&1 57 | fi 58 | 59 | if [ "$1" = "--auto-install" ]; then 60 | check_updates 61 | apply_patch 62 | 63 | install_fail2ban 64 | configure_fail2ban 65 | install_ufw 66 | configure_ufw 67 | # install_db1000n 68 | install_distress 69 | 70 | is_not_arm_arch 71 | if [[ $? == 1 ]]; then 72 | install_mhddos 73 | mhddos_run 74 | mhddos_auto_enable 75 | fi 76 | extend_ports 77 | get_ddoss_status 78 | elif [ "$1" = "--restore" ]; then 79 | 80 | is_not_arm_arch 81 | if [[ $? == 1 ]]; then 82 | mhddos_stop 83 | mhddos_auto_disable >/dev/null 2>&1 84 | sudo rm -rf /tmp/_MEI* >/dev/null 2>&1 85 | fi 86 | 87 | db1000n_stop 88 | db1000n_auto_disable >/dev/null 2>&1 89 | 90 | distress_stop 91 | distress_auto_disable >/dev/null 2>&1 92 | sudo rm -rf /tmp/distress >/dev/null 2>&1 93 | sudo rm -r /var/log/adss.log >/dev/null 2>&1 94 | sudo rm -rf "${SCRIPT_DIR}" 95 | curl -sL https://raw.githubusercontent.com/it-army-ua-scripts/ADSS/install/install.sh | bash -s 96 | elif [ "$1" = "config" ]; then 97 | clear 98 | cat "${SCRIPT_DIR}"/services/EnvironmentFile && echo "" 99 | elif [ "$1" = "--uninstall" ]; then 100 | sudo systemctl stop distress.service >/dev/null 2>&1 101 | sudo systemctl stop db1000n.service >/dev/null 2>&1 102 | sudo systemctl stop mhddos.service >/dev/null 2>&1 103 | mhddos_auto_disable >/dev/null 2>&1 104 | db1000n_auto_disable >/dev/null 2>&1 105 | distress_auto_disable >/dev/null 2>&1 106 | sudo rm -r /etc/systemd/system/db1000n.service >/dev/null 2>&1 107 | sudo rm -r /etc/systemd/system/distress.service >/dev/null 2>&1 108 | sudo rm -r /etc/systemd/system/mhddos.service >/dev/null 2>&1 109 | sudo rm -r /usr/local/bin/adss >/dev/null 2>&1 110 | sudo rm -r /var/log/adss.log >/dev/null 2>&1 111 | sudo rm -rf "${SCRIPT_DIR}" 112 | echo -e "${GREEN}$(trans "ADSS успішно видалено")${NC}" 113 | else 114 | check_updates 115 | apply_patch 116 | source ~/.bashrc 117 | main_menu 118 | fi -------------------------------------------------------------------------------- /i18n/en.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | declare -A localization=( 4 | 5 | ["Неправильний вхідний параметр!"]="Invalid input parameter!" 6 | ["Не знайдено папку '$directory'."]="'$directory' folder not found." 7 | 8 | ["Вимкнути автозапуск MHDDOS"]="Disable autostart for MHDDOS" 9 | ["Увімкнути автозапуск MHDDOS"]="Enable autostart for MHDDOS" 10 | ["Вимкнути автозапуск DB1000N"]="Disable autostart for DB1000N" 11 | ["Увімкнути автозапуск DB1000N"]="Enable autostart for DB1000N" 12 | ["Вимкнути автозапуск DISTRESS"]="Disable autostart for DISTRESS" 13 | ["Увімкнути автозапуск DISTRESS"]="Enable autostart for DISTRESS" 14 | ["Вимкнути автозапуск X100"]="Disable autostart for X100" 15 | ["Увімкнути автозапуск X100"]="Enable autostart for X100" 16 | ["Повернутись назад"]="Go back" 17 | ["Налаштування автозапуску"]="Autostart settings" 18 | 19 | ["Зупиняємо атаку"]="Stopping the attack" 20 | ["Атака зупинена"]="Attack stopped" 21 | ["Запущено"]="Started" 22 | ["Нажміть будь яку клавішу щоб продовжити"]="Press any key to continue" 23 | ["Немає запущених процесів"]="No processes running" 24 | ["Статус атаки"]="Attack status" 25 | ["Зупинити атаку"]="Stop an attack" 26 | ["Управління ддос інструментами"]="DDOS tool management" 27 | ["Встановлення ддос інструментів"]="Install DDOS tools" 28 | ["Управління ддос інструментами"]="Manage DDOS tools" 29 | 30 | ["Для збору особистої статистики та відображення у лідерборді на офіційному сайті."]="To gather personal statistics and display on the leaderboard on the official website." 31 | ["Надається Telegram ботом"]="Provided by the Telegram bot" 32 | ["Щоб пропустити, натисніть Enter"]="To skip, press Enter" 33 | 34 | ["Розширення портів"]="Port extension" 35 | ["Налаштування безпеки"]="Security settings" 36 | ["Головне меню"]="Main menu" 37 | ["Налаштування фаєрвола"]="Firewall settings" 38 | ["Налаштування захисту від брутфорса"]="Bruteforce protection settings" 39 | ["Вихід"]="Exit" 40 | ["Оберіть опцію:"]="Choose an option:" 41 | ["ДДОС інструменти не встановлено"]="No DDOS tools installed" 42 | 43 | ["Встановлення захисту"]="Install protection" 44 | ["Налаштування захисту"]="Protection settings" 45 | 46 | ["Налаштування безпеки"]="Security settings" 47 | ["DB1000N додано до автозавантаження"]="DB1000N added to autostart" 48 | ["DB1000N видалено з автозавантаження"]="DB1000N removed from autostart" 49 | ["MHDDOS додано до автозавантаження"]="MHDDOS added to autostart" 50 | ["MHDDOS видалено з автозавантаження"]="MHDDOS removed from autostart" 51 | ["DISTRESS додано до автозавантаження"]="DISTRESS added to autostart" 52 | ["DISTRESS видалено з автозавантаження"]="DISTRESS removed from autostart" 53 | ["X100 додано до автозавантаження"]="X100 added to autostart" 54 | ["X100 видалено з автозавантаження"]="X100 removed from autostart" 55 | ["DB1000N не встановлений, будь ласка встановіть і спробуйте знову"]="DB1000N is not installed, please install and try again" 56 | ["MHDDOS не встановлений, будь ласка встановіть і спробуйте знову"]="MHDDOS is not installed, please install and try again" 57 | ["DISTRESS не встановлений, будь ласка встановіть і спробуйте знову"]="DISTRESS is not installed, please install and try again" 58 | ["X100 не встановлений, будь ласка встановіть і спробуйте знову"]="X100 is not installed, please install and try again" 59 | 60 | 61 | ["Зупинка DB1000N"]="Stop DB1000N" 62 | ["Запуск DB1000N"]="Start DB1000N" 63 | ["Зупинка MHDDOS"]="Stop MHDDOS" 64 | ["Запуск MHDDOS"]="Start MHDDOS" 65 | ["Зупинка DISTRESS"]="Stop DISTRESS" 66 | ["Запуск DISTRESS"]="Start DISTRESS" 67 | ["Зупинка X100"]="Stop X100" 68 | ["Запуск X100"]="Start X100 " 69 | 70 | ["Налаштування DB1000N"]="DB1000N settings" 71 | ["Статус DB1000N"]="DB1000N status" 72 | ["Налаштування MHDDOS"]="MHDDOS settings" 73 | ["Статус MHDDOS"]="MHDDOS status" 74 | ["Налаштування DISTRESS"]="DISTRESS settings" 75 | ["Статус DISTRESS"]="DISTRESS status" 76 | ["Налаштування X100"]="X100 settings" 77 | ["Статус X100"]="X100 status" 78 | 79 | ["Встановлюємо DB1000N"]="Installing DB1000N" 80 | ["DB1000N успішно встановлено"]="DB1000N installed successfully" 81 | ["Встановлюємо MHDDOS"]="Installing MHDDOS" 82 | ["MHDDOS успішно встановлено"]="MHDDOS installed successfully" 83 | ["Встановлюємо DISTRESS"]="Installing DISTRESS" 84 | ["DISTRESS успішно встановлено"]="DISTRESS installed successfully" 85 | 86 | ["Встановлюємо Docker"]="Installing Docker" 87 | ["Docker успішно встановлено"]="Docker installed successfully" 88 | 89 | ["Встановлюємо Fail2ban"]="Installing Fail2ban" 90 | ["Fail2ban успішно встановлено"]="Fail2ban installed successfully" 91 | ["Налаштовуємо Fail2ban"]="Setting Fail2ban" 92 | ["Fail2ban успішно налаштовано"]="Fail2ban set up successfully" 93 | ["Fail2ban не встановлений, будь ласка встановіть і спробуйте знову"]="Fail2ban is not installed, please install and try again" 94 | ["Увімкнути захист від брутфорсу"]="Enable brute force protection" 95 | ["Вимкнути захист від брутфорсу"]="Disable brute force protection" 96 | ["Fail2ban успішно увімкнено"]="Fail2ban successfully enabled" 97 | ["Fail2ban успішно вимкнено"]="Fail2ban successfully disabled" 98 | 99 | ["Встановлюємо UFW фаєрвол"]="Installing UFW firewall" 100 | ["Фаєрвол UFW встановлено і деактивовано"]="UFW firewall installed and deactivated" 101 | ["Фаєрвол UFW налаштовано і активовано"]="UFW firewall set up and activated" 102 | ["UFW не встановлений, будь ласка встановіть і спробуйте знову"]="UFW is not installed, please install and try again" 103 | ["Налаштовуємо UFW фаєрвол"]="Setting UFW firewall" 104 | ["Увімкнути фаервол"]="Enable UFW firewall" 105 | ["Вимкнути фаервол"]="Disable UFW firewall" 106 | ["UFW успішно увімкнено"]="UFW successfully enabled" 107 | ["UFW успішно вимкнено"]="UFW successfully disabled" 108 | 109 | ["Залишіть пустим якщо бажаєте видалити пераметри"]="Leave blank if you want to delete parameters" 110 | ["Автооновлення (1 | 0): "]="Autoupdate (1 | 0): " 111 | ["Будь ласка введіть правильні значення"]="Please enter the correct values" 112 | ["Проксі (шлях до файлу або веб-ресурсу): "]="Proxy (path to file or web resource): " 113 | ["Проксі (шлях до файлу): "]="Proxy (path to file): " 114 | ["Масштабування (1 | X): "]="Scaling (1 | X): " 115 | ["Список проксі у форматі"]="List of proxies in format" 116 | ["або"]="or" 117 | ["Укажіть протокол, якщо формат"]="Specify the protocol if the format is" 118 | ["Протокол проксі (socks5, socks4): "]="Proxy protocol (socks5, socks4): " 119 | 120 | ["Відсоткове співвідношення використання власної IP адреси (0-100): "]="Percentage of personal IP address usage (0-100): " 121 | 122 | ["Увімкнути ICMP флуд (1 | 0): "]="Enable ICMP flood (1 | 0): " 123 | ["Увімкнути packet флуд (1 | 0): "]="Enable packet flood (1 | 0): " 124 | ["Вимкнути UDP флуд (1 | 0): "]="Disable UDP flood (1 | 0): " 125 | ["Кількість пакетів (1-100): "]="Number of packets (1-100): " 126 | 127 | 128 | ["Розмір UDP пакунку (576-1420): "]="UDP packet size (576-1420): " 129 | ["Кількість підключень Tor (0-100): "]="Number of Tor connections (0-100): " 130 | ["Кількість створювачів завдань (50-100000): "]="Number of task creators (50-100000): " 131 | 132 | ["Відсутня реалізація MHDDOS для x86 архітектури, що відповідає 32-бітній розрядності"]="There's no MHDDOS implementation for the x86 architecture that corresponds to the 32-bit variant" 133 | ["Неможливо визначити розрядность операційної системи"]="Unable to determine the operating system's bit depth" 134 | 135 | ["Юзер ІД: "]="User ID: " 136 | ["Мова (ua | en | es | de | pl | it): "]="Language (ua | en | es | de | pl | it): " 137 | ["Кількість копій (auto | X): "]="Number of copies (auto | X): " 138 | ["Успішно виконано"]="Execution successful" 139 | 140 | ["Порти успішно розширено"]="Ports successfully extended" 141 | ["Наразі всі порти розширено"]="All ports are currently extended" 142 | ["Не можливо виконати дію"]="Unable to perform the action" 143 | 144 | ["Перевіряємо наявність оновлень"]="Checking for updates" 145 | ["Оновляємо ADSS"]="Updating ADSS" 146 | ["ADSS успішно оновлено"]="ADSS updated successfully" 147 | ["Встановлена версія"]="Installed Version" 148 | ["Актуальна версія"]="Latest Version" 149 | 150 | ["Назва інтерфейсу (ensXXX, ethX, тощо.)"]="Interface name (ensXXX, ethX, etc.)" 151 | ["Мережеві інтерфейси (через кому: eth0,eth1,тощо.)"]="Interface names (Comma separated: eth0,eth1,etc.)" 152 | ["Мережеві інтерфейси (через пробіл: eth0 eth1 тощо.)"]="Interface names (Space separated: eth0 eth1 etc.)" 153 | ["Інтерфейс: "]="Interface: " 154 | ["Інтерфейси: "]="Interfaces: " 155 | ["ADSS успішно видалено"]="ADSS was deleted successfully" 156 | 157 | ["Керування розкладом MHDDOS"]="Manage MHDDOS schedule" 158 | ["Керування розкладом DISTRESS"]="Manage DISTRESS schedule" 159 | ["Керування розкладом X100"]="Manage X100 schedule" 160 | ["Увімкнути автозапуск X100"]="Enable autostart for X100" 161 | 162 | ["Або згенеруйте його за посиланням"]="Or generate it via the link" 163 | ["Зверніть увагу на ваш час командою"]="Pay attention to your time by command" 164 | ["Наприклад:"]="For example:" 165 | ["Запуск MHDDOS о 20:00 щодня"]="MHDDOS starts at 8:00 PM every day" 166 | ["Зупинка MHDDOS о 08:00 щодня"]="MHDDOS stop at 08:00 daily" 167 | ["Запуск DISTRESS о 20:00 щодня"]="DISTRESS starts at 8:00 PM every day" 168 | ["Зупинка DISTRESS о 08:00 щодня"]="DISTRESS stop at 08:00 daily" 169 | ["Запуск X100 о 20:00 щодня"]="X100 starts at 8:00 PM every day" 170 | ["Зупинка X100 о 08:00 щодня"]="X100 stop at 08:00 daily" 171 | ["Введіть cron-час для ЗАПУСКУ (формат: * * * * *): "]="Enter cron time to START (format: * * * * *): " 172 | ["Введіть cron-час для ЗУПИНКИ (формат: * * * * *): "]="Enter cron time for STOP (format: * * * * *): " 173 | ["Запуск MHDDOS за розкладом припинено"]="Scheduled MHDDOS launch stopped" 174 | ["Запуск X100 за розкладом припинено"]="Scheduled X100 launch stopped" 175 | ["Запуск DISTRESS за розкладом припинено"]="Scheduled X100 launch stopped" 176 | ["Запустити MHDDOS за розкладом?"]="Run MHDDOS on a schedule?" 177 | ["Запустити DISTRESS за розкладом?"]="Run DISTRESS on a schedule?" 178 | ["Запустити X100 за розкладом?"]="Run X100 on a schedule?" 179 | ["MHDDOS буде ЗАПУЩЕНО за розкладом"]="MHDDOS will be RUNNING on schedule" 180 | ["DISTRESS буде ЗАПУЩЕНО за розкладом"]="DISTRESS will be RUNNING on schedule" 181 | ["X100 буде ЗАПУЩЕНО за розкладом"]="X100 will be RUNNING on schedule" 182 | ["Так"]="Yes" 183 | ["Ні"]="No" 184 | ["Зупинити запуск MHDDOS за розкладом"]="Stop MHDDOS from running on a schedule" 185 | ["Зупинити запуск DISTRESS за розкладом"]="Stop DISTRESS from running on a schedule" 186 | ["Зупинити запуск X100 за розкладом"]="Stop X100 from running on a schedule" 187 | ["Запуск MHDDOS за розкладом успішно ПРИПИНЕНО"]="Scheduled MHDDOS launch successfully STOPPED" 188 | ["Запуск DISTRESS за розкладом успішно ПРИПИНЕНО"]="Scheduled DISTRESS launch successfully STOPPED" 189 | ["Запуск X100 за розкладом успішно ПРИПИНЕНО"]="Scheduled X100 launch successfully STOPPED" 190 | ["хвилина"]="minute" 191 | ["година"]="hour" 192 | ["день місяця"]="day of the month" 193 | ["місяць"]="month" 194 | ["день тижня"]="day of the week" 195 | ) 196 | 197 | export localization -------------------------------------------------------------------------------- /menu/autoloading.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | autoload_configuration() { 4 | menu_items=() 5 | if mhddos_installed ; then 6 | is_not_arm_arch 7 | if [[ $? == 1 ]]; then 8 | if mhddos_enabled; then 9 | mhddos_item_menu="$(trans "Вимкнути автозапуск MHDDOS")" 10 | else 11 | mhddos_item_menu="$(trans "Увімкнути автозапуск MHDDOS")" 12 | fi 13 | mhddos_scheduler="$(trans "Керування розкладом MHDDOS")" 14 | menu_items+=("$mhddos_item_menu" "$mhddos_scheduler") 15 | check_if_mhddos_running_on_schedule 16 | if [[ $? == 0 ]]; then 17 | mhddos_scheduler_stop="$(trans "Зупинити запуск MHDDOS за розкладом")" 18 | menu_items+=("$mhddos_scheduler_stop") 19 | fi 20 | fi 21 | fi 22 | 23 | # if db1000n_installed ; then 24 | # if db1000n_enabled; then 25 | # db1000n_item_menu="$(trans "Вимкнути автозапуск DB1000N")" 26 | # else 27 | # db1000n_item_menu="$(trans "Увімкнути автозапуск DB1000N")" 28 | # fi 29 | # menu_items+=("$db1000n_item_menu") 30 | # fi 31 | 32 | if distress_installed ; then 33 | if distress_enabled; then 34 | distress_item_menu="$(trans "Вимкнути автозапуск DISTRESS")" 35 | else 36 | distress_item_menu="$(trans "Увімкнути автозапуск DISTRESS")" 37 | fi 38 | distress_scheduler="$(trans "Керування розкладом DISTRESS")" 39 | menu_items+=("$distress_item_menu" "$distress_scheduler") 40 | check_if_distress_running_on_schedule 41 | if [[ $? == 0 ]]; then 42 | distress_scheduler_stop="$(trans "Зупинити запуск DISTRESS за розкладом")" 43 | menu_items+=("$distress_scheduler_stop") 44 | fi 45 | fi 46 | 47 | if x100_installed; then 48 | if x100_enabled; then 49 | x100_item_menu="$(trans "Вимкнути автозапуск X100")" 50 | else 51 | x100_item_menu="$(trans "Увімкнути автозапуск X100")" 52 | fi 53 | x100_scheduler="$(trans "Керування розкладом X100")" 54 | menu_items+=("$x100_item_menu" "$x100_scheduler") 55 | check_if_x100_running_on_schedule 56 | if [[ $? == 0 ]]; then 57 | x100_scheduler_stop="$(trans "Зупинити запуск X100 за розкладом")" 58 | menu_items+=("$x100_scheduler_stop") 59 | fi 60 | fi 61 | 62 | if [[ ${#menu_items[@]} -eq 0 ]]; then 63 | confirm_dialog "$(trans "ДДОС інструменти не встановлено")" 64 | ddos_tool_managment 65 | fi 66 | 67 | menu_items+=("$(trans "Повернутись назад")") 68 | 69 | res=$(display_menu "$(trans "Налаштування автозапуску")" "${menu_items[@]}") 70 | 71 | case "$res" in 72 | "$(trans "Керування розкладом MHDDOS")") 73 | mhddos_configure_scheduler 74 | ;; 75 | "$(trans "Зупинити запуск MHDDOS за розкладом")") 76 | stop_mhddos_on_schedule 77 | confirm_dialog "$(trans "Запуск MHDDOS за розкладом успішно ПРИПИНЕНО")" 78 | autoload_configuration 79 | ;; 80 | "$(trans "Керування розкладом DISTRESS")") 81 | distress_configure_scheduler 82 | ;; 83 | "$(trans "Зупинити запуск DISTRESS за розкладом")") 84 | stop_distress_on_schedule 85 | confirm_dialog "$(trans "Запуск DISTRESS за розкладом успішно ПРИПИНЕНО")" 86 | autoload_configuration 87 | ;; 88 | "$(trans "Керування розкладом X100")") 89 | x100_configure_scheduler 90 | ;; 91 | "$(trans "Зупинити запуск X100 за розкладом")") 92 | stop_x100_on_schedule 93 | confirm_dialog "$(trans "Запуск X100 за розкладом успішно ПРИПИНЕНО")" 94 | autoload_configuration 95 | ;; 96 | "$(trans "Вимкнути автозапуск MHDDOS")") 97 | mhddos_auto_disable 98 | autoload_configuration 99 | ;; 100 | "$(trans "Увімкнути автозапуск MHDDOS")") 101 | mhddos_auto_enable 102 | autoload_configuration 103 | ;; 104 | # "$(trans "Вимкнути автозапуск DB1000N")") 105 | # db1000n_auto_disable 106 | # autoload_configuration 107 | # ;; 108 | # "$(trans "Увімкнути автозапуск DB1000N")") 109 | # db1000n_auto_enable 110 | # autoload_configuration 111 | # ;; 112 | "$(trans "Вимкнути автозапуск DISTRESS")") 113 | distress_auto_disable 114 | autoload_configuration 115 | ;; 116 | "$(trans "Увімкнути автозапуск DISTRESS")") 117 | distress_auto_enable 118 | autoload_configuration 119 | ;; 120 | "$(trans "Вимкнути автозапуск X100")") 121 | x100_auto_disable 122 | autoload_configuration 123 | ;; 124 | "$(trans "Увімкнути автозапуск X100")") 125 | x100_auto_enable 126 | autoload_configuration 127 | ;; 128 | "$(trans "Повернутись назад")") 129 | ddos_tool_managment 130 | ;; 131 | esac 132 | } 133 | -------------------------------------------------------------------------------- /menu/ddos_tool_managment.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | check_enabled() { 4 | services=("mhddos" "distress" "db1000n" "x100") 5 | stop_service=0 6 | for service in "${services[@]}"; do 7 | if sudo systemctl is-active "$service" >/dev/null; then 8 | stop_service=1 9 | break 10 | fi 11 | done 12 | return "$stop_service" 13 | } 14 | 15 | create_symlink() { 16 | sudo rm -f /etc/systemd/system/mhddos.service 17 | sudo rm -f /etc/systemd/system/distress.service 18 | sudo rm -f /etc/systemd/system/db1000n.service 19 | sudo rm -f /etc/systemd/system/x100.service 20 | 21 | sudo ln -sf "$SCRIPT_DIR"/services/mhddos.service /etc/systemd/system/mhddos.service >/dev/null 2>&1 22 | sudo ln -sf "$SCRIPT_DIR"/services/distress.service /etc/systemd/system/distress.service >/dev/null 2>&1 23 | sudo ln -sf "$SCRIPT_DIR"/services/db1000n.service /etc/systemd/system/db1000n.service >/dev/null 2>&1 24 | sudo ln -sf "$SCRIPT_DIR"/services/x100.service /etc/systemd/system/x100.service >/dev/null 2>&1 25 | } 26 | 27 | stop_services() { 28 | adss_dialog "$(trans "Зупиняємо атаку")" 29 | sudo systemctl stop distress.service >/dev/null 30 | sudo systemctl stop db1000n.service >/dev/null 31 | sudo systemctl stop mhddos.service >/dev/null 32 | confirm_dialog "$(trans "Атака зупинена")" 33 | ddos_tool_managment 34 | } 35 | 36 | get_ddoss_status() { 37 | services=("mhddos" "distress" "db1000n" "x100") 38 | service="" 39 | 40 | for element in "${services[@]}"; do 41 | if systemctl is-active --quiet "$element.service"; then 42 | service="$element" 43 | break 44 | fi 45 | done 46 | if [[ -n "$service" ]]; then 47 | while true; do 48 | clear 49 | echo -e "${GREEN}$(trans "Запущено $service")${NC}" 50 | 51 | #Fix Kali 52 | #https://t.me/c/1764189517/301014 53 | #https://t.me/c/1764189517/300970 54 | #tail --lines=20 /var/log/syslog | grep -w "$service" 55 | #Fix Parrot 56 | #journalctl -n 20 -u "$service.service" --no-pager 57 | 58 | #Fix Ubuntu < 19 59 | lsb_version="$(. /etc/os-release && echo "$VERSION_ID")" 60 | lsb_id="$(. /etc/os-release && echo "$ID")" 61 | 62 | if [[ "$lsb_id" == "ubuntu" ]] && 63 | [[ "$lsb_version" < 19* ]]; then 64 | journalctl -n 20 -u "$service.service" --no-pager 65 | else 66 | if [[ $service == "x100" ]]; then 67 | tail --lines=20 "$SCRIPT_DIR/x100-for-docker/put-your-ovpn-files-here/x100-log-short.txt" 68 | else 69 | tail --lines=20 /var/log/adss.log 70 | fi 71 | fi 72 | 73 | echo -e "${ORANGE}$(trans "Нажміть будь яку клавішу щоб продовжити")${NC}" 74 | sleep 3 75 | if read -rsn1 -t 0.1; then 76 | break 77 | fi 78 | done 79 | else 80 | confirm_dialog "$(trans "Немає запущених процесів")" 81 | fi 82 | } 83 | 84 | ddos_tool_managment() { 85 | menu_items=("$(trans "Статус атаки")") 86 | check_enabled 87 | enabled_tool=$? 88 | if [[ "$enabled_tool" == 1 ]]; then 89 | menu_items+=("$(trans "Зупинити атаку")") 90 | fi 91 | menu_items+=("$(trans "Налаштування автозапуску")") 92 | is_not_arm_arch 93 | if [[ $? == 1 ]]; then 94 | menu_items+=("MHDDOS") 95 | fi 96 | # menu_items+=("DB1000N" "DISTRESS" "X100" "$(trans "Повернутись назад")") 97 | menu_items+=("DISTRESS" "X100" "$(trans "Повернутись назад")") 98 | res=$(display_menu "$(trans "Управління ддос інструментами")" "${menu_items[@]}") 99 | 100 | case "$res" in 101 | "$(trans "Статус атаки")") 102 | get_ddoss_status 103 | ddos_tool_managment 104 | ;; 105 | "$(trans "Зупинити атаку")") 106 | stop_services 107 | ;; 108 | "$(trans "Налаштування автозапуску")") 109 | autoload_configuration 110 | ;; 111 | "MHDDOS") 112 | initiate_mhddos 113 | ;; 114 | # "DB1000N") 115 | # initiate_db1000n 116 | # ;; 117 | "DISTRESS") 118 | initiate_distress 119 | ;; 120 | "X100") 121 | initiate_x100 122 | ;; 123 | "$(trans "Повернутись назад")") 124 | ddos 125 | ;; 126 | esac 127 | } 128 | -------------------------------------------------------------------------------- /menu/ddoss.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | ddos() { 4 | menu_items=("$(trans "Встановлення ддос інструментів")" "$(trans "Управління ддос інструментами")" "$(trans "Повернутись назад")") 5 | res=$(display_menu "DDOS" "${menu_items[@]}") 6 | 7 | case "$res" in 8 | "$(trans "Встановлення ддос інструментів")") 9 | clear 10 | echo -ne "\n" 11 | echo -ne "${GREEN}$(trans "Для збору особистої статистики та відображення у лідерборді на офіційному сайті.")${NC} ${ORANGE}https://itarmy.com.ua/leaderboard ${NC}""\n" 12 | echo -ne "${GREEN}$(trans "Надається Telegram ботом")${NC} ${ORANGE}@itarmy_stats_bot${NC}""\n" 13 | echo -ne "\n" 14 | echo -ne "${GREEN}$(trans "Щоб пропустити, натисніть Enter")${NC}""\n""\n" 15 | echo -ne "$(trans "Юзер ІД: ")" 16 | read user_id 17 | 18 | if [[ "$user_id" ]]; then 19 | sed -i "s/user-id=.*/user-id=$user_id/g" ${SCRIPT_DIR}/services/EnvironmentFile 20 | fi 21 | 22 | is_not_arm_arch 23 | if [[ $? == 1 ]]; then 24 | install_mhddos 25 | fi 26 | 27 | # install_db1000n 28 | install_distress 29 | ddos 30 | ;; 31 | "$(trans "Управління ддос інструментами")") 32 | ddos_tool_managment 33 | ;; 34 | "$(trans "Повернутись назад")") 35 | main_menu 36 | ;; 37 | esac 38 | } 39 | -------------------------------------------------------------------------------- /menu/main_menu.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | main_menu() { 4 | menu_items=("$(trans "Статус атаки")" "$(trans "Розширення портів")" "DDOS" "$(trans "Налаштування безпеки")") 5 | res=$(display_menu "$(trans "Головне меню")" "${menu_items[@]}") 6 | 7 | case "$res" in 8 | "$(trans "Статус атаки")") 9 | get_ddoss_status 10 | main_menu 11 | ;; 12 | "$(trans "Розширення портів")") 13 | extend_ports 14 | main_menu 15 | ;; 16 | "DDOS") 17 | ddos 18 | ;; 19 | "$(trans "Налаштування безпеки")") 20 | security_settings 21 | ;; 22 | esac 23 | } 24 | -------------------------------------------------------------------------------- /menu/menu_init.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | display_menu() { 4 | title="$1" 5 | shift 6 | options=("$@") 7 | local dialog_args=() 8 | local index 9 | for index in "${!options[@]}"; do 10 | dialog_args+=("${options[index]}" "") 11 | done 12 | local selection=$(dialog --ascii-lines --clear --stdout --cancel-label "$(trans "Вихід")" --title "$title" \ 13 | --menu "$(trans "Оберіть опцію:")" 0 0 0 "${dialog_args[@]}") 14 | 15 | if [[ -z "$selection" ]]; then 16 | clear >$(tty) 17 | echo "Exiting..." 18 | exit 0 19 | fi 20 | echo "$selection" 21 | } -------------------------------------------------------------------------------- /menu/security_configuration.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | security_configuration() { 4 | 5 | menu_items=() 6 | ufw="" 7 | fail2ban="" 8 | ufw_installed 9 | if [[ $? == 1 ]]; then 10 | ufw=1 11 | ufw_is_active 12 | if [[ $? == 1 ]]; then 13 | menu_items+=("$(trans "Вимкнути фаервол")") 14 | else 15 | menu_items+=("$(trans "Увімкнути фаервол")") 16 | fi 17 | fi 18 | 19 | fail2ban_installed 20 | if [[ $? == 1 ]]; then 21 | fail2ban=1 22 | fail2ban_is_active 23 | if [[ $? == 1 ]]; then 24 | menu_items+=("$(trans "Вимкнути захист від брутфорсу")") 25 | else 26 | menu_items+=("$(trans "Увімкнути захист від брутфорсу")") 27 | fi 28 | fi 29 | 30 | menu_items+=("$(trans "Налаштування фаєрвола")" "$(trans "Налаштування захисту від брутфорса")" "$(trans "Повернутись назад")") 31 | res=$(display_menu "$(trans "Налаштування захисту")" "${menu_items[@]}") 32 | 33 | case "$res" in 34 | "$(trans "Вимкнути фаервол")") 35 | disable_ufw 36 | security_configuration 37 | ;; 38 | "$(trans "Увімкнути фаервол")") 39 | enable_ufw 40 | security_configuration 41 | ;; 42 | "$(trans "Вимкнути захист від брутфорсу")") 43 | disable_fail2ban 44 | security_configuration 45 | ;; 46 | "$(trans "Увімкнути захист від брутфорсу")") 47 | enable_fail2ban 48 | security_configuration 49 | ;; 50 | "$(trans "Налаштування фаєрвола")") 51 | configure_ufw 52 | security_configuration 53 | ;; 54 | "$(trans "Налаштування захисту від брутфорса")") 55 | configure_fail2ban 56 | security_configuration 57 | ;; 58 | "$(trans "Повернутись назад")") 59 | security_settings 60 | ;; 61 | esac 62 | } 63 | -------------------------------------------------------------------------------- /menu/security_settings.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | security_settings() { 4 | menu_items=("$(trans "Встановлення захисту")" "$(trans "Налаштування захисту")" "$(trans "Повернутись назад")") 5 | res=$(display_menu "$(trans "Налаштування безпеки")" "${menu_items[@]}") 6 | 7 | case "$res" in 8 | "$(trans "Встановлення захисту")") 9 | install_ufw 10 | install_fail2ban 11 | security_settings 12 | ;; 13 | "$(trans "Налаштування захисту")") 14 | security_configuration 15 | ;; 16 | "$(trans "Повернутись назад")") 17 | main_menu 18 | ;; 19 | esac 20 | } 21 | -------------------------------------------------------------------------------- /services/EnvironmentFile: -------------------------------------------------------------------------------- 1 | [mhddos] 2 | user-id= 3 | lang=ua 4 | copies=auto 5 | vpn=false 6 | vpn-percents=20 7 | threads=8000 8 | proxies= 9 | bind= 10 | [/mhddos] 11 | 12 | [distress] 13 | user-id= 14 | use-my-ip=0 15 | use-tor=0 16 | concurrency=4096 17 | direct-udp-failover=0 18 | interface= 19 | [/distress] 20 | 21 | [db1000n] 22 | user-id= 23 | enable-self-update=1 24 | scale=1 25 | proxylist= 26 | default-proxy-proto= 27 | interface= 28 | [/db1000n] -------------------------------------------------------------------------------- /services/db1000n.service: -------------------------------------------------------------------------------- 1 | [Unit] 2 | Description=db1000n 3 | After=network.target 4 | StartLimitIntervalSec=0 5 | 6 | [Service] 7 | Type=simple 8 | Restart=on-failure 9 | RestartSec=10 10 | ExecStart=/opt/itarmy/bin/db1000n 11 | WorkingDirectory=/opt/itarmy/bin 12 | SyslogIdentifier=db1000n 13 | SyslogFacility=daemon 14 | StandardOutput=append:/var/log/adss.log 15 | StandardError=append:/var/log/adss.log 16 | 17 | [Install] 18 | WantedBy=multi-user.target 19 | -------------------------------------------------------------------------------- /services/distress.service: -------------------------------------------------------------------------------- 1 | [Unit] 2 | Description=distress 3 | After=network.target 4 | StartLimitIntervalSec=0 5 | 6 | [Service] 7 | Type=simple 8 | Restart=on-failure 9 | RestartSec=10 10 | ExecStart=/opt/itarmy/bin/distress 11 | WorkingDirectory=/opt/itarmy/bin 12 | SyslogIdentifier=distress 13 | SyslogFacility=daemon 14 | StandardOutput=append:/var/log/adss.log 15 | StandardError=append:/var/log/adss.log 16 | 17 | [Install] 18 | WantedBy=multi-user.target -------------------------------------------------------------------------------- /services/mhddos.service: -------------------------------------------------------------------------------- 1 | [Unit] 2 | Description=mhddos_proxy 3 | After=network.target 4 | StartLimitIntervalSec=0 5 | 6 | [Service] 7 | Type=simple 8 | Restart=on-failure 9 | RestartSec=10 10 | ExecStart=/opt/itarmy/bin/mhddos_proxy_linux 11 | WorkingDirectory=/opt/itarmy/bin 12 | SyslogIdentifier=mhddos 13 | SyslogFacility=daemon 14 | StandardOutput=append:/var/log/adss.log 15 | StandardError=append:/var/log/adss.log 16 | 17 | [Install] 18 | WantedBy=multi-user.target -------------------------------------------------------------------------------- /services/x100.service: -------------------------------------------------------------------------------- 1 | [Unit] 2 | Description=x100 3 | After=network.target 4 | StartLimitIntervalSec=0 5 | 6 | [Service] 7 | Type=simple 8 | Restart=on-failure 9 | RestartSec=10 10 | ExecStart=/opt/itarmy/x100-for-docker/for-macOS-and-Linux-hosts/run-and-auto-update.bash 11 | ExecStop=/opt/itarmy/x100-for-docker/for-macOS-and-Linux-hosts/stop.bash 12 | WorkingDirectory=/opt/itarmy/x100-for-docker/for-macOS-and-Linux-hosts/ 13 | SyslogIdentifier=x100 14 | SyslogFacility=daemon 15 | StandardOutput=append:/opt/itarmy/x100-for-docker/put-your-ovpn-files-here/x100-log-short.txt 16 | StandardError=append:/opt/itarmy/x100-for-docker/put-your-ovpn-files-here/x100-log-short.txt 17 | 18 | [Install] 19 | WantedBy=multi-user.target 20 | -------------------------------------------------------------------------------- /utils/datapatch.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | apply_patch() { 4 | envFile="$SCRIPT_DIR/services/EnvironmentFile" 5 | 6 | # for 1.1.0 7 | if ! awk '/\[distress\]/,/\[\/distress\]/' "$envFile" | grep -q 'interface='; then 8 | sed -i 's/\[\/distress\]/interface=\n\[\/distress\]/g' "$envFile" 9 | fi 10 | 11 | # if ! awk '/\[mhddos\]/,/\[\/mhddos\]/' "$envFile" | grep -q 'bind='; then 12 | # sed -i 's/\[\/mhddos\]/bind=\n\[\/mhddos\]/g' "$envFile" 13 | # fi 14 | # end 1.1.0 15 | 16 | # for 1.1.1 17 | if ! awk '/\[db1000n\]/,/\[\/db1000n\]/' "$envFile" | grep -q 'interface='; then 18 | sed -i 's/\[\/db1000n\]/interface=\n\[\/db1000n\]/g' "$envFile" 19 | fi 20 | # end 1.1.1 21 | 22 | # for 1.1.3 23 | if ! awk '/\[mhddos\]/,/\[\/mhddos\]/' "$envFile" | grep -q 'source='; then 24 | sed -i 's/\[\/mhddos\]/source=adss\n\[\/mhddos\]/g' "$envFile" 25 | regenerate_mhddos_service_file 26 | fi 27 | # end 1.1.3 28 | 29 | # for 1.1.4 30 | # if awk '/\[distress\]/,/\[\/distress\]/' "$envFile" | grep -q 'direct-udp-failover='; then 31 | # sed -i 's/direct-udp-failover/direct-udp-mixed-flood/g' "$envFile" 32 | # regenerate_distress_service_file 33 | # fi 34 | 35 | if ! awk '/\[distress\]/,/\[\/distress\]/' "$envFile" | grep -q 'udp-packet-size='; then 36 | sed -i 's/\[\/distress\]/udp-packet-size=4096\n\[\/distress\]/g' "$envFile" 37 | regenerate_distress_service_file 38 | fi 39 | if ! awk '/\[distress\]/,/\[\/distress\]/' "$envFile" | grep -q 'direct-udp-mixed-flood-packets-per-conn='; then 40 | sed -i 's/\[\/distress\]/direct-udp-mixed-flood-packets-per-conn=30\n\[\/distress\]/g' "$envFile" 41 | regenerate_distress_service_file 42 | fi 43 | # for 1.1.4 44 | 45 | # for 1.1.8 46 | if awk '/\[mhddos\]/,/\[\/mhddos\]/' "$envFile" | grep -q 'vpn='; then 47 | sed -i '/\[mhddos\]/,/\[\/mhddos\]/ s/^vpn=.*//' "$envFile" 48 | regenerate_mhddos_service_file 49 | fi 50 | if awk '/\[mhddos\]/,/\[\/mhddos\]/' "$envFile" | grep -q 'vpn-percents='; then 51 | sed -i '/\[mhddos\]/,/\[\/mhddos\]/ s/^vpn-percents=.*//' "$envFile" 52 | regenerate_mhddos_service_file 53 | fi 54 | 55 | sed -i '/\[mhddos\]/,/\[\/mhddos\]/ { 56 | /^\[mhddos\]/b 57 | /^\[\/mhddos\]/b 58 | /^[[:space:]]*$/d 59 | }' "$envFile" 60 | 61 | if ! awk '/\[mhddos\]/,/\[\/mhddos\]/' "$envFile" | grep -q 'use-my-ip='; then 62 | sed -i 's/\[\/mhddos\]/use-my-ip=0\n\[\/mhddos\]/g' "$envFile" 63 | regenerate_mhddos_service_file 64 | fi 65 | if ! awk '/\[distress\]/,/\[\/distress\]/' "$envFile" | grep -q 'source='; then 66 | sed -i 's/\[\/distress\]/source=adss\n\[\/distress\]/g' "$envFile" 67 | regenerate_distress_service_file 68 | fi 69 | if ! awk '/\[db1000n\]/,/\[\/db1000n\]/' "$envFile" | grep -q 'source='; then 70 | sed -i 's/\[\/db1000n\]/source=adss\n\[\/db1000n\]/g' "$envFile" 71 | regenerate_db1000n_service_file 72 | fi 73 | # for 1.1.8 74 | 75 | # for 1.2.1 76 | udpPackageSize=$(sed -n '/\[distress\]/,/\[\/distress\]/ s/udp-packet-size=\([0-9]\+\)/\1/p' "$envFile") 77 | if [[ $udpPackageSize -gt 1420 ]]; then 78 | sed -i '/\[distress\]/,/\[\/distress\]/ s/udp-packet-size=[0-9]\+/udp-packet-size=1252/g' "$envFile" 79 | regenerate_distress_service_file 80 | fi 81 | # for 1.2.1 82 | 83 | # for 1.2.2 84 | if awk '/\[mhddos\]/,/\[\/mhddos\]/' "$envFile" | grep -q 'bind='; then 85 | sed -i '/\[mhddos\]/,/\[\/mhddos\]/ s/bind=/ifaces=/g' "$envFile" 86 | regenerate_mhddos_service_file 87 | elif ! awk '/\[mhddos\]/,/\[\/mhddos\]/' "$envFile" | grep -q 'ifaces='; then 88 | sed -i 's/\[\/mhddos\]/ifaces=\n\[\/mhddos\]/g' "$envFile" 89 | regenerate_mhddos_service_file 90 | fi 91 | if awk '/\[distress\]/,/\[\/distress\]/' "$envFile" | grep -q 'direct-udp-failover='; then 92 | sed -i '/\[distress\]/,/\[\/distress\]/ s/direct-udp-failover=/disable-udp-flood=/g' "$envFile" 93 | regenerate_distress_service_file 94 | fi 95 | if ! awk '/\[distress\]/,/\[\/distress\]/' "$envFile" | grep -q 'enable-icmp-flood='; then 96 | sed -i 's/\[\/distress\]/enable-icmp-flood=0\n\[\/distress\]/g' "$envFile" 97 | regenerate_distress_service_file 98 | fi 99 | if ! awk '/\[distress\]/,/\[\/distress\]/' "$envFile" | grep -q 'enable-packet-flood='; then 100 | sed -i 's/\[\/distress\]/enable-packet-flood=0\n\[\/distress\]/g' "$envFile" 101 | regenerate_distress_service_file 102 | fi 103 | if awk '/\[distress\]/,/\[\/distress\]/' "$envFile" | grep -q 'direct-udp-mixed-flood='; then 104 | sed -i '/^\[distress\]/,/^\[\/distress\]/{/direct-udp-mixed-flood=/d}' "$envFile" 105 | regenerate_distress_service_file 106 | fi 107 | if ! awk '/\[distress\]/,/\[\/distress\]/' "$envFile" | grep -q 'disable-udp-flood='; then 108 | use_my_ip=$(sed -n '/\[distress\]/,/\[\/distress\]/ s/use-my-ip=\([0-9]\+\)/\1/p' "$envFile") 109 | if [[ $use_my_ip -eq 0 ]]; then 110 | sed -i 's/\[\/distress\]/disable-udp-flood=0\n\[\/distress\]/g' "$envFile" 111 | else 112 | sed -i 's/\[\/distress\]/disable-udp-flood=1\n\[\/distress\]/g' "$envFile" 113 | fi 114 | regenerate_distress_service_file 115 | fi 116 | if ! awk '/\[distress\]/,/\[\/distress\]/' "$envFile" | grep -q 'proxies-path='; then 117 | sed -i 's/\[\/distress\]/proxies-path=\n\[\/distress\]/g' "$envFile" 118 | regenerate_distress_service_file 119 | fi 120 | # for 1.2.2 121 | 122 | # 2.0.5 123 | if ! awk '/\[mhddos\]/,/\[\/mhddos\]/' "$envFile" | grep -q 'cron-to-run='; then 124 | sed -i 's/\[\/mhddos\]/cron-to-run=\n\[\/mhddos\]/g' "$envFile" 125 | fi 126 | if ! awk '/\[mhddos\]/,/\[\/mhddos\]/' "$envFile" | grep -q 'cron-to-stop='; then 127 | sed -i 's/\[\/mhddos\]/cron-to-stop=\n\[\/mhddos\]/g' "$envFile" 128 | fi 129 | if ! awk '/\[distress\]/,/\[\/distress\]/' "$envFile" | grep -q 'cron-to-run='; then 130 | sed -i 's/\[\/distress\]/cron-to-run=\n\[\/distress\]/g' "$envFile" 131 | fi 132 | if ! awk '/\[distress\]/,/\[\/distress\]/' "$envFile" | grep -q 'cron-to-stop='; then 133 | sed -i 's/\[\/distress\]/cron-to-stop=\n\[\/distress\]/g' "$envFile" 134 | fi 135 | 136 | if ! grep -q '^\[x100\]$' "$envFile" || ! grep -q '^\[/x100\]$' "$envFile"; then 137 | echo -e "\n[x100]\n[/x100]" >> "$envFile" 138 | fi 139 | if ! awk '/\[x100\]/,/\[\/x100\]/' "$envFile" | grep -q 'cron-to-run='; then 140 | sed -i 's/\[\/x100\]/cron-to-run=\n\[\/x100\]/g' "$envFile" 141 | fi 142 | if ! awk '/\[x100\]/,/\[\/x100\]/' "$envFile" | grep -q 'cron-to-stop='; then 143 | sed -i 's/\[\/x100\]/cron-to-stop=\n\[\/x100\]/g' "$envFile" 144 | fi 145 | 146 | # end 2.0.5 147 | } 148 | -------------------------------------------------------------------------------- /utils/db1000n.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | install_db1000n() { 4 | adss_dialog "$(trans "Встановлюємо DB1000N")" 5 | install() { 6 | cd $TOOL_DIR 7 | 8 | case "$OSARCH" in 9 | aarch64*) 10 | sudo curl -Lo db1000n_linux_arm64.tar.gz https://github.com/Arriven/db1000n/releases/latest/download/db1000n_linux_arm64.tar.gz 11 | sudo tar -xf db1000n_linux_arm64.tar.gz 12 | sudo chmod +x db1000n 13 | sudo rm db1000n_linux_arm64.tar.gz 14 | ;; 15 | 16 | armv6* | armv7* | armv8*) 17 | sudo curl -Lo db1000n_linux_armv6.tar.gz https://github.com/Arriven/db1000n/releases/latest/download/db1000n_linux_armv6.tar.gz 18 | sudo tar -xf db1000n_linux_armv6.tar.gz 19 | sudo chmod +x db1000n 20 | sudo rm db1000n_linux_armv6.tar.gz 21 | ;; 22 | 23 | x86_64*) 24 | sudo curl -Lo db1000n_linux_amd64.tar.gz https://github.com/Arriven/db1000n/releases/latest/download/db1000n_linux_amd64.tar.gz 25 | sudo tar -xf db1000n_linux_amd64.tar.gz 26 | sudo chmod +x db1000n 27 | sudo rm db1000n_linux_amd64.tar.gz 28 | ;; 29 | 30 | i386* | i686*) 31 | sudo curl -Lo db1000n_linux_386.tar.gz https://github.com/Arriven/db1000n/releases/latest/download/db1000n_linux_386.tar.gz 32 | sudo tar -xf db1000n_linux_386.tar.gz 33 | sudo chmod +x db1000n 34 | sudo rm db1000n_linux_386.tar.gz 35 | ;; 36 | 37 | *) 38 | confirm_dialog "$(trans "Неможливо визначити розрядность операційної системи")" 39 | ddos_tool_managment 40 | ;; 41 | esac 42 | regenerate_db1000n_service_file 43 | create_symlink 44 | } 45 | install > /dev/null 2>&1 46 | confirm_dialog "$(trans "DB1000N успішно встановлено")" 47 | } 48 | 49 | configure_db1000n() { 50 | clear 51 | declare -A params; 52 | echo -e "${ORANGE}$(trans "Залишіть пустим якщо бажаєте видалити пераметри")${NC}" 53 | echo -ne "\n" 54 | echo -ne "${GREEN}$(trans "Для збору особистої статистики та відображення у лідерборді на офіційному сайті.")${NC} ${ORANGE}https://itarmy.com.ua/leaderboard ${NC}""\n" 55 | echo -ne "${GREEN}$(trans "Надається Telegram ботом")${NC} ${ORANGE}@itarmy_stats_bot${NC}""\n" 56 | echo -ne "\n" 57 | read -e -p "$(trans "Юзер ІД: ")" -i "$(get_db1000n_variable 'user-id')" user_id 58 | if [[ -n "$user_id" ]];then 59 | while [[ ! $user_id =~ ^[0-9]+$ ]] 60 | do 61 | echo "$(trans "Будь ласка введіть правильні значення")" 62 | read -e -p "$(trans "Юзер ІД: ")" -i "$(get_db1000n_variable 'user-id')" user_id 63 | done 64 | fi 65 | 66 | params[user-id]=$user_id 67 | 68 | read -e -p "$(trans "Автооновлення (1 | 0): ")" -i "$(get_db1000n_variable 'enable-self-update')" enable_self_update 69 | 70 | if [[ -n "$enable_self_update" ]];then 71 | while [[ "$enable_self_update" != "1" && "$enable_self_update" != "0" ]] 72 | do 73 | echo "$(trans "Будь ласка введіть правильні значення")" 74 | read -e -p "$(trans "Автооновлення (1 | 0): ")" -i "$(get_db1000n_variable 'enable-self-update')" enable_self_update 75 | done 76 | fi 77 | 78 | params[enable-self-update]=$enable_self_update 79 | 80 | read -e -p "$(trans "Масштабування (1 | X): ")" -i "$(get_db1000n_variable 'scale')" scale 81 | if [[ -n "$scale" ]];then 82 | while [[ ! $scale =~ ^[0-9]+$ && ! $scale =~ ^[+-]?[0-9]+([.][0-9]+)?$ ]] 83 | do 84 | echo "$(trans "Будь ласка введіть правильні значення")" 85 | read -e -p "$(trans "Масштабування (1 | X): ")" -i "$(get_db1000n_variable 'scale')" scale 86 | done 87 | fi 88 | params[scale]=$scale 89 | 90 | echo -ne "\n" 91 | echo -e "$(trans "Список проксі у форматі") ${ORANGE}protocol://ip:port${NC} $(trans "або") ${ORANGE}ip:port${NC}" 92 | read -e -p "$(trans "Проксі (шлях до файлу або веб-ресурсу): ")" -i "$(get_db1000n_variable 'proxylist')" proxylist 93 | proxylist=$(echo $proxylist | sed 's/\//\\\//g') 94 | if [[ -n "$proxylist" ]];then 95 | params[proxylist]=$proxylist 96 | else 97 | params[proxylist]=" " 98 | fi 99 | 100 | if [[ -n "$proxylist" ]];then 101 | echo -ne "\n" 102 | echo -e "$(trans "Укажіть протокол, якщо формат") ${ORANGE}ip:port${NC}" 103 | read -e -p "$(trans "Протокол проксі (socks5, socks4): ")" -i "$(get_db1000n_variable 'default-proxy-proto')" default_proxy_proto 104 | if [[ -n "$default_proxy_proto" ]];then 105 | while [[ 106 | "$default_proxy_proto" != "socks5" 107 | && "$default_proxy_proto" != "socks5h" 108 | && "$default_proxy_proto" != "socks4" 109 | && "$default_proxy_proto" != "socks4a" 110 | ]] 111 | do 112 | echo "$(trans "Будь ласка введіть правильні значення")" 113 | read -e -p "$(trans "Протокол проксі (socks5, socks4, http): ")" -i "$(get_db1000n_variable 'default-proxy-proto')" default_proxy_proto 114 | done 115 | params[default-proxy-proto]=$default_proxy_proto 116 | fi 117 | else 118 | params[default-proxy-proto]=" " 119 | fi 120 | 121 | echo -ne "\n" 122 | echo -e "${ORANGE}$(trans "Назва інтерфейсу (ensXXX, ethX, тощо.)")${NC}" 123 | read -e -p "$(trans "Інтерфейс: ")" -i "$(get_db1000n_variable 'interface')" interface 124 | if [[ -n "$interface" ]];then 125 | params[interface]=$interface 126 | else 127 | params[interface]=" " 128 | fi 129 | 130 | for i in "${!params[@]}"; do 131 | value="${params[$i]}" 132 | write_db1000n_variable "$i" "$value" 133 | done 134 | regenerate_db1000n_service_file 135 | if systemctl is-active --quiet db1000n.service; then 136 | sudo systemctl restart db1000n.service >/dev/null 2>&1 137 | fi 138 | confirm_dialog "$(trans "Успішно виконано")" 139 | } 140 | 141 | get_db1000n_variable() { 142 | lines=$(sed -n "/\[db1000n\]/,/\[\/db1000n\]/p" "${SCRIPT_DIR}"/services/EnvironmentFile) 143 | variable=$(echo "$lines" | grep "$1=" | cut -d '=' -f2) 144 | echo "$variable" 145 | } 146 | 147 | write_db1000n_variable() { 148 | sed -i "/\[db1000n\]/,/\[\/db1000n\]/s/$1=.*/$1=$2/g" "${SCRIPT_DIR}"/services/EnvironmentFile 149 | } 150 | 151 | regenerate_db1000n_service_file() { 152 | lines=$(sed -n "/\[db1000n\]/,/\[\/db1000n\]/p" "${SCRIPT_DIR}"/services/EnvironmentFile) 153 | 154 | start="ExecStart=${SCRIPT_DIR}/bin/db1000n" 155 | 156 | while read -r line 157 | do 158 | key=$(echo "$line" | cut -d '=' -f1) 159 | value=$(echo "$line" | cut -d '=' -f2) 160 | 161 | if [[ "$key" = "[db1000n]" || "$key" = "[/db1000n]" ]]; then 162 | continue 163 | fi 164 | if [[ "$key" == 'enable-self-update' ]];then 165 | if [[ "$value" == 0 ]]; then 166 | continue 167 | elif [[ "$value" == 1 ]]; then 168 | value=" " 169 | fi 170 | fi 171 | if [[ "$value" ]]; then 172 | start="$start --$key $value" 173 | fi 174 | done <<< "$lines" 175 | start=$(echo $start | sed 's/\//\\\//g') 176 | 177 | sed -i "s/ExecStart=.*/$start/g" "${SCRIPT_DIR}"/services/db1000n.service 178 | 179 | sudo systemctl daemon-reload 180 | } 181 | 182 | db1000n_run() { 183 | sudo systemctl stop mhddos.service >/dev/null 2>&1 184 | sudo systemctl stop distress.service >/dev/null 2>&1 185 | x100_stop 186 | sudo systemctl start db1000n.service >/dev/null 2>&1 187 | } 188 | 189 | db1000n_stop() { 190 | sudo systemctl stop db1000n.service >/dev/null 2>&1 191 | } 192 | db1000n_auto_enable() { 193 | sudo systemctl disable mhddos.service >/dev/null 2>&1 194 | sudo systemctl disable distress.service >/dev/null 2>&1 195 | sudo systemctl disable x100 >/dev/null 2>&1 196 | sudo systemctl enable db1000n >/dev/null 2>&1 197 | create_symlink 198 | confirm_dialog "$(trans "DB1000N додано до автозавантаження")" 199 | } 200 | 201 | db1000n_auto_disable() { 202 | sudo systemctl disable db1000n >/dev/null 2>&1 203 | create_symlink 204 | confirm_dialog "$(trans "DB1000N видалено з автозавантаження")" 205 | } 206 | 207 | db1000n_enabled() { 208 | sudo systemctl is-enabled db1000n >/dev/null 2>&1 && return 0 || return 1 209 | } 210 | 211 | db1000n_get_status() { 212 | while true; do 213 | clear 214 | st=$(sudo systemctl status db1000n.service) 215 | echo "$st" 216 | echo -e "${ORANGE}$(trans "Нажміть будь яку клавішу щоб продовжити")${NC}" 217 | sleep 3 218 | if read -rsn1 -t 0.1; then 219 | break 220 | fi 221 | done 222 | initiate_db1000n 223 | } 224 | 225 | db1000n_installed() { 226 | if [[ ! -f "$TOOL_DIR/db1000n" ]]; then 227 | return 1 228 | else 229 | return 0 230 | fi 231 | } 232 | 233 | initiate_db1000n() { 234 | db1000n_installed 235 | if [[ $? == 1 ]]; then 236 | confirm_dialog "$(trans "DB1000N не встановлений, будь ласка встановіть і спробуйте знову")" 237 | ddos_tool_managment 238 | else 239 | if sudo systemctl is-active db1000n >/dev/null 2>&1; then 240 | active_disactive="$(trans "Зупинка DB1000N")" 241 | else 242 | active_disactive="$(trans "Запуск DB1000N")" 243 | fi 244 | menu_items=("$active_disactive" "$(trans "Налаштування DB1000N")" "$(trans "Статус DB1000N")" "$(trans "Повернутись назад")") 245 | res=$(display_menu "DB1000N" "${menu_items[@]}") 246 | 247 | case "$res" in 248 | "$(trans "Зупинка DB1000N")") 249 | db1000n_stop 250 | db1000n_get_status 251 | ;; 252 | "$(trans "Запуск DB1000N")") 253 | db1000n_run 254 | db1000n_get_status 255 | ;; 256 | "$(trans "Налаштування DB1000N")") 257 | configure_db1000n 258 | initiate_db1000n 259 | ;; 260 | "$(trans "Статус DB1000N")") 261 | db1000n_get_status 262 | ;; 263 | "$(trans "Повернутись назад")") 264 | ddos_tool_managment 265 | ;; 266 | esac 267 | fi 268 | } 269 | -------------------------------------------------------------------------------- /utils/definitions.sh: -------------------------------------------------------------------------------- 1 | get_distribution() { 2 | lsb_dist="" 3 | 4 | if [ -r /etc/os-release ]; then 5 | lsb_dist="$(. /etc/os-release && echo "$ID")" 6 | lsb_dist=$(echo "$lsb_dist" | tr '[:upper:]' '[:lower:]') 7 | fi 8 | 9 | echo $lsb_dist 10 | } 11 | -------------------------------------------------------------------------------- /utils/dialog.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | adss_dialog() { 4 | dialog --ascii-lines --title "Execution Message" --infobox "$1" 10 40 5 | } 6 | 7 | confirm_dialog() { 8 | dialog --ascii-lines --title "Execution Message" --infobox "$1" 10 40 9 | sleep 2 10 | } 11 | -------------------------------------------------------------------------------- /utils/distress.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | install_distress() { 4 | adss_dialog "$(trans "Встановлюємо DISTRESS")" 5 | 6 | install() { 7 | cd $TOOL_DIR 8 | package='' 9 | case "$OSARCH" in 10 | aarch64*) 11 | package=https://github.com/Yneth/distress-releases/releases/latest/download/distress_aarch64-unknown-linux-musl 12 | ;; 13 | 14 | armv6* | armv7* | armv8*) 15 | package=https://github.com/Yneth/distress-releases/releases/latest/download/distress_arm-unknown-linux-musleabi 16 | ;; 17 | 18 | x86_64*) 19 | package=https://github.com/Yneth/distress-releases/releases/latest/download/distress_x86_64-unknown-linux-musl 20 | ;; 21 | 22 | i386* | i686*) 23 | package=https://github.com/Yneth/distress-releases/releases/latest/download/distress_i686-unknown-linux-musl 24 | ;; 25 | 26 | *) 27 | confirm_dialog "$(trans "Неможливо визначити розрядность операційної системи")" 28 | ddos_tool_managment 29 | ;; 30 | esac 31 | 32 | sudo curl -Lo distress "$package" 33 | sudo chmod +x distress 34 | regenerate_distress_service_file 35 | create_symlink 36 | } 37 | install > /dev/null 2>&1 38 | confirm_dialog "$(trans "DISTRESS успішно встановлено")" 39 | } 40 | 41 | configure_distress() { 42 | clear 43 | declare -A params; 44 | 45 | echo -e "${ORANGE}$(trans "Залишіть пустим якщо бажаєте видалити пераметри")${NC}" 46 | echo -ne "\n" 47 | echo -ne "${GREEN}$(trans "Для збору особистої статистики та відображення у лідерборді на офіційному сайті.")${NC} ${ORANGE}https://itarmy.com.ua/leaderboard ${NC}""\n" 48 | echo -ne "${GREEN}$(trans "Надається Telegram ботом")${NC} ${ORANGE}@itarmy_stats_bot${NC}""\n" 49 | echo -ne "\n" 50 | read -e -p "$(trans "Юзер ІД: ")" -i "$(get_distress_variable 'user-id')" user_id 51 | if [[ -n "$user_id" ]];then 52 | while [[ ! $user_id =~ ^[0-9]+$ ]] 53 | do 54 | echo "$(trans "Будь ласка введіть правильні значення")" 55 | read -e -p "$(trans "Юзер ІД: ")" -i "$(get_distress_variable 'user-id')" user_id 56 | done 57 | fi 58 | 59 | params[user-id]=$user_id 60 | 61 | read -e -p "$(trans "Відсоткове співвідношення використання власної IP адреси (0-100): ")" -i "$(get_distress_variable 'use-my-ip')" use_my_ip 62 | 63 | if [[ -n "$use_my_ip" ]]; then 64 | while [[ $use_my_ip -lt 0 || $use_my_ip -gt 100 ]] 65 | do 66 | echo "$(trans "Будь ласка введіть правильні значення")" 67 | read -e -p "$(trans "Відсоткове співвідношення використання власної IP адреси (0-100): ")" -i "$(get_distress_variable 'use-my-ip')" use_my_ip 68 | done 69 | 70 | fi 71 | params[use-my-ip]=$use_my_ip 72 | 73 | if [[ $use_my_ip -gt 0 ]]; then 74 | 75 | read -e -p "$(trans "Увімкнути ICMP флуд (1 | 0): ")" -i "$(get_distress_variable 'enable-icmp-flood')" enable_icmp_flood 76 | if [[ -n "$enable_icmp_flood" ]];then 77 | while [[ "$enable_icmp_flood" != "1" && "$enable_icmp_flood" != "0" ]] 78 | do 79 | echo "$(trans "Будь ласка введіть правильні значення")" 80 | read -e -p "$(trans "Увімкнути ICMP флуд (1 | 0): ")" -i "$(get_distress_variable 'enable-icmp-flood')" enable_icmp_flood 81 | done 82 | fi 83 | 84 | params[enable-icmp-flood]=$enable_icmp_flood 85 | 86 | read -e -p "$(trans "Увімкнути packet флуд (1 | 0): ")" -i "$(get_distress_variable 'enable-packet-flood')" enable_packet_flood 87 | if [[ -n "$enable_packet_flood" ]];then 88 | while [[ "$enable_packet_flood" != "1" && "$enable_packet_flood" != "0" ]] 89 | do 90 | echo "$(trans "Будь ласка введіть правильні значення")" 91 | read -e -p "$(trans "Увімкнути packet флуд (1 | 0): ")" -i "$(get_distress_variable 'enable-packet-flood')" enable_packet_flood 92 | done 93 | fi 94 | params[enable-packet-flood]=$enable_packet_flood 95 | 96 | read -e -p "$(trans "Вимкнути UDP флуд (1 | 0): ")" -i "$(get_distress_variable 'disable-udp-flood')" disable_udp_flood 97 | if [[ -n "$disable_udp_flood" ]];then 98 | while [[ "$disable_udp_flood" != "1" && "$disable_udp_flood" != "0" ]] 99 | do 100 | echo "$(trans "Будь ласка введіть правильні значення")" 101 | read -e -p "$(trans "Вимкнути UDP flood (1 | 0): ")" -i "$(get_distress_variable 'disable-udp-flood')" disable_udp_flood 102 | done 103 | fi 104 | params[disable-udp-flood]=$disable_udp_flood 105 | 106 | if [[ "$disable_udp_flood" -eq 0 ]];then 107 | packageSize="$(get_distress_variable 'udp-packet-size')" 108 | if [[ -z $packageSize || $packageSize == " " ]];then 109 | packageSize=1420 110 | fi 111 | 112 | read -e -p "$(trans "Розмір UDP пакунку (576-1420): ")" -i "$packageSize" udp_packet_size 113 | if [[ -n "$udp_packet_size" ]];then 114 | while [[ "$udp_packet_size" -lt 576 || "$udp_packet_size" -gt 1420 ]] 115 | do 116 | echo "$(trans "Будь ласка введіть правильні значення")" 117 | read -e -p "$(trans "Розмір UDP пакунку (576-1420): ")" -i "$packageSize" udp_packet_size 118 | done 119 | fi 120 | 121 | params[udp-packet-size]=$udp_packet_size 122 | 123 | connCount="$(get_distress_variable 'direct-udp-mixed-flood-packets-per-conn')" 124 | if [[ -z $connCount || $connCount == " " ]];then 125 | connCount=30 126 | fi 127 | 128 | read -e -p "$(trans "Кількість пакетів (1-100): ")" -i $connCount direct_udp_mixed_flood_packets_per_conn 129 | if [[ -n "$direct_udp_mixed_flood_packets_per_conn" ]];then 130 | while [[ $direct_udp_mixed_flood_packets_per_conn -lt 0 || $direct_udp_mixed_flood_packets_per_conn -gt 100 ]] 131 | do 132 | echo "$(trans "Будь ласка введіть правильні значення")" 133 | read -e -p "$(trans "Кількість пакетів (1-100): ")" -i $connCount direct_udp_mixed_flood_packets_per_conn 134 | done 135 | fi 136 | 137 | params[direct-udp-mixed-flood-packets-per-conn]=$direct_udp_mixed_flood_packets_per_conn 138 | 139 | fi 140 | fi 141 | 142 | read -e -p "$(trans "Кількість підключень Tor (0-100): ")" -i "$(get_distress_variable 'use-tor')" use_tor 143 | if [[ -n "$use_tor" ]];then 144 | while [[ $use_tor -lt 0 || $use_tor -gt 100 ]] 145 | do 146 | echo "$(trans "Будь ласка введіть правильні значення")" 147 | read -e -p "$(trans "Кількість підключень Tor (0-100): ")" -i "$(get_distress_variable 'use-tor')" use_tor 148 | done 149 | fi 150 | 151 | params[use-tor]=$use_tor 152 | 153 | read -e -p "$(trans "Кількість створювачів завдань (50-100000): ")" -i "$(get_distress_variable 'concurrency')" concurrency 154 | if [[ -n "$concurrency" ]];then 155 | while [[ $concurrency -lt 50 || $concurrency -gt 100000 ]] 156 | do 157 | echo "$(trans "Будь ласка введіть правильні значення")" 158 | read -e -p "$(trans "Кількість створювачів завдань (50-100000): ")" -i "$(get_distress_variable 'concurrency')" concurrency 159 | done 160 | fi 161 | 162 | params[concurrency]=$concurrency 163 | 164 | read -e -p "$(trans "Проксі (шлях до файлу): ")" -i "$(get_distress_variable 'proxies-path')" proxies 165 | proxies=$(echo $proxies | sed 's/\//\\\//g') 166 | 167 | params[proxies-path]=$proxies 168 | 169 | echo -ne "\n" 170 | echo -e "${ORANGE}$(trans "Мережеві інтерфейси (через кому: eth0,eth1,тощо.)")${NC}" 171 | read -e -p "$(trans "Інтерфейси: ")" -i "$(get_distress_variable 'interface')" interface 172 | if [[ -n "$interface" ]];then 173 | params[interface]=$interface 174 | else 175 | params[interface]=" " 176 | fi 177 | 178 | for i in "${!params[@]}"; do 179 | value="${params[$i]}" 180 | write_distress_variable "$i" "$value" 181 | done 182 | regenerate_distress_service_file 183 | if systemctl is-active --quiet distress.service; then 184 | sudo rm -rf /tmp/distress >/dev/null 2>&1 185 | sudo systemctl restart distress.service >/dev/null 2>&1 186 | fi 187 | confirm_dialog "$(trans "Успішно виконано")" 188 | } 189 | 190 | get_distress_variable() { 191 | local lines=$(sed -n "/\[distress\]/,/\[\/distress\]/p" "${SCRIPT_DIR}"/services/EnvironmentFile) 192 | local variable=$(echo "$lines" | grep "$1=" | cut -d '=' -f2) 193 | echo "$variable" 194 | } 195 | 196 | write_distress_variable() { 197 | sed -i "/\[distress\]/,/\[\/distress\]/s/$1=.*/$1=$2/g" "${SCRIPT_DIR}"/services/EnvironmentFile 198 | } 199 | 200 | regenerate_distress_service_file() { 201 | local lines=$(sed -n "/\[distress\]/,/\[\/distress\]/p" "${SCRIPT_DIR}"/services/EnvironmentFile) 202 | 203 | local start="ExecStart=${SCRIPT_DIR}/bin/distress" 204 | 205 | declare -A data 206 | while read -r line 207 | do 208 | key=$(echo "$line" | cut -d '=' -f1) 209 | value=$(echo "$line" | cut -d '=' -f2) 210 | 211 | if [[ "$key" = "[distress]" || "$key" = "[/distress]" ]]; then 212 | continue 213 | fi 214 | if [[ "$key" == 'disable-udp-flood' ]]; then 215 | if [[ "$(get_distress_variable 'use-my-ip')" == 0 ]]; then 216 | continue 217 | fi 218 | if [[ "$(get_distress_variable 'disable-udp-flood')" == 0 ]]; then 219 | continue 220 | fi 221 | if [[ "$(get_distress_variable 'disable-udp-flood')" == 1 ]]; then 222 | value=" " 223 | #end result will be just "--disable-udp-flood " 224 | fi 225 | fi 226 | 227 | if [[ "$key" == 'udp-packet-size' ]]; then 228 | if [[ "$(get_distress_variable 'use-my-ip')" == 0 ]]; then 229 | continue 230 | fi 231 | if [[ "$(get_distress_variable 'disable-udp-flood')" == 1 ]]; then 232 | continue 233 | fi 234 | fi 235 | 236 | if [[ "$key" == 'direct-udp-mixed-flood-packets-per-conn' ]]; then 237 | if [[ "$(get_distress_variable 'use-my-ip')" == 0 ]]; then 238 | continue 239 | fi 240 | if [[ "$(get_distress_variable 'disable-udp-flood')" == 1 ]]; then 241 | continue 242 | fi 243 | fi 244 | 245 | if [[ "$key" == 'enable-packet-flood' ]]; then 246 | if [[ "$(get_distress_variable 'use-my-ip')" == 0 ]]; then 247 | continue 248 | fi 249 | if [[ "$(get_distress_variable 'enable-packet-flood')" == 0 ]]; then 250 | continue 251 | fi 252 | if [[ "$(get_distress_variable 'enable-packet-flood')" == 1 ]]; then 253 | value=" " 254 | #end result will be just "--enable-packet-flood " 255 | fi 256 | fi 257 | 258 | if [[ "$key" == 'enable-icmp-flood' ]]; then 259 | if [[ "$(get_distress_variable 'use-my-ip')" == 0 ]]; then 260 | continue 261 | fi 262 | if [[ "$(get_distress_variable 'enable-icmp-flood')" == 0 ]]; then 263 | continue 264 | fi 265 | if [[ "$(get_distress_variable 'enable-icmp-flood')" == 1 ]]; then 266 | value=" " 267 | #end result will be just "--enable-icmp-flood " 268 | fi 269 | fi 270 | 271 | if [[ "$key" == 'use-my-ip' && "$(get_distress_variable 'use-my-ip')" == 0 ]];then 272 | continue 273 | fi 274 | if [[ "$key" == 'use-tor' && "$(get_distress_variable 'use-tor')" == 0 ]];then 275 | continue 276 | fi 277 | 278 | if [[ "$value" ]]; then 279 | data["$key"]="$value" 280 | fi 281 | done <<< "$lines" 282 | for key in "${!data[@]}"; do 283 | start="$start --$key ${data[$key]}" 284 | done 285 | start=$(echo $start | sed 's/\//\\\//g') 286 | 287 | sed -i "s/ExecStart=.*/$start/g" "${SCRIPT_DIR}"/services/distress.service 288 | 289 | sudo systemctl daemon-reload 290 | } 291 | 292 | distress_run() { 293 | sudo rm -rf /tmp/distress >/dev/null 2>&1 294 | sudo systemctl stop mhddos.service >/dev/null 2>&1 295 | sudo systemctl stop db1000n.service >/dev/null 2>&1 296 | sudo systemctl stop x100.service >/dev/null 2>&1 297 | sudo systemctl start distress.service >/dev/null 2>&1 298 | } 299 | 300 | distress_auto_enable() { 301 | sudo systemctl disable mhddos.service >/dev/null 2>&1 302 | sudo systemctl disable db1000n.service >/dev/null 2>&1 303 | sudo systemctl disable x100 >/dev/null 2>&1 304 | sudo systemctl enable distress >/dev/null 2>&1 305 | create_symlink 306 | confirm_dialog "$(trans "DISTRESS додано до автозавантаження")" 307 | } 308 | 309 | distress_auto_disable() { 310 | sudo systemctl disable distress >/dev/null 2>&1 311 | create_symlink 312 | confirm_dialog "$(trans "DISTRESS видалено з автозавантаження")" 313 | } 314 | 315 | distress_enabled() { 316 | sudo systemctl is-enabled distress >/dev/null 2>&1 && return 0 || return 1 317 | } 318 | 319 | distress_stop() { 320 | sudo systemctl stop distress.service >/dev/null 2>&1 321 | } 322 | 323 | distress_get_status() { 324 | while true; do 325 | clear 326 | st=$(sudo systemctl status distress.service) 327 | echo "$st" 328 | echo -e "${ORANGE}$(trans "Нажміть будь яку клавішу щоб продовжити")${NC}" 329 | sleep 3 330 | if read -rsn1 -t 0.1; then 331 | break 332 | fi 333 | done 334 | initiate_distress 335 | } 336 | 337 | distress_installed() { 338 | if [[ ! -f "$TOOL_DIR/distress" ]]; then 339 | return 1 340 | else 341 | return 0 342 | fi 343 | } 344 | 345 | distress_configure_scheduler() { 346 | clear 347 | echo -ne "${GREEN} .---------------- $(trans "хвилина") (0 - 59) 348 | | .------------- $(trans "година") (0 - 23) 349 | | | .---------- $(trans "день місяця") (1 - 31) 350 | | | | .------- $(trans "місяць") (1 - 12) 351 | | | | | .---- $(trans "день тижня") (0 - 6) 352 | | | | | | 353 | * * * * *${NC}" 354 | 355 | echo -ne "\n\n" 356 | echo -ne "${GREEN}$(trans "Або згенеруйте його за посиланням") ${NC}${RED}https://crontab.guru/${NC}" 357 | echo -ne "\n\n" 358 | echo -ne "$(trans "Зверніть увагу на ваш час командою") ${GREEN}date${NC}" 359 | echo -ne "\n\n" 360 | echo -ne "$(trans "Наприклад:")" 361 | echo -ne "\n" 362 | echo -ne " ${GREEN}$(trans "Запуск DISTRESS о 20:00 щодня") -${NC} ${RED}0 20 * * *${NC}" 363 | echo -ne "\n" 364 | echo -ne " ${GREEN}$(trans "Зупинка DISTRESS о 08:00 щодня") -${NC} ${RED}0 8 * * *${NC}" 365 | echo -ne "\n\n" 366 | read -e -p "$(trans "Введіть cron-час для ЗАПУСКУ (формат: * * * * *): ")" -i "$(get_distress_variable 'cron-to-run')" cron_time_to_run 367 | echo -ne "\n" 368 | read -e -p "$(trans "Введіть cron-час для ЗУПИНКИ (формат: * * * * *): ")" -i "$(get_distress_variable 'cron-to-stop')" cron_time_to_stop 369 | 370 | 371 | if [[ -n "$cron_time_to_run" ]]; then 372 | write_distress_variable "cron-to-run" "$cron_time_to_run" 373 | elif [[ "$cron_time_to_run" == "" ]]; then 374 | sudo crontab -l | grep -v 'distress_run' | sudo crontab - 375 | write_distress_variable "cron-to-run" "" 376 | fi 377 | 378 | if [[ -n "$cron_time_to_stop" ]]; then 379 | write_distress_variable "cron-to-stop" "$cron_time_to_stop" 380 | elif [[ "$cron_time_to_stop" == "" ]]; then 381 | sudo crontab -l | grep -v 'distress_stop' | sudo crontab - 382 | write_distress_variable "cron-to-stop" "" 383 | fi 384 | 385 | if [[ "$cron_time_to_run" == "" ]] && [[ "$cron_time_to_stop" == "" ]]; then 386 | confirm_dialog "$(trans "Запуск DISTRESS за розкладом припинено")" 387 | autoload_configuration 388 | elif [[ -n "$cron_time_to_run" ]] || [[ -n "$cron_time_to_stop" ]]; then 389 | to_start_distress_schedule_running 390 | else 391 | autoload_configuration 392 | fi 393 | } 394 | 395 | check_if_distress_running_on_schedule() { 396 | ($(sudo crontab -l | grep -q 'distress_run') || $(sudo crontab -l | grep -q 'distress_stop')) >/dev/null 2>&1 && return 0 || return 1 397 | } 398 | 399 | to_start_distress_schedule_running() { 400 | local menu_items=("$(trans "Так")" "$(trans "Ні")") 401 | local res=$(display_menu "$(trans "Запустити DISTRESS за розкладом?")" "${menu_items[@]}") 402 | case "$res" in 403 | "$(trans "Так")") 404 | run_distress_on_schedule 405 | confirm_dialog "$(trans "DISTRESS буде ЗАПУЩЕНО за розкладом")" 406 | autoload_configuration 407 | ;; 408 | "$(trans "Ні")") 409 | autoload_configuration 410 | ;; 411 | esac 412 | } 413 | 414 | stop_distress_on_schedule() { 415 | sudo crontab -l | grep -v 'distress_run' | sudo crontab - 416 | sudo crontab -l | grep -v 'distress_stop' | sudo crontab - 417 | write_distress_variable "cron-to-run" "" 418 | write_distress_variable "cron-to-stop" "" 419 | } 420 | 421 | run_distress_on_schedule() { 422 | sudo systemctl disable mhddos >/dev/null 2>&1 423 | sudo systemctl disable distress >/dev/null 2>&1 424 | sudo systemctl disable x100 >/dev/null 2>&1 425 | sudo systemctl disable db1000n >/dev/null 2>&1 426 | create_symlink 427 | 428 | chmod +x "$SCRIPT_DIR/utils/distress.sh" 429 | local cron_time_to_run=$(get_distress_variable 'cron-to-run') 430 | local cron_time_to_stop=$(get_distress_variable 'cron-to-stop') 431 | sudo crontab -l | grep -v 'distress_run' | sudo crontab - 432 | sudo crontab -l | grep -v 'distress_stop' | sudo crontab - 433 | sudo crontab -l | grep -v 'mhddos_run' | sudo crontab - 434 | sudo crontab -l | grep -v 'mhddos_stop' | sudo crontab - 435 | sudo crontab -l | grep -v 'x100_run' | sudo crontab - 436 | sudo crontab -l | grep -v 'x100_stop' | sudo crontab - 437 | 438 | if [[ -n "$cron_time_to_run" ]]; then 439 | (sudo crontab -l 2>/dev/null; echo "$cron_time_to_run bash -c '. $SCRIPT_DIR/utils/distress.sh && distress_run'") | sudo crontab - 440 | fi 441 | 442 | if [[ -n "$cron_time_to_stop" ]]; then 443 | (sudo crontab -l 2>/dev/null; echo "$cron_time_to_stop bash -c '. $SCRIPT_DIR/utils/distress.sh && distress_stop'") | sudo crontab - 444 | fi 445 | } 446 | 447 | 448 | initiate_distress() { 449 | distress_installed 450 | if [[ $? == 1 ]]; then 451 | confirm_dialog "$(trans "DISTRESS не встановлений, будь ласка встановіть і спробуйте знову")" 452 | ddos_tool_managment 453 | else 454 | if sudo systemctl is-active distress >/dev/null 2>&1; then 455 | local active_disactive="$(trans "Зупинка DISTRESS")" 456 | else 457 | local active_disactive="$(trans "Запуск DISTRESS")" 458 | fi 459 | local menu_items=("$active_disactive" "$(trans "Налаштування DISTRESS")" "$(trans "Статус DISTRESS")" "$(trans "Повернутись назад")") 460 | res=$(display_menu "DISTRESS" "${menu_items[@]}") 461 | 462 | case "$res" in 463 | "$(trans "Зупинка DISTRESS")") 464 | distress_stop 465 | distress_get_status 466 | ;; 467 | "$(trans "Запуск DISTRESS")") 468 | distress_run 469 | distress_get_status 470 | ;; 471 | "$(trans "Налаштування DISTRESS")") 472 | configure_distress 473 | initiate_distress 474 | ;; 475 | "$(trans "Статус DISTRESS")") 476 | distress_get_status 477 | ;; 478 | "$(trans "Повернутись назад")") 479 | ddos_tool_managment 480 | ;; 481 | esac 482 | fi 483 | } 484 | 485 | stop_x100_on_schedule() { 486 | sudo crontab -l | grep -v 'x100_run' | sudo crontab - 487 | sudo crontab -l | grep -v 'x100_stop' | sudo crontab - 488 | write_x100_adss_variable "cron-to-run" "" 489 | write_x100_adss_variable "cron-to-stop" "" 490 | } -------------------------------------------------------------------------------- /utils/fail2ban.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | source "${SCRIPT_DIR}/utils/definitions.sh" 4 | 5 | install_fail2ban() { 6 | case $(get_distribution) in 7 | fedora | rocky) 8 | adss_dialog "$(trans "Встановлюємо Fail2ban")" 9 | install() { 10 | sudo dnf update -y 11 | sudo dnf upgrade -y 12 | sudo dnf install -y fail2ban 13 | } 14 | install >/dev/null 2>&1 15 | confirm_dialog "$(trans "Fail2ban успішно встановлено")" 16 | ;; 17 | ol) 18 | adss_dialog "$(trans "Встановлюємо Fail2ban")" 19 | install() { 20 | sudo dnf install epel-release -y 21 | sudo dnf update -y 22 | sudo dnf upgrade -y 23 | sudo dnf install fail2ban fail2ban-firewalld -y 24 | } 25 | install >/dev/null 2>&1 26 | confirm_dialog "$(trans "Fail2ban успішно встановлено")" 27 | ;; 28 | *) 29 | adss_dialog "$(trans "Встановлюємо Fail2ban")" 30 | install() { 31 | sudo apt-get update -y 32 | sudo apt-get install -y fail2ban 33 | } 34 | install >/dev/null 2>&1 35 | confirm_dialog "$(trans "Fail2ban успішно встановлено")" 36 | ;; 37 | esac 38 | } 39 | 40 | fail2ban_is_active() { 41 | if systemctl is-active --quiet fail2ban; then 42 | return 1 43 | else 44 | return 0 45 | fi 46 | } 47 | enable_fail2ban() { 48 | sudo systemctl enable fail2ban >/dev/null 2>&1 49 | sudo systemctl start fail2ban >/dev/null 2>&1 50 | confirm_dialog "$(trans "Fail2ban успішно увімкнено")" 51 | } 52 | disable_fail2ban() { 53 | sudo systemctl disable fail2ban >/dev/null 2>&1 54 | sudo systemctl stop fail2ban >/dev/null 2>&1 55 | confirm_dialog "$(trans "Fail2ban успішно вимкнено")" 56 | } 57 | 58 | fail2ban_installed() { 59 | if [[ ! -e "/etc/fail2ban" ]]; then 60 | return 0 61 | else 62 | return 1 63 | fi 64 | } 65 | 66 | configure_fail2ban() { 67 | fail2ban_installed 68 | if [[ $? == 0 ]]; then 69 | confirm_dialog "$(trans "Fail2ban не встановлений, будь ласка встановіть і спробуйте знову")" 70 | else 71 | adss_dialog "$(trans "Налаштовуємо Fail2ban")" 72 | configure() { 73 | sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local 74 | sudo bash -c "echo ' 75 | [ssh] 76 | enabled = true 77 | port = ssh 78 | filter = sshd 79 | action = iptables[name=sshd, port=ssh, protocol=tcp] 80 | logpath = %(sshd_log)s 81 | backend = %(sshd_backend)s 82 | maxretry = 3 83 | bantime = 600' >> /etc/fail2ban/jail.local" 84 | 85 | sudo /bin/systemctl restart fail2ban.service 86 | } 87 | configure >/dev/null 2>&1 88 | confirm_dialog "$(trans "Fail2ban успішно налаштовано")" 89 | fi 90 | } 91 | -------------------------------------------------------------------------------- /utils/mhddos.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | install_mhddos() { 4 | adss_dialog "$(trans "Встановлюємо MHDDOS")" 5 | install() { 6 | cd $TOOL_DIR 7 | package='' 8 | case "$OSARCH" in 9 | aarch64*) 10 | package=https://github.com/porthole-ascend-cinnamon/mhddos_proxy_releases/releases/latest/download/mhddos_proxy_linux_arm64 11 | ;; 12 | 13 | armv6* | armv7* | armv8*) 14 | ;; 15 | 16 | x86_64*) 17 | package=https://github.com/porthole-ascend-cinnamon/mhddos_proxy_releases/releases/latest/download/mhddos_proxy_linux 18 | ;; 19 | 20 | i386* | i686*) 21 | package=https://github.com/porthole-ascend-cinnamon/mhddos_proxy_releases/releases/latest/download/mhddos_proxy_linux_x86 22 | ;; 23 | 24 | *) 25 | confirm_dialog "$(trans "Неможливо визначити розрядность операційної системи")" 26 | ddos_tool_managment 27 | ;; 28 | esac 29 | 30 | sudo curl -Lo mhddos_proxy_linux "$package" 31 | sudo chmod +x mhddos_proxy_linux 32 | regenerate_mhddos_service_file 33 | create_symlink 34 | } 35 | install > /dev/null 2>&1 36 | if [[ $package == '' ]];then 37 | confirm_dialog "MHDDOS_PROXY does not support ARM32" 38 | else 39 | confirm_dialog "$(trans "MHDDOS успішно встановлено")" 40 | fi 41 | } 42 | 43 | configure_mhddos() { 44 | clear 45 | declare -A params 46 | echo -e "${ORANGE}$(trans "Залишіть пустим якщо бажаєте видалити пераметри")${NC}" 47 | echo -ne "\n" 48 | echo -ne "${GREEN}$(trans "Для збору особистої статистики та відображення у лідерборді на офіційному сайті.")${NC} ${ORANGE}https://itarmy.com.ua/leaderboard ${NC}""\n" 49 | echo -ne "${GREEN}$(trans "Надається Telegram ботом")${NC} ${ORANGE}@itarmy_stats_bot${NC}""\n" 50 | echo -ne "\n" 51 | read -e -p "$(trans "Юзер ІД: ")" -i "$(get_mhddos_variable 'user-id')" user_id 52 | if [[ -n "$user_id" ]];then 53 | while [[ ! $user_id =~ ^[0-9]+$ ]] 54 | do 55 | echo "$(trans "Будь ласка введіть правильні значення")" 56 | read -e -p "$(trans "Юзер ІД: ")" -i "$(get_mhddos_variable 'user-id')" user_id 57 | done 58 | fi 59 | 60 | params[user-id]=$user_id 61 | 62 | read -e -p "$(trans "Мова (ua | en | es | de | pl | it): ")" -i "$(get_mhddos_variable 'lang')" lang 63 | 64 | languages=("ua" "en" "es" "de" "pl" "it") 65 | if [[ -n "$lang" ]];then 66 | while [[ ! "${languages[*]}" =~ "$lang" ]] 67 | do 68 | echo "$(trans "Будь ласка введіть правильні значення")" 69 | read -e -p "$(trans "Мова (ua | en | es | de | pl | it): ")" -i "$(get_mhddos_variable 'lang')" lang 70 | done 71 | fi 72 | 73 | params[lang]=$lang 74 | 75 | read -e -p "$(trans "Кількість копій (auto | X): ")" -i "$(get_mhddos_variable 'copies')" copies 76 | if [[ -n "$copies" ]];then 77 | while [[ ! $copies =~ ^[0-9]+$ && "$copies" != "auto" ]] 78 | do 79 | echo "$(trans "Будь ласка введіть правильні значення")" 80 | read -e -p "$(trans "Кількість копій (auto | X): ")" -i "$(get_mhddos_variable 'copies')" copies 81 | done 82 | fi 83 | 84 | params[copies]=$copies 85 | 86 | read -e -p "$(trans "Відсоткове співвідношення використання власної IP адреси (0-100): ")" -i "$(get_mhddos_variable 'use-my-ip')" use_my_ip 87 | if [[ -n "$use_my_ip" ]];then 88 | while [[ $use_my_ip -lt 0 || $use_my_ip -gt 100 ]] 89 | do 90 | echo "$(trans "Будь ласка введіть правильні значення")" 91 | read -e -p "$(trans "Відсоткове співвідношення використання власної IP адреси (0-100): ")" -i "$(get_mhddos_variable 'use-my-ip')" use_my_ip 92 | done 93 | fi 94 | 95 | params[use-my-ip]=$use_my_ip 96 | 97 | read -e -p "Threads: " -i "$(get_mhddos_variable 'threads')" threads 98 | if [[ -n "$threads" ]];then 99 | while [[ ! $threads =~ ^[0-9]+$ ]] 100 | do 101 | echo "$(trans "Будь ласка введіть правильні значення")" 102 | read -e -p "Threads: " -i "$(get_mhddos_variable 'threads')" threads 103 | done 104 | fi 105 | 106 | params[threads]=$threads 107 | 108 | read -e -p "$(trans "Проксі (шлях до файлу або веб-ресурсу): ")" -i "$(get_mhddos_variable 'proxies')" proxies 109 | proxies=$(echo $proxies | sed 's/\//\\\//g') 110 | 111 | params[proxies]=$proxies 112 | 113 | echo -ne "\n" 114 | echo -e "${ORANGE}$(trans "Мережеві інтерфейси (через пробіл: eth0 eth1 тощо.)")${NC}" 115 | read -e -p "$(trans "Інтерфейси: ")" -i "$(get_mhddos_variable 'ifaces')" interface 116 | if [[ -n "$interface" ]];then 117 | params[ifaces]=$interface 118 | else 119 | params[ifaces]=" " 120 | fi 121 | 122 | for i in "${!params[@]}"; do 123 | value="${params[$i]}" 124 | write_mhddos_variable "$i" "$value" 125 | done 126 | regenerate_mhddos_service_file 127 | if systemctl is-active --quiet mhddos.service; then 128 | sudo rm -rf /tmp/_MEI* >/dev/null 2>&1 129 | sudo systemctl restart mhddos.service >/dev/null 2>&1 130 | fi 131 | confirm_dialog "$(trans "Успішно виконано")" 132 | } 133 | 134 | get_mhddos_variable() { 135 | local lines=$(sed -n "/\[mhddos\]/,/\[\/mhddos\]/p" "${SCRIPT_DIR}"/services/EnvironmentFile) 136 | local variable=$(echo "$lines" | grep "$1=" | cut -d '=' -f2) 137 | echo "$variable" 138 | } 139 | 140 | write_mhddos_variable() { 141 | sed -i "/\[mhddos\]/,/\[\/mhddos\]/s/$1=.*/$1=$2/g" "${SCRIPT_DIR}"/services/EnvironmentFile 142 | } 143 | 144 | regenerate_mhddos_service_file() { 145 | local lines=$(sed -n "/\[mhddos\]/,/\[\/mhddos\]/p" "${SCRIPT_DIR}"/services/EnvironmentFile) 146 | 147 | local start="ExecStart=${SCRIPT_DIR}/bin/mhddos_proxy_linux" 148 | 149 | while read -r line 150 | do 151 | key=$(echo "$line" | cut -d '=' -f1) 152 | value=$(echo "$line" | cut -d '=' -f2) 153 | 154 | if [[ "$key" = "[mhddos]" || "$key" = "[/mhddos]" ]]; then 155 | continue 156 | fi 157 | 158 | if [[ "$key" == 'use-my-ip' && "$(get_mhddos_variable 'use-my-ip')" == 0 ]];then 159 | continue 160 | fi 161 | if [[ "$key" == 'cron-to-run' || "$key" == 'cron-to-stop' ]];then 162 | continue 163 | fi 164 | if [[ "$value" ]]; then 165 | start="$start --$key $value" 166 | fi 167 | done <<< "$lines" 168 | start=$(echo $start | sed 's/\//\\\//g') 169 | 170 | sed -i "s/ExecStart=.*/$start/g" "${SCRIPT_DIR}"/services/mhddos.service 171 | 172 | sudo systemctl daemon-reload 173 | } 174 | 175 | mhddos_run() { 176 | sudo rm -rf /tmp/_MEI* >/dev/null 2>&1 177 | sudo systemctl stop distress.service >/dev/null 2>&1 178 | sudo systemctl stop db1000n.service >/dev/null 2>&1 179 | sudo systemctl stop x100.service >/dev/null 2>&1 180 | sudo systemctl start mhddos.service >/dev/null 2>&1 181 | } 182 | 183 | mhddos_auto_enable() { 184 | sudo systemctl disable distress.service >/dev/null 2>&1 185 | sudo systemctl disable db1000n.service >/dev/null 2>&1 186 | sudo systemctl disable x100 >/dev/null 2>&1 187 | sudo systemctl enable mhddos.service >/dev/null 2>&1 188 | create_symlink 189 | confirm_dialog "$(trans "MHDDOS додано до автозавантаження")" 190 | } 191 | mhddos_auto_disable() { 192 | sudo systemctl disable mhddos >/dev/null 2>&1 193 | create_symlink 194 | confirm_dialog "$(trans "MHDDOS видалено з автозавантаження")" 195 | } 196 | mhddos_enabled() { 197 | sudo systemctl is-enabled mhddos >/dev/null 2>&1 && return 0 || return 1 198 | } 199 | 200 | mhddos_stop() { 201 | # create_symlink 202 | sudo systemctl stop mhddos.service >/dev/null 2>&1 203 | } 204 | 205 | mhddos_get_status() { 206 | while true; do 207 | clear 208 | st=$(sudo systemctl status mhddos.service) 209 | echo "$st" 210 | echo -e "${ORANGE}$(trans "Нажміть будь яку клавішу щоб продовжити")${NC}" 211 | sleep 3 212 | if read -rsn1 -t 0.1; then 213 | break 214 | fi 215 | done 216 | initiate_mhddos 217 | } 218 | mhddos_installed() { 219 | if [[ ! -f "$TOOL_DIR/mhddos_proxy_linux" ]]; then 220 | return 1 221 | else 222 | return 0 223 | fi 224 | } 225 | 226 | is_not_arm_arch() { 227 | if [[ "$OSARCH" != armv6* && "$OSARCH" != armv7* && $OSARCH != armv8* ]]; then 228 | return 1 229 | else 230 | return 0 231 | fi 232 | } 233 | 234 | mhddos_configure_scheduler() { 235 | clear 236 | echo -ne "${GREEN} .---------------- $(trans "хвилина") (0 - 59) 237 | | .------------- $(trans "година") (0 - 23) 238 | | | .---------- $(trans "день місяця") (1 - 31) 239 | | | | .------- $(trans "місяць") (1 - 12) 240 | | | | | .---- $(trans "день тижня") (0 - 6) 241 | | | | | | 242 | * * * * *${NC}" 243 | 244 | echo -ne "\n\n" 245 | echo -ne "${GREEN}$(trans "Або згенеруйте його за посиланням") ${NC}${RED}https://crontab.guru/${NC}" 246 | echo -ne "\n\n" 247 | echo -ne "$(trans "Зверніть увагу на ваш час командою") ${GREEN}date${NC}" 248 | echo -ne "\n\n" 249 | echo -ne "$(trans "Наприклад:")" 250 | echo -ne "\n" 251 | echo -ne " ${GREEN}$(trans "Запуск MHDDOS о 20:00 щодня") -${NC} ${RED}0 20 * * *${NC}" 252 | echo -ne "\n" 253 | echo -ne " ${GREEN}$(trans "Зупинка MHDDOS о 08:00 щодня") -${NC} ${RED}0 8 * * *${NC}" 254 | echo -ne "\n\n" 255 | read -e -p "$(trans "Введіть cron-час для ЗАПУСКУ (формат: * * * * *): ")" -i "$(get_mhddos_variable 'cron-to-run')" cron_time_to_run 256 | echo -ne "\n" 257 | read -e -p "$(trans "Введіть cron-час для ЗУПИНКИ (формат: * * * * *): ")" -i "$(get_mhddos_variable 'cron-to-stop')" cron_time_to_stop 258 | 259 | 260 | if [[ -n "$cron_time_to_run" ]]; then 261 | write_mhddos_variable "cron-to-run" "$cron_time_to_run" 262 | elif [[ "$cron_time_to_run" == "" ]]; then 263 | sudo crontab -l | grep -v 'mhddos_run' | sudo crontab - 264 | write_mhddos_variable "cron-to-run" "" 265 | fi 266 | 267 | if [[ -n "$cron_time_to_stop" ]]; then 268 | write_mhddos_variable "cron-to-stop" "$cron_time_to_stop" 269 | elif [[ "$cron_time_to_stop" == "" ]]; then 270 | sudo crontab -l | grep -v 'mhddos_stop' | sudo crontab - 271 | write_mhddos_variable "cron-to-stop" "" 272 | fi 273 | 274 | if [[ "$cron_time_to_run" == "" ]] && [[ "$cron_time_to_stop" == "" ]]; then 275 | confirm_dialog "$(trans "Запуск MHDDOS за розкладом припинено")" 276 | autoload_configuration 277 | elif [[ -n "$cron_time_to_run" ]] || [[ -n "$cron_time_to_stop" ]]; then 278 | to_start_mhddos_schedule_running 279 | else 280 | autoload_configuration 281 | fi 282 | } 283 | 284 | check_if_mhddos_running_on_schedule() { 285 | ($(sudo crontab -l | grep -q 'mhddos_run') || $(sudo crontab -l | grep -q 'mhddos_stop')) >/dev/null 2>&1 && return 0 || return 1 286 | } 287 | 288 | to_start_mhddos_schedule_running() { 289 | local menu_items=("$(trans "Так")" "$(trans "Ні")") 290 | local res=$(display_menu "$(trans "Запустити MHDDOS за розкладом?")" "${menu_items[@]}") 291 | case "$res" in 292 | "$(trans "Так")") 293 | run_mhddos_on_schedule 294 | confirm_dialog "$(trans "MHDDOS буде ЗАПУЩЕНО за розкладом")" 295 | autoload_configuration 296 | ;; 297 | "$(trans "Ні")") 298 | autoload_configuration 299 | ;; 300 | esac 301 | } 302 | 303 | run_mhddos_on_schedule() { 304 | sudo systemctl disable mhddos >/dev/null 2>&1 305 | sudo systemctl disable distress >/dev/null 2>&1 306 | sudo systemctl disable x100 >/dev/null 2>&1 307 | sudo systemctl disable db1000n >/dev/null 2>&1 308 | create_symlink 309 | 310 | chmod +x "$SCRIPT_DIR/utils/mhddos.sh" 311 | local cron_time_to_run=$(get_mhddos_variable 'cron-to-run') 312 | local cron_time_to_stop=$(get_mhddos_variable 'cron-to-stop') 313 | sudo crontab -l | grep -v 'mhddos_run' | sudo crontab - 314 | sudo crontab -l | grep -v 'mhddos_stop' | sudo crontab - 315 | sudo crontab -l | grep -v 'distress_run' | sudo crontab - 316 | sudo crontab -l | grep -v 'distress_stop' | sudo crontab - 317 | sudo crontab -l | grep -v 'x100_run' | sudo crontab - 318 | sudo crontab -l | grep -v 'x100_stop' | sudo crontab - 319 | if [[ -n "$cron_time_to_run" ]]; then 320 | (sudo crontab -l 2>/dev/null; echo "$cron_time_to_run bash -c '. $SCRIPT_DIR/utils/mhddos.sh && mhddos_run'") | sudo crontab - 321 | fi 322 | 323 | if [[ -n "$cron_time_to_stop" ]]; then 324 | (sudo crontab -l 2>/dev/null; echo "$cron_time_to_stop bash -c '. $SCRIPT_DIR/utils/mhddos.sh && mhddos_stop'") | sudo crontab - 325 | fi 326 | } 327 | 328 | stop_mhddos_on_schedule() { 329 | sudo crontab -l | grep -v 'mhddos_run' | sudo crontab - 330 | sudo crontab -l | grep -v 'mhddos_stop' | sudo crontab - 331 | write_mhddos_variable "cron-to-run" "" 332 | write_mhddos_variable "cron-to-stop" "" 333 | } 334 | 335 | 336 | initiate_mhddos() { 337 | mhddos_installed 338 | if [[ $? == 1 ]]; then 339 | confirm_dialog "$(trans "MHDDOS не встановлений, будь ласка встановіть і спробуйте знову")" 340 | ddos_tool_managment 341 | else 342 | if sudo systemctl is-active mhddos >/dev/null 2>&1; then 343 | local active_disactive="$(trans "Зупинка MHDDOS")" 344 | else 345 | local active_disactive="$(trans "Запуск MHDDOS")" 346 | fi 347 | local menu_items=("$active_disactive" "$(trans "Налаштування MHDDOS")" "$(trans "Статус MHDDOS")" "$(trans "Повернутись назад")") 348 | local res=$(display_menu "MHDDOS" "${menu_items[@]}") 349 | 350 | case "$res" in 351 | "$(trans "Зупинка MHDDOS")") 352 | mhddos_stop 353 | mhddos_get_status 354 | ;; 355 | "$(trans "Запуск MHDDOS")") 356 | mhddos_run 357 | mhddos_get_status 358 | ;; 359 | "$(trans "Налаштування MHDDOS")") 360 | configure_mhddos 361 | initiate_mhddos 362 | ;; 363 | "$(trans "Статус MHDDOS")") 364 | mhddos_get_status 365 | ;; 366 | "$(trans "Повернутись назад")") 367 | ddos_tool_managment 368 | ;; 369 | esac 370 | fi 371 | } 372 | -------------------------------------------------------------------------------- /utils/port-extending.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | extend_ports() { 4 | port_range_string="net.ipv4.ip_local_port_range=16384 65535" 5 | specified_file="/etc/sysctl.conf" 6 | 7 | if [[ -f "$specified_file" ]]; then 8 | if [[ $(grep -L "$port_range_string" "$specified_file") ]]; then 9 | extend() { 10 | sudo bash -c "echo '$port_range_string' >> $specified_file" 11 | sudo sysctl -p 12 | } 13 | extend >/dev/null 2>&1 14 | confirm_dialog "$(trans "Порти успішно розширено")" 15 | else 16 | confirm_dialog "$(trans "Наразі всі порти розширено")" 17 | fi 18 | else 19 | confirm_dialog "$(trans "Не можливо виконати дію")" 20 | fi 21 | } 22 | -------------------------------------------------------------------------------- /utils/translate.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | apply_localization() { 4 | local PATH_TO_LOCALIZATION="$SCRIPT_DIR/i18n" 5 | local file_to_include="" 6 | lang_param_found=false 7 | for arg in "$@"; do 8 | if [[ "$arg" == "--lang" ]]; then 9 | lang_param_found=true 10 | elif [[ "$arg" == "en" && "$lang_param_found" == true ]]; then 11 | file_to_include="$PATH_TO_LOCALIZATION/en.sh" 12 | break 13 | fi 14 | done 15 | echo "$file_to_include" 16 | } 17 | 18 | trans() { 19 | if [[ -z "${localization[@]}" || -z "${localization[$1]}" ]]; then 20 | echo "$1" 21 | else 22 | echo "${localization[$1]}" 23 | fi 24 | } 25 | -------------------------------------------------------------------------------- /utils/ufw.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | source "${SCRIPT_DIR}/utils/definitions.sh" 4 | install_ufw() { 5 | case $(get_distribution) in 6 | fedora | rocky) 7 | adss_dialog "$(trans "Встановлюємо UFW фаєрвол")" 8 | install() { 9 | sudo systemctl stop firewalld 10 | sudo systemctl disable firewalld 11 | sudo dnf install ufw -y && sudo ufw disable 12 | sudo /bin/systemctl restart ufw.service 13 | } 14 | install >/dev/null 2>&1 15 | confirm_dialog "$(trans "Фаєрвол UFW встановлено і деактивовано")" 16 | ;; 17 | ol) 18 | adss_dialog "$(trans "Встановлюємо UFW фаєрвол")" 19 | install() { 20 | sudo dnf install epel-release -y 21 | sudo systemctl stop firewalld 22 | sudo systemctl disable firewalld 23 | sudo dnf install ufw -y && sudo ufw disable 24 | sudo /bin/systemctl restart ufw.service 25 | } 26 | install >/dev/null 2>&1 27 | confirm_dialog "$(trans "Фаєрвол UFW встановлено і деактивовано")" 28 | ;; 29 | *) 30 | adss_dialog "$(trans "Встановлюємо UFW фаєрвол")" 31 | install() { 32 | sudo apt-get update -y && sudo apt-get install ufw -y && sudo ufw disable 33 | sudo /bin/systemctl restart ufw.service 34 | } 35 | install >/dev/null 2>&1 36 | confirm_dialog "$(trans "Фаєрвол UFW встановлено і деактивовано")" 37 | ;; 38 | esac 39 | } 40 | ufw_is_active() { 41 | if systemctl is-active --quiet ufw; then 42 | return 1 43 | else 44 | return 0 45 | fi 46 | } 47 | enable_ufw() { 48 | sudo systemctl enable ufw >/dev/null 2>&1 49 | sudo systemctl start ufw >/dev/null 2>&1 50 | confirm_dialog "$(trans "UFW успішно увімкнено")" 51 | } 52 | disable_ufw() { 53 | sudo systemctl disable ufw >/dev/null 2>&1 54 | sudo systemctl stop ufw >/dev/null 2>&1 55 | confirm_dialog "$(trans "UFW успішно вимкнено")" 56 | } 57 | ufw_installed() { 58 | if [[ ! $(sudo ufw status 2>/dev/null) ]]; then 59 | return 0 60 | else 61 | return 1 62 | fi 63 | } 64 | configure_ufw() { 65 | ufw_installed 66 | if [[ $? == 0 ]]; then 67 | confirm_dialog "$(trans "UFW не встановлений, будь ласка встановіть і спробуйте знову")" 68 | else 69 | adss_dialog "$(trans "Налаштовуємо UFW фаєрвол")" 70 | configure() { 71 | sudo ufw default deny incoming 72 | sudo ufw default allow outgoing 73 | sudo ufw allow 22 74 | sudo ufw --force enable 75 | } 76 | configure >/dev/null 2>&1 77 | confirm_dialog "$(trans "Фаєрвол UFW налаштовано і активовано")" 78 | fi 79 | } 80 | -------------------------------------------------------------------------------- /utils/updater.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | env_file="/etc/environment" 3 | 4 | check_updates() { 5 | source "$env_file" 6 | if [ -z "$ADSS_DEPLOYMENT_VERSION" ]; then 7 | prepare_for_update 8 | else 9 | timestamp=$(date +%s) 10 | diff=$((timestamp - ADSS_DEPLOYMENT_VERSION)) 11 | five_minutes=300 12 | if [[ $diff -gt $five_minutes ]]; then 13 | prepare_for_update 14 | fi 15 | fi 16 | } 17 | prepare_for_update() { 18 | echo -e "${GREEN}$(trans "Перевіряємо наявність оновлень")${NC}" 19 | current_version=$(<"$SCRIPT_DIR"/version.txt) 20 | current_version=${current_version//[$'\t\r\n']/} 21 | remote_version=$(curl -s 'https://raw.githubusercontent.com/it-army-ua-scripts/ADSS/main/version.txt') 22 | 23 | echo -e "$(trans "Встановлена версія") = ${ORANGE}$current_version${NC}" 24 | echo -e "$(trans "Актуальна версія") = ${ORANGE}$remote_version${NC}" 25 | 26 | if [[ "$current_version" < "$remote_version" ]]; then 27 | update_adss 28 | fi 29 | write_version $(date +%s) 30 | sleep 2 31 | } 32 | write_version() { 33 | sudo sed -i '/ADSS_DEPLOYMENT_VERSION/d' $env_file 34 | echo "ADSS_DEPLOYMENT_VERSION=\"$1\"" | sudo tee -a $env_file >/dev/null 2>&1 35 | source $env_file 36 | } 37 | 38 | update_adss() { 39 | echo -e "${GREEN}$(trans "Оновляємо ADSS")${NC}" 40 | cd $SCRIPT_DIR && 41 | git checkout services/db1000n.service >/dev/null 2>&1 && 42 | git checkout services/distress.service >/dev/null 2>&1 && 43 | git checkout services/mhddos.service >/dev/null 2>&1 && 44 | # git checkout services/EnvironmentFile >/dev/null 2>&1 && 45 | git pull --all || adss --restore 46 | 47 | SERVICES=('mhddos' 'distress' 'db1000n') 48 | for SERVICE in "${!SERVICES[@]}"; do 49 | source "${SCRIPT_DIR}/utils/${SERVICES[SERVICE]}.sh" 50 | regenerate_"${SERVICES[SERVICE]}"_service_file 51 | done 52 | echo -e "${GREEN}$(trans "ADSS успішно оновлено")${NC}" 53 | } 54 | -------------------------------------------------------------------------------- /utils/x100.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | x100_run() { 4 | sudo systemctl stop db1000n.service >/dev/null 2>&1 5 | sudo systemctl stop distress.service >/dev/null 2>&1 6 | sudo systemctl stop mhddos.service >/dev/null 2>&1 7 | sudo systemctl start x100.service >/dev/null 2>&1 8 | } 9 | 10 | x100_auto_enable() { 11 | sudo systemctl disable mhddos.service >/dev/null 2>&1 12 | sudo systemctl disable db1000n.service >/dev/null 2>&1 13 | sudo systemctl disable distress.service >/dev/null 2>&1 14 | sudo systemctl enable x100 >/dev/null 2>&1 15 | create_symlink 16 | confirm_dialog "$(trans "X100 додано до автозавантаження")" 17 | } 18 | 19 | x100_auto_disable() { 20 | sudo systemctl disable x100 >/dev/null 2>&1 21 | create_symlink 22 | confirm_dialog "$(trans "X100 видалено з автозавантаження")" 23 | } 24 | 25 | x100_enabled() { 26 | sudo systemctl is-enabled x100 >/dev/null 2>&1 && return 0 || return 1 27 | } 28 | 29 | x100_stop() { 30 | sudo systemctl stop x100.service >/dev/null 2>&1 31 | } 32 | 33 | x100_get_status() { 34 | while true; do 35 | clear 36 | st=$(sudo systemctl status x100.service) 37 | echo "$st" 38 | echo -e "${ORANGE}$(trans "Нажміть будь яку клавішу щоб продовжити")${NC}" 39 | sleep 3 40 | if read -rsn1 -t 0.1; then 41 | break 42 | fi 43 | done 44 | 45 | initiate_x100 46 | } 47 | 48 | docker_installed() { 49 | docker container ls 1>/dev/null 2>/dev/null && return 0 || return 1 50 | } 51 | 52 | add_user_to_docker_group() { 53 | if ! grep -q docker /etc/group; then 54 | sudo groupadd docker 55 | fi 56 | 57 | if ! id -nG "$USER" | grep -qw "docker"; then 58 | sudo usermod -aG docker $USER 59 | clear 60 | echo -e '\n' 61 | echo -e "${ORANGE}Перезапустили 'docker' конфігурацію, будь ласка, запустіть ${NC}""${GREEN}\e[4madss\e[0m${NC}""${ORANGE} команду знову і вдалого вам ддосу :).${NC}" 62 | newgrp docker 63 | fi 64 | } 65 | 66 | install_docker() { 67 | if [ -r /etc/os-release ]; then 68 | clear 69 | sudo apt install -y docker.io 70 | sudo service docker start 71 | sudo systemctl enable docker 72 | else 73 | echo -e "${RED}Неможливо визначити операційну систему/Unable to determine operating system${NC}" 74 | fi 75 | } 76 | 77 | initiate_x100() { 78 | x100_installed 79 | if [[ $? == 1 ]]; then 80 | menu_items=("$(trans "Так")" "$(trans "Ні")") 81 | res=$(display_menu "$(trans "X100 не встановлений, встановити?")" "${menu_items[@]}") 82 | case "$res" in 83 | "$(trans "Так")") 84 | confirm_dialog "$(trans "Встановлюємо Х100")" 85 | install_x100 86 | confirm_dialog "$(trans "Х100 успішно встановлено")" 87 | ;; 88 | "$(trans "Ні")") 89 | ddos_tool_managment 90 | ;; 91 | esac 92 | fi 93 | docker_installed 94 | if [[ $? == 1 ]]; then 95 | confirm_dialog "$(trans "Встановлюємо докер")" 96 | install_docker 97 | confirm_dialog "$(trans "Докер успішно встановлено")" 98 | add_user_to_docker_group 99 | fi 100 | if sudo systemctl is-active x100 >/dev/null 2>&1; then 101 | active_disactive="$(trans "Зупинка X100")" 102 | else 103 | active_disactive="$(trans "Запуск X100")" 104 | fi 105 | menu_items=("$active_disactive" "$(trans "Налаштування X100")" "$(trans "Статус X100")" "$(trans "Повернутись назад")") 106 | res=$(display_menu "X100" "${menu_items[@]}") 107 | 108 | case "$res" in 109 | "$(trans "Запуск X100")") 110 | x100_run 111 | x100_get_status 112 | ;; 113 | "$(trans "Зупинка X100")") 114 | x100_stop 115 | x100_get_status 116 | ;; 117 | "$(trans "Налаштування X100")") 118 | configure_x100 119 | initiate_x100 120 | ;; 121 | "$(trans "Статус X100")") 122 | x100_get_status 123 | ;; 124 | "$(trans "Повернутись назад")") 125 | ddos_tool_managment 126 | ;; 127 | esac 128 | } 129 | 130 | configure_x100() { 131 | clear 132 | echo -ne "${GREEN}$(trans "Для збору особистої статистики та відображення у лідерборді на офіційному сайті.")${NC} ${ORANGE}https://itarmy.com.ua/leaderboard ${NC}""\n" 133 | echo -ne "${GREEN}$(trans "Надається Telegram ботом")${NC} ${ORANGE}@itarmy_stats_bot${NC}""\n" 134 | echo -ne "\n" 135 | read -e -p "$(trans "Юзер ІД: ")" -i "$(get_x100_variable 'itArmyUserId')" user_id 136 | 137 | configPath="$SCRIPT_DIR/x100-for-docker/put-your-ovpn-files-here/x100-config.txt" 138 | 139 | sed -i -e "s/itArmyUserId=$(get_x100_variable 'itArmyUserId')/itArmyUserId=$user_id/g" "$configPath" 140 | 141 | read -e -p "$(trans "Initial Distress Scale (10-40960): ")" -i "$(get_x100_variable 'initialDistressScale')" scale 142 | if [[ -n "$scale" ]];then 143 | while [[ $scale -lt 10 || $scale -gt 40960 ]] 144 | do 145 | echo "$(trans "Будь ласка введіть правильні значення")" 146 | read -e -p "$(trans "Initial Distress Scale (10-40960): ")" -i "$(get_x100_variable 'initialDistressScale')" scale 147 | done 148 | fi 149 | sed -i -e "s/initialDistressScale=$(get_x100_variable 'initialDistressScale')/initialDistressScale=$scale/g" "$configPath" 150 | 151 | if [[ -n "$(get_x100_variable 'ignoreBundledFreeVpn')" ]];then 152 | read -e -p "$(trans "Ignore Bundled Free Vpn (0-1): ")" -i "$(get_x100_variable 'ignoreBundledFreeVpn')" ignoreBundledFreeVpn 153 | while [[ ignoreBundledFreeVpn -lt 0 || ignoreBundledFreeVpn -gt 1 ]] 154 | do 155 | echo "$(trans "Будь ласка введіть правильні значення")" 156 | read -e -p "$(trans "Ignore Bundled Free Vpn (0-1): ")" -i "$(get_x100_variable 'ignoreBundledFreeVpn')" ignoreBundledFreeVpn 157 | done 158 | 159 | sed -i -e "s/ignoreBundledFreeVpn=$(get_x100_variable 'ignoreBundledFreeVpn')/ignoreBundledFreeVpn=$ignoreBundledFreeVpn/g" "$configPath" 160 | fi 161 | 162 | if systemctl is-active --quiet x100.service; then 163 | sudo systemctl restart x100.service >/dev/null 2>&1 164 | fi 165 | confirm_dialog "$(trans "Успішно виконано")" 166 | } 167 | 168 | get_x100_variable() { 169 | configPath="$SCRIPT_DIR/x100-for-docker/put-your-ovpn-files-here/x100-config.txt" 170 | local lines=$(cat $configPath) 171 | local variable=$(echo "$lines" | grep "$1=" | cut -d '=' -f2) 172 | echo "$variable" 173 | } 174 | 175 | get_x100_adss_variable() { 176 | local lines=$(sed -n "/\[x100\]/,/\[\/x100\]/p" "${SCRIPT_DIR}"/services/EnvironmentFile) 177 | local variable=$(echo "$lines" | grep "$1=" | cut -d '=' -f2) 178 | echo "$variable" 179 | } 180 | 181 | write_x100_adss_variable() { 182 | sed -i "/\[x100\]/,/\[\/x100\]/s/$1=.*/$1=$2/g" "${SCRIPT_DIR}"/services/EnvironmentFile 183 | } 184 | 185 | x100_installed() { 186 | if [[ ! -d "$SCRIPT_DIR/x100-for-docker" ]]; then 187 | return 1 188 | else 189 | return 0 190 | fi 191 | } 192 | 193 | install_x100() { 194 | clear 195 | cd "$SCRIPT_DIR" 196 | 197 | curl -L --fail --max-time 30 "https://github.com/ihorlv/db1000nX100/raw/main/source-code/docker/x100-for-docker.zip" -o "./x100-for-docker.zip" 198 | unzip ./x100-for-docker.zip 199 | rm ./x100-for-docker.zip 200 | 201 | cd "$SCRIPT_DIR/x100-for-docker" 202 | 203 | chmod -R ug+x "./for-macOS-and-Linux-hosts" 204 | 205 | echo -ne "${GREEN}$(trans "Для збору особистої статистики та відображення у лідерборді на офіційному сайті.")${NC} ${ORANGE}https://itarmy.com.ua/leaderboard ${NC}""\n" 206 | echo -ne "${GREEN}$(trans "Надається Telegram ботом")${NC} ${ORANGE}@itarmy_stats_bot${NC}""\n" 207 | echo -ne "\n" 208 | read -e -p "$(trans "Юзер ІД: ")" user_id 209 | 210 | configPath=./put-your-ovpn-files-here/x100-config.txt 211 | 212 | sed -i -e "s/itArmyUserId=0/itArmyUserId=$user_id/g" "$configPath" 213 | sed -i -e 's/dockerInteractiveConfiguration=1/dockerInteractiveConfiguration=0/g' "$configPath" 214 | ### 215 | 216 | scriptBeforeRunPath=./for-macOS-and-Linux-hosts/custom-script-before-run.bash 217 | echo " " >> "$scriptBeforeRunPath" 218 | echo " " >> "$scriptBeforeRunPath" 219 | echo "cd ./put-your-ovpn-files-here/FreeAndSlowVpn" >> "$scriptBeforeRunPath" 220 | echo "./generate-vpngate.bash" >> "$scriptBeforeRunPath" 221 | 222 | chmod ug+x "./put-your-ovpn-files-here/FreeAndSlowVpn/generate-vpngate.bash" 223 | create_symlink 224 | echo -ne "${GREEN}$(trans "This installation of X100 uses free and slow 'VPNGate' VPN provider.")${NC}""\n" 225 | echo -ne "${GREEN}$(trans "${ORANGE}http://www.vpngate.net${NC}")${NC}""\n" 226 | echo -ne "${GREEN}$(trans "You will need a commercial VPN account to achieve top attack speed (1 Gbit/s or more).")${NC}""\n" 227 | echo -ne "${GREEN}$(trans "(Use this link to get full-featured VPN for free https://www.vpnunlimited.com/ua/palianytsia)")${NC}""\n" 228 | echo -ne "${GREEN}$(trans "Also, be aware, that X100 gradually increases resources usage.")${NC}""\n" 229 | echo -ne "${GREEN}$(trans "X100 will reach pick performance approximately in 3 hours after launch.")${NC}""\n" 230 | echo -ne "${GREEN}$(trans "Logs will be stored in ${ORANGE}$SCRIPT_DIR/x100-for-docker/put-your-ovpn-files-here${NC} ${GREEN}folder.${NC}")${NC}""\n" 231 | echo -ne "${GREEN}$(trans "For more information contact us on Telegram ${ORANGE}https://t.me/db1000nX100${NC}")${NC}""\n" 232 | echo -ne "${GREEN}$(trans "Also, there are some manuals and docs on our official website ${ORANGE}https://x100.vn.ua/${NC}")${NC}""\n" 233 | echo -ne "${GREEN}$(trans "Best regards! X100 IT ARMY TEAM! Glory to UKRAINE!")${NC}""\n" 234 | 235 | echo -e "${ORANGE}$(trans "Нажміть будь яку клавішу щоб продовжити")${NC}" 236 | read -s -n 1 key 237 | } 238 | 239 | x100_configure_scheduler() { 240 | clear 241 | echo -ne "${GREEN} .---------------- $(trans "хвилина") (0 - 59) 242 | | .------------- $(trans "година") (0 - 23) 243 | | | .---------- $(trans "день місяця") (1 - 31) 244 | | | | .------- $(trans "місяць") (1 - 12) 245 | | | | | .---- $(trans "день тижня") (0 - 6) 246 | | | | | | 247 | * * * * *${NC}" 248 | 249 | echo -ne "\n\n" 250 | echo -ne "${GREEN}$(trans "Або згенеруйте його за посиланням") ${NC}${RED}https://crontab.guru/${NC}" 251 | echo -ne "\n\n" 252 | echo -ne "$(trans "Зверніть увагу на ваш час командою") ${GREEN}date${NC}" 253 | echo -ne "\n\n" 254 | echo -ne "Наприклад:" 255 | echo -ne "\n" 256 | echo -ne " ${GREEN}$(trans "Запуск X100 о 20:00 щодня") -${NC} ${RED}0 20 * * *${NC}" 257 | echo -ne "\n" 258 | echo -ne " ${GREEN}$(trans "Зупинка X100 о 08:00 щодня") -${NC} ${RED}0 8 * * *${NC}" 259 | echo -ne "\n\n" 260 | read -e -p "$(trans "Введіть cron-час для ЗАПУСКУ (формат: * * * * *): ")" -i "$(get_x100_adss_variable 'cron-to-run')" cron_time_to_run 261 | echo -ne "\n" 262 | read -e -p "$(trans "Введіть cron-час для ЗУПИНКИ (формат: * * * * *): ")" -i "$(get_x100_adss_variable 'cron-to-stop')" cron_time_to_stop 263 | 264 | 265 | if [[ -n "$cron_time_to_run" ]]; then 266 | write_x100_adss_variable "cron-to-run" "$cron_time_to_run" 267 | elif [[ "$cron_time_to_run" == "" ]]; then 268 | sudo crontab -l | grep -v 'x100_run' | sudo crontab - 269 | write_x100_adss_variable "cron-to-run" "" 270 | fi 271 | 272 | if [[ -n "$cron_time_to_stop" ]]; then 273 | write_x100_adss_variable "cron-to-stop" "$cron_time_to_stop" 274 | elif [[ "$cron_time_to_stop" == "" ]]; then 275 | sudo crontab -l | grep -v 'x100_stop' | sudo crontab - 276 | write_x100_adss_variable "cron-to-stop" "" 277 | fi 278 | 279 | if [[ "$cron_time_to_run" == "" ]] && [[ "$cron_time_to_stop" == "" ]]; then 280 | confirm_dialog "$(trans "Запуск X100 за розкладом припинено")" 281 | autoload_configuration 282 | elif [[ -n "$cron_time_to_run" ]] || [[ -n "$cron_time_to_stop" ]]; then 283 | to_start_x100_schedule_running 284 | else 285 | autoload_configuration 286 | fi 287 | } 288 | 289 | to_start_x100_schedule_running() { 290 | local menu_items=("$(trans "Так")" "$(trans "Ні")") 291 | local res=$(display_menu "$(trans "Запустити X100 за розкладом?")" "${menu_items[@]}") 292 | case "$res" in 293 | "$(trans "Так")") 294 | run_x100_on_schedule 295 | confirm_dialog "$(trans "X100 буде ЗАПУЩЕНО за розкладом")" 296 | autoload_configuration 297 | ;; 298 | "$(trans "Ні")") 299 | autoload_configuration 300 | ;; 301 | esac 302 | } 303 | 304 | run_x100_on_schedule() { 305 | sudo systemctl disable mhddos >/dev/null 2>&1 306 | sudo systemctl disable distress >/dev/null 2>&1 307 | sudo systemctl disable x100 >/dev/null 2>&1 308 | sudo systemctl disable db1000n >/dev/null 2>&1 309 | create_symlink 310 | 311 | chmod +x "$SCRIPT_DIR/utils/x100.sh" 312 | local cron_time_to_run=$(get_x100_adss_variable 'cron-to-run') 313 | local cron_time_to_stop=$(get_x100_adss_variable 'cron-to-stop') 314 | sudo crontab -l | grep -v 'mhddos_run' | sudo crontab - 315 | sudo crontab -l | grep -v 'mhddos_stop' | sudo crontab - 316 | sudo crontab -l | grep -v 'distress_run' | sudo crontab - 317 | sudo crontab -l | grep -v 'distress_stop' | sudo crontab - 318 | sudo crontab -l | grep -v 'x100_run' | sudo crontab - 319 | sudo crontab -l | grep -v 'x100_stop' | sudo crontab - 320 | if [[ -n "$cron_time_to_run" ]]; then 321 | (sudo crontab -l 2>/dev/null; echo "$cron_time_to_run bash -c '. $SCRIPT_DIR/utils/x100.sh && x100_run'") | sudo crontab - 322 | fi 323 | 324 | if [[ -n "$cron_time_to_stop" ]]; then 325 | (sudo crontab -l 2>/dev/null; echo "$cron_time_to_stop bash -c '. $SCRIPT_DIR/utils/x100.sh && x100_stop'") | sudo crontab - 326 | fi 327 | } 328 | 329 | check_if_x100_running_on_schedule() { 330 | ($(sudo crontab -l | grep -q 'x100_run') || $(sudo crontab -l | grep -q 'x100_stop')) >/dev/null 2>&1 && return 0 || return 1 331 | } 332 | -------------------------------------------------------------------------------- /version.txt: -------------------------------------------------------------------------------- 1 | 2.0.5 2 | --------------------------------------------------------------------------------