시작하기 앞서
1. JDK를 설치한다.
$sudo yum -y install java-1.8.0-openjdk java-1.8.0-openjdk-devel
- 환경변수를 편집한다.
$sudo vim /etc/profile
# 구문 추가
export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.102-1.b14.el7_2.x86_64
export PATH=$PATH:$JAVA_HOME/bin
export CLASSPATH=.:$JAVA_HOME/jre/lib:$JAVA_HOME/lib:$JAVA_HOME/lib/tools.jar
- 환경변수를 등록한다.
$source /etc/profile
elasticsearch
설치
- /etc/yum.repos.d/ 에 아래의 elasticsearch.repo를 추가한다.
[elasticsearch-5.x]
name=Elasticsearch repository for 5.x packages
baseurl=https://artifacts.elastic.co/packages/5.x/yum
gpgcheck=1
gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
enabled=1
autorefresh=1
type=rpm-md
- yum으로 설치한다.
$sudo yum -y install elasticsearch
kibana
설치
elastic 설치와 같이 repo를 추가해주고 yum으로 설치한다.
$sudo vim /etc/yum.repos.d/kibana.repo
[kibana-5.x]
name=Kibana repository for 5.x packages
baseurl=https://artifacts.elastic.co/packages/5.x/yum
gpgcheck=1
gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
enabled=1
autorefresh=1
type=rpm-md
$sudo yum -y install kibana
설정
- 호스트, 이름, SSL(옵션)설정
$sudo vi /etc/kibana/kibana.yml
# 주석해제 후 수정
#서버 호스트 입력
server.host: "127.0.0.1"
server.name: "anything"
#로그가 담긴 elasticsearch 주소 입력
elasticsearch.url: "http://127.0.0.1:9200"
#SSL 설정
#로컬에서만 사용할 것이라면 하지 않아도 된다. 단 외부에서 연결하여 사용할 경우엔 보안상 SSL 설정을 꼭 해주자.
server.ssl.enabled: true
server.ssl.certificate: crt경로
server.ssl.key: key경로
SSL 설정을 해주었을 경우 인증서의 권한을 수정해준다.
$sudo chown kibana. 인증서경로(.crt & .key)
- 방화벽 설정
$sudo firewall-cmd --add-port=5601/tcp --permanent
$sudo firewall-cmd --reload
filebeat
filebeat는 로그 파일들을 모아서 logstash로 보내준다. logstash가 과부하 되었을때 속도를 줄여주고, 시스템 가동이 갑자기 중단되고 다시 시작되었을때, 로그의 중단점을 기억하고 그 지점부터 로그를 보내준다. 이러한 장점들이 있기에 filebeat를 사용하였다.
설치
마찬가지로 repo를 추가하고 yum으로 설치한다.
$sudo /etc/yum.repos.d/elastic.repo
[elastic-5.x]
name=Elastic repository for 5.x packages
baseurl=https://artifacts.elastic.co/packages/5.x/yum
gpgcheck=1
gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
enabled=1
autorefresh=1
type=rpm-md
$sudo yum install -y filebeat
filebeat 설정
filebeat에서 보낼 로그의 경로를 설정한다.
우리는 logstash를 사용하여 로그를 보낼 것이므로 output으로 logstash를 사용한다.
$sudo vim /etc/filebeat/filebeat.yml
filebeat.prospector:
- input_type: log
paths:
#bash 명령어들을 기록한 로그
- /var/log/bash_history
#mysql 로그
- /var/log/mysql/*
#apache2 로그
- /var/log/httpd/*
output.logstash:
hosts: ["127.0.0.1:5044"]
logstash
설치
repo 추가, yum으로 설치한다. 설정은 뒤에 한꺼번에 다룰 것이다.
$sudo vim /etc/yum.repos.d/logstash.repo
[logstash-5.x]
name=Elastic repository for 5.x packages
baseurl=https://artifacts.elastic.co/packages/5.x/yum
gpgcheck=1
gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
enabled=1
autorefresh=1
type=rpm-md
$sudo yum -y install logstash
설정
filebeat로 보내진 로그를 elasticsearch로 보내는 설정을 한다.
기타 다른 beat에서 보내진 로그나 logstash에서 직접 로그를 보낼 수 있다.
sudo vim /etc/logstash/conf.d/filebeat.conf
input {
beats {
port => 5044
host => "0.0.0.0"
}
}
output {
elasticsearch {
hosts => ["http://127.0.0.1:9200"]
index => "%{[@metadata][beat]}-%{+YYYY.MM.dd}"
document_type => "%{[@metadata][type]}"
}
}
로그 설정
로그를 확인하기 앞서, 실습에 필요한 정보를 로깅한다.
bash_history
리눅스에선 history 명령어를 통해 로그인 했던 사용자가 무슨 명령어를 사용했는지 확인 할 수 있다.
logger를 통하여 쉘 명령어를 syslog 기록하도록 설정하자
$sudo vim /etc/profile.d/cmd.sh
function history_to_syslog
{
declare cmd
who=$(whoami)
cmd=$(history 1)
TTY=`tty`
HISNAME="`basename $TTY`"
ip=`who |grep pts/${HISNAME} |cut -f 2 -d \(|cut -f 1 -d \)`
logger -p local7.notice -- IP=$ip USER=$who, PID=$$, PWD=$PWD, CMD=$cmd
}
trap history_to_syslog DEBUG || EXIT
HISTSIZE=10000
HISTFILESIZE=1000000
HISTTIMEFORMAT="%F %T "
export PATH USER LOGNAME MAIL HOSTNAME HISTSIZE HISTFILESIZE HISTTIMEFORMAT INPUTRC
declare -r HISTFILE
#환경변수 등록
$sudo source /etc/profile.d/cmd.sh
syslog 설정
$sudo vim /etc/rsyslog.conf
local7.notice /var/log/bash_history
이제 /var/log/bash_history에 명령어를 입력한 시간, 사용자, 명령어가 기록된다.
apache 2.4.6 log설정
웹에서 서버에 무언가를 전달 할때 get과 post 방식으로 데이터를 보낸다.
get에는 무슨 데이터가 오고 갔는지 url로 알 수 있고, post는 패킷 body에 담아져 보내진다.
apache는 접속 url과 method가 기록되어 get 방식은 무슨 데이터가 전달되어있는지 알 수 있지만 post 방식은 그렇지않다.
따라서 post 방식을 이용하였을때 무슨 데이터가 전달되었는지 body를 로깅할 수 있게 설정해준다.
apache의 모듈 mod_dumpio을 이용한다. 기본적으로 내장되어 있으므로 따로 설치할 필요는 없다.
$sudo vim /etc/httpd/conf.d/ssl.conf
<VirtualHost _default_:443>
~~~
LoadModule dumpio_module modules/mod_dumpio.so
ErrorLog logs/ssl_error_log
TransferLog logs/ssl_access_log
#LogLevel warn
DumpIOInput On
LogLevel dumpio:trace7
그 후 워드프레스 로그인을 해보면 post body의 로그가 ssl_error_log에 남는걸 확인 할 수 있다.
다음은 127.0.0.1/wp-admin에서 로그인시도를 한 기록이다.
id는 105’ OR 1=1, pwd는 00000000을 입력하였다.
[Thu Nov 09 01:00:35.717592 2017] [dumpio:trace7] [pid 27220] mod_dumpio.c(103): [client 127.0.0.1:34232] mod_dumpio: dumpio_in (data-TRANSIENT): log=105%27+OR+1%3D1&pwd=00000000&wp-submit=Log+In&redirect_to=https%3A%2F%2Fexample.com%2Fwp-admin%2F&testcookie=1
kibana에서 로그 확인
- systemd를 통해 elasticsearch,logstash,kibana,filebeat를 실행한다.
이때 시스템이 프리징 걸리는 경우가 있다. 이 경우는 거의 RAM문제 이므로, RAM을 4G이상 주도록 한다.
127.0.0.1:5601에 접속하여 성공적으로 kibana가 실행되었는지 확인한다.
처음에 index pattern이 없다고 나올 것이다. bash에
curl localhost:9200/_cat/indices?v
을 입력하여 elasticsearch에 저장된 index pattern을 확인하고 추가해준다.
filebeat-* 를 추가해 주면 될것이다.
- discover에서 보고싶은 파일의 로그가 있다면 filter를 통해 로그를 추출한다.
이 경우 source is /var/log/httpd/ssl_error_log-20171109와 검색 명령어로 105를 검색한다.
결과가 잘 나온것을 확인할 수 있다.
awstats
awstats는 오픈소스웨어의 로그 분석기이다. 이 툴은 apache log같이 크기가 큰 로그 파일을 빠르게 분석하여 그래픽으로 보여준다.
설치
yum -y install awstats
설정
/usr/share/awstats/tools/awstats_configure.pl 로 설정한다.
$sudo /usr/share/awstats/tools/awstats_configure.pl
도메인 이름에는 example.com을 설정해준다.
그 다음 config파일의 경로를 지정해준다.
/etc/awstats/awstats.example.com.conf
설정이 완료되었으면 config 파일을 수정한다.
$sudo vi /etc/awstats/awstats.example.com.conf
LogFile="/var/log/httpd/access_log"
Lang="ko"
실행
/usr/local/awstats/wwwroot/cgi-bin/awstats.pl -update -config=www.example.com
후
http://www.example.com/awstats/awstats.pl?config=www.example.com
으로 들어가 로그를 확인한다.
'Backend > 리눅스 & 우분투' 카테고리의 다른 글
우분투 설치 후 드라이버 설치 (0) | 2018.07.03 |
---|---|
우분투 한글 설정 (0) | 2018.07.03 |
우분투 설치 (0) | 2018.07.02 |