Monday, December 16, 2013

ขั้นตอนการ Backup ไฟล์ Configuration ของ Juniper Firewall (ISG Series) และ Fortigate Firewall รวมถึงการทำ Compare Configuration. Part2/2




    หลังจากที่เราทำการทดสอบ Script ทั้งสองเรียบร้อยแล้ว ก็ให้เรานำ Script ทั้ง 2 ไปวางไว้ที่ /root
และเขียน Script เพื่อทำการเก็บ Config ของไฟร์วอลล์ทั้งสองนั้นในรูปแบบของไฟล์ที่มีการบีบอัดข้อมูล

compress.sh

/root/fortigate.sh
/root/juniper.sh
gunzip /tftpboot/*.gz
chmod 644 /tftpboot/*
chown root:root /tftpboot/*
BASELOG="/tftp/log"
BASEDIR=${BASELOG}/`date +%d-%b-%y`
[ ! -d ${BASEDIR} ] && mkdir -p ${BASEDIR}
mv /srv/tftp/ru* ${BASEDIR}



หลัง จากนั้น ให้เราเขียน Script เพื่อทำการตรวจสอบว่า  File config ของเมื่อวาน และของปัจจุบันที่เราเพิ่งได้ backup ไปนั้น มีความแตกต่างกันอย่างไร มีการเพิ่มอะไรใหม่ ๆ หรือมีการลบอะไรออกไปบ้าง และให้ทำการส่งเมล์ออกไปยัง Admin   

checkdiff.sh

#!/bin/bash
BASELOG="/tftp/log/"
BASEDIR=${BASELOG}/`date +%d-%b-%y`
[ ! -d ${BASEDIR} ] && mkdir -p ${BASEDIR}
mv /tftpboot/* ${BASEDIR}
TODAY=`date +%d-%b-%y`
YESTERDAY=${BASELOG}/`date --date='1 day ago' +%d-%b-%y`

FILENAME="
juniper
fortigate

echo "Date - " ${TODAY} >> /tftp/report.log
echo "------------------------------------------------------------------------" >> /tftp/report.log
ls -l ${BASEDIR} >> /tftp/report.log
echo "*************************************************" >> /tftp/report.log
for filename in ${FILENAME}
do
    FILENAME=`echo ${filename}
    cut -f 1`
    SUBDIR=${BASEDIR}
    YSUBDIR=${YESTERDAY}
    echo "File" ${filename} " " >> /tftp/report.log
    echo "-----------------------------------------------------------------" >> /tftp/report.log
    echo "Check Differential configuration" >> /tftp/report.log
    diff ${SUBDIR}/${FILENAME} ${YSUBDIR}/${FILENAME} >> /tftp/diff.log
    echo "............... New configuration added ............." >> /tftp/report.log
    echo "-----------------------------------------------------------------" >> /tftp/report.log
    cat /tftp/diff.log
    grep "<" >> /tftp/report.log
    echo "-----------------------------------------------------------------" >> /tftp/report.log
    echo ".............. Old configuration Remove ............." >> /tftp/report.log
    echo "-----------------------------------------------------------------" >> /tftp/report.log
    cat /tftp/diff.log
    grep ">" >> /tftp/report.log
    echo "-----------------------------------------------------------------" >> /tftp/report.log
    echo "End of file" ${filename} " " >> /tftp/report.log
    echo "-----------------------------------------------------------------" >> /tftp/report.log
    echo "******************************************" >> /tftp/report.log
    rm -f /tftp/diff.log
    touch /tftp/diff.log
done

SUBJECT="Firewall differential configuration"
EMAIL= “taveesak@gmail.com"
EMAILMESSAGE="/tftp/report.log"
mail -s "$SUBJECT" "$EMAIL" < $EMAILMESSAGE
rm -f /tftp/report.log


สุดท้าย

ตั้ง Crontab ให้รัน script compress.sh และ checkdiff.sh ทุกๆ วัน ในเวลาที่เราต้องการ
เท่านั้น

เหมือนเดิม หากว่าเราจะทดสอบว่า Script ที่เขียนนั้น ใช้งานได้จริงหรือไม่ ก็แค่ รัน Script นั้นขึ้นมา
หากใช้งานได้ เราก็จะเห็นเมล์ส่งเข้ามายัง Inbox ของเราครับ

 --------------------------------------------------------------------------------------------------
PS. Part2 นี้ รีบไปหน่อย หากมีข้อสงสัย ก็ส่งเมล์มาถามนะครับ

ขั้นตอนการ Backup ไฟล์ Configuration ของ Juniper Firewall (ISG Series) และ Fortigate Firewall รวมถึงการทำ Compare Configuration. Part1/2



    ถ้าหากว่า เราเป็น Admin ของ Firewall ซักตัวนึง เราเคยมีคำถามไหมว่า ทำอย่างไร เราถึงจะเก็บ config ของ Firewall เอาไว้ที่ใดซักที่นึง ทุกๆ วัน เผื่อว่า วันใด Firewall ที่เราดูแล เกิดอาการแฮงก์ โดยไม่ทราบสาเหตุ เราก็จะสามารถเอา Config ที่เราเก็บไว้ล่าสุดมา Restore ได้

    หากคุณเป็น Admin ที่มีความขยันและมีวินัยเป็นเลิศ คุณอาจจะบอกว่า ไม่ยากเลยจอร์จ เราก็แค่  Login เข้าไปที่  Firewall สิ จากนั้นก็เข้าไปที่หน้า Maintenance แล้ว Backup config ออกมา
 
    นั่นสินะ แต่ถ้าวันไหน Admin ป่วยล่ะ หรือลาพักร้อนล่ะ ใครจะทำหน้าที่นี้ ? จะให้คนอื่นเข้ามาทำแทนหรือ? จะยุ่งยากไปมั้ย หากไฟร์วอลล์นี้ ใคร ๆ ก็เข้าไป admin ได้

    อย่ากระนั้นเลย เรามาเป็น admin ที่ใช้ Server และ Script ทำงานแทนเราทุก ๆ วันดีกว่า

    เริ่มต้นด้วย เราจะต้องมี Server มาทำหน้าที่เก็บ Config ของอุปกรณ์ ซึ่งก็คงจะหนีไม่พ้น ต้องทำเป็น Linux server (เพราะอะไรหรือ ? ก็เพราะว่า เราไม่อยากจะเสียค่า License ไง)

    สำหรับขั้นตอนการติดตั้ง Linux ให้ลองไปหาดูโพสท์เก่า ๆ นะครับ

   สมมติว่า เรามีไฟร์วอลล์อยู่ 2 ตัว  คือ Fortigate กับ Netscreen (รุ่นเก่าก่อน SRX นะ) ซึ่งมี IP Address ดังต่อไปนี้

Fortigate Firewall IP Address 1.1.1.1
Netscreen Firewall IP Address 2.2.2.2

   สำหรับ Linux server เราก็กำหนด IP Address ดังนี้
Backup config Server IP Address 3.3.3.3

    ขั้นตอนการติดตั้งบริการ TFTP  ให้เลือกติดตั้ง Package ตามนี้นะครับ

    1. atftp
    2. xinetd
    3. postfix เอาไว้ใช้ส่งเมล์หาเราทุกวัน
    4. expect พระเอกของงานเลย ห้ามลืมติดตั้งเด็ดขาด 

สิ่งที่ห้ามลืม
จะต้องมี User ที่สามารถเข้าถึงบริการ SSH ของ Firewall ทั้งสองตัว 
ในที่นี้ ผมใช้ user ชื่อว่า monica และ password ชื่อว่า john@123 ครับ 

จากนั้น ก็เขียน Script ตามด้านล่างเลยครับ

fortigate.sh - เอาไว้เก็บ Config ของ Fortigate


#!/usr/bin/expect -f
#-----------------------------------------------------------------------
spawn ssh -o stricthostkeychecking=no monica@1.1.1.1
expect {
"password:" {send "john@123\r"}
}
expect {
"#" {send "execute backup config tftp fortigate 3.3.3.3\r"}
}
expect {
"#" {send "exit\r"}
}
close
#-----------------------------------------------------------------------


juniper.sh - เอาไว้เก็บ Config ของ Juniper

#!/usr/bin/expect -f
#-----------------------------------------------------------------------
spawn ssh -o stricthostkeychecking=no monica@2.2.2.2
expect {
"password:" {send "john@123\r"}
}
expect {
";" {send "get config all > tftp 3.3.3.3 juniper\r"}
}
expect {
"#" {send "exit\r"}
}
close
#-----------------------------------------------------------------------

เมื่อทำเสร็จแล้ว ลองรัน script ดูนะครับ ว่า ใช้งานได้หรือเปล่า
วิธีดูง่าย ๆ ว่าใช้งานได้หรือไม่ ก็คือ เมื่อรันไปแล้ว ไม่เกิด error
และเมื่อเราไปดูที่ TFTP server ที่พาธ /tftpboot ก็จะเห็นไฟล์  config ของไฟร์วอลล์ ปรากฏอยู่ครับ


สำหรับ Part แรก เอาไว้แค่นี้ก่อนครับ