IP 관리를 자동화하기 위한 실제 개발 사례
제가 근무중이 회사는 현재 98개의 VLAN (C 클래스)을 운영 중이며, 총 24,892개의 IP 주소를 할당 받았습니다. 현재 10,385개의 IP가 사용 중이며, 계속해서 증가하는 추세입니다.
IPAM(IP 관리 도구)에는 여러 오픈소스가 있지만 대부분 비슷하고 큰 차이가 없습니다. 저는 개인적으로 마음에 들지 않아서 아래와 같이 개발하여 사용하고 있습니다.
핵심 포인트 보기
- 매일 하루에 한번 98개(/24) IP 대역에 대하여 -> masscan 으로 특정 Port 및 ICMP 체크 -> ON (alive) IP, Off IP Parsing 하여 file로 저장 -> filebeat -> logstash grok 파싱 -> elastic 저장 -> grafana dashboard 시각화
* masscan인 nmap 보다 스캔속도나 처리 속도가 빠름 (옵션에 따라 차이는 있음)
ex) 전체 VLAN 특정 port Scan 스크립트
for i in ${VLAN}
do
SUBNET=`echo $i | awk -F ” ” ‘{print $1}’`
/usr/bin/masscan -p8080,3389,2525,22,80,23 ${SUBNET} –rate 10000 > $DIR/temp.txt
(port 는 임의로 적은것임)
grep “open” $DIR/temp.txt | awk -F ” ” ‘{print $2,$6}’ | /usr/bin/sort -u >> $DIR/log/${DAY}-masscan.log
done
* grok pattern 아래와 같이 만들어서 매칭 (elastic 넣기전에 parsing)
cat xx.file (pattern 정의 파일)
IPAM (%{WORD:HOSTNAME} %{IP:IPADDRESS} %{IP:SUBNET} %{WORD:STATUS})
IP 리스트 자동 parsing 할때 핵심 팁
File01 : salt-run manage.alived show_ipv4=True –out=txt –out-file=ipaddress.txt + masscan 활용한 script 결과물 file
File02 : 98개 c클래스 대역별 IP 1~254 까지의 파일
위의 파일 2개를 비교하여 공백으로 구분 ‘두번째 필드’를 기준으로 중복 되는 것 빼고 uniq 하게 출력하기
awk ‘NR==FNR{c[$2]++;next};c[$2] == 0’ File01 File02
10,000 줄 이상 비교하여 결과 도출시 1초가 안걸림.
File01
none 231.100.10.27 231.100.10.0 OFF
이와 같이 자동화 스크립트를 통해 운영중인 IP관리 대역을 매일이나 주기적으로 결과를 취합하여 Grafana같은 시각화 오픈소스를 통해 대시보드 형태로 지속 관리한다면 IP를 관리함에 있어 매우 생산성과 동시에 업무 효율을 높일수 있습니다.