Server Yönetimi İçin Yararlı Komutlar

Her ne kadar hala ulkemizde kişisel site ihtiyaçlarını hosting firmaları karşılasa da bir zamandan sonra bu size yeterli gelmeyebilir.Bu gibi durumlar kendi serverınıza geçme ihtiyacı duyabilirsiniz.Bu yuzden az da olsa server yonetimi konusunda bilgi sahibi olmanız lazım.Server yonetimi diğer birçok dala gore zordur.Çunku sorunun yanında birde getirdiği dar zamanda stres yonetimi vardır.Gerçekten buyuk firmalarda,serverlarda yoneticilik yapanlar işleri çok zordur.Ben bugun sizlere kendi serverımda surekli olarka kullandığım yararlı birkaç bash kodlarından bahsetmek istiyorum.Eminim sizinde işinize yarayacak kodlar olabilir.Kendi ihtiyaçlarınıza gore değiştirip kullanabilirsiniz.

İstediğiniz bir ip adresini aşağıdaki Banlanacak_Ip_Adresi yerine yazarsanız o ip adresini serverdan banlamış olursunuz.

iptables -A INPUT -s Banlanacak_Ip_Adresi -j DROP

Serverdaki bağlantı ve turlerini oğrenebilirsiniz.

netstat -ntu | grep :80 | awk '{print $6}' | cut -f1 -d ':' |sort| uniq -c | sort -n;

Serverda fazla bağlantı açap ip adresleri.Buradan aldığınız ip adreslerini isteğiniz doğrultusunda ilk verdiğim komut ile serverdan uzaklaştırabilirsiniz.

netstat -ntu | grep :80 | awk '{print $5}' | cut -f1 -d ':' |sort| uniq -c | sort -n | awk '$1 > 10 {print $1,$2}'

Sunucudaki toplam bağlantı sayısını aşağıdaki komut ile oğrenebilirsiniz.

echo `netstat -an|wc -l`

Serverınızın uzerindeki yukunu yani sistem load durumunu oğrenmek için aşağıdaki kodu kullanabilirsiniz.Bunu ara ara tekrarlayıp durumu kontrol etmekte fayda var.Önemli bir koddur.

echo `uptime | awk -F "load average: " '{ print $2 }' | cut -d, -f1`

Sunucudaki ping taleplerini ilk kodla kapatıp ikincisi ile açabilirsiniz.(1 kapatma 0 açma)

sysctl -w net.ipv4.icmp_echo_ignore_all=1

:::shell
sysctl -w net.ipv4.icmp_echo_ignore_all=0

Serverınızdaki SYN paketlerini listeler.DDos açısından onemlidir.Fazla ise dikkat etmeniz gerekebilir.

netstat -ntu |grep SYN | awk '{print $5}' | awk '{sub("::ffff:","");print}' | cut -f1 -d ':' | sort | uniq -c | sort -n | grep -v -e server -e Address -e 127.0.0.1 -e 0.0.0.0

Aşağıdaki bash scripti bir forumda gormuştum.Aynen paylaşıyorum.Fazla SYN Paketi gelen ip adreslerini banlar.Ufak çaplı saldırıları onleyebilirsiniz.

#!/bin/sh

# Saldiri varmi ?
SYNCOUNT=`netstat -n | grep SYN | wc -l`

if [ $SYNCOUNT -gt 20 ] ; then

echo "$SYNCOUNT SYN Bulundu! Banlama basliyor lutfen bekleyin."

# Sunucu iplerini beyaz liste alalim.
ip addr show|grep inet|grep -v 127.0.0.1|grep -v inet6|awk '{print $2}'|cut -d: -f9|cut -d/ -f1|while read ipler; do touch /tmp/$ipler.tk; done

# Bloklanicak Paket Sayisi
#Default deger BPAKET=40
BPAKET=40
# Incelenecek Paket Sayisi
# Default deger SPAKET=5000
SPAKET=5000
# Inceleyelim.
tcpdump -n -q -c $SPAKET 'tcp[tcpflags] & tcp-syn != 0 and dst port 80'| awk '{print $3}'|awk -F. -v n=. '{print $1 n $2 n $3 n $4}'|sort|uniq -c|sort -nr|awk '$1 > $PAKET'|awk '{print $2}'|while read ipler;
do if [ ! -f /tmp/$ipler.tk ]; then
touch /tmp/$ipler.tk && iptables -A INPUT -s $ipler -j DROP && echo $ipler blokladim;
fi
done

# Cikalim.
else
echo "$SYNCOUNT SYN Bulundu! Saldiri tespit edilmedi..."
fi
exit 0

Aşağıdaki script sistem loadın yukseldiği durumlar istediğiniz servislere rest atmanızı ve bunu mail ile size bildirmeye yarar.Gayet faydalıdır.

#/usr/bin/!
# Sistem Load Degeri load="" arasindaki degeri astiginda program calisip servislerinize reset atacak
load="60"


######### Resetlenecek servisler baslar #########
loadkomutu=`uptime | awk -F "load average: " '{ print $2 }' | cut -d, -f1 | cut -d. -f1`
mailload=`uptime | awk -F "load average: " '{ print $2 }' | cut -d, -f1`

if [ "$loadkomutu" -ge "$load" ]
then
######### Resetlenecek servisler baslar #########
pkill -9 httpd
######### Resetlenecek servisler biter #########

zaman=`date +"%d.%m.%Y - %T"`
echo "Servisler en son su tarihte yeniden baslatildi : $zaman" >> /var/log/kontrol.load

TMP_PREFIX='/tmp/gidenmail'
TMP_FILE="mktemp $TMP_PREFIX.XXXXXXXX"
mailicerigi=`$TMP_FILE`

echo "Tarih : $zaman" > $mailicerigi
echo "Sistem Load Yuksek: $mailload" >> $mailicerigi

cat "$mailicerigi" |  mail -s "$zaman UYARI: Yuksek Load $mailload" $1

else
echo "Sorun yok"
/etc/init.d/httpd start
fi

Hemen aşağıdaki scripti ben surekli olan kullanırım.Arka planda çalışan programların ne kadar işlemci ve ram kullandığını oğrenmemizi sağlar.Dosya ismini islem.sh olarak kaydederseniz ./islem.sh mem veya ./islem.sh cpu komutlarını kullanarak çalıştırabilirsiniz.

#! /bin/bash
#List processes based on %cpu and memory usage

echo "Start Time" `date`
# By default, it display the list of processes based on the cpu and memory usage #
if [ $# -eq 0 ]
then

    echo "List of processes based on the %cpu Usage"
    ps -e -o pcpu,cpu,nice,state,cputime,args -sort pcpu  # sorted based on %cpu
    echo "List of processes based on the memory Usage"
    ps -e -orss=,args= | sort -b -k1,1n # sorted bases rss value

# If arguements are given (mem/cpu)
else
    case "$1¨ in
    mem)
     echo "List of processes based on the memory Usage"
      ps -e -orss=,args= | sort -b -k1,1n
     ;;
     cpu)
     echo "List of processes based on the %cpu Usage"
     ps -e -o pcpu,cpu,nice,state,cputime,args -sort pcpu
     ;;
     *)
        echo "Invalid Argument Given \n"
        echo "Usage : $0 mem/cpu"
        exit 1
     esac

fi
echo "End Time" `date`
exit 0

Sisteme bağlı kullanıcıların ne kadar işlemci kullandıklarını gormek için aşağıdaki scripti çalıştırabilirsiniz.

#! /bin/bash

w > /tmp/a

echo "Total number of unique users logged in currently"
cat /tmp/a|  sed '1,2d' | awk '{print $1}' | uniq | wc -l
echo ""

echo "List of unique users logged in currently"
cat /tmp/a | sed '1,2d'|  awk '{print $1}' | uniq
echo ""

echo "The user who is using high %cpu"
cat /tmp/a | sed '1,2d' | awk   '$7 > maxuid { maxuid=$7; maxline=$0 }; END { print maxuid, maxline }'

echo ""
echo "List of users logged in and what they are doing"
cat /tmp/a

Aşağıdaki script kullanılan ve kullanılmayan ram miktarını gosteriyor.

#! /bin/bash

# Total memory space details

echo "Memory Space Details"
free -t -m | grep "Total" | awk '{ print "Total Memory space : "$2 " MB";
print "Used Memory Space : "$3¨ MB";
print "Free Memory : "$4¨ MB";
}'

echo "Swap memory Details"
free -t -m | grep "Swap" | awk '{ print "Total Swap space : "$2 " MB";
print "Used Swap Space : "$3¨ MB";
print "Free Swap : "$4¨ MB";
}'

Not: Yukarıda yer olan komutları ve kodları isteğiniz doğrultusunda kullnabilir ve ozelleştirebilirsiniz.Bana sorarsanız birçoğuna cronjob atayıp duzenli olarak çalıştırabilirsiniz.Hepsi birbirinden faydalıdır.Zamanla daha fazla eklemeye çalışacağım.Yukardakilerden bazılarını direk komut satırına girerek bazılarını da sh dosyası olarak kaydederek kullanabilirsiniz.

Sistem Yoneticiligi

comments powered by Disqus