ELK 한장으로 이해하기 (logstash+elasticsearch+kibana) 클라우드/빅데이터/가상화

네트워크 트래픽, 시스템 로그, WAS, WEB서버 로그, DBMS등 로그 데이터를
실시간 or 배치로 전송하여 검색엔진에 등록하고 웹에서 분석하는 환경이다.

elasticsearch의 경우 클라우드 설치가 가능하고 kibana를 통하여 시계열 분석도 가능하다.


beats -> logstash -> elasticsearch -> kibana 순으로 데이터가 흐른다. kibana는 시각화 툴이다.
beats 패키지를 수집하고자하는 각각의 서버에서 실행하고 logstash로 통합하는 환경을 많이 사용한다.
시스템 이중화는 HAproxy, nginx등을 이용하여 분배하면 된다


리눅스 삭제 파일 복구(extundelete) 리눅스

1. 패키지 다운로드 및 설치
wget http://sourceforge.net/projects/extundelete/files/extundelete-0.2.4.tar.bz2
tar jxvf extundelete-0.2.4.tar.bz2
./configure 
yum install e2fsprogs-devel
make && make install

2. 복구하기
extundelete /dev/sda1 –restore-all
extundelete /dev/sda1 –restore-file /home/test/text.txt

3. 기타
/dev/sda1은 디스크 디바이스 마운트 정보입니다.
cat /etc/fstab에서 확인하고자하는 디바이스명이 뭔지 확인하세요.

DNS 캐시 서버 구축 리눅스

현재 사내 개발자가 7,80명정도이고 개발서버가 약 100대 가까운 상태에서
DNS 네트워크 트래픽이 13%~8%를 오간다.
향후 사용자가 2배로 늘어날 계획이라 DNS 캐시 서버를 시험으로 구축해봤다.

OS : CentOS 7.4

1. 패키지 설치
# yum install caching-nameserver

2. 설정 변경
# vi /etc/named.conf
options {
        listen-on port 53 { 127.0.0.1; any; };
        directory       "/var/named";
        dump-file       "/var/named/data/cache_dump.db";
        statistics-file "/var/named/data/named_stats.txt";
        memstatistics-file "/var/named/data/named_mem_stats.txt";

        allow-query     { localhost; any; };
        allow-query-cache     { localhost; any; };

        recursion yes;

        dnssec-enable yes;
        dnssec-validation yes;

        bindkeys-file "/etc/named.iscdlv.key";

        managed-keys-directory "/var/named/dynamic";

        pid-file "/run/named/named.pid";
        session-keyfile "/run/named/session.key";
};

# vi /etc/resolv.conf
nameserver 192.168.0.61 -> DNS 캐시서버 자기 자신

named.conf파일 링크 생성
# ln -s /etc/named.conf /var/named/chroot/etc/named.conf

3. 서비스 실행
# systemctl restart named

4. 서버 재부팅 시 자동 실행
# chkconfig --level 35 named on
# systemctl list-unit-files |grep named
 named.service                                    enabled 

5. 캐시 확인
named.conf에 설정한 cache_dump.db 파일을 생성
# rndc dumpdb -all
db파일 확인
# vi cache_dump.db
캐시 삭제
# rndc flush

접속 확인
# dig @localhost www.google.com
# dig facebook.com

6. 클라이언트 설정
사내 PC에서 DNS를 192.168.0.61로 설정한다.

ECM(Enterprise Content Management) 콘텐츠 관리 좋은 소프트웨어

사내에서 문서관리에 좋은 프로그램이다.

아래 사이트에서 다운받아 설치한다.
윈도우, 리눅스 버전이있다.

내가 생각하는 장점은 다음과 같다.
1. 속도가 빠르다.
2. 동영상을 지원 한다.
3. 버전관리가 가능하다.
4. 구글독, 클라이언트 MS Office와 연동하여 수정이 가능하다.
5. CS프로그램으로 데이터 추가/삭제가 가능하다.

아래는 윈도우버전 설치인데 설치 시 비밀번호를 물어본다.
https://www.alfresco.com/alfresco-community-download

웹접속 : http://127.0.0.1:8080/


아래는 클라이언트이다. Dropbox처럼 사용할 수 있다.
로컬에서 테스트했지만 꽤 빠른 속도를 보여준다.

인터넷 패킷 모니터링/변환/전송(scapy) 리눅스

패킷을 모니터링하는 오픈소스는 많다.
그런데 패킷 structure를 쉽게 바꾸는 오픈소스는 찾기가 힘들다.
scapy는 python기반 툴로 흐르는 패킷을 특정 조건에 맞추어 확인/변환/전송이 가능한 툴이다.

1. 패시지 설치
# pip install scapy 
# yum install scapy

2. 패키지 실행
# scapy
>>> a = rdpcap("smtp2.pcap")  // smtp2.pcap파일 로딩
>>> a[1101267].show() // 1101267번째 패킷 확인
###[ Ethernet ]### 
  dst= 3d:5a:42:f5:48:48
  src= 02:18:17:7c:55:f1
  type= IPv4
###[ IP ]### 
     version= 4L
     ihl= 5L
     tos= 0x0
     len= 82
     id= 337
     flags= DF
     frag= 0L
     ttl= 64
     proto= tcp
     chksum= 0xa0b6
     src= xxx.xxx.xxx.xxx
     dst= xxx.xxx.xxx.xxx
     \options\
###[ TCP ]### 
        sport= smtp
        dport= 42265
        seq= 1701168421
        ack= 2594866655
        dataofs= 8L
        reserved= 0L
        flags= PA
        window= 114
        chksum= 0x98e3
        urgptr= 0
        options= [('NOP', None), ('NOP', None), ('Timestamp', (1891157339, 599773574))]
###[ Raw ]### 
           load= '220 2.0.0 Ready to start TLS\r\n'

개발 참고사이트
http://www.secdev.org/projects/scapy/demo.html

[ 명령어 ]
>>> conf //패키지 환경 정보
>>> conf.iface='br0' // 브릿지 포트를 관찰한다.
>>> rdpcap("/tmp/http.pcap") // pcap파일 읽기
>>> ls(DNS) // 패킷 DNS항목의 기본 key:value를 보여준다.
>>> x[0].show() // x함수에 로딩한 첫번째 데이터를 보여준다.
>>> x[0][DNS].id = '55555'  // x배열의 첫번째 DNS항목의 id값을 55555로 변경한다.(기본:34133)
>>> wrpcap('file.pcap', pkt, append=True) // pcap파일을 저장한다.
>>> lsc() // 사용가능한 함수 출력
>>> sendp(rdpcap("file.pcap")) // 저장 패킷 재전송

[ 예제 ]
DNS의 헤더 구조를 확인하는 스크립트이다.
#!/usr/bin/python

import sys
from scapy.all import *

packet = UDP(sport=53)/DNS(id=31305, rd=1, qdcount=1, aa=0)
packet.show()
receive = sr(packet, timeout=2)
if receive:
        ans,unans=receive
        ans.summary()

>>> ls(DNS)   // DNS 해더 패킷 정보
id         : ShortField                          = (0)
qr         : BitField (1 bit)                    = (0)
opcode     : BitEnumField (4 bits)               = (0)
aa         : BitField (1 bit)                    = (0)
tc         : BitField (1 bit)                    = (0)
rd         : BitField (1 bit)                    = (1)
ra         : BitField (1 bit)                    = (0)
z          : BitField (1 bit)                    = (0)
ad         : BitField (1 bit)                    = (0)
cd         : BitField (1 bit)                    = (0)
rcode      : BitEnumField (4 bits)               = (0)
qdcount    : DNSRRCountField                     = (None)
ancount    : DNSRRCountField                     = (None)
nscount    : DNSRRCountField                     = (None)
arcount    : DNSRRCountField                     = (None)
qd         : DNSQRField                          = (None)
an         : DNSRRField                          = (None)
ns         : DNSRRField                          = (None)
ar         : DNSRRField                          = (None)

pfsense를 이용한 사내 방화벽 운영(VPN/Suricata/Snort/NTP/DHCP 등... ) 좋은 소프트웨어

pfsense는 오픈소스로 다양한 보안와 네트워크 서비스를 제공한다.
커널은 FreeBSD를 사용한다. BSD계열이 네트워크 처리에 강하니까...ㅎㅎ

1. 패키지 다운로드
아래 사이트에서 다운로드
https://www.pfsense.org/download/

2. 설치(VirsualBox)
설치 과정은 무시하겠다.
iso, usb를 통한 설치를 지원한다.
서버 아키텍처에 맞는 버전을 다운받자.
여기선 주의 사항만 설명하겠다.
VM을 설정하는데 설치 시 저장소에 iso파일이 등록된다.
설치가 완료되면 콘솔화면에서 재부팅을하는데 위 저장소에서 iso파일을 제거하지 않으면 계~~~속
install화면으로 넘어간다.
외부 네트워크 ----> em0 | pfsense | em1 ----> 내부 네트워크
위와 같은 구성으로 설치하기때문에 브릿지 설정과 내부 네트워크 대역을 설정한다.(두개 네트워크)
설치가 끝나고 저장소 iso파일을 제거한 후 부팅하면 위와 같은 화면이 표시된다.
그런데, 문제가있다. WAN --> em0가있는데 LAN --> em1이 없다.
원래는 WAN은 DHCP로 잡고, LAN은 192.168.1.1로 자동 설정되는데,
이 상태에서 웹 접속을 못하여 1) Assign Interfaces를 통하여 VLAN을 em0에 잡았더니 접속이 가능해졌다. 그런데 LAN이없어 졌다. 웹 화면 로그인 후 네트워크 추가가 가능한데, 경고가 나타나면서 다시 끊긴다. 뭔가 문제가있다.
위 그림은 여러가지 패키지를 설치하고 대시보드에 추가한 화면이다.
설치 가능한 패키지 정보를 확인하고 설치할 수 있다. 난 Suricata, Snort, ntop등을 설치했다.
사내에서 ntop을 설치하여 운영하는데 트래픽 관리에 편하다.
Suricata 설정 화면이다. (Suricata는 네트워크를 모니터링하고 알림, 패킷 차단하는 역할을 한다. 침입 탐지/차단으로 사용)
OpenVPN의 Wizards를 통하여 서비스를 구성한 화면이다.
사내에서 OpenVPN을 사용하는데 pfsense는 설치/관리를 편하게 한다.

결론을 말하면 설치 쉽고, 원하는 기능 있고, 관리 편하고 맘에 든다.
외부에서 내부로 연결하는 경로에 설치하면 상용소프트웨어 버금가는 보안 환경을 구축할 수 있을것이라 생각된다.
실제 pfsense를 설치하여 판매하는 장비도 있다.

mitmproxy_ssh를 통한 ssh 패킷 확인하기 리눅스

ssh 통신을 통한 접속시 사용자가 전달하는 암호화 데이터를 확인하는 방법이다.
mitmproxy_ssh는 이름에도잇지만 다음과 같이 동작한다.
사용자 -> mitmproxy_ssh(메시지 확인) -> 서버

1. 패키지 다운로드
git clone https://gitlab.labs.nic.cz/labs/mitmproxy.git
의존성 패키지 설치(경우에 따라...)
pip install twisted
pip install service_identity

2. 설치
# cd mitmproxy
python setup.py build
python setup.py install => ~mitmproxy/build/scripts-2.7 여기에 결과 파일이 생기고 이것이 시스템에 install된다.

3. 인증파일 배포
ssh는 먼저 public 인증 파일을 proxy데몬 실행서버의 사용자 계정과
서버 로그인 대상 사용자의 계정에 존재해야 한다.
# ./mitmkeys 인증 파일 생성
# scp-copy-id -i ~/.mitmkeys/id_rsa.pub userid@domain.com

4. 데몬 실행
# mitmproxy_ssh -p2222 -H domain.com -s
-s옵션은 ID, PW를 텍스트로 보여준다.
2222은 데몬 기본 포트이다.

5. 접속
# ssh localhost -p 2222

[ 에러조치 ]
~mitmproxy/mitmproxy/sshdebug.py
위 파일의 655라인 교체
mpints.append(cnumber.bytes_to_long(
위 파일의 11라인 교체
from Crypto.Util import number as cnumber
조치 후 2번 설치를 다시 실행한다.


mitmproxy를 통한 HTTP/HTTPS 패킷 확인하기 리눅스

mitmproxy를 통한 HTTP/HTTPS 패킷 확인하기

설치순서 : 패키지 설치 -> 실행 -> 클라이언트에 인증서 설치(윈도우10) -> 확인하기
1. yum -y install python3-dev python3-pip libffi-dev libssl-dev => 이런게 필요할 수 있다.
   pip3 install mitmproxy 

2. mitmproxy   
3. 터미널에서 mitmproxy를 실행한 계정의 홈에서 인증키를 가져온다.
   /root/.mitmproxy/
   mitmproxy-ca-cert.cer  mitmproxy-ca-cert.p12  mitmproxy-ca-cert.pem  
   mitmproxy-ca.pem  mitmproxy-dhparam.pem
   
   윈도우에서 필요한 파일은 mitmproxy-ca-cert.pem이다.

4. 윈도우에서 인증키를 등록하자.
   만약 이 과정이 없이 proxy서버에 접속 후 웹사이트를 방문하면 일부 미표시 화면도있고 https에러가 발생한다.
   파일을 가져왔으면 윈도우10 커멘드 화면에서 인증키를 등록하자.
   C:\>certutil.exe -addstore -user -f "Root" mitmproxy-ca-cert.pem
   클라이언트에 따라 http://mitm.it/에서 O/S에 맞는 파일을 설치할 필요가 있다.
   
5. mimproxy를 실행한 서버로 Proxy를 설정하자.

6. 웹접속
   웹접속을하면 mitmproxy실행화면에 트래픽이 보인다.
   h(or tab), i(필터조건 설정), q(중지, 이전 화면으로 이동), ?(help), r(Request재호출), 엔터 등을 이용하여 패킷 정보를 확인할 수 있다.
   
기타.
mitmdump를 통하여 패킷을 저장하고 다시 호출할 수 있다.
mitmdump -w site.txt -p 5555 site.txt -> 호출 저장, proxy포트를 5555로 설정하고 웹호출 
mitmdump -nc site.txt -> 재호출

스트링 변경 방법
mitmproxy --replace :~q:domain.com:m-domain.com

1 2 3 4 5 6 7 8 9 10 다음