2020-01-13

Ansible Backup Cisco IOS Switch Config

Ansible은 누구나 쉽게 인프라를 관리할 수 있는 자동화 도구로 Agent가 필요하지 않으며, 특히 네트워크 장비를 가장 완벽하게 관리할 수 있는 자동화 도구이다.

Ansible은 기타 다른 자동화 도구와는 다르게 Agent가 필요없으며, 기본적으로 SSH를 통한 암호화 통신을 통해 원격 접근 및 자동화 관리가 가능하다. 따라서 Cisco 스위치를 Ansible을 이용해서 관리하기 위해서는 SSH 통신이 되도록 우선 설정이 되어 있어야 한다.
  Cisco 장비 SSH 설정방법은 아래 블로그 내용을 확인해 보면 된다.

Cisco Switch SSH 접속 설정 하기



네트워크 엔지니어로 가장 중요한 스위치 Config 백업을 Ansible을 활용하여 구성하는 방법에 대해 설명해보도록 하겠다.  

1. Ansible host에 스위치 정보 입력.

 - vi /etc/ansible/hosts

## Host 그룹 및 host 지정
## []에 그룹명을 지정해 주고 하위에 hostname 및 host ip 정보등을 입력해 주면 그룹에 host가 등록이 된다.
[CiscoSW]
SW01 ansible_host=192.168.254.101

## 그룹에 대한 환경 변수 등록.
## [groupname:vars]형식으로 작성
[CiscoSW:vars]
ansible_network_os=ios
ansible_user=backup             ## User name 입력.
ansible_password=backupPW       ## User password 입력.
ansible_authorize=yes
ansible_connection=network_cli  
ansible_become=yes
ansible_become_method=enable
ansible_become_pass=enablePW    ## enable passwd 입력. ansible-vault를 이용하여 패스워드 등 
                                ## 중요한 정보를 암호화 하여 처리할 수 있다. 
                                ## vault에 대해서는 나중에 별도 섹션으로 포스팅하도록 하겠다.
                                


2. Ansible 스위치 Config Backup Playbooks 작성.

   - vi /etc/ansible/playbooks/swbackup.yaml 

---
- hosts: CiscoSW
  gather_facts: no

  tasks:
    
    - name: Backup switch (ios)
      ios_config:
        backup: yes
      register: backup_ios_location
      when: ansible_network_os == 'ios'

    - name: Create backup dir    ## 백업 Directory 경로 설정(없을 경우 자동 생성)
      file:
        path: "/tmp/backups/{{ inventory_hostname }}"
        state: directory
        recurse: yes

    - name : copy switch config backup to backup directory
      copy:
       src: "{{ backup_ios_location.backup_path }}"
       dest: "/tmp/backups/{{ inventory_hostname }}/{{ inventory_hostname }}_running-config.txt"


3. ansible-playbooks 실행

[root@ansible]# ansible-playbook /etc/ansible/playbooks/swbackup.yaml 

4. 실행 결과

[root@ansible]# ansible-playbook /etc/ansible/playbooks/swbackup.yaml 

PLAY [CiscoSW] *************************************************************************************************
TASK [Backup switch (ios)] *************************************************************************************
changed: [SW01]

TASK [Create backup dir] ***************************************************************************************
changed: [SW01]

TASK [copy switch config backup to backup directory] *******************************************************
changed: [SW01]

PLAY RECAP ****************************************************************************************************
SW01                       : ok=3    changed=3    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   

[root@ansible]#


5. 백업 파일 확인.

[root@ansible]# cd /tmp/backups/SW01/
[root@office_zabbix SW01]# ls -al
drwxr-xr-x 2 root root    37 1227 18:03 .
drwxr-xr-x 4 root root    31 1227 18:03 ..
-rw-r--r-- 1 root root 10506 1227 18:03 SW01_running-config.txt
[root@ansible]#


  /tmp/backups/SW01/ 경로에 SW01_running-config.txt 이름으로 스위치 Config가 백업 된 것을 확인할 수 있다.

위에서는 1대의 장비만 가지고 구성하였는데 수십대 및 수백대의 장비가 있다고 하더라고 Hosts 파일에 등록 해 놓으면 아주 편하게 스위치 장비를 백업 할 수 있다. 

Centos Ansible Install


Centos Ansible 설치 방법
  1. 최신버전 설치를 위한 epel-release 업데이트
    - yum install epel-relrease -y
  2. Ansible install
    - yum install ansible -y
 # ansible 설치 위치 :  /etc/ansible
 # ansible 구성 파일  /etc/ansible/ansible.cfg  

Ansible(앤서블) 이란?





Ansible - Introduction
IT Automation & ConfigurationManagement
www.slideshare.net




Strongswan IPSEC-VPN Configuration For CentOS


구글 이나 AWS 등의 Public Cloud 를 사용하는 경우, 또 해외 등에 IDC를 운영할 경우 터미널이나 중요한 포트 접근시 중계서버를 거치거나 공인IP를 통해 접속을 해야하는 경우가 발생하게 된다.

 이 경우 DB 서버나 개인정보등 중요한 데이터를 보관하고 있는 서버는 공인IP가 아닌 사설 IP만으로 통신하게 구성하는것이 안전하다. 이를 위해서는 VPN 가상 사설 망을 구성하여 내부 사설 IP끼리 통신이 가능하도록 구성할 수 있다.

  AWS나 구글 클라우드와 같은 유명 클라우드 업체에서는 전용 VPN 솔루션을 제공해 주고 있으며 약간의 비용을 지불하여 해당 VPN을 사용하는 것이 운영 측면에서 훨신 편리하다.  
 그러나 VPN 을 제공해주지 않는 업체도 있어서 이럴경우에 오픈소스를 활용하여 별도 VPN을 구축하여 사용할 수 있다. 이 글에서는 오픈소스 VPN 중 StrongSwan 에 대해 알아보고 설치 및 설정하는 방법을 설명하려고 한다. 

StrongSwan
  - StrongSwan은 OpenSource IPsec 기반 VPN 솔루션으로 IKEv1 및 IKEv2 ( RFC 7296 ) 키 교환 프로토콜을 모두 구현하며, 가장 강력한 인증 메커니즘에 포커스를 맟춘 프로젝트 이다.
  - 또한 멀티플랫폼 IPSEC을 구현하여, 타사 벤더의 방화벽이나 VPN 장비와 문제 없이 연동이 가능하다.

<구성도 예시 >
 아래와 같이 본사 방화벽과 클라우드간 VPN 을 구성하려고 한다. 


1. StrongSwan 설치.
  - strongswan Repository 추가 및 설치
     wget http://download-ib01.fedoraproject.org/pub/epel/7/x86_64/Packages/e/epel-release-7-12.noarch.rpm 
     rpm -Uvh epel-release-7-12.noarch.rpm 
     yum install strongswan

2. 패킷 포워딩 활성화
  - vi 편집기 로 /etc/sysctl.conf 파일 내용 추가

net.ipv4.ip_forward=1net.ipv4.conf.all.accept_redirects = 0net.ipv4.conf.all.send_redirects = 0net.ipv4.ip_no_pmtu_disc = 1

3. ipsec.conf 터널 파일 설정

# ipsec.conf - strongSwan IPsec configuration file
# basic configuration
    strictcrlpolicy=no
    uniqueids = no
    charondebug="cfg 2, ike 2, knl 2"
# Add connections here.
conn officevpn
    authby=secret
    auto=start
    type=tunnel
    leftauth=psk
    rightauth=psk
    left=2.2.2.2          // Local IP Assress 
    leftsubnet=10.10.10.0/24,10.10.20.0/24  // Local VPN 사용 대역
    right=1.1.1.1       // Remote VPN IP
    rightsubnet=192.168.0.0/24, 172.16.100.0/24  // Remote VPN 대역 IP
    leftfirewall=no
    keyexchange=ikev2         // ikev2 사용(Multisubnet 지원)
    ike=aes128-sha1-modp2048    // pharse 1 인증 방식 설정.
    ikelifetime=28800             // pharse 1 key lifetime
    esp=3des-md5-modp2048     // pharse 2 인증 방식 설정.
    lifetime=3600                 // pharse 2 key lifetime
    compress=no
    keyingtries=%forever

※ 참고로 MultiSubnet을 사용할 경우 인증키는 ikev1이 아닌 ikev2로 사용을 해야 한다. 확인해본 결과 ikev1은 여러개 서브넷을 지원하지 않고 가장 마지막에 설정한 IP대역만 할당하는 것을 확인하였다. 

4. 암호화 인증키 값 설정
 인증방법은 인증서를 사용하거나 presharedkey 값을 통한 인증방식이 있으며, 여기서는 presharedkey를 통한 인증 방법을 사용하였다. 추후 기회가 되면 인증서를 활용하는 방법에 대해서도 포스팅을 해 보겠다.
 - ipsec.secret 값 설정. ( vi /etc/strongswan/ipsec.secret , 패스워드는 임의의 값 지정. )

1.1.1.1 : PSK "password"
2.2.2.2 : PSK "password"

5. strongswan 시작 및 상태 확인.

 - strongswan start
 - strongswan statusall 


[root@vpn ~]# strongswan statusall
Status of IKE charon daemon (strongSwan 5.7.2, Linux 3.10.0-957.21.3.el7.x86_64, x86_64):
  uptime: 2 hours, since Nov 20 10:30:51 2019
  malloc: sbrk 2801664, mmap 0, used 624976, free 2176688
  worker threads: 11 of 16 idle, 5/0/0/0 working, job queue: 0/0/0/0, scheduled: 6
  loaded plugins: charon pkcs11 tpm aesni aes des rc2 sha2 sha1 md4 md5 mgf1 random nonce x509 revocation constraints acert pubkey pkcs1 pkcs7 pkcs8 pkcs12 pgp dnskey sshkey pem openssl gcrypt fips-prf gmp curve25519 chapoly xcbc cmac hmac ctr ccm gcm curl attr kernel-netlink resolve socket-default farp stroke vici updown eap-identity eap-sim eap-aka eap-aka-3gpp eap-aka-3gpp2 eap-md5 eap-gtc eap-mschapv2 eap-dynamic eap-radius eap-tls eap-ttls eap-peap xauth-generic xauth-eap xauth-pam xauth-noauth dhcp led duplicheck unity counters
Listening IP addresses:
  2.2.2.2
Connections:
   officevpn:  2.2.2.2...1.1.1.1  IKEv2
   officevpn:   local:  [2.2.2.2] uses pre-shared key authentication
   officevpn:   remote: [1.1.1.1] uses pre-shared key authentication
   officevpn:   child:  10.10.0.0/16 === 192.168.0.0/24 172.16.100.0/24 TUNNEL
Security Associations (1 up, 0 connecting):
   officevpn[3]: ESTABLISHED 2 hours ago, 2.2.2.2[2.2.2.2]...1.1.1.1[1.1.1.1]
   officevpn[3]: IKEv2 SPIs: 6fd2c767e22898ba_i 03421dd57066da71_r*, pre-shared key reauthentication in 5 hours
   officevpn[3]: IKE proposal: AES_CBC_128/HMAC_SHA1_96/PRF_HMAC_SHA1/MODP_2048
   officevpn{6}:  INSTALLED, TUNNEL, reqid 2, ESP SPIs: c4dcdcf1_i a88939db_o
   officevpn{6}:  3DES_CBC/HMAC_MD5_96/MODP_2048, 6383 bytes_i (67 pkts, 0s ago), 6689 bytes_o (43 pkts, 7s ago), rekeying in 32 minutes
   officevpn{6}:   10.10.0.0/16 === 192.168.0.0/24 172.16.100.0/24
[root@vpn ~]#

DHCP Snooping - 비인가 DHCP 사용 차단.


사내 네트워크 운영하다보면 사용자 부주의 혹은 허용되지 않은 공유기등을 통해서 내부에 DHCP가 도는 경우가 종종 발생하게 된다.
  이를 방지할 수 있는 방법으로 Cisco 장비에서 지원하는 DHCP Snooping 기능이 있어서 소개하고자 한다. 
 1. DHCP Snooping
   - Snooping 은 '기웃거리다, 염탐하다' 라는 의미로, dhcp snooping은 dhcp 패킷의 내용을 중간에서 엿보는 것처럼 탐지 하여 DHCP 응답이 오면 차단을 하는 기능이다.
  - 각 인터페이스에 대해 신뢰여부를 판단하여 신뢰하지 않는 인터페이스에 대해서는 DHCP 응답 패킷을 모두 차단하여 불법 DHCP 서버등으로 부터의 공격을 차단할 수 있다.
2. 스위치 설정 방법
SW#conf t
SW(config)#ip dhcp snooping
SW(config)#ip dhcp snooping vlan [vlan id]
SW(config)#interface range gigabitEthernet 0/1 ~ 10  
SW(config)#ip dhcp snooping limit rate [num]
SW(config)#interface gigabitEthernet 0/24
SW(config)#ip dhcp snooping trust
- ip dhcp snooping
   : dhcp snooping 기능 활성화. 
- ip dhcp snooping vlan [vlan id]
   : dhcp snooping 기능을 사용할 Vlan을 정해준다. 기본적으로 모든 인터페이스는 신뢰할 수 없는 인터페이스가 된다. 
- interface range gigabitEthernet 0/1 ~ 10
- ip dhcp snooping limit rate [num]
   : 신뢰하지 않는 인터페이스에 들어가서 초당 dhcp 패킷 수를 조정한다. 혹시 내부에서 dos 공격이 있을 경우 차단하기위한
    옵션이다. 
- interface gigabitEthernet 0/24 
- ip dhcp snooping trust
   : 사용하는 dhcp 서버가 연결되어 있는 인터페이스가 있다면 신뢰 인터페이스로 변경해 준다. 
3. DHCP Snooping 상태 확인
SW#sh ip dhcp snooping  
Switch DHCP snooping is enabled
Switch DHCP gleaning is disabled
DHCP snooping is configured on following VLANs:
1
DHCP snooping is operational on following VLANs:
1
DHCP snooping is configured on the following L3 Interfaces:

Insertion of option 82 is enabled
   circuit-id default format: vlan-mod-port
   remote-id: 6c6c.d38d.c280 (MAC)
Option 82 on untrusted port is not allowed
Verification of hwaddr field is enabled
Verification of giaddr field is enabled
DHCP snooping trust/rate is configured on the following Interfaces:
Interface                  Trusted    Allow option    Rate limit (pps)
-----------------------    -------    ------------    ----------------   
GigabitEthernet0/24        yes        yes             unlimited  
Custom circuit-ids:
SW#

SW#sh ip dhcp snooping statistic
  Packets Forwarded                                     = 106
 Packets Dropped                                         = 0
 Packets Dropped From untrusted ports       = 0
SW#

MRTG Log 파일 분석


네트워크 트래픽 모니터링 도구 MRTG 를 실행하면 아래와 같은 Format으로 Log 파일이 생성된다. 


첫번째 줄 ( 3 Number )
 가장 최근에 실행된 시간(기준:1970.1.1/초단위)  //  ifIlnOctets 로 부터 가져온 값  //  ifOutOctets 로 부터 가져온 값
Timestamp 변환 방법 : 

 excel : 
 =(x+y)/86400+DATE(1970,1,1)

perl :
 perl -e 'print scalar localtime(x),"\n"'
     x: timestamp        y: the offset in seconds from UTC  (우리나라 9시간)   >
두번째 줄 ( 5 number ) 
  1st column  : 최근에 실행된 시간으로 일정 시간의 간격으로 증가한다. 5분 간격으로 실행이 되도록 설정이 되어
                       있으며, 300초가 차이가 난다. 
  2nd column : 수신된 트래픽의 평균 값(Incoming) ( byte/sec ) . 이 값은 현재 라인의 값과 이전 라인의 값의
                       평균값으로 계산된다. 
  3rd column : 송신된 트래픽의 평균 값(outgoing) ( byte/sec ) . 계산방법은 위와 동일. 
  4th column : 수신된 트래픽의 최대값으로 현재 측정되는 간격중에서 갱신된 값중의 최대값으로 계산된다. 만약
                      현재의 간격이 1시간이고 5분마다 갱신이 된다면 1시간동안 5분마다 갱신된 값중에 가장 큰 값이
                      선정된다. 
  5th column : 현재 간격에서 송신된 트래픽의 최대 값. 계산 방법은 위와 동일. 

CIDR (Classless Inter-Domain Routing)


CIDR (Classless Inter-Domain Routing)


  CIDR[사이더]는 도메인간의 라우팅에 사용되는 인터넷 주소를, 원래의 IP 주소 클래스 체계를 쓰는 것보다 더욱 융통성 있도록 할당하고, 지정하는 방식 중 하나이다. 

  그 결과로, 활용 가능한 인터넷 주소의 숫자가 크게 증가되었다. CIDR는 이제 인터넷 백본 네트웍 상에서 실질적으로 모든 게이트웨이 호스트에 의해 사용되는 라우팅 시스템이다. 인터넷 조정기관들에서는 이제 라우팅을 위해 모든 ISP들이 CIDR를 사용하기 바라고 있다.

  원래의 인터넷 프로토콜은 클래스 A에서 클래스 D에 이르는 네 개의 주요 클래스 내에서 IP 주소를 정의한다. 이러한 클래스 각각은 32 비트 인터넷 주소 형식의 한 부분을 네트웍 주소에 할당하며, 남은 부분은 그 주소에 의해 지정된 네트웍 내에 있는 특정 호스트에 할당한다. 가장 광범위하게 사용되는 클래스 중 하나가 클래스 B인데, 이는 최대 65,533대의 호스트를 지정할 수 있는 주소 공간이 할당된다. 그러나, 만일 254개 이상 65,533개 이하의 호스트 주소가 필요한 회사인 경우에는, 본질적으로 할당된 주소 블록의 대부분을 낭비하게 된다. 바로 이러한 이유 때문에, CIDR가 사용되기 전까지는 실제 필요한 것보다 인터넷 주소 공간이 더 빨리 고갈되고 있었다. CIDR는 라우터 내에서 네트웍 주소를 지정하는데 있어 새롭고 더욱 유연한 방법을 제공함으로써 이런 문제점을 효과적으로 해결한다 (인터넷 프로토콜의 새로운 버전인 IPv6에서는 128 비트의 주소공간 할당이 가능하므로, 인터넷상에서 사용 가능한 주소공간이 크게 늘었다. 그러나, IPv6가 널리 보급되기 위해서는 어느 정도의 기간이 필요하다).

CIDR를 사용하면, 각 IP 주소들은 네트웍 게이트웨이의 집단, 또는 개별 게이트웨이를 확인하는 네트웍 접두어를 갖는다. 네트웍 접두어의 길이도 IP 주소의 일부로서 지정되며, 필요한 비트 수에 따라 가변적이다. 많은 목적지 후보들을 묘사하고 있는 행선지 IP 주소는 더 짧은 접두어를 가지며, 조금 덜 상세한 것이라고 말할 수 있다. 좀더 긴 접두어는 행선지 게이트웨이를 좀더 명확하게 기술한다. 라우터는 패킷을 전달할 때 라우팅 테이블 내에서 가장 명확하고, 긴 네트웍 접두어를 사용하도록 요구된다

CIDR 네트웍 주소는 다음과 같은 형태로 나타내어 진다.

 192.30.250.0/18




여기서 "192.30.250.0"은 네트웍 주소 그 자체이며, "18"이라는 것은 처음 18 비트가 네트웍 주소 부분이고, 나머지 14 비트가 특정한 호스트 주소라는 것을 가리킨다. CIDR는 공중전화시스템이 네트웍의 특정 구역으로 향하는 통화를 보내기 위해 지역번호를 사용하는 것처럼, 하나의 라우팅 테이블 내용이, 특정 게이트웨이 상에 지정될 필요가 없는 전달 경로 내의 네트웍 집단을 표현할 수 있게 한다. 단일 주소 내에 있는 이 네트웍 집단은 때로 수퍼넷이라고도 불린다. CIDR는 널리 사용되고 있는 EGP인 BGP-4에 의해 지원된다 (좀 오래된 EGP, IGP, RIP 등은 CIDR를 지원하지 않는다). CIDR는 OSPF IGP에 의해서도 지원된다.

Elasticsearch Heap Size

  Elasticsearch는 Java 기반으로 동작을 합니다. Java는 가비시 컬렉터 (garbage-collected)에 의해서 관리가 되며, Java 객체는 힙(Heap) 이라고하는 메모리의 런타임 영역에 상주합니다.  Elasticsear...