ip a
후 192.168.0.126
같은(enp0s3) HOST와 같은 대역인지 아이피 확인ssh-copy-id -i .ssh/id_rsa root@192.168.0.126
- 공개키 넘기기 ➡ /etc/ssh/sshd_config
파일에서 PasswordAuthentication 을 no로 설정해서 키 인증 방식으로 변경 ➡ systemctl restart sshd
➡ 키인증 방식으로 변경됨.192.168.0.126 (NAT-GW)
➡ 접속 ➡ yum update -y# MariaDB 를 설치하기 위한 저장소 설정
\# vi /etc/yum.repos.d/MariaDB.repo
# /etc/yum.repos.d/MariaDB.repo
[mariadb]
name = MariaDB
baseurl = http://yum.mariadb.org/10.4/centos7-amd64
gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
gpgcheck=1
# repo 설정한 MariaDB 패키지 설치
\# yum install -y MariaDB
# MariaDB 패키지 설치 확인
\# rpm -qa | grep MariaDB
\# mariadb --version # mariadb 버전 확인
\# systemctl enable --now mariadb
# 초기 root password 정의, 보안 관련 부분 세팅
\# mysql_secure_installation
---------------------------------------------------
Enter
Y
Y
password 8자 이상
Y 익명 사용자 제거하겠냐?
y root계정? 관련 원격 허용 하겠냐? 로컬은 허용하나 원격은 안된다.
y 테스트 데이터 베이스 제거할래?
y 권한 테이블 다시 불러올래? privilege
NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MariaDB
SERVERS IN PRODUCTION USE! PLEASE READ EACH STEP CAREFULLY!
In order to log into MariaDB to secure it, we'll need the current
password for the root user. If you've just installed MariaDB, and
haven't set the root password yet, you should just press enter here.
Enter current password for root (enter for none):
OK, successfully used password, moving on...
Setting the root password or using the unix_socket ensures that nobody
can log into the MariaDB root user without the proper authorisation.
You already have your root account protected, so you can safely answer 'n'.
Switch to unix_socket authentication [Y/n] y
Enabled successfully!
Reloading privilege tables..
... Success!
You already have your root account protected, so you can safely answer 'n'.
Change the root password? [Y/n] y
New password:
Re-enter new password:
Password updated successfully!
Reloading privilege tables..
... Success!
By default, a MariaDB installation has an anonymous user, allowing anyone
to log into MariaDB without having to have a user account created for
them. This is intended only for testing, and to make the installation
go a bit smoother. You should remove them before moving into a
production environment.
# 익명 사용자 제거하겠냐?
Remove anonymous users? [Y/n] y
... Success!
Normally, root should only be allowed to connect from 'localhost'. This
ensures that someone cannot guess at the root password from the network.
# root계정? 관련 원격 허용 하겠냐? 로컬은 허용하나 원격은 안된다.
Disallow root login remotely? [Y/n] y
... Success!
By default, MariaDB comes with a database named 'test' that anyone can
access. This is also intended only for testing, and should be removed
before moving into a production environment.
# 테스트 데이터 베이스 제거할래?
Remove test database and access to it? [Y/n] y
- Dropping test database...
... Success!
- Removing privileges on test database...
... Success!
Reloading the privilege tables will ensure that all changes made so far
will take effect immediately.
# 권한 테이블 다시 불러올래? privilege
Reload privilege tables now? [Y/n] y
... Success!
Cleaning up...
All done! If you've completed all of the above steps, your MariaDB
installation should now be secure.
Thanks for using MariaDB!
---------------------------------------------------
\# systemctl restart mariadb
\# ss -ant # 3306 포트 확인하기
\# mysql -u root -p
> CREATE USER 'kosa'@'%' IDENTIFIED BY 'kosa0220';
> CREATE DATABASE IF NOT EXISTS wordpress;
\> GRANT ALL PRIVILEGES ON wordpress.* TO 'kosa'@'%';
quit
#firewall-cmd --permanent --add-port=3306/tcp
\# firewall-cmd --permanent --add-service=mysql
\# firewall-cmd --reload
\# yum install mysql -y
\# mysql -h 192.168.56.120 -u kosa -p
$ sudo apt update
$ sudo apt install -y mysql-client
$ mysql -V
$ mysql -h ns.bakjisu.shop -u kosa -p
\# yum install -y mariadb-server
\# systemctl enable --now mariadb
# root Password 정의
\# mysql_secure_installation
ggdG
# hostname 변경
\# hostnamectl set-hostname nat
\# vi /etc/sysconfig/network-scripts/ifcfg-enp0s3
# 네트워크 매니저는 네트워크의 기능이다.
# CentOS 7 까지는 둘다 있는데 CentOS 8,9는 네트워크 매니저만 존재한다.
# ggdG: 전체 라인 지우기
## /etc/sysconfig/network-scripts/ifcfg-enp0s3
TYPE=Ethernet
BOOTPROTO=none # dhcp 유동, none 수동/고정
NAME=enp0s3
DEVICE=enp0s3
ONBOOT=yes
IPADDR=192.168.0.126 # 본인의 IP로 변경
NETMASK=255.255.255.0 # IP에 .../24 줄 수 있으나 마스크 설정
GATEWAY=192.168.0.1
DNS1=8.8.8.8
DNS2=8.8.4.4
\# vi /etc/sysconfig/network-scripts/ifcfg-enp0s8
# 자기 자신이 게이트웨이라 게이트웨이 설정이 없다.
## /etc/sysconfig/network-scripts/ifcfg-enp0s8
TYPE=Ethernet
BOOTPROTO=none
NAME=enp0s8
DEVICE=enp0s8
ONBOOT=yes
IPADDR=172.31.0.1
NETMASK=255.255.255.0
# network 기능을 가지고 세팅 했기 때문에 network 서비스를 재시작(네트워크 매니저 X)
\# systemctl restart network
# enp0s8의 ip가 172.31.0.1 로 설정된 것을 볼 수 있다.
\# ip a
# 방화벽 데몬의 상태 확인 (구. iptables)
# 방화벽이지만 CentOS에서 NAT와 Port Forward의 기능을 수행
\# systemctl status firewalld
\# firewall-cmd --get-active-zone
#----------------------------------
public
interfaces: enp0s3 enp0s8
#----------------------------------
--- 방화벽 설정으로 LAN 내부와 외부 나누기 ---
# connection.zone 존을 각각 외부/내부로 나누겠다.
\# nmcli c mod enp0s3 connection.zone external
\# nmcli c mod enp0s8 connection.zone internal
# 변경 확인
\# firewall-cmd --get-active-zone
#-------------------------------------------
internal
interfaces: enp0s8
external
interfaces: enp0s3
#-------------------------------------------
\# setenforce 0 # 임시종료 SELinux
# SELinux 비활성화 enforcing ➡ disbled
\# vi /etc/sysconfig/selinux
# ip_forward: ip 전달 ➡ 라우팅!
\# sysctl -w net.ipv4.ip_forward=1 # 리눅스 시스템을 라우터로 만드는 셋팅
--- 출력 net.ipv4.ip_forward=1
\# sysctl -p # 설정 저장
\# cat /proc/sys/net/ipv4/ip_forward
#----------------------------------
1
#----------------------------------
sysctl
명령으로 수행시 재부팅하면 변경이 취소되는 경우가 있음.\# vi /etc/sysctl.conf
-----------------------------------------
net.ipv4.ip_forward=1
-----------------------------------------
# 재부팅 풀리는지 아닌지 확인
reboot
# cat /proc/sys/net/ipv4/ip_forward
172.31.0.101
으로 보내라\# firewall-cmd --permanent --zone=external --add-forward-port=port=139:proto=tcp:toport=139:toaddr=172.31.0.101
\# firewall-cmd --permanent --zone=external --add-forward-port=port=445:proto=tcp:toport=445:toaddr=172.31.0.101
\# firewall-cmd --reload
\# yum install dhcp -y
\# vi /etc/dhcp/dhcpd.conf
-------------------------------------------------
# /etc/dhcp/dhcpd.conf 수정
# 네임서버의 동적 업데이트, 요즘에는 많이 쓰지 않음.
# 동적으로 DNS 서버를 이용할 때 설정
ddns-update-style interim;
subnet 172.31.0.0 netmask 255.255.255.0 { # 서버의 마스크
# = 172.31.0.0/24 # 172, 31, 0 세자리 고정이라는 의미
option routers 172.31.0.1; # 내부 VM 들이 통해야할 라우터, 즉 NAT-GW 를 설정
option subnet-mask 255.255.255.0; # 클라이언트들이 알게될 마스크
# 1~254 번, 즉 253개중에서 100번~110번 까지만 사용하겠다.
range dynamic-bootp 172.31.0.100 172.31.0.110; # 범위 설정
# 클라이언트들에게 알려줄 도메인 서버, 일단 아래꺼만 나중에 DNS 설정후 아래꺼처럼 DNS 설정
option domain-name-servers 8.8.8.8, 8.8.4.4;
# option domain-name-servers 172.31.0.102, 8.8.8.8, 8.8.4.4;
# lease 임대
# 할당된 ip를 2시간 동안 안쓴다면 회수
# 최대 12시간 동안 임대
default-lease-time 7200;
max-lease-time 86400;
}
-------------------------------------------------
\# systemctl enable --now dhcpd
# SAMBA의 139(NetBIOS), 445(SMB) 포트
\# firewall-cmd --permanent --zone=external --add-forward-port=port=139:proto=tcp:toport=139:toaddr=172.31.0.100
\# firewall-cmd --permanent --zone=external --add-forward-port=port=445:proto=tcp:toport=445:toaddr=172.31.0.100
# WEB01의 SSH 포트
\# firewall-cmd --permanent --zone=external --add-forward-port=port=2201:proto=tcp:toport=22:toaddr=172.31.0.100
# WEB02의 SSH 포트
\# firewall-cmd --permanent --zone=external --add-forward-port=port=2202:proto=tcp:toport=22:toaddr=172.31.0.101
# DB의 SSH 포트
\# firewall-cmd --permanent --zone=external --add-forward-port=port=2203:proto=tcp:toport=22:toaddr=172.31.0.102
\# firewall-cmd --reload
# WEB01, WEB02 HTTP 포트
\# firewall-cmd --permanent --zone=external --add-forward-port=port=8001:proto=tcp:toport=80:toaddr=172.31.0.100
\# firewall-cmd --permanent --zone=external --add-forward-port=port=8002:proto=tcp:toport=80:toaddr=172.31.0.101
\# firewall-cmd --reload
nat-gw는 445, 139 포트 사용하지 않음. (즉, 포트 사용 가능, 포트포워딩 ⭕)
host win10를 이용했을 때는 win10이 445, 139를 이미 이용하기 때문에 포트 충돌
- netstat -a
: net-네트워크, stat-상태, a-ALL
WEB01 SSH 설정
hostnamectl set-hostname web01; exit
(로그아웃) ➡ 로그인포워드 정보 확인
firewall-cmd --list-all --zone=external
--zone=external
: 외부 옵션포워드 정보 지우는 방법
remove
\# firewall-cmd --permanent --zone=external --remove-forward-port=port=139:proto=tcp:toport=139:toaddr=172.31.0.100
\# firewall-cmd --permanent --zone=external --remove-forward-port=port=445:proto=tcp:toport=445:toaddr=172.31.0.100
# WEB01의 SSH 포트
\# firewall-cmd --permanent --zone=external --remove-forward-port=port=2201:proto=tcp:toport=22:toaddr=172.31.0.100
# WEB02의 SSH 포트
\# firewall-cmd --permanent --zone=external --remove-forward-port=port=2202:proto=tcp:toport=22:toaddr=172.31.0.101
# DB의 SSH 포트
\# firewall-cmd --permanent --zone=external --remove-forward-port=port=2203:proto=tcp:toport=22:toaddr=172.31.0.102
# WEB01, WEB02 HTTP 포트
\# firewall-cmd --permanent --zone=external --remove-forward-port=port=8001:proto=tcp:toport=80:toaddr=172.31.0.100
\# firewall-cmd --permanent --zone=external --remove-forward-port=port=8002:proto=tcp:toport=80:toaddr=172.31.0.101
\# firewall-cmd --reload
\# cp authorized_keys authorized_keys.pub
\# ssh-copy-id -i authorized_keys.pub root@172.31.0.101
\# chmod 400 my-key.pem
\# ssh -i my-key.pem root@172.31.0.101
192.168.0.85:221 -> 172.31.0.101:22(WEB01)
192.168.0.85:222 -> 172.31.0.100:22(WEB02)
192.168.0.85:223 -> 172.31.0.102:22(DNS)
ssh -i my-key.pem root@192.168.0.85
ssh -p 221 -i my-key.pem root@192.168.0.85
ssh -p 222 -i my-key.pem root@192.168.0.85
ssh -p 223 -i my-key.pem root@192.168.0.85
@@ 포트포워딩
# firewall-cmd --permanent --zone=external --add-forward-port=port=221:proto=tcp:toport=22:toaddr=172.31.0.101
# firewall-cmd --permanent --zone=external --add-forward-port=port=222:proto=tcp:toport=22:toaddr=172.31.0.100
# firewall-cmd --permanent --zone=external --add-forward-port=port=223:proto=tcp:toport=22:toaddr=172.31.0.102
# firewall-cmd --reload
# firewall-cmd --list-all --zone=external
# bind - "버클리 인터넷 네임 도메인"을 의미
\# yum -y install bind bind-chroot bind-utils
# 보통 NS라 부르기 때문에 hostname을 DNS ➡ NS로 변경
hostnamectl set-hostname ns; exit
cp /etc/named.conf /etc/named.conf.bak
ggdG
\# vi /etc/named.conf
----------------------------------------------------------
options {
# ❗ 53번 포트 : DNS 포트, 포트번호를 바꿀수는 있으나 거의 바꾸지 않음.
# { ... } 접근에 관한 IP 대역 설정, 끝에 .0 을 생략할 수도 있다.
# 본인 : 127.0.0.1
# 192.168.0.0/24 강의실
# 172.31.0/24 WIN 10 VM 안의 내부망(NAT-GW)
# 접근제어 : listen-on port 53
listen-on port 53 { 127.0.0.1; 192.168.0/24; 172.31.0/24; };
listen-on-v6 port 53 { ::1; };
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";
recursing-file "/var/named/data/named.recursing";
secroots-file "/var/named/data/named.secroots";
# ip를 묻는 작업을 허용할 것이냐?
# ❗ 서비스를 제공할 IP 대역인지 확인? 위에 설정은 접근에 관한 대역 설정
allow-query { localhost; 192.168.0/24; 172.31.0/24; };
# 내부 도메인에 대한 정보를 가지고 있을 것?
# ❗ forwarders: 외부로 나가는 것은 어떤 외부의 DNS로 물어볼지 설정
# 내가만든 DNS를 내부 DNS 서비스를 할 때 외부 인터넷으로 나가야하는 도메인은 어디에다가 물어봐야하냐?
# 그래서 구글 DNS 을 적음... (KT, SKT, LGU+, ... 될 수 있다.)
forwarders { 8.8.8.8; 8.8.4.4; };
recursion yes;
dnssec-enable yes;
dnssec-validation yes;
/* Path to ISC DLV key */
bindkeys-file "/etc/named.iscdlv.key";
managed-keys-directory "/var/named/dynamic";
pid-file "/run/named/named.pid";
session-keyfile "/run/named/session.key";
};
logging {
channel default_debug {
file "data/named.run";
severity dynamic;
};
};
# 내부 DNS 서비스를 하려고 할때 호스팅 하려는 도메인 정보 설정
view "internal" {
zone "." IN {
type hint;
file "named.ca";
};
include "/etc/named.rfc1912.zones";
# `bakjisu.shop.zones`이 이 경로에 있다라고 정의
# Route 53에서는 호스팅 영역이라고 한다.
include "/var/named/bakjisu.shop.zones"; # 호스팅 영역 생성
};
----------------------------------------------------------
\# vi /var/named/bakjisu.shop.zones
----------------------------------------------------------
## 도메인 ➡ IP - 정방향에 대한 정보
zone "bakjisu.shop" IN {
# type master - 도메인의 서버가 여럿일때 대표(master)가 누구인지 설정
# master / slave : master가 죽으면 slave 중 하나가 그 역할을 대신
# 그럼 클러스터를 구성하는가?
type master;
# 도메인 레코드 관련 구성 정보 파일
file "bakjisu.shop.db";
# allow-update: IP 계속 바뀐다면? 주기적으로 확인하여 변경
# DDNS의 기능을 할 때
allow-update { none; };
};
## 도메인 ⬅ IP역방향 정보
zone "0.31.172.in-addr.arpa" IN {
type master;
file "0.31.172.in-addr.arpa.db";
allow-update { none; };
};
----------------------------------------------------------
\# vi /var/named/bakjisu.shop.db
----------------------------------------------------------
# TTL: Time-To-Live
# 캐쉬정보를 86400 초 동안 가지고 있다가 re-fresh (24시간)
# TTL이 작아서 빈번하다면 정확도 ⬆ 비용 ⬆
$TTL 86400
@ IN SOA bakjisu.shop. root.bakjisu.shop.(
2022041401 ; Serial
3h ; Refresh
1h ; Retry
1w ; Expire
1h ) ; Minimum
IN NS ns.bakjisu.shop.
IN MX 10 ns.bakjisu.shop.
# ❗ A: 도메인을 IP로 바꿔주는 부분
# ns/web01/web02 - 서브 도메인
ns IN A 172.31.0.102
web01 IN A 172.31.0.100
web02 IN A 172.31.0.101
----------------------------------------------------------
* IP LIST | IP |
---|---|
WEB01_SAMBA | 172.31.0.100 |
WEB02_NFS | 172.31.0.101 |
DNS_DATABASE | 172.31.0.102 |
# IP가 역순이다
\# vi /var/named/0.31.172.in-addr.arpa.db
----------------------------------------------------------
$TTL 86400
@ IN SOA bakjisu.shop. root.bakjisu.shop.(
2022041401 ; Serial
3h ; Refresh
1h ; Retry
1w ; Expire
1h ) ; Minimum
# 102: DNS 172.31.0.102 의 맨 마지막
# PTR: IP 주소 ➡ 호스트 이름(도메인)
# 리버스 도메인시 사용하는 레코드
IN NS ns.bakjisu.shop.
102 IN PTR ns.bakjisu.shop.
----------------------------------------------------------
\# systemctl start named && systemctl enable named
\# systemctl enable --now named
NAT-GW 가서 vi /etc/dhcp/dhcpd.conf 에 172.31.0.102 추가
이후 dhcp 데몬 재시작
systemctl restart dhcpd
방화벽 규칙 허용 (NS HOST)
\# firewall-cmd --permanent --add-service=dns
\# firewall-cmd --reload
\# systemctl restart NetworkManager
\# vi /etc/sysconfig/network-scripts/ifcfg-enp0s3
$ sudo systemctl restart networking
ipconfig /renew
vi /etc/sysconfig/network-scripts/ifcfg-enp0s3 |
---|
\# cat /etc/resolv.conf
\# ping web01.bakjisu.shop
레코드 | 설명 | 예시 |
---|---|---|
❗ SOA | 1. 마스터/슬레이브 | |
2. 다루는 도메인 버전과 업데이트 시간 간격 등의 정보를 저장하는 레코드 | ||
❗❗ A | 1. 도메인 ➡ IP (변환) | 예: 호스트 ns.bakjisu.shop의 IPv4 주소는 172.31.0.130 |
2. 호스트 이름으로 IPv4 주소를 조회할 때 사용하는 레코드 | ||
AAAA | 1. 호스트 이름으로 IPv6 주소를 조회할 때 사용하는 레코드 | jprs.jp의 IPv6 주소는 2001:218:3001:7::80 |
PTR | 1. IP 주소로 호스트 이름을 조회할 때 사용하는 레코드 | 예: 172.31.0.130의 호스트 이름은 ns.bakjisu.shop |
2. 리버스 도메인시 사용하는 레코드 | ||
❗ NS | 1. 끝에 꼭 "." 을 붙여야한다. | ex) ns. |
2. DNS 서버의 호스트 이름 혹은 IP 주소를 저장하는 레코드 | 예: bakjisu.shop의 DNS 서버는 ns.bakjisu.shop | |
❗ MX | 1. 메일 익스체인지. | 예: bakjisu.shop의 메일 서버는 mail.bakjisu.shop |
2. 메일 서버 호스트 이름 혹은 IP 주소를 저장하는 레코드 | ||
❗❗ CNAME | 1. 도메인 ↔ 도메인 | 예: www.bakjisu.shop은 ns.bakjisu.shop의 별칭(alias) |
2. 호스트 이름의 별칭을 저장하는 레코드 |
# 도메인 서버의 내용 확인
cat /etc/resolv.conf
# web01에 설치
yum install -y bind-utils
dig A web01.bakjisu.shop # 도메인에 대한 정보가 나온다.
/*
; <<>> DiG 9.11.4-P2-RedHat-9.11.4-26.P2.el7_9.13 <<>> A web01.bakjisu.shop
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 16956
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 2
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;web01.bakjisu.shop. IN A
;; ANSWER SECTION:
web01.bakjisu.shop. 86400 IN A 172.31.0.100
;; AUTHORITY SECTION:
bakjisu.shop. 86400 IN NS ns.bakjisu.shop.
;; ADDITIONAL SECTION:
ns.bakjisu.shop. 86400 IN A 172.31.0.102
;; Query time: 0 msec
;; SERVER: 172.31.0.102#53(172.31.0.102)
;; WHEN: Fri Mar 03 11:27:01 JST 2023
;; MSG SIZE rcvd: 96
*/
# IP 에 따른 도메인 확인
dig -x 172.31.0.102 # 100 하면 역도메인 확인 불가
/*
; <<>> DiG 9.11.4-P2-RedHat-9.11.4-26.P2.el7_9.13 <<>> -x 172.31.0.102
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 632
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 2
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;102.0.31.172.in-addr.arpa. IN PTR
;; ANSWER SECTION:
102.0.31.172.in-addr.arpa. 86400 IN PTR ns.bakjisu.shop.
;; AUTHORITY SECTION:
0.31.172.in-addr.arpa. 86400 IN NS ns.bakjisu.shop.
;; ADDITIONAL SECTION:
ns.bakjisu.shop. 86400 IN A 172.31.0.102
;; Query time: 0 msec
;; SERVER: 172.31.0.102#53(172.31.0.102)
;; WHEN: Fri Mar 03 11:28:37 JST 2023
;; MSG SIZE rcvd: 113
*/
\# yum install -y haproxy
\# vi /etc/haproxy/haproxy.cfg
----------------------------------------------------------
# global: 전사적으로
# daemon: 백그라운드 실행
global
daemon
# 프로토콜 TCP/HTTP
# "http 기반으로 부하 분산을 수행하겠다" 설정
defaults
mode http
# 엔드 유저 접속
# frontend http-in : 프론트-엔드 이름을 'http-in' 으로 하겠다.
# bind *:80 : '묶다'는 의미(접근), 어떤 아이피(호스트)든 80 포트로 들어오는 트래픽을 받겠다.
frontend http-in
bind *:80
acl firefox hdr_sub(User-Agent) Firefox
acl chrome hdr_sub(User-Agent) Chrome
default_backend backend_servers
use_backend bk_firefox if firefox
use_backend bk_chrome if chrome
# 서버를 그룹으로 묶어서 우리는 2개 web03(X)
backend backend_servers
balance roundrobin
# cookie SVID insert indirect nocache maxlife 10s
server web01 172.31.0.100:80 cookie w1 check
server web02 172.31.0.101:80 cookie w2 check
# server web03 172.31.0.103:80 cookie w3 check
backend bk_firefox
server web01 172.31.0.100:80
backend bk_chrome
server web02 172.31.0.101:80
----------------------------------------------------------
포트 열린 것 확인
\# firewall-cmd --list-all --zone=external
haproxy 활성화
\# systemctl enable --now haproxy
NAT-GW 방화벽 수정하기
# 192.168.0.126, NAT-GW의 80번포트 접속시, 안됨...
\# ss -ant # *:80 포트 번호 확인됨
# NAT-GW 방화벽 허용이 안되어 있어 규칙 설정
# 💥 NAT-GW는 내부/외부 구분되어있어서 외부라고 꼭 넣어주기 💥
\# firewall-cmd --permanent --add-port=80/tcp --zone=external
\# firewall-cmd --reload
# 192.168.0.126 접속!
vi /etc/exports
: /share 172.31.0.0/24(rw,sync)vi /etc/fstab
\# firewall-cmd --permanent --zone=external --remove-forward-port=port=139:proto=tcp:toport=139:toaddr=172.31.0.100
\# firewall-cmd --permanent --zone=external --remove-forward-port=port=445:proto=tcp:toport=445:toaddr=172.31.0.100
\# firewall-cmd --reload
frontend http-in
bind *:80
...
backend backend_servers
# 부하처리 방식: roundrobin 알고리즘 이용(순차)
balance roundrobin
# cookie SVID insert indirect nocache maxlife 10s
server web01 172.31.0.100:80 cookie w1 check
server web02 172.31.0.101:80 cookie w2 check
...
# 트래픽을 분석해서 firefox 이름 정의
# hdr_sub(User-Agent) Firefox 이 조건이 맞으면
# firefox에 집어넣기
acl firefox hdr_sub(User-Agent) Firefox
acl chrome hdr_sub(User-Agent) Chrome
# 사파리나 IE 이면 default_backend로 가라
default_backend backend_servers
# 조건이 맞으면 bk_firefox 로 가라
use_backend bk_firefox if firefox
use_backend bk_chrome if chrome
...
backend bk_firefox
server web01 172.31.0.100:80
backend bk_chrome
server web02 172.31.0.101:80