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;
Kodlar:
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;
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.