DAY13
DAY13

도메인 세팅

word.st.kr 계정:word
dvwa.st.kr 계정:dvwa
web1.st.kr 계정:web1
web2.st.kr 계정:web2

[SERVER]
NAT(외부연결)
IP(gns 내 연결)

nano /etc/hosts
nano /etc/resolv.conf
nano etc/bind/named.conf.default-zones
nano etc/bind/st.kr.zone
nano etc/apache2/sites-available/hosting.conf
    < VirtualHost *:80>
    DocumentRoot /home/word/public_html
    ServerName word.st.kr
    ServerAdmin word@word.st.kr
    Errorlog /home/word/public_html/logs/error.log
    CustomLog /home/word/public_html/logs/access.log combined
    < /VirtualHost>

a2ensite hosting
(/etc/apache2/sites-available/ 디렉토리에 존재하는 사이트 설정 파일(hosting)을 /etc/apache2/sites-enabled/ 디렉토리에 심볼릭 링크로 연결)

systemctl restart named
systemctl reload apache2

DNS 설정
외부연결 .99
내부연결 .214

711 $HOME
755 ~/public_html


Bootstrap Example

데이터베이스 세팅

word.st.kr 계정:word
dvwa.st.kr 계정:dvwa
web1.st.kr 계정:web1
web2.st.kr 계정:web2

[계정생성]
adduser word

a2enmod userdir
(Apache2에서 사용자별로 웹 디렉토리를 제공)
systemctl restart apache2

su word

mkdir public_html
cd public_html
mkdir includes
mkdir auth
mkdir logs
touch index.html
touch index.php

apt -y install unzip
unzip word.zip

su
mysql

CREATE DATABASE word;
CREATE USER 'word'@'localhost' IDENTIFIED BY '123456';
GRANT ALL PRIVILEGES ON word.* TO 'word'@'localhost';
FLUSH PRIVILEGES;

#외부접속허용(엄청 위험한 행위)
CREATE USER 'word'@'%' IDENTIFIED BY '123456';
GRANT ALL PRIVILEGES ON word.* TO 'word'@'%';
FLUSH PRIVILEGES;

#외부접속허용(본인의 IP만 추가)
CREATE DATABASE word;
CREATE USER 'word'@'192.168.0.214' IDENTIFIED BY '123456';
GRANT ALL PRIVILEGES ON word.* TO 'word'@'192.168.0.214';
FLUSH PRIVILEGES;
Bootstrap Example

word.st.kr 설정

su word
cd /home/public_html
cp wp-config-sample.php wp-config.php
nano wp-config.php
    word/word/123456
=> word.st.kr 가보면 설치하기 누를 수 있음
    st/admin/123456/check/word@word.st.kr/check


Bootstrap Example

dvwa.st.kr 설정

su dvwa
cd /home/public_html
cp config.inc.php.dist config.inc.php
nano config.inc.php
    dvwa/dvwa/123456
=> dvwa.st.kr 가보면 로그인할 수 있음(dvwa/123456)
    빨간 글씨는 설치해야 사용할 수 있음


su
find / -name php.ini
    /etc/php/8.3/fpm/php.ini
nano /etc/php/8.3/fpm/php.ini
    To allow Remote File Inclusion (RF):
    allow_url_fopen = On
    allow_url_include = On
    (http://php.net/allow-url-includes)
    (http://php.net/display-startup-errors)

    To make sure PHP shows all error messages:
    display_errors = On (2번째 Ctrl w)
    display_startup_errors = On


reboot

=> dvwa.st.kr에서 빨간글씨가 초록색 enable로 바뀜
dvwa.st.kr     create /reset database 누르기       재로그인 (admin/password(비밀번호 초기화;시간초과))


Bootstrap Example

모니터링 관제용 서버 SELK 구축

*[아이피] 10.0.2.3
nano /etc/netplan/50-cloud-init.yaml *
network:
   version: 2
   ethernets:
    enp0s3:
     dhcp4: no
     addresses: [10.0.2.3/24] (맘대로)
     gateway4: 10.0.2.2 (utm)
     nameservers:
          addresses: [10.0.2.15] (도메인=네임서버)
sudo netplan apply

*[포트번호]
ssh 22
kibana 5601
elasticsearch 9200
rsyslog 514
(3대 서버로부터 전송된 로그를 분석 및 저장함)

*rsyslog 시스템 구축하기
[selk]
sudo passwd root
nano /etc/hostname
    LOG
nano /etc/rsyslog.conf
    module(load="imtcp")
    input(type="imtcp" port="514")
    $AllowedSender TCP,10.0.2.0/24, *.st.kr
서버는 포트(514)를 열고 3대 서버로부터 데이터가 전송되는 것을 기다림

apt -y install net-tools
netstat -ant | grep 514 (rsyslog 확인)
systemctl restart rsyslog

*로그를 데이터베이스에 저장하기
apt -y install mariadb-server
apt -y install rsyslog-mysql
    yes/123456

mysql
use Syslog;
desc SystemEvents;
select * from SystemEvents;
select FromHost, Message from SystemEvents where FromHost='IP004';

*Rsync 설정
apt -y install rsync

su
nano /etc/rsyncd.conf
    # create new
    # any name you like
    [backup]
    # target directory to copy
    path = /backup
    # hosts you allow to access
    hosts allow = 10.0.2.15
    hosts deny = *
    list = true
    uid = root
    gid = root
    read only = false

systemctl start rsync
systemctl enable rsync

[3server]
rsync -avz --delete --exclude-form=/etc/rsync_exclude.lst /backup log.st.kr::backup
(데이터가 전송되기 때문에 /backup 디렉토리는 저장공간이 많이 필요하다. 따라서 하드디스크를 추가해 준다!)
1. LVM
(3G, 1G vmdk 생성하기)

2. RAID
(2G, 2G vmdk 생성하기)

SELK > 설정> 저장소> 하드디스크 추가> 만들기> vmdk (3g,1g,2g,2g)

완료 후
GNS에 SELK 추가하기


Bootstrap Example

3대 서버에 데이터 백업하기

[3server]
데이터 백업을 위해 cron을 사용해보자!

cd /root (backup 디렉토리 생성)
mkdir backup
ls -al
chmod 777 backup

*경로
server > cd /backup
log > cd /root/backup

su word
cd /home/word
nano backup.sh (backup.sh 생성)
    #!/bin/sh
    set $(date)
    fname="backup-*word*-$1$2$3.tar.gz"
    tar cvzf /backup/$fname /home/word/public_html

chmod 755 backup.sh
chown word:word backup.sh

su word
cd /home/word
./backup.sh (backup.sh 실행)

Bootstrap Example

crontab 설정하기

주기적으로 백업할 내용을 crontab에 지정해둡니다.

nano /etc/crontab (예시)
    10 16    * * *    root    /home/word/backup.sh
    분 시    * * *    소유자    /실행명령

systemctl restart cron


=> ./backup.sh 한 뒤 ls해보면 백업 압축파일이 생성된다.
[3server]
cd backup
ls

rsync -avz --delete --exclude-from=/etc/rsync_exclude.lst /backup log.st.kr::backup

오류 해결
1. 네트워크 설정 점검
[selk]
nano /etc/netplan/50-cloud-init.yaml *

network:
   version: 2
   ethernets:
    enp0s3:
      dhcp4: no
      addresses: [10.0.2.3/24] (맘대로 설정)
      gateway4: 10.0.2.2 (utm ip)
      nameservers:
          addresses: [10.0.2.15] (도메인=네임서버=3server ip)
sudo netplan apply

2. ping 연결 확인
selk > ping 10.0.2.15
3server > ping 10.0.2.3

3. nslookup 확인
nslookup log.st.kr

nano /etc/bind/st.kr.zone
systemctl restart named

4. 스위치 reload하기

5. 백업 경로 확인하기
server > cd /backup
log > cd /root/backup

[selk]
su
cd /root/backup
chmod 777 /backup

6. 포트 873 확인
netstat -ant | grep 873(rsync)


=> 연결된 상태에서 다시 rsync 실행



[3server]
rsync -avz --delete --exclude-from=/etc/rsync_exclude.lst /backup log.st.kr::backup

[selk] nano /etc/rsyncd.conf
    # create new
    # any name you like
    [backup]
    # target directory to copy
    path = /backup
    # hosts you allow to access
    hosts allow = 10.0.2.15
    hosts deny = *
    list = true
    uid = root
    gid = root
    read only =false
[3server]
touch etc/rsync_exclude.lst (rsync_exclude.lst 생성!!)


*rsync를 cron으로 주기적으로 실행해 백업해보자!
/etc/crontab
    00 00    * * *    root    /home/word/backup.sh
    00 04    * * *    root    rsync -avz --delete --exclude-from=/etc/rsync_exclude.lst /backup log.st.kr::backup
systemctl restart cron

ln -sf /usr/share/zoneinfo/Asia/Seoul /etc/localtime (리눅스 시간 동기화pi)