IDC 엔지니어의 기술 이야기

Fortigate 자동백업 스크립트 본문

Firewall/Fortigate

Fortigate 자동백업 스크립트

붉은볼곰팅이 2019. 2. 22. 10:28
반응형

Fortigate 관리하는 수량이 늘어나면서 자동백업 스크립트를 만들일이 생겼다.
구글신의 도움을 받아 리눅스에서 구현을 해보았다.

구축시스템 : CentOS 5.6
백업대상 : Forti OS 3.0 이후 모든 버젼
에러내역 : FortiOS 3.0 이하 버젼에서는 잘되다가 어느순간 안됨. Hang 비슷하게 걸림. 그래서 안함.
구축요약 :
1. "spawn" 및 "expect" 를 활용하여 Fortigate로 SSH 자동 로그인 쉘 생성
>> 단 spawn 및 expect 구문이 되지 않을수 있으니, 패키지 설치 유무 확인 및 설치
2, "expect" 구문을 활용하여 "tftp" 백업 구문 실행
>> 단 TFTP 서버가 미리 준비되어있어야 한다.
>> 여기서 tftp 백업을 받는 이유는 expect를 활용하여 단순히 show라는 명령어를 통한 config 수집시
    한글이 깨져서 백업되는 불상사가 일어난다. 복원시 개고생이 눈이 훤희 보인다.

상세구축 사항
준비사항 : 리눅스 서버, 백업서버(TFTP) >> 1개의 서버로 구축하여도 무관하다
                 당연한 애기지만 Forti에서 SSH 접근 허용 및 리눅스 서버 IP가 Access IP로 등록되어야함.

1. 쉘스크립트 작성

test # vi /root/forti_backup.sh


 #************Beginning of the SCRIPT************
 #!/usr/bin/expect -f     // expect 정의
  #This Script is used for taking backup of Fortigate Units via FTP
 # Fortigate Login Information
 set FGTNAME "TESTFW"     // 방화벽명을 기재. 대충 원하는대로. 나중에 백업파일명이 될것임
 set FGTIP "1.1.1.1"     // 방화벽 IP
 set ADMIN_USER_NAME "test"     // 방화벽 ID
 set PASSWORD "testPW"     // 방화벽 PW
 #Type the backup folder after logging in via FTP. (If needed)
 # set backupfolder "/YourBackUpFolder"
 #Increase timeout. Because Fortigate Firewall's config files are too big
 #set timeout 80000
 # TFTP Login Information
 set FTP_SERVER_IP "2.2.2.2"     // TFTP 서버 IP
 # set FTP_USER_NAME "test"
 # set FTP_PASSWORD "test"
 # Time info for timestamp to the config file
 set TODAY [clock format [clock seconds] -format {%Y%m%d}]
 set timeout 30
 spawn ssh $ADMIN_USER_NAME@$FGTIP
  expect {
         "password:" {
                 send "$PASSWORD\r"
         }
         "(yes/no)? " {
                 send "yes\r"
                 expect "password:" {
                         send "$PASSWORD\r"
                 }
         }
 }
 #Delete below commands if your Fortigate unit is not VDOM enabled
 #expect "# "
 #send "config global\r"
 #Delete above commands if your Fortigate unit is not VDOM enabled
 #Taking back up of the Fortigate Unit
 expect {
         "# " {
                 send "execute backup config tftp $FGTNAME-$TODAY.conf $FTP_SERVER_IP\r"
         }
 }
 
 expect {
        "# " {
                send "exit\r"
        }
 }
 expect EOF
 #************End of the SCRIPT************

2. 리눅스 Cron 등록할 Shell 작성

test # vi /root/Forti/Fortigate_Backup.sh

#!/bin/bash
dat=`date +%F`
expect -f /root/forti_backup.sh >> /root/Forti/Backup_$dat.log;  // 위에서 만든 스크립트를 추가 Shell 작성

3. Cron 등록
# Forti Backup Test
00 14 * * 5 root /root/Forti/Fortigate_Backup.sh

-끝-

반응형