Temayı Özelleştir
Özelleştirmeleri geri al
Neler yeni

Makale Linux Bash Script Nasıl Yapılır - Açık Kaynak Kod Örneği

Bugün sizlere linux script'i daha kolay anlayabilmeniz için çalışmalarımdan birini açık kaynak olarak vereceğim

Bazı kısımlarını konu çok uzamaması için kodların aşağısında kısa kısa açıklamalar ile belirteceğim.

Script Resmi;


Adsız.png




Kodlar:
Bash:
#!/bin/bash
clear

kapat='\033[0m'
beyaz='\033[1;37m'
kirmizi='\033[1;31m'
mavi='\033[1;36m'
sari='\033[1;33m'
yesil='\033[1;32m'
kmavi='\033[1;34m'
pembe='\033[1;35m'
kkirmizi='\033[0;31m'
kkmavi='\033[0;36m'
ksari='\033[0;33m'
kyesil='\033[0;32m'
kamavi='\033[0;34m'
kpembe='\033[0;35m'

tarih=$(date '+%d-%m-%Y')
mesaj="Yapımcı Nexus Script"

function ana_menu() {
    clear
    echo -e "${kkmavi}+---------------------------------------------+"
    echo -e "¦${yesil}      _   _  _______   ___   _ _____         ${kkmavi}¦"
    echo -e "¦${yesil}     | \ | ||  ___\ \ / / | | /  ___|        ${kkmavi}¦"
    echo -e "¦${yesil}     |  \| || |__  \ V /| | | \  --.         ${kkmavi}¦"
    echo -e "¦${yesil}     | .   ||  __| /   \| | | | --. \        ${kkmavi}¦"
    echo -e "¦${yesil}     | |\  || |___/ /^\ \ |_| /\__/ /        ${kkmavi}¦"
    echo -e "¦${yesil}     \_| \_/\____/\/   \/\___/\____/         ${kkmavi}¦"
    echo -e "¦                                             ¦"
    echo -e "+---------{ ${beyaz}$mesaj ${kkmavi}}------------+"
    echo -e "¦                                             ¦"
    echo -e "+---------------{ ${beyaz}$tarih ${kkmavi}}----------------+"
    echo -e "¦                                             ¦"
    echo -e "¦               ${beyaz}Sistem Ayarları${kapat}               ${kkmavi}¦"
    echo -e "¦              ${sari}———————————————${kkmavi}                ¦"
    echo -e "¦                                             ¦"
    echo -e "¦      (${yesil}1${kkmavi}) » CPU-BELLEK Performans Arttır     ¦"
    echo -e "¦      (${yesil}2${kkmavi}) » Disk Performansını Arttır        ¦"
    echo -e "¦      (${yesil}3${kkmavi}) » Root Şifresi Değiştir            ¦"
    echo -e "¦      (${yesil}4${kkmavi}) » Log Dosyalarını Temizle          ¦"
    echo -e "¦      (${yesil}5${kkmavi}) » Ağ Durumu Kontrolü               ¦"
    echo -e "¦      (${yesil}6${kkmavi}) » Sistem İstatistik (Ram-Cpu-Disk) ¦"
    echo -e "¦      (${yesil}7${kkmavi}) » Ddos Koruması Kur                ¦"
    echo -e "¦      (${yesil}8${kkmavi}) » Sistem Güncellemelerini Yap      ¦"
    echo -e "+---------------------------------------------+"
    echo -e "¦              (${ksari}10${kkmavi}) » ${sari}Ana Menüye Dön ${kkmavi}«        ${kkmavi}¦"
    echo -e "¦              (${kirmizi}0${kkmavi}) » ${kkirmizi}Çıkış Yap ${kkmavi}«              ${kkmavi}¦"
    echo -e "+---------------------------------------------+"
    echo -e -n "¦ » ${yesil}Seçenek:${kapat} "
    read secenek
    case $secenek in
        1)
            performans_arttir
            ;;
        2)
            disk_performans_arttir
            ;;
        3)
            root_sifre_degistir
            ;;
        4)
            log_dosyalari_temizle
            ;;
        5)
            ag_durumu_kontrol
            ;;     
        6)
            sistem_bilgisi_goster
            ;;
        7)
            ddos_koruma_ekle
            ;;
        8)
            sistem_guncellemeleri_yap
            ;;
        10)
            clear
            ana_menu
            ;;           
        0)
            clear
            echo -e "${kirmizi}Çıkış yapılıyor...${kapat}"
            exit 0
            ;;
        *)
            clear
            echo -e "${kirmizi}Geçersiz seçenek!${kapat}"
            exit 0
            ;;
    esac
}

function os_check() {
    if [ -f /etc/os-release ]; then
        . /etc/os-release
        OS=$NAME
        VER=$VERSION_ID
    else
        echo -e "${kirmizi}Bu script, bu işletim sistemi için uygun değil.${kapat}"
        exit 1
    fi
}

function performans_arttir() {
    clear
    os_check  # Önceden tanımladığımız OS ve sürüm kontrol fonksiyonunu kullanıyoruz

    echo -e "${kkmavi}+-------------------------------------------------------------------+"
    echo -e "${beyaz}|                    Performans İyileştirmeleri                     ${kkmavi}|"
    echo -e "${kkmavi}+-------------------------------------------------------------------+"

    case $OS in
        "Ubuntu"|"Debian")
            echo -e "${sari}Ubuntu/Debian için performans iyileştirmeleri yapılıyor...${kapat}"
            echo -e "${kkmavi}+-------------------------------------------------------------------+"
            # Swappiness ayarı
            sysctl -w vm.swappiness=10
            echo "vm.swappiness = 10" >> /etc/sysctl.conf
            echo -e "${yesil}| Swappiness ayarı 10 olarak güncellendi.${kapat}"
            # Dirty ratio ayarları
            sysctl -w vm.dirty_ratio=10
            sysctl -w vm.dirty_background_ratio=5
            echo "vm.dirty_ratio = 10" >> /etc/sysctl.conf
            echo "vm.dirty_background_ratio = 5" >> /etc/sysctl.conf
            echo -e "${yesil}| Dirty ratio ve background ratio güncellendi.${kapat}"
            # Önbellek temizleme
            echo 3 > /proc/sys/vm/drop_caches
            echo -e "${yesil}| Sistem önbelleği temizlendi.${kapat}"
            # TLP kurulumu
            if ! command -v tlp &> /dev/null; then
                sudo add-apt-repository ppa:linrunner/tlp -y
                sudo apt-get update
                sudo apt-get install tlp tlp-rdw -y
                sudo tlp start
                echo -e "${yesil}| TLP güç yönetimi aracı kuruldu ve başlatıldı.${kapat}"
            else
                echo -e "${sari}| TLP zaten kurulu.${kapat}"
            fi
            # CPU Frekans ayarları
            if ! command -v indicator-cpufreq &> /dev/null; then
                sudo apt-get install indicator-cpufreq -y
                echo -e "${yesil}| CPU frekans yönetim aracı kuruldu.${kapat}"
            else
                echo -e "${sari}| CPU frekans yönetim aracı zaten kurulu.${kapat}"
            fi
            # Preload kurulumu
            if ! command -v preload &> /dev/null; then
                sudo apt-get install preload -y
                echo -e "${yesil}| Preload kuruldu, uygulama yüklenme süreleri optimize edilecek.${kapat}"
            else
                echo -e "${sari}| Preload zaten kurulu.${kapat}"
            fi
            # GRUB timeout ayarı
            sudo sed -i 's/GRUB_TIMEOUT=10/GRUB_TIMEOUT=2/' /etc/default/grub
            sudo update-grub
            echo -e "${yesil}| GRUB önyükleme zamanı 2 saniyeye indirildi.${kapat}"
            ;;
        "CentOS Linux")
            echo -e "${sari}CentOS için performans iyileştirmeleri yapılıyor...${kapat}"
            # Önbellek temizleme
            echo 3 > /proc/sys/vm/drop_caches
            echo -e "${yesil}| Sistem önbelleği temizlendi.${kapat}"
            ;;
        *)
            echo -e "${kirmizi}Desteklenmeyen işletim sistemi: $OS${kapat}"
            exit 1
            ;;
    esac

    echo -e "${kkmavi}+-------------------------------------------------------------------+"
    echo -e "${kirmizi}|          İşlem Başarılı                                           ${kkmavi}|"
    echo -e "${kkmavi}+-------------------------------------------------------------------+"
    echo -e "${yesil}| (10) Ana Menüye Dön                                               ${kkmavi}|"
    echo -e "${kkmavi}+-------------------------------------------------------------------+"
    echo -e -n "${yesil}| Seçenek: ${kapat}"
    read secenek

    if [[ "$secenek" == "10" ]]; then
        ana_menu
    else
        echo -e "${kkirmizi}Geçersiz seçenek. Ana menüye yönlendiriliyorsunuz...${kapat}"
        sleep 2
        ana_menu
    fi
}




function disk_performans_arttir() {
    clear
    os_check  # Önceden tanımladığımız OS ve sürüm kontrol fonksiyonunu kullanıyoruz
    local disk=$(lsblk | grep disk | awk 'NR==1{print $1}')  # İlk disk adını alır
    local available_schedulers=$(cat /sys/block/$disk/queue/scheduler)
    
    echo -e "${kkmavi}+-------------------------------------------------------------------+"
    echo -e "${beyaz}|                    Disk I/O Performans Arttırma                  ${kkmavi}|"
    echo -e "${kkmavi}+-------------------------------------------------------------------+"

    case $OS in
        "Ubuntu")
            if [ "$VER" = "18.04" ] || [ "$VER" = "20.04" ] || [ "$VER" = "22.04" ]; then
                echo -e "${sari}Ubuntu için Disk I/O performansı arttırılıyor...${kapat}"
                if [[ $available_schedulers == *"mq-deadline"* ]]; then
                    echo mq-deadline > /sys/block/$disk/queue/scheduler
                    echo -e "${yesil}Scheduler 'mq-deadline' olarak ayarlandı.${kapat}"
                else
                    echo -e "${kirmizi}mq-deadline bu disk için uygun değil, mevcut scheduler kullanılıyor.${kapat}"
                fi
                # noatime mount seçeneği eklemek için /etc/fstab dosyasını güncelleyin
                sed -i '/ \/ / s/defaults/defaults,noatime/' /etc/fstab
                mount -o remount /
            else
                echo -e "${kirmizi}Bu Ubuntu sürümü desteklenmiyor.${kapat}"
            fi
            ;;
        "CentOS Linux")
            if [[ "$VER" = "7" ]]; then
                echo -e "${sari}CentOS 7 için Disk I/O performansı arttırılıyor...${kapat}"
                if [[ $available_schedulers == *"deadline"* ]]; then
                    echo deadline > /sys/block/$disk/queue/scheduler
                    echo -e "${yesil}Scheduler 'deadline' olarak ayarlandı.${kapat}"
                else
                    echo -e "${kirmizi}Deadline bu disk için uygun değil, mevcut scheduler kullanılıyor.${kapat}"
                fi
                sed -i '/ \/ / s/defaults/defaults,noatime/' /etc/fstab
                mount -o remount /
            elif [[ "$VER" = "8" ]]; then
                echo -e "${sari}CentOS 8 için Disk I/O performansı arttırılıyor...${kapat}"
                if [[ $available_schedulers == *"mq-deadline"* ]]; then
                    echo mq-deadline > /sys/block/$disk/queue/scheduler
                    echo -e "${yesil}Scheduler 'mq-deadline' olarak ayarlandı.${kapat}"
                else
                    echo -e "${kirmizi}mq-deadline bu disk için uygun değil, mevcut scheduler kullanılıyor.${kapat}"
                fi
                sed -i '/ \/ / s/defaults/defaults,noatime/' /etc/fstab
                mount -o remount /
            else
                echo -e "${kirmizi}Bu CentOS sürümü desteklenmiyor.${kapat}"
            fi
            ;;
        *)
            echo -e "${kirmizi}Desteklenmeyen işletim sistemi: $OS${kapat}"
            exit 1
            ;;
    esac
    echo -e "${kkmavi}+-------------------------------------------------------------------+"
    echo -e "${yesil}| (10) Ana Menüye Dön                                               ${kkmavi}|"
    echo -e "${kkmavi}+-------------------------------------------------------------------+"
    echo -e -n "${yesil}| Seçenek: ${kapat}"
    read secenek

    if [[ "$secenek" == "10" ]]; then
        ana_menu
    else
        echo -e "${kkirmizi}Geçersiz seçenek. Ana menüye yönlendiriliyorsunuz...${kapat}"
        sleep 2
        ana_menu
    fi
}

function root_sifre_degistir() {
    clear
    os_check  # Önceden tanımladığımız OS ve sürüm kontrol fonksiyonunu kullanıyoruz

    echo -e "${kkmavi}+-------------------------------------------------------------------+"
    echo -e "${sari}| Lütfen yeni root şifresini giriniz.                               |"
    echo -e "${kkmavi}+-------------------------------------------------------------------+"

    # Kullanıcıdan güvenli bir şekilde şifre girmesini isteyin
    read -s -p "Yeni şifre: " new_password
    echo ""
    read -s -p "Şifreyi tekrar giriniz: " new_password_verify
    echo ""

    if [ "$new_password" != "$new_password_verify" ]; then
        echo -e "${kirmizi}| Şifreler uyuşmuyor. Lütfen tekrar deneyiniz.${kapat}"
        return
    fi

    if [[ "$OS" == "Ubuntu" || "$OS" == "Debian" ]]; then
        echo "root:$new_password" | sudo chpasswd
    else
        echo "root" | passwd --stdin root <<< "$new_password"
    fi

    if [ $? -eq 0 ]; then
        echo -e "${kkmavi}+-------------------------------------------------------------------+"
        echo -e "${yesil}| Root şifresi başarıyla değiştirildi. Yeni şifreniz: $new_password |"
        echo -e "${kkmavi}+-------------------------------------------------------------------+"
    else
        echo -e "${kkmavi}+-------------------------------------------------------------------+"
        echo -e "${kirmizi}| Root şifresi değiştirilemedi. Lütfen tekrar deneyiniz.             |"
        echo -e "${kkmavi}+-------------------------------------------------------------------+"
    fi

    echo -e "${kkmavi}+-------------------------------------------------------------------+"
    echo -e "${yesil}| (10) Ana Menüye Dön                                               ${kkmavi}|"
    echo -e "${kkmavi}+-------------------------------------------------------------------+"
    echo -e -n "${yesil}| Seçenek: ${kapat}"
    read secenek

    if [[ "$secenek" == "10" ]]; then
        ana_menu
    else
        echo -e "${kkirmizi}Geçersiz seçenek. Ana menüye yönlendiriliyorsunuz...${kapat}"
        sleep 2
        ana_menu
    fi
}


function log_dosyalari_temizle() {
    clear
    os_check  # Önceden tanımladığımız OS ve sürüm kontrol fonksiyonunu kullanıyoruz
    echo -e "${kkmavi}+---------------------------------------------------+"
    echo -e "${beyaz}|                Log Dosyaları Temizleniyor         ${kkmavi}|"
    echo -e "${kkmavi}+---------------------------------------------------+"

    case $OS in
        "Ubuntu"|"Debian")
            echo -e "${sari}Ubuntu/Debian için log dosyaları temizleniyor...${kapat}"
            # /var/log içindeki eski log dosyalarını bulup siler
            find /var/log -type f -name '*.log' -exec truncate -s 0 {} \;
            echo -e "${yesil}Log dosyaları başarıyla temizlendi.${kapat}"
            ;;
        "CentOS Linux")
            echo -e "${sari}CentOS için log dosyaları temizleniyor...${kapat}"
            # /var/log içindeki eski log dosyalarını bulup siler
            find /var/log -type f -name '*.log' -exec truncate -s 0 {} \;
            echo -e "${yesil}Log dosyaları başarıyla temizlendi.${kapat}"
            ;;
        *)
            echo -e "${kirmizi}Desteklenmeyen işletim sistemi: $OS${kapat}"
            exit 1
            ;;
    esac

    echo -e "${kkmavi}+---------------------------------------------------+"
    echo -e "${sari}| (10) Ana Menüye Dön                               ${kkmavi}|"
    echo -e "${kkmavi}+---------------------------------------------------+"
    echo -e -n "${yesil}| Seçenek: ${kapat}"
    read secenek

    if [[ "$secenek" == "10" ]]; then
        ana_menu
    else
        echo -e "${kkirmizi}Geçersiz seçenek. Ana menüye yönlendiriliyorsunuz...${kapat}"
        sleep 2
        ana_menu
    fi
}

function sistem_guncellemeleri_yap() {
    os_check  # Önceden tanımladığımız OS ve sürüm kontrol fonksiyonunu kullanıyoruz
    case $OS in
        "Ubuntu"|"Debian")
            echo -e "${sari}Ubuntu/Debian için sistem güncellemeleri yapılıyor...${kapat}"
            # Debian ve Ubuntu için güncelleme komutları
            apt-get update && apt-get upgrade -y
            echo -e "${yesil}Sistem başarıyla güncellendi.${kapat}"
            ;;
        "CentOS Linux")
            echo -e "${sari}CentOS için sistem güncellemeleri yapılıyor...${kapat}"
            # CentOS 7 için
            if [ "$VER" = "7" ]; then
                yum update -y
            # CentOS 8 ve sonrası için
            elif [ "$VER" = "8" ]; then
                dnf update -y
            else
                echo -e "${kirmizi}Bu CentOS sürümü desteklenmiyor.${kapat}"
            fi
            echo -e "${yesil}Sistem başarıyla güncellendi.${kapat}"
            ;;
        *)
            echo -e "${kirmizi}Desteklenmeyen işletim sistemi: $OS${kapat}"
            exit 1
            ;;
    esac
}

function ag_durumu_kontrol() {
    clear
    local interface_info=$(ip -br addr)
    local active_connections=$(netstat -tuln | tail -n +3)
    echo -e "${beyaz}|                      Ağ Bilgileri                             ${kkmavi}|"
    echo -e "${kkmavi}+---------------------------------------------------------------+"
    echo -e "${kirmizi}| Arayüz  | IP Adresi            | Ağ Maskesi                   ${kkmavi}|"
    echo -e "${kkmavi}+---------------------------------------------------------------+"
    echo "$interface_info" | awk '{printf "| %-7s | %-20s | %-28s |\n", $1, $3, $2}'
    echo -e "${kkmavi}+---------------------------------------------------------------+"
    echo -e "${beyaz}|                 Aktif Ağ Bağlantıları                         ${kkmavi}|"
    echo -e "${kkmavi}+---------------------------------------------------------------+"
    echo -e "${kirmizi}| Protokol   | Yerel Adres       | Uzak Adres       | Durum   ${kkmavi}  |"
    echo -e "${kkmavi}+---------------------------------------------------------------+"
    echo "$active_connections" | awk '{printf "| %-10s | %-17s | %-17s | %-8s |\n", $1, $4, $5, $6}'
    echo -e "${kkmavi}+---------------------------------------------------------------+"
    echo -e "${sari}| (10) Ana Menüye Dön                                           ${kkmavi}|"
    echo -e "${kkmavi}+---------------------------------------------------------------+"
    echo -e -n "${yesil}| Seçenek: ${kapat}"
    read secenek

    if [[ "$secenek" == "10" ]]; then
        ana_menu
    else
        echo -e "${kkirmizi}Geçersiz seçenek. Ana menüye yönlendiriliyorsunuz...${kapat}"
        sleep 2
        ana_menu
    fi
}

function sistem_bilgisi_goster() {
    clear
    local ram_usage=$(free -m | awk '/Mem:/ {printf "%.1f/%.1fMB (%.1f%%)", $3, $2, $3/$2 * 100}')
    local disk_usage=$(df -h | awk '/\/$/ {printf "%s/%s (%s)", $3, $2, $5}')
    local cpu_load=$(top -bn1 | grep "load average:" | awk '{print $12}' | cut -d ',' -f 1)
    local server_ip=$(hostname -I | cut -d' ' -f1)

    # Hizalama için boşlukları hesapla
    local ram_padding=$(printf '%*s' $((36 - ${#ram_usage})) '')
    local disk_padding=$(printf '%*s' $((36 - ${#disk_usage})) '')
    local cpu_padding=$(printf '%*s' $((36 - ${#cpu_load})) '')
    local ip_padding=$(printf '%*s' $((36 - ${#server_ip})) '')

    echo -e "$mesaj"
    echo -e "${kkmavi}¦                                                      ¦"
    echo -e "${kkmavi}+---------------{ ${beyaz}$tarih ${kkmavi}}-------------------------+"
    echo -e "${kkmavi}¦                                                      ¦"
    echo -e "${beyaz}|                    Sunucu İstatistikleri             ${kkmavi}|"
    echo -e "${kkmavi}+------------------------------------------------------+"
    echo -e "${kirmizi}| RAM Kullanımı:   ${sari}$ram_usage$ram_padding${kkmavi}|"
    echo -e "${kirmizi}| Disk Kullanımı:  ${sari}$disk_usage$disk_padding${kkmavi}|"
    echo -e "${kirmizi}| CPU Yükü:        ${sari}$cpu_load$cpu_padding${kkmavi}|"
    echo -e "${kirmizi}| Sunucu IP:       ${sari}$server_ip$ip_padding${kkmavi}|"
    echo -e "${kkmavi}+------------------------------------------------------+"
    echo -e "${beyaz}|             En Çok CPU ve RAM Kullanan Uygulamalar   ${kkmavi}|"
    echo -e "${kkmavi}| CPU (%)  | RAM (%)  | Süreç                          |"
    echo -e "${kkmavi}+------------------------------------------------------+"
    echo -e "${kirmizi}$(ps -eo %cpu,%mem,comm --sort=-%cpu | head -n 5 | awk 'NR>1 {printf "| %-8s | %-8s | %-30s |\n", $1, $2, $3}')"
    echo -e "${kkmavi}+------------------------------------------------------+"
    echo -e "${sari}| (10) Ana Menüye Dön                                  ${kkmavi}|"
    echo -e "${kkmavi}+------------------------------------------------------+"
    echo -e -n "${yesil}| Seçenek: ${kapat}"
    read secenek

    if [[ "$secenek" == "10" ]]; then
        ana_menu
    else
        echo -e "${kkirmizi}Geçersiz seçenek. Ana menüye yönlendiriliyorsunuz...${kapat}"
        sleep 2
        ana_menu
    fi
}

function sistem_bilgisi_goster() {
    clear
    local ram_usage=$(free -m | awk '/Mem:/ {printf "%.1f/%.1fMB (%.1f%%)", $3, $2, $3/$2 * 100}')
    local disk_usage=$(df -h | awk '/\/$/ {printf "%s/%s (%s)", $3, $2, $5}')
    local cpu_load=$(top -bn1 | grep "load average:" | awk '{print $12}' | cut -d ',' -f 1)
    local server_ip=$(hostname -I | cut -d' ' -f1)

    # Hizalama için boşlukları hesapla
    local ram_padding=$(printf '%*s' $((36 - ${#ram_usage})) '')
    local disk_padding=$(printf '%*s' $((36 - ${#disk_usage})) '')
    local cpu_padding=$(printf '%*s' $((36 - ${#cpu_load})) '')
    local ip_padding=$(printf '%*s' $((36 - ${#server_ip})) '')

    echo -e "$mesaj"
    echo -e "${kkmavi}¦                                                      ¦"
    echo -e "${kkmavi}+---------------{ ${beyaz}$tarih ${kkmavi}}-------------------------+"
    echo -e "${kkmavi}¦                                                      ¦"
    echo -e "${beyaz}|                    Sunucu İstatistikleri             ${kkmavi}|"
    echo -e "${kkmavi}+------------------------------------------------------+"
    echo -e "${kirmizi}| RAM Kullanımı:   ${sari}$ram_usage$ram_padding${kkmavi}|"
    echo -e "${kirmizi}| Disk Kullanımı:  ${sari}$disk_usage$disk_padding${kkmavi}|"
    echo -e "${kirmizi}| CPU Yükü:        ${sari}$cpu_load$cpu_padding${kkmavi}|"
    echo -e "${kirmizi}| Sunucu IP:       ${sari}$server_ip$ip_padding${kkmavi}|"
    echo -e "${kkmavi}+------------------------------------------------------+"
    echo -e "${beyaz}|             En Çok CPU ve RAM Kullanan Uygulamalar   ${kkmavi}|"
    echo -e "${kkmavi}| CPU (%)  | RAM (%)  | Süreç                          |"
    echo -e "${kkmavi}+------------------------------------------------------+"
    echo -e "${kirmizi}$(ps -eo %cpu,%mem,comm --sort=-%cpu | head -n 5 | awk 'NR>1 {printf "| %-8s | %-8s | %-30s |\n", $1, $2, $3}')"
    echo -e "${kkmavi}+------------------------------------------------------+"
    echo -e "${sari}| (10) Ana Menüye Dön                                  ${kkmavi}|"
    echo -e "${kkmavi}+------------------------------------------------------+"
    echo -e -n "${yesil}| Seçenek: ${kapat}"
    read secenek

    if [[ "$secenek" == "10" ]]; then
        ana_menu
    else
        echo -e "${kkirmizi}Geçersiz seçenek. Ana menüye yönlendiriliyorsunuz...${kapat}"
        sleep 2
        ana_menu
    fi
}

function ddos_koruma_ekle() {
    os_check  # Önceden tanımladığımız OS ve sürüm kontrol fonksiyonunu kullanıyoruz
    clear
    echo -e "${kkmavi}+-------------------------------------------------------+"
    echo -e "|${beyaz}                DDoS Koruma Sistemi                    ${kkmavi}|"
    echo -e "${kkmavi}+-------------------------------------------------------+"
    echo -e "${sari}| Bu işlem, sunucunuzu SYN ve UDP Flood saldırılarına${kkmavi}   |"
    echo -e "| karşı koruyacak iptables kuralları ekleyecektir.     ${kkmavi} |"
    echo -e "| Ayrıca, her IP adresi için maksimum bağlantı         ${kkmavi} |"
    echo -e "| sayısını sınırlayarak anormal trafiği engelleyecektir.${kkmavi}|"
    echo -e "${kkmavi}+-------------------------------------------------------+"
    echo -e "${sari}| Lütfen bir seçenek seçiniz:                          ${kkmavi} |"
    echo -e "|(${yesil}1.)${kkmavi} Evet, koruma kurallarını uygula                  ${kkmavi} |"
    echo -e "|(${yesil}2.)${kkmavi} Tüm DDoS koruma kurallarını sıfırla ve eskiye dön${kkmavi} |"
    echo -e "${kkmavi}+-------------------------------------------------------+"
    echo -e "${sari}| (10) Ana Menüye Dön                                  ${kkmavi}|"
    echo -e "${kkmavi}+-------------------------------------------------------+"
    echo -e -n "|${yesil} Seçenek: ${kapat}"
    read onay

    case $onay in
        1)
            echo -e "${sari}| SYN Flood saldırılarına karşı koruma kuruluyor... ${kkmavi}|"
            /sbin/iptables -A INPUT -p tcp --syn -m limit --limit 100/s --limit-burst 150 -j ACCEPT
            /sbin/iptables -A INPUT -p tcp --syn -j DROP
            echo -e "${yesil}| SYN Flood koruması başarıyla ayarlandı.           ${kkmavi}|"

            echo -e "${sari}| UDP Flood saldırılarına karşı koruma kuruluyor... ${kkmavi}|"
            /sbin/iptables -A INPUT -p udp -m limit --limit 10/s --limit-burst 20 -j ACCEPT
            /sbin/iptables -A INPUT -p udp -j DROP
            echo -e "${yesil}| UDP Flood koruması başarıyla ayarlandı.           ${kkmavi}|"

            echo -e "${sari}| Her kaynak IP için bağlantı sayısı sınırlaması     ${kkmavi} |"
            echo -e "| uygulanıyor...                                    ${kkmavi} |"
            /sbin/iptables -A INPUT -p tcp -m connlimit --connlimit-above 200 -j REJECT --reject-with tcp-reset
            echo -e "${yesil}| Bağlantı sayısı sınırlaması başarıyla uygulandı.  ${kkmavi} |"
            ;;
        2)
            echo -e "${sari}| Tüm DDoS koruma kuralları sıfırlanıyor...         ${kkmavi} |"
            /sbin/iptables -F
            echo -e "${yesil}| Tüm iptables kuralları başarıyla sıfırlandı.      ${kkmavi} |"
            echo -e "| Sistem eski durumuna döndürüldü.                   ${kkmavi} |"
            ;;
        10)
            ana_menu
            ;;
        *)
            echo -e "${kirmizi}| Geçersiz seçenek. Lütfen 1, 2 veya 10 giriniz.    ${kkmavi} |"
            ;;
    esac
}



check_update
ana_menu



Resimde gördüğünüz script'in kodları bu şekilde.
Bilgisayarınızda test.sh adlı bir dosya oluşturup bu kodları girerek sanal sunucunuzda test edebilirsiniz. Virtual Studio Code kullanmanızı öneririm.


Eğer sanal sunucunuzda çalıştırırken. "/bin/bash^M: bad interpreter: No such file or directory" diye bir hata alıyorsanız.
Ubuntu Kullanıyorsanız:
Bash:
sudo apt update
sudo apt install dos2unix
dos2unix dosyaadi.sh

Sırasıyla bu kodları girmeniz lazım düzelecektir.

Centos 7 Kullanıyorsanız:
Bash:
sudo yum install dos2unix
dos2unix dosyaadi.sh

Centos 8 ve üzeri
Bash:
sudo dnf install dos2unix
dos2unix dosyaadi.sh


Şimdi fonksiyonların ne işe yaradığı kısmına geleceğim.

Kodlarda da gördüğünüz gibi
Bash:
    echo -e "¦      (${yesil}1${kkmavi}) » CPU-BELLEK Performans Arttır     ¦"

    echo -e "¦      (${yesil}2${kkmavi}) » Disk Performansını Arttır        ¦"

    echo -e "¦      (${yesil}3${kkmavi}) » Root Şifresi Değiştir            ¦"

    echo -e "¦      (${yesil}4${kkmavi}) » Log Dosyalarını Temizle          ¦"

    echo -e "¦      (${yesil}5${kkmavi}) » Ağ Durumu Kontrolü               ¦"

    echo -e "¦      (${yesil}6${kkmavi}) » Sistem İstatistik (Ram-Cpu-Disk) ¦"

    echo -e "¦      (${yesil}7${kkmavi}) » Ddos Koruması Kur                ¦"

    echo -e "¦      (${yesil}8${kkmavi}) » Sistem Güncellemelerini Yap      ¦"


Bu kısımda her bir satır için 1,2,3,4,5 gibi değerler var " (${yesil}8${kkmavi})"

Bu satırların altında da bu sayıların nereye yönlendireceğini belirten kodlar var:

Bash:
    read secenek

    case $secenek in

        1)

            performans_arttir

            ;;

        2)

            disk_performans_arttir

            ;;

        3)

            root_sifre_degistir

            ;;

        4)

            log_dosyalari_temizle

            ;;

        5)

            ag_durumu_kontrol

            ;;     

        6)

            sistem_bilgisi_goster

            ;;

        7)

            ddos_koruma_ekle

            ;;

        8)

            sistem_guncellemeleri_yap

            ;;

        10)

            clear

            ana_menu

            ;;           

        0)

            clear

            echo -e "${kirmizi}Çıkış yapılıyor...${kapat}"

            exit 0

            ;;

        *)

            clear

            echo -e "${kirmizi}Geçersiz seçenek!${kapat}"

            exit 0

            ;;

    esac

}


Önce read seçenek ile kullanıcının vereceği sayı cevabını okuyor.
Diyelim kullanıcı 1 dedi, "function performans_arttir" fonksiyonuna yönlendiriyor.
function performans_arttir kısmını da kodlarda bu şekilde görüyoruz

Bash:
function performans_arttir() {

    clear

    os_check  # Önceden tanımladığımız OS ve sürüm kontrol fonksiyonunu kullanıyoruz



    echo -e "${kkmavi}+-------------------------------------------------------------------+"

    echo -e "${beyaz}|                    Performans İyileştirmeleri                     ${kkmavi}|"

    echo -e "${kkmavi}+-------------------------------------------------------------------+"



    case $OS in

        "Ubuntu"|"Debian")

            echo -e "${sari}Ubuntu/Debian için performans iyileştirmeleri yapılıyor...${kapat}"

            echo -e "${kkmavi}+-------------------------------------------------------------------+"

            # Swappiness ayarı

            sysctl -w vm.swappiness=10

            echo "vm.swappiness = 10" >> /etc/sysctl.conf

            echo -e "${yesil}| Swappiness ayarı 10 olarak güncellendi.${kapat}"

            # Dirty ratio ayarları

            sysctl -w vm.dirty_ratio=10

            sysctl -w vm.dirty_background_ratio=5

            echo "vm.dirty_ratio = 10" >> /etc/sysctl.conf

            echo "vm.dirty_background_ratio = 5" >> /etc/sysctl.conf

            echo -e "${yesil}| Dirty ratio ve background ratio güncellendi.${kapat}"

            # Önbellek temizleme

            echo 3 > /proc/sys/vm/drop_caches

            echo -e "${yesil}| Sistem önbelleği temizlendi.${kapat}"

            # TLP kurulumu

            if ! command -v tlp &> /dev/null; then

                sudo add-apt-repository ppa:linrunner/tlp -y

                sudo apt-get update

                sudo apt-get install tlp tlp-rdw -y

                sudo tlp start

                echo -e "${yesil}| TLP güç yönetimi aracı kuruldu ve başlatıldı.${kapat}"

            else

                echo -e "${sari}| TLP zaten kurulu.${kapat}"

            fi

            # CPU Frekans ayarları

            if ! command -v indicator-cpufreq &> /dev/null; then

                sudo apt-get install indicator-cpufreq -y

                echo -e "${yesil}| CPU frekans yönetim aracı kuruldu.${kapat}"

            else

                echo -e "${sari}| CPU frekans yönetim aracı zaten kurulu.${kapat}"

            fi

            # Preload kurulumu

            if ! command -v preload &> /dev/null; then

                sudo apt-get install preload -y

                echo -e "${yesil}| Preload kuruldu, uygulama yüklenme süreleri optimize edilecek.${kapat}"

            else

                echo -e "${sari}| Preload zaten kurulu.${kapat}"

            fi

            # GRUB timeout ayarı

            sudo sed -i 's/GRUB_TIMEOUT=10/GRUB_TIMEOUT=2/' /etc/default/grub

            sudo update-grub

            echo -e "${yesil}| GRUB önyükleme zamanı 2 saniyeye indirildi.${kapat}"

            ;;

        "CentOS Linux")

            echo -e "${sari}CentOS için performans iyileştirmeleri yapılıyor...${kapat}"

            # Önbellek temizleme

            echo 3 > /proc/sys/vm/drop_caches

            echo -e "${yesil}| Sistem önbelleği temizlendi.${kapat}"

            ;;

        *)

            echo -e "${kirmizi}Desteklenmeyen işletim sistemi: $OS${kapat}"

            exit 1

            ;;

    esac



    echo -e "${kkmavi}+-------------------------------------------------------------------+"

    echo -e "${kirmizi}|          İşlem Başarılı                                           ${kkmavi}|"

    echo -e "${kkmavi}+-------------------------------------------------------------------+"

    echo -e "${yesil}| (10) Ana Menüye Dön                                               ${kkmavi}|"

    echo -e "${kkmavi}+-------------------------------------------------------------------+"

    echo -e -n "${yesil}| Seçenek: ${kapat}"

    read secenek



    if [[ "$secenek" == "10" ]]; then

        ana_menu

    else

        echo -e "${kkirmizi}Geçersiz seçenek. Ana menüye yönlendiriliyorsunuz...${kapat}"

        sleep 2

        ana_menu

    fi

}

Gördüğünüz gibi 1 seçip enter diyince bu functionda neler yapılacağını kodluyoruz. En son işlem bitince işlem başarılı diyor ve gördüğünüz gibi (10) Ana menüye dön yazıyor. Tekrar read secenek ile cevabı okuyup bu sefer ana_menu ye dönüyor. Ana menümüzün de üstünde function ana_menu gördüğünüz gibi function var. Kısacası yönlendirmeleri böyle yapıyoruz diğer tüm sayılarda da aynı mantık ile yönlendirme yapılıyor.

Örneğin 1. adımın yani function performans_arttir içeriğindeki kodları değiştirerek sonra sanal sunucunuzda deneyerek yaptığı şeyleri görebilirsiniz.

Birde her kodun başında echo kullanmamızın nedeni echo komutu kullanıcıya çıktı verir.
Yani "echo -e "${kkirmizi}Geçersiz seçenek. Ana menüye yönlendiriliyorsunuz...${kapat}" Burada eğer başına echo yazmazsanız bunu kullanıcı görmez.
Örneğin sudo apt-install komutuyla bişey yazıyorsanız başına echo koymazsanız kullanıcı bunu görmez.

Son olarak en başta
Bash:
function os_check() {
    if [ -f /etc/os-release ]; then
        . /etc/os-release
        OS=$NAME
        VER=$VERSION_ID
    else
        echo -e "${kirmizi}Bu script, bu işletim sistemi için uygun değil.${kapat}"
        exit 1
    fi
}

os_check kodumuz var bu da hem ubuntu hem de centos için uyumlu olmasını sağlıyor kodlarımın yani functionları kullanırken os_check yaptırıyoruz her function da ubuntuya özel kod, centosa ayrı kod yazıyoruz. os_check'i yapıyor başta ve ona göre yazdığınız kodları seçiyor script.

Kodun son iki satırında da
check_update
ana_menu

Yazmakta bu ise diyelim sürüm sistemi yapacaksınız yeni bir function check_update diye bir function oluşturun ve mesela bir yerden sürüm bilgisini çekecek şekilde ayarlayın ana_menu den üste koyarsanız önce güncelleme var mı diye kontrol eder. Bunu bir sonra ki makalede nasıl yapılır açıklayacağım.


Basit ve hızlı bir şekilde anlatmaya çalıştım biraz kurcalarsanız çabuk kaparsınız diye düşünüyorum.

Script dosyasını da ek olarak bırakıyorum indirip .zip dosyasından çıkarıp ftp ile bağlanarak sunucunuza atabilir ve düzenleme sağlayabilirsiniz.
 

Ekli dosyalar

  • nexusornek.zip
    4.4 KB · Görüntüleme: 3
Yine harika bir konuya değinmişiniz @nexus konuyu google gönderdim ve portala ekledim. Emeğinize sağlık
 
Teşekkür ederim:)
 
Bu denli güzel bir konuya değinmenizin yanı sıra Teknoloji Forum'a destek olmanız ayrıca mutlu ediyor bizleri. İlerleyen zamanlarda çok daha iyi yerlere gelecek olan teknoloji forum sizin bu desteğinizi hiçbir zaman gözardı etmeyecektir :)

Teşekkür ederiz eksik olmayın
 
Harbi güzelmiş böyle şeylere benim de merakım var 😁 bazen bozuyorum pc ama öyle öğrenmesi daha keyifli.
 
Yine harika bir konuya değinmişiniz @nexus konuyu google gönderdim ve portala ekledim. Emeğinize sağlık
Portal tamamda Google Gönderme Nasıl Oluyor 😇
- Google da adamların mı var kardeşim. Bizede yardımcı olsunlar.
Neyse konuyu dağıtmayım. DM kapalı buradan yazdım
 
Harbi güzelmiş böyle şeylere benim de merakım var 😁 bazen bozuyorum pc ama öyle öğrenmesi daha keyifli.
Çocuk yaşlarımda bilgisayarımı bozduğumda (aslında stabil çalışan bilgisayarı tamir etmeye çalışıyorum) babam bir daha bozarsan tamir ettirmem vs. derdi o korku ile çok fazla bilgisayarda deneme yanılma yapamazdım :)

Bir gün hiç unutmam XP bilgisayarıma format atarken elektrikler gitti ve ne yapacağımı bilemedim, bilgisayar 6 ay boyunca kapalı oldu benimle beraber ceza aldı. Sanki askerdeyiz ve ağaca ceza veriyorlar :D

@Tek Bilgin sanırım Google gibi getirden bahsediyor @Tevfik bey, keşke Google'da birkaç eş dost akraba falan olsaydı :D
 

Konuyu Kimler Okuyor

Geri