Skip to content

Fortigate 방화벽 자동 등록 스크립트

5gyungjae edited this page Sep 5, 2019 · 2 revisions

스크립트

  • 특정 IP주소와 서브넷을 받아 방화벽에 자동으로 IP주소 추가 후 IP주소그룹에 추가
  • expect를 이용해 방화벽 접속 후 명령실행
  • 입력한 IP주소는 검색을 위해 HASH(SHA256)로 변경 후 별도 리스트로 관리
  • fortios 5.4버전 기준
#!/bin/bash

#변수 지정
PWHASH=비밀번호 sha256sum hash값
USER=계정명
GRP=그룹명
SRVIP=방화벽 호스트
SF=스크립트 위치

## IP주소 검증
function validate_ip_address()
{
if ! [[ $IPADDR =~ ^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3} ]]; then
  echo "IP주소를 잘못 입력했습니다."
  exit 0
fi;
if ! [[ $NETMASK =~ ^([1-9]|[12][0-9]|3[02]) ]]; then
  echo "SUBNETMASK를 잘못 입력했습니다."
  exit 0
fi;
}

function append_dev() {
expect << EOF
set timeout 1
# 로그인
spawn ssh $USER@$SRVIP
expect "password:"
send "$PW\r"
# 첫 프롬프트
expect "$"
# IP추가
send "config firewall address\r"
expect "(address) $"
send "edit $IPADDR\r"
expect "$IPADDR $"
send "set subnet $IPADDR/$NETMASK\r"
expect "(address) $"
send "set associated-interface wan1\r"
expect "(address) $"
send "set comment $COMMENT\r"
expect "($IPADDR) $"
send "end\r"

# 프롬프트
expect "$"
# 그룹에 추가
send "config firewall addrgrp\r"
expect "(addrgrp) $"
send "edit $GRP\r"
expect "($GRP) $"
send "append member $IPADDR\r"
expect "($GRP) $"
send "end\r"
# 로그아웃
expect "$"
send "exit\r"
expect eof
EOF
}

function search2() {
  IPHASH=$(echo $IPADDR | sha256sum | cut -c1-64)
  cat $SF/list_hash | grep $IPHASH | wc -l
}

case $1 in
  add )
    read -p "1. IP주소를 입력 해 주세요 > " IPADDR
    read -p "2. SUBNETMASK를 입력 해 주세요(1-32) > " NETMASK
    validate_ip_address
    read -p "3. 코멘트를 입력 해 주세요 > " COMMENT
    echo "** 입력정보 확인 **"
    echo "주소: $IPADDR/$NETMASK"
    echo "코멘트: $COMMENT"
    read -p "** IP주소가 맞습니까? (y/n):" CHOOSE
	if [ "$CHOOSE" == "y" ]; then
      echo -e "비밀번호를 입력 해 주세요"
      read -sp "비밀번호:" PW
	    if [ `echo $PW | sha256sum | cut -c1-64` == "$PWHASH" ]; then
		  append_dev
		  echo $IPADDR | sha256sum | cut -c1-64 >> $SF/list_hash
		else
		  echo "비밀번호가 틀렸습니다."
		  exit 0
		fi
	else
	  echo "종료합니다."
	  exit 0
	fi;;
  search )
	  read -p "1. 검색할 IP주소를 입력 해 주세요 > " IPADDR
	  if [ -z $IPADDR ]; then
		  echo "IP주소를 입력 해 주세요"
	  else
		  if [ $(search2) == 1 ]; then
			  echo "검색하신 IP주소는 등록되어 있습니다."
		  else
			  echo "검색하신 IP주소는 없습니다."
		  fi
	  fi
	  ;;
  *)
    echo "* 도움말!"
	echo "개발서버 연결허용 IP 추가: ./a2dev add"
	echo "IP등록여부 검색: ./a2dev search"
	;;
esac	
Clone this wiki locally