이번주 리뷰
VM 네트워크 구성
내부/외부 IP
KeyPair 생성
C:\Windows\system32>ssh root@192.168.0.92
# mkdir /root/.ssh
# exit
C:\Windows\system32>ssh-keygen -t rsa
KeyPair 복사
C:\Windows\system32>cd %UserProfile%\.ssh
C:\Users\r2com\.ssh>
C:\Users\r2com\.ssh>scp id_rsa.pub root@192.168.0.92:/root/.ssh/authorized_keys
C:\Users\r2com\.ssh>ren id_rsa my-key.pem
ren
: 이름 변경KeyPair로만 접근
C:\Users\r2com\.ssh>ssh -i my-key.pem root@192.168.0.92
# vi /etc/ssh/sshd_config
PasswordAuthentication no로 변경
# systemctl restart sshd
selinux 설정 변경
# vi /etc/sysconfig/selinux
SELINUX=disabled로 변경
# setenforce 0
# sestatus
Current mode: permissive
Mode from config file: disabled
hostname 변경
# hostnamectl set-hostname nat
네트워크 설정 변경
# cp /etc/sysconfig/network-scripts/ifcfg-enp0s3 /etc/sysconfig/network-scripts/ifcfg-enp0s3.bak
# vi /etc/sysconfig/network-scripts/ifcfg-enp0s3
TYPE=Ethernet
BOOTPROTO=none
NAME=enp0s3
DEVICE=enp0s3
ONBOOT=yes
IPADDR=192.168.0.92
NETMASK=255.255.255.0
GATEWAY=192.168.0.1
DNS1=8.8.8.8
DNS2=8.8.4.4
# vi /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
# systemctl restart network
랜카드 존 나누기
# firewall-cmd --get-active-zone
public
interfaces: enp0s3 enp0s8
# 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
IP 포워드
# sysctl -w net.ipv4.ip_forward=1
net.ipv4.ip_forward = 1
# sysctl -p
# cat /proc/sys/net/ipv4/ip_forward
1
DHCP 설치 및 설정
# yum install dhcp -y
# vi /etc/dhcp/dhcpd.conf
ddns-update-style interim;
subnet 172.31.0.0 netmask 255.255.255.0 {
option routers 172.31.0.1;
option subnet-mask 255.255.255.0;
range dynamic-bootp 172.31.0.100 172.31.0.110;
option domain-name-servers 8.8.8.8, 8.8.4.4;
default-lease-time 7200;
max-lease-time 86400;
}
# systemctl enable --now dhcpd
VM IP 목록
지금부터 mobaxterm 이용
포트포워드
# firewall-cmd --permanent --zone=external --add-forward-port=port=221:proto=tcp:toport=22:toaddr=172.31.0.100
# firewall-cmd --permanent --zone=external --add-forward-port=port=222:proto=tcp:toport=22:toaddr=172.31.0.101
# 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
external (active)
forward-ports: port=221:proto=tcp:toport=22:toaddr=172.31.0.100
port=222:proto=tcp:toport=22:toaddr=172.31.0.101
port=223:proto=tcp:toport=22:toaddr=172.31.0.102
Key 전송
# cp authorized_keys authorized_keys.pub
# ssh-copy-id -i authorized_keys.pub root@172.31.0.100
# ssh-copy-id -i authorized_keys.pub root@172.31.0.101
# ssh-copy-id -i authorized_keys.pub root@172.31.0.102
scp
: 모든 파일 전송ssh-copy-id
: 키 전송 전용bind 설치
# yum -y install bind bind-chroot bind-utils
DNS 환경설정
named.conf
: DNS bind (데몬명 named)의 메인 설정 파일# vi /etc/named.conf /* ggdG : 전체 삭제
options {
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";
allow-query { localhost; 192.168.0/24; 172.31.0/24; };
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;
};
};
view "internal" {
zone "." IN {
type hint;
file "named.ca";
};
include "/etc/named.rfc1912.zones";
include "/var/named/xeomina.shop.zones"; # 호스팅 영역 생성
};
zone 설정
# vi /var/named/xeomina.shop.zones
zone "xeomina.shop" IN {
type master;
file "xeomina.shop.db";
allow-update { none; };
};
zone "0.31.172.in-addr.arpa" IN {
type master;
file "0.31.172.in-addr.arpa.db";
allow-update { none; };
};
db 설정
# vi /var/named/xeomina.shop.db
$TTL 86400
@ IN SOA xeomina.shop. root.xeomina.shop.(
2022041501 ; Serial
3h ; Refresh
1h ; Retry
1w ; Expire
1h ) ; Minimum
IN NS ns.xeomina.shop.
IN MX 10 ns.xeomina.shop.
ns IN A 172.31.0.102
web01 IN A 172.31.0.100
web02 IN A 172.31.0.101
# vi /var/named/0.31.172.in-addr.arpa.db
$TTL 86400
@ IN SOA xeomina.shop. root.xeomina.shop.(
2022041501 ; Serial
3h ; Refresh
1h ; Retry
1w ; Expire
1h ) ; Minimum
IN NS ns.xeomina.shop.
102 IN PTR ns.xeomina.shop. /*NS의 IP 끝자리
# systemctl enable --now named
방화벽 설정
# firewall-cmd --permanent --add-service=dns
# firewall-cmd --reload
# firewall-cmd --list-all
services: dhcpv6-client dns ssh
도메인 네임 서버 추가
# vi /etc/dhcp/dhcpd.conf
option domain-name-servers 172.31.0.102, 8.8.8.8, 8.8.4.4; /*NS IP 추가
# systemctl restart dhcpd
DNS 설정 변경
# cat /etc/resolv.conf
# Generated by NetworkManager
nameserver 8.8.8.8
nameserver 8.8.4.4
# vi /etc/sysconfig/network-scripts/ifcfg-enp0s3
DNS1=172.31.0.102 로 변경
# systemctl restart network
# cat /etc/resolv.conf
# Generated by NetworkManager
nameserver 172.31.0.102
nameserver 8.8.4.4
# systemctl restart NetworkManager
# cat /etc/resolv.conf
# Generated by NetworkManager
nameserver 172.31.0.102
nameserver 8.8.8.8
nameserver 8.8.4.4
# setenforce 0
# vi /etc/sysconfig/selinux
SELINUX=disabled로 변경
Ping 확인
haproxy 설치
# yum install -y haproxy
haproxy 설정 변경
# vi /etc/haproxy/haproxy.cfg
global
daemon
defaults
mode http
frontend http-in
bind *:80
default_backend backend_servers
backend backend_servers
balance roundrobin
# cookie SVID insert indirect nocache maxlife 3m /* 고정세션(stickness)
server web01 172.31.0.100:80 cookie check
server web02 172.31.0.101:80 cookie check
haproxy 실행
# systemctl enable --now haproxy
httpd 설치 및 실행
# yum install -y httpd
# systemctl enable --now httpd
방화벽 설정
# firewall-cmd --permanent --add-service=http
# firewall-cmd --reload
/var/www/html/images 생성
# cd /var/www/html
# mkdir images && cd $_
wget 설치
# yum install -y wget
WebShare에서 이미지 다운로드
# wget http://192.168.0.26/FILES/two-rabbit.jpg
index.html 꾸미기
# vi index.html
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Sample Deployment</title>
<style>
body {
color: #ffffff;
background-color: #0188cc;
font-family: Arial, sans-serif;
font-size: 14px;
}
h1 {
font-size: 500%;
font-weight: normal;
margin-bottom: 0;
}
h2 {
font-size: 200%;
font-weight: normal;
margin-bottom: 0;
}
</style>
</head>
<body>
<div align="center">
<h1>Congratulations</h1>
<h2>This application was deployed using AWS ECS, EKS.</h2>
<p>For next steps, read the <a href="https://aws.amazon.com/ko">AWS Management Console.</a></p>
<p><img src="images/two-rabbit.jpg" alt="두마리 토끼" height="350"></p>
</div>
</body>
</html>
html 확인
# curl 127.0.0.1
외부 방화벽 확인
# firewall-cmd --list-all --zone=external
external (active)
services: ssh
forward-ports: port=221:proto=tcp:toport=22:toaddr=172.31.0.100
port=222:proto=tcp:toport=22:toaddr=172.31.0.101
port=223:proto=tcp:toport=22:toaddr=172.31.0.102
외부 방화벽 설정
# firewall-cmd --permanent --zone=external --add-service=http
# firewall-cmd --reload
# firewall-cmd --list-all --zone=external
samba 설치
# yum install -y samba
공유 폴더 생성 및 권한 설정
# mkdir -p /var/samba/share
# chmod 777 /var/samba/share
리눅스 사용자 생성
# adduser kosa
# passwd kosa
kosa0401
samba 사용자 생성
# smbpasswd -a kosa
kosa0401
samba 설정 변경
# vi /etc/samba/smb.conf
[global]
workgroup = 네트워크2로 변경
[share] /*추가
comment = Share Directory
path = /var/samba/share
browserable = yes
writable = yes
valid users = kosa
create mask = 0777
directory mask = 0777
smb/nmb 실행
# systemctl enable --now smb
# systemctl enable --now nmb
방화벽 설정
# firewall-cmd --permanent --add-service=samba
# firewall-cmd --reload
samba 포트 확인
# ss -ant
포트포워드
# 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
# firewall-cmd --reload
포트 확인
# firewall-cmd --list-all --zone=external
external (active)
forward-ports: port=221:proto=tcp:toport=22:toaddr=172.31.0.100
port=222:proto=tcp:toport=22:toaddr=172.31.0.101
port=223:proto=tcp:toport=22:toaddr=172.31.0.102
port=139:proto=tcp:toport=139:toaddr=172.31.0.100
port=445:proto=tcp:toport=445:toaddr=172.31.0.100
공유 폴더 접근
share 폴더에 새 텍스트 문서.txt 생성
파일 확인
[root@web01 ~]# cd /var/samba/share/
[root@web01 share]# ls
새 텍스트 문서.txt
[root@web01 share]#
리눅스용 네트워크 파일 공유 시스템) - 완전 관리형 서비스
네트워크 파일 시스템(Network File System, NFS)은 1984년에 썬 마이크로시스템즈가 개발한 프로토콜입니다.
클라이언트 컴퓨터의 사용자가 네트워크 상의 파일을 직접 연결된 스토리지에 접근하는 방식과 비슷한 방식으로 접근하도록 도와 줍니다.
다른 수많은 프로토콜과 마찬가지로 ONC RPC 시스템을 기반으로 합니다.
네트워크 파일 시스템은 RFC에 정의된 오픈 표준이므로 누구나 구현할 수 있습니다.
nfs 설치
# yum install -y nfs-utils
# mkdir /share && cd $_
# echo "Hello" > test.txt
공유 폴더에 접근 가능한 IP 설정
# vi /etc/exports
/share 172.31.0.0/24(rw,sync)
/share *(rw,sync)
: anywhere 어디서든지접근가능한 사용자에게 권한 부여
# chmod 707 /share
start & enable
# systemctl enable --now nfs-server
방화벽 설정
# firewall-cmd --permanent --add-service=nfs
# firewall-cmd --permanent --add-service=rpc-bind
# firewall-cmd --permanent --add-service=mountd
# firewall-cmd --reload
nfs 설치
# yum install -y nfs-utils
# rpm -qa | grep nfs-utils /*확인
WEB02 IP로 접속
# showmount -e 172.31.0.101
Export list for 172.31.0.101: /*mount 할 수 있는 범위
/share 172.31.0.0/24
폴더 생성 - nfs와 연결
# mkdir share
마운트
# mount -t nfs 172.31.0.101:/share /root/share /* 절대경로
# mount -t nfs 172.31.0.101:/share share /* 상대경로
mount 확인
# df -h
172.31.0.101:/share 125G 1.5G 124G 2% /root/share
# ls /root/share
test.txt
마운트 설정 변경
시작하면 자동으로 마운트
# vi /etc/fstab
172.31.0.101:/share /root/share nfs defaults 0 0
# echo "172.31.0.101:/share /root/share nfs defaults 0 0" >> /etc/fstab
Cf) UUID 확인
# blkid /*block storage id
/dev/sda1: UUID="3d95066c-a872-4c35-8318-8522f0f69f60" TYPE="xfs"
/dev/sda2: UUID="okQ39D-0843-rJc8-9gET-P3cm-LjUQ-6aNx51" TYPE="LVM2_member"
/dev/mapper/centos-root: UUID="2de2ed1e-0727-40c1-8938-9ffaa2096835" TYPE="xfs"
/dev/mapper/centos-swap: UUID="5e1ef22f-e00f-4fa4-976e-66ee02772ba6" TYPE="swap"
MariaDB 경로 설정
# vi /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
MariaDB 설치
# yum install -y MariaDB
# rpm -qa | grep MariaDB
# mariadb --version
background 설정
# systemctl enable --now mariadb
secure 설정
# mysql_secure_installation /*root pwd 정의
Enter > y*2 > pwd 입력 > y*4
# systemctl restart mariadb
maria db 접근
# mysql -u root -p
Enter password:
MariaDB [(none)]>
사용자 생성
> CREATE USER 'wpuser'@'%' IDENTIFIED BY 'kosa0401';
wpuser'@'%
의 %
: 출발지 ip어디든 상관없이(anywhere) 와일드카드wpuser'@'localhost
: 로컬에서만 접근 가능데이터베이스 생성
> CREATE DATABASE IF NOT EXISTS wordpress;
권한 설정
> GRANT ALL PRIVILEGES ON wordpress.* TO 'wpuser'@'%';
> QUIT
> EXIT
방화벽 설정
# firewall-cmd --permanent --add-service=mysql
# firewall-cmd --reload
mysql 설치
# yum install mysql -y
mysql 접근
# mysql -h ns.xeomina.shop -u wpuser -p
# mysql -h 172.31.0.102 -u wpuser -p
-h
: host 주소 = db서버의 주소SQL = 쿼리 <> NoSQL : SQL을 사용하지 않는 데이터베이스(예 : Key와 Value)
ns는 리눅스버전...
> setx path "%PATH%;{추가하고자하는 경로}"
> cd C:\employees\
> mysql -u root -p
Enter password
> source employees.sql;
> show databases;
memberTBL 생성
열 이름(한글) | 영문이름 | 데이터 형식 | 길이 | NULL 허용 |
---|---|---|---|---|
아이디(Primary Key) | memberID | 문자(CHAR) | 8글자(영문) | X |
회원 이름 | memberName | 문자(CHAR) | 5글자(한글) | X |
주소 | memberAddress | 문자(CHAR) | 20글자(한글) | O |
productTBL 생성
열 이름(한글) | 영문이름 | 데이터 형식 | 길이 | NULL 허용 |
---|---|---|---|---|
제품이름(Primary Key) | productName | 문자(CHAR) | 4글자(한글) | X |
가격 | cost | 숫자(INT) | 11(정수) | X |
제조일자 | makeDate | 날짜(DATE) | 날짜형 | O |
제조회사 | company | 문자(CHAR) | 4글자(한글) | O |
남은수량 | amount | 숫자(INT) | 11(정수) | X |
회원 데이터
아이디 | 이름 | 주소 |
---|---|---|
Dang | 당탕이 | 경기 부천시 중동 |
Jee | 지운이 | 서울 은평구 중산동 |
Han | 한주연 | 인천 남구 주안동 |
Sang | 상길이 | 경기 성남시 분당구 |
제품 데이터
제품명 | 비용 | 날짜 | 제조사 | 수량 |
---|---|---|---|---|
냉장고 | 5 | 2023-02-01 | 대우 | 22 |
세탁기 | 20 | 2022-09-01 | LG | 3 |
컴퓨터 | 10 | 2021-01-01 | 삼성 | 17 |
조회
SELECT * FROM memberTbl;
SELECT memberName, memberAddress FROM memberTbl;
SELECT memberName, memberAddress FROM shopdb.memberTbl;
SELECT * FROM memberTbl WHERE memberName = '지운이';
테이블 생성
CREATE TABLE `my testTBL`(id int);
SELECT * FROM `my testTBL`;
테이블 삭제
DROP TABLE `my testTBL`;
테이블 생성
CREATE TABLE indexTBL (first_name varchar(14), last_name varchar(16) , hire_date date);
INSERT INTO indexTBL
SELECT first_name, last_name, hire_date
FROM employees.employees
LIMIT 500;
일반 조회
SELECT * FROM indexTBL;
SELECT * FROM indexTBL WHERE first_name = 'Mary';
EXPLAIN SELECT * FROM indexTBL WHERE first_name = 'Mary';
인덱스로 조회
CREATE INDEX idx_indexTBL_firstname ON indexTBL(first_name);
SELECT * FROM indexTBL WHERE first_name = 'Mary';
EXPLAIN SELECT * FROM indexTBL WHERE first_name = 'Mary';
CREATE VIEW uv_memberTBL
AS
SELECT memberName, memberAddress FROM memberTBL ;
SELECT * FROM uv_memberTBL ;
DELIMITER //
CREATE PROCEDURE myProc()
BEGIN
SELECT * FROM memberTBL WHERE memberName = '당탕이' ;
SELECT * FROM productTBL WHERE productName = '냉장고' ;
END //
DELIMITER ;
CALL myProc() ;
테이블 생성
INSERT INTO memberTBL VALUES ('Figure', '연아', '경기도 군포시 당정동');
SELECT * FROM membertbl;
UPDATE memberTBL SET memberAddress = '서울 강남구 역삼동' WHERE memberName = '연아';
SELECT * FROM membertbl;
DELETE FROM memberTBL WHERE memberName = '연아';
SELECT * FROM membertbl;
백업 테이블 생성
CREATE TABLE deletedMemberTBL ( -- 백업 테이블
memberID CHAR(8),
memberName CHAR(5),
memberAddress CHAR(20),
deletedDate DATE -- 삭제한 날짜
);
트리거 생성
DELIMITER // -- 구분자
CREATE TRIGGER trg_deletedMemberTBL -- 트리거 이름
AFTER DELETE -- 삭제 후에 작동하게 지정
ON memberTBL -- 트리거를 부착할 테이블
FOR EACH ROW -- 각 행마다 적용시킴
BEGIN
-- OLD 테이블의 내용을 백업테이블에 삽입
INSERT INTO deletedMemberTBL
VALUES (OLD.memberID, OLD.memberName, OLD.memberAddress, CURDATE() -- current date );
END //
DELIMITER;
트리거 실행 및 결과 조회
DELETE FROM memberTBL WHERE memberName = '당탕이';
SELECT * FROM memberTBL;
SELECT * FROM deletedMemberTBL;
테이블 내보내기
# firewall-cmd --permanent --zone=external --add-forward-port=port=3306:proto=tcp:toport=3306:toaddr=172.31.0.102 /*NS IP
# firewall-cmd --reload