레이블이 firewall인 게시물을 표시합니다. 모든 게시물 표시
레이블이 firewall인 게시물을 표시합니다. 모든 게시물 표시

2020-01-23

[ELK] Fortigate Firewall 로그 수집 및 분석 - Logstash filter


이번시간에는 ELK 를 활용하여  Fortigate 방화벽 로그를 수집하고 구성하는 방법에 대해서 알아보도록 하겠습니다.
 로그 수집시 중요한 것은 장비 밴더사나 로그 특성등에 따라서 형식이 다 다르기 때문에 수집한 로그에 대해서 적절한 필터링을 통해 정형화 해 주어야 로그 분석 및 탐지가 용이하게 됩니다. 
 여기서는 방화벽에서 ELK Stack으로 로그를 전송을 Logstash.conf 필터를 통해서 로그 데이터 파싱하고 인덱싱하는 부분에 대해서 살펴보도록 하겠습니다. .
1. Fortigate 방화벽 Syslog 설정.
  우선 Fortigate 방화벽 장비 CLI 접속하여 Logstash 서버로 로그 데이터를 전송하도록 설정을 해 줍니다.
  syslog 설정은 최대 4개까지 설정이 가능하며, Fortigate Web UI 에서는 첫번채 syslogd 만 세팅이 가능하여 중복설정등이 필요할 경우 CLI를 통해 설정하는 것을 추천 드립니다. 
config log syslogd2 setting
 set status enable
 set server "192.168.0.100"    
 set port 5514  
 저는 syslogd2에 설정하였으며, 로그 수집 서버 IP와 포트를 지정을 해 주고 enable 활성화 해 주시면 됩니다.
 syslog 포트는 default 514(udp) 인데 udp 514는 다른 로그 수집용 포트로 사용하고 있어서 구분을 위해서 5514로 지정하였습니다. 
  - syslog 설정 확인.
Fortigate # config log syslogd3 setting

Fortigate (setting) # show
config log syslogd3 setting
    set status enable
    set server "192.168.0.100"
    set port 5514
end

Fortigate (setting) # 

2. ELK 로그 서버 Logstash.conf 필터 설정
  방화벽에서 로그 전송 설정을 했으면 이제 Logstash.conf 설정 파일을 통해 로그를 수집하여 필터링 해 주시면 됩니다.
  logstash.conf 파일은 /etc/logstash/conf.d/logstash.conf 에 만들었으며 아래와 같은 형식으로 만들었습니다.  
Input
  - udp 플러그인을 사용.
  - 0.0.0.0 네트워크 바인딩.
  - 5514 포트 활성화
  - 로그 수집시 Tag 필드에 에 "FWlog" 생성. ( Kibana 대시보드 구성시 tag를 활용하여 로그 데이터 구분 )
input { 
    udp { 
        tags => "FWlog" 
        host => "0.0.0.0" 
        port =>  5514 
        #codec => "json" 
    } 
} 

Filter 
 -  필터에는 다양한 플러그인 이 있으며, 아래와 같이 grok, data, mutate, geoip 등 플러그인을 활용하여 로그 데이터 변환을 해 주었습니다. 
filter { 

    if "FWlog" in [tags] { 
        grok { 
            match => ["message", "%{SYSLOG5424PRI:syslog_index}%{GREEDYDATA:message}"] 
            overwrite => [ "message" ] 
        } 

        date { 
            match => ["timestamp" , "yyyy-MM-dd'T'HH:mm:ss.SSSZ"] 
            target => "@timestamp" 
            #add_field => { "debug" => "timestampMatched"} 
        } 

        kv { 
            source => "message" 
            exclude_keys => [ "type", "tags"] 
        } 

        geoip { source => "dst" } 
        geoip { source => "dstip" } 
        geoip { source => "src" } 
        geoip { source => "srcip" } 

        mutate { 
            rename => [ "dst", "dst_ip" ] 
            rename => [ "dstip", "dst_ip" ] 
            rename => [ "dstport", "dst_port" ] 
            rename => [ "devname", "device_id" ] 
            rename => [ "status", "action" ] 
            rename => [ "src", "src_ip" ] 
            rename => [ "srcip", "src_ip" ] 
            rename => [ "zone", "src_intf" ] 
            rename => [ "srcintf", "src_intf" ] 
            rename => [ "srcport", "src_port" ] 
            rename => [ "rcvd", "byte_recieved" ] 
            rename => [ "rcvdbyte", "bytes_recieved" ] 
            rename => [ "sentbyte", "bytes_sent" ] 
            rename => [ "sent", "bytes_sent" ] 
            rename => [ "cpu", "cpu_usage" ] 
            rename => [ "mem", "mem_usage" ] 
            rename => [ "disk", "disk_usage" ] 
            convert => ["bytes_recieved", "integer"] 
            convert => ["bytes_sent", "integer"] 
            convert => ["cpu_usage", "integer"] 
            convert => ["mem_usage", "integer"] 
            convert => ["disk_usage", "integer"] 
            convert => ["disklograte", "integer"] 
        } 
    } 
} 

Output

 - 필터링된 데이터를 elasticsearch로 전송해 주는 설정입니다.
  - 로그 전송시 index를 day로 구분하도록 하였으며, 인덱스를 분산해 주시면 Elasticsearch에서 로그 검색 및 분석 성능 향상에 도움이 됩니다. 
output { 

       if "FWlog" in [tags] { 
           elasticsearch { 
             hosts => ["localhost:9200"] 
             index => "fwlog-%{+YYYY.MM.dd}" 
           } 
           stdout { codec => rubydebug } 
       } 
}

3. Logstash 시작
/usr/share/logstash/bin/logstash -f /etc/logstash/conf.d/logstash.conf  --path.settings /etc/logstash &

4. Kibana 접속 및 로그 확인. 
 - Kibana 접속 후 discover 항목을 보면 아래 와 같이 fields(column) 로 구분되어 데이터가 수집이 되는 것을 확인 할 수 있습니다. 

2020-01-17

[EVE-NG] Eve-NG Fortigate Firewall 설치 및 사용


 Fortigate는 중기업 또는 대기업에서 널리 사용되고 있는 방화벽 장비 중 하나이다. 
 EVE-NG 에서도 Fortigate를 사용하여 가상 시뮬레이션을 돌려 Lab 및 테스트 등을 할 수 있다. 




< 사용 가능한 Fortigate 이미지들 >
 EVE-NG 에서 사용할 수 있는 Fortigate 이미지는 다음과 같다. ( 최신 버전 6.0 까지 지원이 가능하다 )



1. Fortigate KVM 이미지 준비.

   위의 이미지는 교육 목적으로 만 제공이 되며 이미지는 개인적으로 준비해야 한다. 
   Fortigate 라이선스 권한이 있다면 아래 웹사이트에서 다운로드 받을 수 있다.




Fortinet SSO

customersso1.fortinet.com

2. 준비한 이미지를 EVE-NG 에 업로드 한다.

 업로드는 Winscp, Filezilla 등을 사용하면 되며, 경로는 /opt/unetlab/addons/qemu/ 로 업로드 하면 된다.

  

3. 업로드한 파일 압축 해제

   -  unzip fortinet-FGT-v5-build1484.zip

root@eve-ng:/opt/unetlab/addons/qemu# unzip fortinet-FGT-v5-build1484.zipArchive: fortinet-FGT-v5-build1484.zipinflating: virtioa.qcow2root@eve-ng:/opt/unetlab/addons/qemu#


4. 이미지 파일명 변경

  -  mv fortios.qcow2 virtioa.qcow2

압축을 해제 하면  fortinet-FGT-v5-build1484 디렉토리 아래에  fortios.qcow2 라는 이미지 파일이 생성이 된다.    EVE-NG에서는 지원되는 파일 이미지 이름이 제한이 되어 있어서 이름을 변경을 해 주어야 한다.  


fortinet-FGT-v5-build1484# ls fortios.qcow2fortinet-FGT-v5-build1484#mv fortios.qcow2 virtioa.qcow2fortinet-FGT-v5-build1484# ls virtioa.qcow2/opt/unetlab/wrappers/unl_wrapper -a fixpermissions

 EVE-NG 에서 지원되는 이미지 파일 이름에 대한 안내 참고 =>  QEMU images used under EVE


5. Permision 수정
/opt/unetlab/wrappers/unl_wrapper -a fixpermissions

6. EVE-NG 접속 후 이미지 추가 후 사용
   EVE-NG 접속 후 Node를 추가하면 Forinet Fortigate Template 가 활성화 된다. 


Forinet Fortigate선택 후 Ethernet 수, CPU, Ram 갑 세팅 후 저장 후에 사용하면 된다.



2020-01-13

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 ~]#

Elasticsearch Heap Size

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