ufw 방화벽 사용하기
# ufw 사용하기
ufw enable
# ufw 상태 확인
ufw status verbose
방화벽을 사용하면 웹 서버 접속이 불가능해집니다.
특정 서비스만 접속 허용하기
사용할 포트만 방화벽을 열도록 설정해
특정 서비스만 접속하도록 설정할 수 있습니다.
# http 포트만 허용하기
ufw allow http
이제 다시 http 웹 서버에 접속이 가능합니다.
특정 네트워크 대역만 접속 허용하기
먼저 테스트를 위해 허용했던 http 정책을 삭제해 보겠습니다.
ufw delete allow http
ufw status verbose
이제 다시 웹 서버에 접속이 불가능 해졌습니다.
여기서 192.168.5.0/24 대역의 http 서버 접속을 허용하고 싶을 경우 다음과 같이 입력합니다.
ufw allow from 192.168.5.0/24 to any port http
ufw status verbose
이제 192.168.5.0~192.168.5.255 네트워크에서만 http 서버 접속이 가능합니다.
ufw GUI 버전 사용하기
# GUI ufw 설치
apt install gufw
# gufw 실행
gufw
CMD 에서 실행하는 것과 GUI로 실행하는 것 둘 다 같은 내용이므로
서로의 상태가 실시간으로 동일하게 반영됩니다.
편한 것을 사용하면 됩니다.
데이터베이스 사용자 권한 최소화하기
특정 IP대역, 특정 DB만 접속 가능한 계정 생성하기
mySQL)
# 192.168.5.0/24 대역에서만 webhack DB에 로그인 가능한 user0 계정 만들기
grant all privileges on webhack.* to 'user0'@'192.168.5.%' identified by '123456';
# 계정이 잘 생성되었는지 확인
select user,host from mysql.user;
윈도우 CMD)
# 원격 접속이 잘 되는지 확인
mysql -u user0 -h [서버IP] -p
# 사용 가능한 데이터베이스 확인
show databases;
이런 식으로 특정 유저가 접속 가능한 IP대역과
접속 가능한 데이터베이스를 제안함으로써 데이터베이스의 기밀성을 높일 수 있습니다.
데이터베이스 이중화
서버가 DDoS 공격이나 해킹을 당해 장애가 발생할 경우를 대비하여
데이터베이스를 이중화 구성하거나 3대 이상의 서버로 구성되는
클러스터 기능을 활용하여 가용성을 유지하도록 합니다.
Master 서버 설정
# mySQL 환경설정
gedit /etc/mysql/my.cnf
# 마지막에 구문 추가
[mysqld]
server-id=1
log-basename=master
log-bin
binlog-format=row
binlog-do-db=replica_db
# Slave가 Master에 접속하기 위한 환경설정
gedit /etc/mysql/mariadb.conf.d/50-server.cnf
# 15라인부터 주석 해제 및 구문 추가
user = mysql
pid-file = /run/mysqld/mysqld.pid
socket = /run/mysqld/mysqld.sock
basedir = /usr
datadir = /var/lib/mysql
tmpdir = /tmp
lc-messages-dir = /usr/share/mysql
# 28라인 구문 수정
bind-address = [MasterDB IP]
이후 데이터베이스 데몬을 재실행합니다.
# Slave 계정 생성 및 권한 부여
create database replica_db;
grant replication slave on *.* to 'slave'@'%' identified by 'orange';
flush privileges;
flush tables with read lock;
show master status;
정보를 확인한 후, slave에게 File명과 Position 번호를 알려줍시다.
그리고 동기화를 위해서 Master는 DB에서 로그아웃하고,
만일의 사태를 대비하여 DB를 백업해둡니다.
# 마스터 DB 백업
mysqldump -u root -p --all-databases --master-data > backup.sql
Master 서버 데이터베이스의 백업이 잘 된것을 확인하였습니다.
# Slave로 파일 전송
scp backup.sql root@[SLAVE IP]:/root/backup.sql
# DB 접속 후 테이블 잠금 풀기
mysql -u root -p
UNLOCK TABLES;
이제 Master Server는 설정이 완료되었습니다.
Slave 서버 설정
# 호스트 이름을 SLAVE로 설정
hostnamectl set-hostname SLAVE
# mysql 환경설정 파일 수정
gedit /etc/mysql/my.cnf
# 마지막에 구문 추가
[mysqld]
server-id=2
replicate-do-db=replica_db
# 백업파일을 데이터베이스에 삽입
mysql -u root -p < backup.sql
# replica_db가 잘 등록되었는지 확인
mysql -u root -p
show databases;
# 동기화 설정을 위해 SLAVE 서버 멈추기
STOP SLAVE;
# 마스터 서버 설정
CHANGE MASTER TO MASTER_HOST='마스터IP',
MASTER_USER='slave',
MASTER_PASSWORD='orange',
MASTER_LOG_FILE='mysqld-bin.XXXXXXXX',
MASTER_LOG_POS=XXX;
# SLAVE 서버 다시 시작
START SLAVE;
# SLAVE 등록이 잘 되었는지 확인
SHOW SLAVE STATUS\G;
이제 SLAVE 서버 설정이 완료되었습니다.
MASTER의 replica_db에 변동사항이 생기면
SLAVE의 replica_db도 갱신됩니다.