Ipsecs.com



BROUGHT TO YOU BY:ATIK PILIHANTONetwork & Security ConsultantTable of ContentBasic Shell Scripting Redirections & PipesRedirectionsPipesVariablesConditional & Looping StatementsConditional if .. thenConditional if .. then .. elseConditional switch .. caseLooping forLooping whileLooping untilIntroduction Bash I/O ScriptingUsing readUsing command line argumentArithmetic & Strings OperationsArithmetic OperationsStrings OperationsAdvanced Shell Scripting ArrayRegular ExpressionGrepAwkSedSystem Administrative Command ScriptingAliasesFunctionsI/O RedirectionsUsing /dev & /procUsing /devUsing /procSecurity IssuesCode PoetryShell Scripting in Practice Creating & Scheduling Automatic BackupCreating & Scheduling Automatic File Integrity CheckerDomainToIP Enumeration ScriptStart & Stop GRE Tunneling ScriptAutomatic Default Routing Switcher ScriptStart & Stop Firewall ScriptStart & Stop Bandwith Management ScriptDatacomm needs?? Q&ABasic Shell ScriptingA. Redirections & PipesI.RedirectionsAda 3 file deskriptor standar pada shell yaitu : stdin, stdout, dan stderr. Bilangan 1 merepresentasikan stdout sedangkan 2 merepresentasikan stderr. Proses redireksi bisa dilakukan dengan:Redireksi stdout ke file, semua perintah pada shell dikirim ke stdout selama tidak memiliki error. Ketika kita mengetikkan perintah ls –al pada layar muncul hasil perintah tersebut. Jika kita menginginkan hasil perintah tersebut disimpan ke file bisa dilakukan dengan:ls –al > ls-al.txt Redireksi stderr ke file, jika terjadi error semua perintah pada shell dikirim ke stderr, misalnya user biasa hendak melihat isi file /etc/shadow maka akan muncul error Permission denied. Jika kita menginginkan perintah tersebut disimpan ke file dilakukan dengan:cat /etc/shadow 2>denied.txtRedireksi stdout ke stderr, proses redireksi dari stdout ke stderr dilakukan dengan:ls –al 1>&2Redireksi stderr ke stdout, proses redireksi dari stderr ke stdout dilakukan dengan:ls –al 2>&1II.PipesPipes dapat digunakan agar output sebuah perintah shell menjadi input dari perintah shell yang lain. Misalnya kita ingin mencari user anto pada file /etc/passwd bisa dilakukan dengan:cat /etc/passwd|grep antoPipes sangat bermanfaat ketika dikombinasikan dengan perintah shell linux terkait dengan regular expression.B. VariablesVariables pada sh/bash tidak perlu dideklarasikan, cukup inputkan sebuah nilai pada variable dan panggilah variable tersebut dengan diawali tanda $. Contoh definisi variable sederhana adalah sebagai berikut:#!/bin/bashNAME = “anto” #Variable NAMEAGE = 23#Variable AGEecho Nama saya $NAME umur $AGEPada sh/bash ada beberapa built-in dan spesial variable, built-in dan sepsial variable tersebut adalah:Envoronment variable, adalah variable yang pendefinisiannya berpengaruh pada shell dan user interface, contoh variable ini adalah SHELL, USER,PATH,UID, dan PS1Positional parameters variable, adalah variable yang mendefinisikan argumen yang dilewatkan pada sebuah script, contohnya:#!/bin/bash# eksekusi dengan ./script <val1> <val2>echo val1 = $1echo val2 = $2echo $@echo length = $##EOF$@ merupakan variable yang berisi semua value pada positional parameters dan $# menunjukkan jumlah parameters yang diinputkan.Local variable, adalah variable yang hanya dikenal pada blok fungsi tertentu. Pembahasan local variable pada pembahasan “Functions”.Exit status variable dinotasikan dengan $?.PID variable dinotasikan dengan $$.C. Conditional & Looping StatementsConditional variable digunakan untuk menentukan pilihan statement dari kondisi bersyarat, sedangkan looping berguna dalam pembuatan statement yang butuh perulangan menjadi lebih efektif. Beberapa conditional statement dan looping adalah:I.Conditional if .. thenJika persaratan pada blok if dipenuhi maka pernyataan setelah then dieksekusi. Contoh conditional if .. then sebagai berikut :#!/bin/bash# eksekusi dengan ./script <j|other>if [ $# -ne 1 ]then echo "Usage : ./if-then.sh <j|other>"; exit;fiif [ "$1" == "j" ]then echo Jakarta is capital city;fi#EOFAntara if dan kurung siku [ dipisahkan oleh spasi, kurung siku [ dan “$1” dipisahkan oleh spasi, “$1” dan == dipisahkan oleh spasi, == dan “j” dipisahkan oleh spasi, “j” dan kurung siku ] juga dipisahkan oleh spasi. Statement if .. then diakhiri dengan fi.II.Conditional if .. then .. elseJika persaratan pada blok if dipenuhi maka pernyataan setelah then dieksekusi, jika tidak maka pernyataan setelah else yang dieksekusi. Contoh conditional if .. then .. else sebagai berikut:#!/bin/bash# eksekusi dengan ./script <100|other>if [ $# -ne 1 ]then echo "Usage : ./if-then-else.sh <100|other>"; exit;fiif [ “$1” -eq 100 ]then echo Anda menginputkan angka 100else echo Anda menginputkan angka yang lainfi#EOFAntara if dan kurung siku [ dipisahkan oleh spasi, kurung siku [ dan “$1” dipisahkan oleh spasi, “$1” dan == dipisahkan oleh spasi, == dan “100” dipisahkan oleh spasi, “100” dan kurung siku ] juga dipisahkan oleh spasi. Statement if .. then .. else diakhiri dengan fi.III.Conditional case .. esacPada conditional statement yang memiliki banyak persyaratan, conditional switch .. case digunakan. Contoh penggunaan conditional case .. esac adalah:#!/bin/bash# eksekusi dengan ./script <a|b|c|d|other>if [ $# -ne 1 ]then echo "Usage : ./switch-case.sh <a|b|c|other>"; exit;ficase "$1" in "a") echo "anda menekan a" ;; "b") echo "anda menekan b" ;; "c") echo "anda menakan c" ;; *) echo "anda menekan yang lain" ;;Esac#EOFAntara case dan “$1” dipisahkan oleh spasi dan antara “$1” dan in juga dipisahkan oleh spasi. Setiap opsi pada case diakhiri dengan ;;. Statement case diakhiri dengan esac.IV.Loop forContoh kode berikut akan melakukan ping ke semua host yang ada dalam LIST menggunakan looping for.#!/bin/bashLIST="10.1.1.1 172.16.254.4 10.1.1.10"for HOST in $LISTdo ping -c 2 $HOSTdoneSetelah sarat iterasi pada for, do digunakan untuk memulai eksekusi setiap proses atau statement dalam loop. Jika semua iterasi telah selesai dieksekusi, done mengakhiri proses looping. V.Loop whileContoh kode berikut akan melakukan ping ke semua host antara alamat IP 10.1.1.1 s.d 10.1.1.10 menggunakan looping while.#!/bin/bashLASTBIT=1while [ $LASTBIT –le 10 ];do ping –c 1 10.1.1.$LASTBIT let LASTBIT++;doneWhile dan kurung siku [ dipisahkan oleh spasi. Semua yang berada dalam kurung siku dipisahkan satu sama lain oleh spasi. Setelah sarat iterasi while dalam tanda kurung siku, do digunakan untuk memulai eksekusi setiap proses atau statement dalam loop. Jika semua iterasi telah selesai dieksekusi, done mengakhiri proses looping. VI.Loop untilContoh kode berikut akan melakukan ping ke semua host antara alamat 10.1.1.1 s.d 10.1.1.10 menggunakan looping until.#!/bin/bashLASTBIT=1until [ $LASTBIT –gt 10 ];do ping –c 1 10.1.1.$LASTBIT let LASTBIT++;doneUntil dan kurung siku [ dipisahkan oleh spasi. Semua yang berada dalam kurung siku dipisahkan satu sama lain oleh spasi. Setelah sarat iterasi until dalam tanda kurung siku, do digunakan untuk memulai eksekusi setiap proses atau statement dalam loop. Jika semua iterasi telah selesai dieksekusi, done mengakhiri proses looping.D. Introduction Bash I/O ScriptingI/O disini berupa input output dari user secara umum, tidak hanya membahas I/O sistem operasi saja. I/O dari user bisa berupa string, file, ataupun yang lain sebagai input dan output script bash.I.Using ReadRead digunakan untuk membaca inputan user dari sebuah prompt inputan, contoh menggunakan read adalah:#!/bin/bashecho -n "masukan sebuah file : "read MYFILE;cat $MYFILEecho "File yang anda masukkan adalah $MYFILE"II.Using Command Line ArgumentPenggunaan command line argument adalah implementasi positional parameters, positional parameters sangat umum digunakan sebagai input programs. Pembahasan I/O lebih mendalam pada Advanced Shell Scripting.E. Arithmetic & Strings OperationsI.Aritmetic OperationsOperasi aritmetic melibatkan operator aritmetic yang berperan dalam operasi bilangan dan operator relational aritmetic yang berperan dalam operasi perbandingan bilangan, operator-operator tersebut adalah:+operator penjumlahan-operator pengurangan *operator perkalian/operator pembagian-ltoperator less than-gtoperator great than-leoperator less/equal than-geoperator great/equal than-eqoperator equal-neoperator not equalContoh script bash yang melibatkan operasi artitmetic adalah :#!/bin/bashA=100;B=200;if [ $B –gt $A ]then echo $(($A+$B))fiII.Strings OperationsOperasi strings melibatkan operator pembanding strings yang berperan dalam perbandingan sebuah string dengan string yang lain. Operator-operator itu meliputi:S1=S2strings matchesS1!=S2strings doesn’t match-n S1strings is not null-z S1strings is nullContoh bash script sederhana yang melibatkan perbandingan strings adalah:#!/bin/bashSTR1="AO"STR2="AO"if [ $STR1 = $STR2 ]then echo Strings matches;else echo Strings does not match;fiif [ -z $STR1 ]then echo String STR1 is null;else echo String STR1 is not null;fiAdvanced Shell ScriptingA. ArrayArray adalah penyusunan sistematik object object, biasanya dalam baris dan kolom. Bash versi terbaru mendukung array dimensi satu yang bisa digunakan untuk menyusun object dalam bentuk array baris. Contoh penggunaan sederhana array adalah:#!/bin/bashVAR=( senin selasa rabu kamis jumat sabtu minggu )echo Length array : ${#VAR[@]}echo Isi array : ${VAR[@]}echo Komponen array pertama : ${VAR[0]}echo Komponen array terakhir : ${VAR[6]}echo Length komponen terakhir : ${#VAR[6]}Contoh operasi array untuk keperluan pendeteksian up/down-nya host dijaringan:#!/bin/bashLHOST=( 10.1.1.1 10.1.1.3 10.1.1.5 10.1.1.7 10.1.1.9 )COUNT=0for HOST in ${LHOST[@]}do ping -c 2 $HOST > /dev/null 2>&1 if [ $? -eq 0 ] then echo $HOST is alive let COUNT++ fidoneecho Scanned Host : ${#LHOST[@]} - Found $COUNT host alivePenggunaan array bisa dikombinasikan dengan berbagai operasi bash scripting, sebagai contohnya kode di atas array dikombinasikan dengan conditional if. Jika sebuah shell command sukses dieksekusi maka akan memberikan variable exit status ($?) bernilai 0.B. Regular ExpressionI.GrepGrep merupakan salah satu tools regular expresession (regex) pada shell linux. Dengan menguasai grep akan sangat mendukung penguasaan pada tools regex lain seperti awk dan sed. Dengan menggunakan grep kita bisa mencari lines yang memiliki kriteria sesuai dengan ketentuan kita. Contoh penggunaan grep:cat namafile |grep anto menemukan baris yang mengandung kata antocat namafile |grep [Aa]nto menemukan baris yang mengandung kata anto dan Antocat namafile |grep ^[Aa] menemukan baris yang dimulai dengan A atau a.cat namafile|grep bash$ menemukan baris yang diakhiri dengan bash.Pada regular expression dengan grep ada beberapa karakter spesial yaitu:^foodimulai dengan foofoo$diakhiri dengan foo.match any characters*perulangan satu atau beberapa kaliII.AwkAwk merupakan tool untuk keperluan text-processing yang digunakan untuk regex dengan tingkat yang lebih kompleks dari grep. Sintaks umum awk adalah awk ‘/search pattern/’ {program action} . Karakter spesial yang ada pada grep juga berlaku pada awk. Contoh penggunaan awk:#!/bin/bash#awk.shRESOLVFILE=/etc/resolv.confif [ ! -e $RESOLVFILE ]then echo "File DNS resolver is not exist" exitfiPRIMARY=$(awk '{print $2}' < $RESOLVFILE|head -1)echo "Primary DNS resolver is $PRIMARY"Pada bagian selanjutnya, awk menjadi tools yang sering digunakan untuk keperluan regular expression.III.SedSed merupakan tools editing files melalui commandline dengan memanfaatkan regular expression. Sed memiliki beberapa command, tetapi yang paling essential adalah kemampuan untuk melakukan subtitute. Beberapa command sed:Subtitute menggunakan s.Delete menggunakan d.Print menggunakan p.Multiple command dengan –e.Contoh penggunaan sed untuk mengetahui semua authority name server dari sebuah domain adalah: #!/bin/bash#authns.shif [ -z $1 ]then echo "Usage : ./authns.sh <domain>" exit;fiecho "All authority name server for $1 :"dig $1 -t any|sed -e '/A\|;\|^$\|MX\|TXT\|SOA/d'|awk '{print $5}'exit $?C. System Administrative Command ScriptingYang dimaksud dengan system administrative command disini adalah perintah sistem operasi yang berguna untuk memodifikasi konfigurasi sistem. Untuk keperluan modifikasi konfigurasi sistem maka user root dibutuhkan. Untuk itu perlu dilakukan pengecekan bahwa script dijalankan oleh root sebelum bagian administrative command dieksekusi. Berikut ini contoh penggunaan shell script untuk konfigurasi jaringan:#!/bin/bash# Only root can run this script!IPADDR="192.168.2.100"NETMASK="255.255.255.0"IFACE="eth0"GATEWAY="192.168.2.1"UIDROOT=0if [ $UID -ne $UIDROOT ]then echo "Only root can run this script!" exitfiif [ -z $1 ]then echo "usage : ./network.sh <-start|-stop>" exitficase "$1" in "-start") ifconfig $IFACE $IPADDR netmask $NETMASK up route add default gw $GATEWAY ;; "-stop") ifconfig $IFACE down ;; *) echo "ERR : wrong parameters!" ;;esacDengan bantuan shell script di atas proses konfigurasi jaringan pada suatu interface bisa dikerjakan dalam waktu yang lebih singkat.D. AliasesAliases bekerja semacam keyboard shortcut, alias berguna untuk menyingkat beberapa perintah shell linux menjadi perintah yang lebih pendek. Contoh penggunaan alias adalah sebagai berikut:#!/bin/bash# alias.shshopt -s expand_aliases#Set alias llalias ll='ls -l'll /home#unset aliasunalias llDengan menggunakan alias bisa diketahui bahwa ll adalah shortcut untuk mengetikkan ls –al.E. FunctionsFungsi adalah sekumpulan blok instruksi yang bertujuan untuk meyelesaikan tugas tertentu. Fungsi sering digunakan ketika ada sekelompok instruksi yang sifatnya berulang. Contoh pemanfaatan fungsi pada shell scripting adalah sebagai berikut:#!/bin/bash# Function without passing valuefunction do_usage(){ echo "This script is created for learning" echo "usage : ./this.sh <whatever>" exit;}if [ -z $1 ]then do_usageelse echo $1fiPenggunaan fungsi di atas adalah contoh sederhana penggunaan fungsi tanpa inputan, tetapi sering dijumpai bahwa sebuah fungsi harus diberi input dan memberikan nilai balik (return value). Contoh penggunaan fungsi yang lain adalah:#!/bin/bash# Function with passing and return valuedo_usage(){ echo "Another function example" echo "Usage : ./this.sh <integer> <integer>" exit;}function sumval(){ RES=$(($1+$2)) return $RES}if [ $# -ne 2 ]then do_usagefisumval $1 $2retval=$?if [ $retval -lt $1 ]then echo "Second passing value is negative"elif [ $retval -gt $1 ]then echo "Second passing value is positive"else echo "Second passing value is zero"fiF. I/O RedirectionsAda 3 default I/O yaitu : stdin, stdout, dan stderr. Default file deskriptor 0 untuk stdin, 1 untuk stdout, dan 2 untuk stderr. Beberapa jenis redirection I/O:command > filename digunakan untuk redirect output di stdout ke file, jika file exist maka dioverwrite.: > filename atau > filename digunakan untuk membersihkan file menjadi 0 mand >> filename digunakan untuk redirect output di stdout ke file, jika file exist maka ditambahkan ke baris selanjutnya.1 > filename digunakan untuk redirect stdout ke filename, jika file exist di overwrite.1>>filename digunakan untuk redirect stdout ke filename, jika file exist ditambah ke baris selanjutnya.2 > filename digunakan untuk redirect stderr ke filename, jika file exist di overwrite.2 >> filename digunakan untuk redirect stderr ke filename, jika file exist ditambah ke baris selanjutnya.&> filename digunakan untuk redirect stdout dan stderr ke filename. 2>&1 digunakan untuk redirect stderr ke stdout.i>&j digunakan untuk redirect file deskriptor i ke file deskriptor j.>&j digunakan untuk redirect stdout ke file deskriptor j.j <>filename digunakan untuk operasi baca tulis filename dengan deskriptor j.n<&- digunakan untuk close input file deskriptor n.n>&- digunakan untuk close output file deskriptor mand 1| command 2 output command 1 menjadi input command 2.Contoh penggunaan pada shell script:echo 1234567890 > File # Write string to "File".exec 3<> File # Open "File" and assign fd 3 to it.read -n 4 <&3 # Read only 4 characters.echo -n . >&3 # Write a decimal point there.exec 3>&- # Close fd 3.cat File # ==> 1234.67890G. Using /dev & /procI.Using /devDirektori /dev berisi daftar device yang dikenali oleh sistem operasi. Device tersebut bisa berupa hardware atau pseudo-device. Contoh device berupa hardware adalah /dev/hda, /dev/sda, dan /dev/cdrom. Contoh device berupa pseudo-device adalah /dev/null, /dev/tty, dan /dev/zero. Contoh sederhana penggunaan /dev adalah :#!/bin/bash#Simple script using /devdf -ah|awk '/^\/dev/ {print "Ukuran partisi " $6 " adalah : " $2}'#DoneTerkadang kita tidak menginginkan shell command yang kita ketikkan muncul di file bash history. Untuk melakukan hal itu kita bisa membuat simbolik link dari .bash_history ke /dev/null.#!/bin/bash#Simple script using /devif [ -f ~/.bash_history ]then rm –f ~/.bash_historyfiln –s /dev/null ~/.bash_historyII.Using /procDirektori proc merupakan pseudo-filesystem, file yang berada pada /proc menunjukkan proses yang berjalan pada sistem dan kernel. Contoh penggunaan /proc untuk mencari jenis processor adalah:#!/bin/bash# Get model and spped CPU in MhzMODEL=`cat /proc/cpuinfo|awk '/^model name/ {print $5}'|head -1`CPUSPEED=`cat /proc/cpuinfo|awk '/^cpu MHz/ {print $4}'|head -1`echo "CPU Model $MODEL running at $CPUSPEED Mhz"Dengan memanfaatkan informasi yang ada pada direktori /proc, kita juga bisa mendapatkan informasi mengenai command line dan argumen dari sebuah proses yang berjalan.#!/bin/bash#Get shell command and argument.OPTIONS="cmdline"if [ -z $1 ]then echo "Usage : getcmd.sh <process>" exit;fiPID=`pidof $1|awk '{print $1}'`CMDARG=`cat /proc/"$PID"/"$OPTIONS"|xargs -0 echo`echo "Proses $1 has PID $PID and command line $CMDARG"#H. Security IssuesPenggunaan shell scripting memang cenderung memudahkan pekerjaan namun ada beberapa aspek keamanan yang harus diperhatikan. Beberapa issue terkait dengan shell script security adalah:Adanya kemungkinan shell script diinfeksi oleh trojan, worm, dan malware yang lain. Karena alasan itu jangan sekali kali menjalankan shell script menggunakan root atau menaruh shell script di daftar file init kecuali kita telah benar-benar menganalisis script tersebut dan mendapatkan shell script dari sumber yang benar-benar bisa dipercaya.Jika source code shell script cukup confidential, sembunyikan source code shell script tersebut menjadi file binary agar tidak readable. Untuk menyembunyikan source shell script menjadi binary executable bisa dilakukan dengan tools shc-generic shell script compiler yang bisa didownload dari secure shell script:Jangan meletakkan data rahasia/confidential seperti password di environment variable misalnya export PASSWORD=secret123Jangan melewatkan data rahasia/confidential seperti melalui commandline argumen misalnya: mysql -u root --password=keren123Setting environment variable PATH dengan teliti pada awal script shell sehingga meminimalkan resiko kita mengekseksui file trapdoor. Contoh pengaturan environment PATH adalah export PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbinI.Code PoetryShell script yang kita buat diharapkan mudah untuk dipelajari oleh orang lain, selain itu script yang dibuat juga harus mudah dimodifikasi dan digunakan kembali dimasa mendatang. Untuk keperluan tersebut beberapa hal yang perlu diperhatikan :Berikan komentar pada script yang dibuat, hal ini mempermudah orang lain memahami dan memudahkan untuk memantain script tersebut.Gunakan nama variable yang bermakna sesuai dengan kebutuhan. Hal ini membuat script lebih mudah dipahami dan mempermudah pengubahan atau update script tanpa merusak script yang telah dibuat.Gunakan nama variable dan fungsi yang deskriptif.Gunakan kode exit yang sistematik dan bermakna.Jadikan kode yang kompleks menjadi kode yang sederhana, gunakan fungsi jika memungkinkan.Gunakan parameters option yang sudah distandarkan.Contoh penggunaan shell script dengan style adalah:#!/bin/bash# Shell script to check user statusexport PATH=/bin:/sbin:/usr/bin:/usr/sbinFILENAME="/etc/passwd"UIDROOT=0E_NOTFOUND=95E_NOPERM=77#Fungsi check statusfunction do_check_status(){ STATUS=$(passwd -S $1|awk '{print $2}') if [ $STATUS = "L" ] #User locked then echo "User $1 is LOCKED" fi if [ $STATUS = "P" ] #Password protected then echo "User $1 is PASSWORD PROTECTED" fi return 0 #Exit success}#Check who runs this scriptif [ $UID -ne $UIDROOT ]then echo "Only root can run this script" exit $E_NOPERMfi#Check if the file is existif [ ! -e $FILENAME ]then echo "File $FILENAME is not found" exit $E_NOTFOUNDfiUSERLIST=$(cat /etc/passwd|awk -F : '{print $1}') #Get userlistfor USER in $USERLISTdo do_check_status $USER #Get user statusdoneexit $?Shell Scripting in PracticeA. Creating and Scheduling Automatic BackupQ : Seorang engineer diberikan tugas untuk memaintain proses backup data sebuah server . Data dan konfigurasi tersebut harus dibackup di server backup dengan hostname . Proses backup, dilakukan setiap seminggu sekali.A : Engineer mengaktifkan service SSH pada server untuk keperluan remote copy files/folders dari server menggunakan command scp. Engineer mengaktifkan cron pada server agar proses backup terotomatisasi taip seminggu sekali. Adapun yang dikerjakan oleh engineer tersebut adalah:Engineer mengenerate public key dan private key agar login dari server ke menggunakan autentikasi RSA. root@core# ssh-keygen –t rsa –b 1024root@core# scp ~/.ssh/id_rsa.pub root@:/root/.ssh/authorized_keys(output truncated)Engineer membuat bash script sederhana untuk membackup dan mencopy ke server backup.#!/bin/bashTARGET="`date +%F`-home.tar.gz"TMP="/opt/tmp"ROOTUID=0BACKUPSERV=""BACKUPDIR=/var/backupsif [ "$UID" -ne "$ROOTUID" ]then echo "Only root can run this script!"; exit;fimkdir $TMPtar cvfzP $TMP/$TARGET /home > /dev/nullscp -fr $TMP/$TARGET root@$BACKUPSERV:$BACKUPDIR > /dev/nullrm -rf $TMP#EOFEngineer mengedit konfigurasi file cron (/etc/crontab) agar mengeksekusi bash script pada nomor 2 setiap minggu sekali (misalnya setiap sabtu sore jam 18:30).30 18 * * 7 root /root/backup.sh Tugas engineer selesai Scheduling & Automatic Backup Selesai.B.Creating and Scheduling Automatic Integrity File CheckerQ : Seorang engineer diberi tugas untuk memantau integritas file file binary pada sistem operasi linux untuk mengetahui secara dini jika file-file tersebut disusupi malware. Tugas tersebut harus dilakukan engineer setiap hari untuk memastikan deteksi dini adanya penyusupan.A : Engineer mengelompokkan file-file binary yang rawan diinfeksi malware, dia kemudian mebuat bash script untuk mendata md5 checksum semua file binary tersebut dan menyimpannya kedalam file. #!/bin/bash#Integrity CheckerBASEDIR=/home/antoDATA=$BASEDIR/.md5file.txtLOG=$BASEDIR/`date +%d-%m-%Y`-md5log.txtFILE="/bin/login/bin/ls/bin/su/bin/netstat/bin/ps/usr/bin/top/usr/bin/lsof/usr/bin/md5sum/usr/bin/ssh/usr/bin/scp/usr/sbin/sshd"if [ -z $1 ]then echo "Gunakan : ./integrity.sh <-create|-check>" exitficase "$1" in "-create") md5sum $FILE > $DATA ;; "-check") rm -f $BASEDIR/*md5log.txt md5sum -c $DATA md5sum -c $DATA > $LOG ;; *) echo "Error parameter" ;;esacUntuk membuat data md5 checksum setiap file binary yang didaftarkan, eksekusi script tersebut dengan options –create. Untuk melakukan pengecekan md5 checksum, eksekusi script tersebut dengan options –check. Agar script dieksekusi setiap pagi (misalnya pukul 06:30) engineer melakukan pengeditan file cron (/etc/crontab). Hasil pengecekan bisa dilihat engineer kapan saja di file log yang ditentukan.30 06 * * * root /home/anto/integrity.sh -check Tugas engineer sudah selesai, sekarang dia cukup melihat log script diatas untuk memantau potensi adanya infeksi malware.C.DomainToIP Enumeration ScriptQ : Dalam menyelesaikan tugasnya, seorang engineer diminta untuk memetakan alamat domain menjadi alamat IP, mengetahui mail exchanger yang digunakan, dan authority nameserver domain tersebut. Engineer bisa saja menggunakan shell command seperti host, nslookup, dan dig tetapi dia menginginkan hasilnya lebih teratur dan mudah dibaca. Berhubung banyaknya domain yang sering dia periksa, engineer menginginkan proses pengecekan dilakukan secara massive.A : Engineer memanfaatkan shell command yang ada kemudian memodifikasi outputnya menggunakan shell script. Engineer juga menambah fitur pada shell script itu agar bisa menerima inputan berupa file yang berisi domain list.#!/bin/bash# Domain to IP checkerfunction do_usage(){ echo "Domain to IP addresss checker" echo "Usage : ./domain2ip.sh <-h|-f> <domain|file>" exit;}function domain2ip(){ DOM=$1 IPADDR=(`host -t A $DOM|awk '{print $4}'`) echo Domain $DOM is mapped in ${#IPADDR[@]} ip address : for S_IPADDR in ${IPADDR[@]};do echo $S_IPADDR;done MXADDR=(`host -t mx $DOM|awk '{print $7}'`) echo Domain $DOM has ${#MXADDR[@]} mail exchanger : for S_MXADDR in ${MXADDR[@]};do echo $S_MXADDR;done NSADDR=(`host -t ns $DOM|awk '{print $4}'`) echo Domain $DOM has ${#NSADDR[@]} authority nameserver : for S_NSADDR in ${NSADDR[@]};do echo $S_NSADDR;done}if [ $# -ne 2 ]then do_usageficase "$1" in "-h") domain2ip $2 ;; "-f") if [ ! -r $2 ] then echo "Can not open file for reading" exit; fi for DOMAIN in `cat $2` do domain2ip $DOMAIN sleep 2 done ;; *) do_usage ;;esacD.Start & Stop GRE TunnelingQ : Engineer diberi tugas untuk memaintain koneksi antar head office dengan branch office. Koneksi kedua kantor melalui VPN over internet memanfaatkan GRE tunneling. IP Gateway head office 222.124.164.1 dan LAN 172.16.1.0/24 sedangkan branch office 202.155.0.1 dan LAN 172.16.10.0/24. Link GRE tunnel adalah 10.1.1.0/30 dengan 10.1.1.1 pada head office.A : Untuk memudahkan memulai dan menghentikan tunneling, engineer membuah script shell. Contoh script shell untuk dipasang pada gateway head offcice tersebut adalah:#!/bin/bash# Start Stop GRE TunnelLOCAL_IP=222.124.164.1REMOTE_IP=202.155.0.1REMOTE_LAN=172.16.10.0/24GRE_IPADDR=10.1.1.1/30GRE_GW=10.1.1.2if [ -z $1 ]then echo "Usage : ./gre.sh <-start|-stop>" exitficase "$1" in "-start") ip tunnel add netbr mode gre remote $REMOTE_IP local $LOCAL_IP ip addr add $GRE_IPADDR dev netbr ip link set netbr up ip route add $REMOTE_LAN via $GRE_GW dev netbr ;; "-stop") ip route del $REMOTE_LAN via $GRE_GW dev netbr ip link set netbr down ip tunnel del netbr ;; *) echo "ERR : wrong parameter" ;;esacAgar kode ini dijalankan ketika proses booting init sistem operasi, maka shell script ini ditambahkan pada file /etc/rc.local./root/gre.sh -start Tugas engineer selesai .E.Automatic Default Routing Switcher ScriptQ : Sebuah perusahaan berlangganan pada dua ISP, perusahaan tersebut berlanggana sebesar 4 Mbps dari ISP A dan digunakan sebagai jalur internet sehari-hari dan sebesar 512 Kbps dari ISP B untuk keperluan kalau sewaktu waktu koneksi dari ISP A down. Sebagai network administrator, anda menghendaki proses penggantian ISP A ke ISP B di otomatisasi ketika ISP A down. Sayangnya perusahaan anda hanya diberi routing statik oleh kedua ISP tersebut.A : Engineer membuat shell script sederhana untuk melakukan pengecekan koneksi melalui ISP A menggunakan utility ping. Jika koneksi down maka default routing diarahkan melalui ISP B, tetapi jika koneksi melalui ISP A up maka default routing diarahkan kembali ke ISP A. Pengecekan up/down koneksi ISP A dilakukan setiap 3 menit sekali. Informasi dari ISP bahwa IP Default gateway ISP A adalah 202.152.10.1 sedangkan IP default gateway ISP B adalah 222.124.82.1, maka shell scriptnya adalah:#!/bin/bash# Route switcherDEFGW_ISP_A="202.152.10.1"DEFGW_ISP_B="222.124.82.1"ROOTUID=0if [ $UID -ne $ROOTUID ]then echo "Only root can run this script" exitfiping -c 3 $DEFGW_ISP_A > /dev/null 2>&1if [ $? -eq 0 ]then CURGW=`netstat -rn|awk '/^0.0.0.0/ {print $2}'` if [ $CURGW != $DEFGW_ISP_A ] then route del default gw $CURGW route add default gw $DEFGW_ISP_A fielse route del default gw $DEFGW_ISP_A route add default gw $DEFGW_ISP_Bfi#EOFSelanjutnya engineer harus mengubah konfigurasi cron pada file /etc/crontab agar mengeksekusi script ini setiap 3 menit sekali.*/3 * * * * root /root/route-sw.sh Tugas network administrator selesai F.Start & Stop Firewall ScriptQ : Sebuah server menjalankan service HTTP, HTTPS, dan SSH dimana semua service tersebut harus bisa diakses dari internet. Sebagai sistem administrator anda menginginkan firewall (iptables) pada server tersebut hanya mengizinkan koneksi inbound ke 3 port tersebut.A : Sistem administrator memanfaatkan iptables kemudian meracik aturan aturan terkait dengan koneksi inbound kemudian membendlenya dalam sebuah shell script. Shell script yang dibuat bisa dieksekusi secara manual oleh sang admin atau dijalankan saat booting init melalui file /etc/rc.local.#!/bin/bash# Firewall host to allow only inbound to 22,80,443 tcpIFACE="eth0"INPORT="22,80,443"ROOTUID=0if [ $UID -ne $ROOTUID ]then echo "Only root can run this script" exitfiif [ -z $1 ]then echo "Usage : ./firewall.sh <-start|-stop>" exit;fifunction fwstart(){ modprobe ipt_limit modprobe ipt_state iptables -A INPUT -p tcp ! --syn -m state --state NEW -j DROP #To allow inbound to 22,80,443 tcp iptables -A INPUT -p tcp --syn -m state --state NEW -m limit --limit 5/s -m multiport --destination-ports $INPORT -i $IFACE -j ACCEPT iptables -A INPUT -p tcp -m state --state ESTABLISHED,RELATED -j ACCEPT #To allow DNS system iptables -A INPUT -p udp --sport 53 -m limit --limit 3/s -j ACCEPT iptables -A INPUT -i lo -j ACCEPT iptables -A INPUT -j DROP #Forward and Outbound all accepted iptables -A FORWARD -j ACCEPT iptables -A OUTPUT -j ACCEPT}function fwstop(){ iptables -X iptables -F}case "$1" in "-start") fwstart ;; "-stop") fwstop ;; *) echo "ERROR: wrong parameter" ;;esacG.Start & Stop Bandwith Management ScriptPada linux traffic control dimanage menggunakan tools tc dan iptables tabel mangle. Ada beberapa teknik management bandwith pada sistem operasi linux tetapi yang paling sering digunakan adalah Class-Based Queueing (CBQ) dan Hierarchy Token Bucket (HTB).Pembahasan bandwith management diluar cakupan tulisan ini, namun untuk script management bandwith bisa diperoleh dari:cbq.init diperoleh di sourceforge di diperoleh di sourceforge di diperoleh di freshmeat di http:// projects/htb-gen/ H.Datacomm Needs? Q & A ................
................

In order to avoid copyright disputes, this page is only a partial summary.

Google Online Preview   Download