[Linux] 네트워크

xeomina·2022년 5월 17일
0

Linux

목록 보기
14/16

리눅스 서버

1. KeyPair 생성 및 활용

SSH (Secure Shell)

  • 키 쌍은 특정 인증 프로토콜에 사용되는 공개 키 및 프라이빗 키 파일을 나타냅니다.
  • SSH 공개 키 인증은 비동기 암호화 알고리즘을 사용하여 "프라이빗" 키와 "공개" 키라는 두 가지 키 파일을 생성합니다.
  • 프라이빗 키 파일은 암호와 동일하며, 모든 상황에서 보호되어야 합니다.
  • 다른 사람이 사용자의 프라이빗 키를 획득하면 사용자가 액세스할 수 있는 모든 SSH 서버에 사용자의 이름으로 로그인할 수 있습니다.

cmd

>ssh root@192.168.56.101
root@192.168.56.101's password:
Last login: Fri Apr  8 09:18:14 2022

# mkdir /root/.ssh
# exit
logout
Connection to 192.168.56.101 closed.
  • id_rsa : 프라이빗 키 파일
  • id_rsa.pub : 공개 키
> ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (C:\Users\lg/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in C:\Users\lg/.ssh/id_rsa.
Your public key has been saved in C:\Users\lg/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:hpq6DXQcZHU1dAHd663hmlOpXJV8gIIF7Ir0cr5F1m0 lg@lge
The key's randomart image is:
+---[RSA 2048]----+
|    o...o**oo+   |
|   o   .o .oo o  |
|    .  .   .  .o.|
|   ... ... .  .oo|
|  ..oo..S . E. +.|
| . .oo++   .  * .|
|  . o+  .  . = o |
|   +  ..    +.o  |
|  o.. ..    oo   |
+----[SHA256]-----+
> cd %UserProfile%\.ssh
C:\Users\lg\.ssh>dir
 C 드라이브의 볼륨: Windows
 볼륨 일련 번호: CA8C-1C79

 C:\Users\lg\.ssh 디렉터리

2022-04-08  오후 03:46    <DIR>          .
2022-04-08  오후 03:46    <DIR>          ..
2022-04-08  오후 03:46             1,679 id_rsa
2022-04-08  오후 03:46               389 id_rsa.pub
2022-04-06  오전 11:39               177 known_hosts
               3개 파일               2,245 바이트
               2개 디렉터리   7,183,212,544 바이트 남음

C:\Users\lg\.ssh>
  • scp : ssh 프로토콜 이용하여 복사
    • id_rsa.pub 파일 authorized_keys로 복사
.ssh> scp id_rsa.pub root@192.168.56.101:/root/.ssh/authorized_keys
  • 공개키 서버에 전송한 상태
    • passwd 없이 접근 가능
    • -i id_rsa는 생략가능
.ssh>ssh -i id_rsa root@192.168.56.101
Last login: Fri Apr  8 16:00:54 2022 from 192.168.56.1
  • root passwd 노출당하더라도 접근 불가하도록
    • 키로만 접근가능하도록
# vi /etc/ssh/sshd_config
PasswordAuthentication no

image-20220408161258685

  • SSHD(Secure Shell Daemon) : 백그라운드 실행
    • sshd_config : sshd 서비스
    • restart 필요
# systemctl restart sshd
  • key pair 설정 끝

2. 웹서버 구축 및 간단 홈페이지 꾸미기

  • HTTPD(Hyper Text Transfer Protocol Daemon)
    HTTP는 HTML 문서와 같은 리소스들을 가져올 수 있도록 해주는 프로토콜입니다.
  • HTTP는 웹에서 이루어지는 모든 데이터 교환의 기초이며, 클라이언트-서버 프로토콜이기도 합니다.
  • 클라이언트-서버 프로토콜이란 (보통 웹브라우저인) 수신자 측에 의해 요청이 초기화되는 프로토콜을 의미합니다.
  • 하나의 완전한 문서는 텍스트, 레이아웃 설명, 이미지, 비디오, 스크립트 등 불러온(fetched) 하위 문서들로 재구성됩니다.
# sestatus

# vi /etc/sysconfig/selinux
SELINUX=disabled		/* enforcing을 disabled로
  • selinux : 보안 강화
    • 강력하고 안전하지만 어려움
# setenforce 0
# sestatus

image-20220408163008634

  • Current mode: permissive Mode from config file: disabled
  • 가장 빠른 미러사이트 찾기
    • 웹서버 설치 > 서비스 시작
# yum install -y httpd
# systemctl start httpd
  • 아직은 192.168.56.101 : 접속 불가
    • 방화벽을 세팅하지 않았기 때문
    • 포트번호 열려있지 않음

kosa2.drawio

# systemctl status httpd

image-20220408164003747

  • active 상태 : ok !

VM에서 Google 접속

  • passwd : 아까 설정한 키 (Enter)
  • 127.0.0.1 : 내부 IP
  • curl : 웹 브라우저 대신해주는 도구
# curl 127.0.0.1
  • 127.0.0.1 : 내부 IP
    • 외부에 접속 했을 떄가 아닌 내부 설치된 서버가 잘 실행되는지 확인할 때 사용
  • 보안그룹이라는 방화벽 바깥 가정해서 firewall 사용
  • firewall 서비스해주는 데몬
# systemctl status firewalld                                  

image-20220408165134563

# firewall-cmd --get-active-zone

# firewall-cmd --zone=public --list-all
# firewall-cmd --list-all			/*위와 동일

image-20220408170803772

# firewall-cmd --permanent --add-service=http                 success                                                                     # firewall-cmd --reload                                       success 

image-20220408171156858

  • /var/www/html/. : 홈페이지 주소 파일 담기는 경로
    • 현재 아무것도 없음
    • httpd 설치 필수
[root@localhost ~]# cd /var/www/html
[root@localhost html]# ll
total 0
[root@localhost html]# echo "Hello World" > index.html
[root@localhost html]# ll
total 4
-rw-r--r--. 1 root root 12 Apr  8 17:17 index.html
  • other는 r 권한만 있으면 됨

image-20220408171959878

Webshare

  • && : 앞의 명령 실행 후 뒤 명령 실행
  • $_ : 방금 만든 폴더 지칭 (images)
# mkdir images && cd $_
  • Webshare에서 img 다운로드
# wget http://192.168.56.1/kosa/two-rabbit.jpg

image-20220408173014533

  • 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>

image-20220408174759729

방화벽 설정 (firewall-cmd)

# systemctl status firewalld
# firewall-cmd --get-active-zone			/* 활성화 존 출력
# firewall-cmd --zone=public --list-all		/* public존의 사용 가능 서비스/포트 출력
# firewall-cmd --list-all					/* 사용 가능 서비스/포트 출력
# firewall-cmd --permanent --add-service=http	/* http 서비스 추가(permanent)
# firewall-cmd --permanent --add-port=80/tcp	/* 80번 포트 추가

image-20220414160913471

# firewall-cmd --permanent --remove-service=http	/* http 서비스 제거
# firewall-cmd --permanent --remove-port=80/tcp		/* 80번 포트 제거
# firewall-cmd --reload		/* 재시작

Storage 추가(Mount; Block Storage 다루기) - AWS EBS

  • sda(root volume) -> OS, App
  • 마운트(mount)는 컴퓨터 과학에서 저장 장치에 접근할 수 있는 경로를 디렉터리 구조에 편입시키는 작업입니다.
  • 좁은 의미로는 유닉스 계열의 운영 체제에서의 mount 명령어 또는 그 명령어를 사용하는 것입니다.
  • mount 명령어를 사용하면 저장 장치의 접근 경로를 원하는 위치에 생성할 수 있습니다.
  • 마운트를 이용하면 분산 파일 시스템으로 확장하기가 용이합니다.
  • 사용자는 마운트된 미디어의 파일들에만 접근이 가능합니다.
# df -h		/* 디스크 공간을 확인
# lsblk		/* 사용하는 저장 장치를 확인

image-20220414170135255

# mkfs -t xfs /dev/sdb		/*  /dev/sdb파일을 xfs라는 파일시스템으로 포맷
  • mkfs : 파일시스템 포맷
  • -t: 파일시스템을 지정
# mkdir /data
# mount /dev/sdb /data		 	    /* /dev/sdb을 /data에 마운트(연결)
# df -h							  /* 확인

# file -s /dev/sdb				   /* 파일 확인 명령어

# cp /etc/fstab /etc/fstab.orig		/*백업
# blkid						/* 파일 시스템 유형이나 속성 출력
/dev/sda1: UUID=""
/dev/sda2: UUID=""
/dev/sdb: UUID=""

# vi /etc/fstab
UUID="3ffe9c91-2ce7-457a-9fbc-07922ff6b652"  /data  xfs  defaults,nofail  0  2 추가

# umount /data				/* 연결 끊음

직접 마운트

  1. xfc에서 설정으로 들어가 저장소를 들어간다.

  2. 저장소의 컨트롤러:SATA로 들어가서 하드디스크 추가를 누른다.

  3. 만들기를 눌러서 새로운 disk를 만든다

  4. 생성 후 사용한 디스크를 연결삭제를 한다.

  5. 연결 삭제한 다음 minimal의 설정으로 들어가 저장소를 누른다.

  6. 하드디스크 추가를 눌러서 추가하려는 디스크를 누르고 선택 버튼을 누른다.

image-20220414175143399

자동 마운트

  1. blkid를 입력해 출력되는 원하는 디스크의 UUID를 복사한다.

    /dev/sdb: UUID="db260ed0-e7e5-4afd-9a1d-c1988e61511b"
  2. vi /etc/fstab으로 들어간다.

  3. 저장한 UUID를 fstab에 붙여넣는다.

    UUID="db260ed0-e7e5-4afd-9a1d-c1988e61511b"  /data  xfs  defaults,nofail  0  2
  4. reboot를 한 후 다시 로그인 해서 df -h로 자동으로 마운트가 되었는지 확인한다.

image-20220414173859990

SAMBA(Server Message Block; 윈도우용 파일 시스템) - Amazon FSx - 완전 관리형 서비스

  • 서버 메시지 블록(Server Message Block, SMB)은 도스나 윈도우에서 파일이나 디렉터리 및 주변 장치들을 공유하는데 사용되는 메시지 형식입니다.
  • NetBIOS는 SMB 형식에 기반을 두고 있으며, 많은 네트워크 제품들도 SMB를 사용합니다.
  • 이러한 SMB 기반의 네트워크에는 랜매니저, 윈도우 포 워크그룹(Windows for Workgroups), 윈도우 NT, 그리고 랜 서버(Lan Server) 등이 있습니다.
  • 서로 다른 운영 체제 사이에 파일을 공유할 수 있도록 하기 위해 SMB를 사용하는 제품들도 많이 있습니다.
  • 그 중 하나가 삼바인데, 유닉스와 윈도우 컴퓨터들간에 디렉터리와 파일을 공유할 수 있게 합니다.

samba설치

# yum install -y samba

경로 설정

# mkdir -p /var/samba/share
# chmod 777 /var/samba/share
# adduser kosa
# passwd kosa0401
# smbpasswd -a kosa				/* kosa - samba용 계정 생성
# vi /etc/samba/smb.conf

        workgroup = hali/네트워크 2로변경
[share]							/*추가
        comment = Share Directory
        path = /var/samba/share
        browserable = yes
        writable = yes
        valid users = kosa
        create mask = 0777
        directory mask = 0777

nmb/smb 실행

# systemctl start smb
# systemctl enable smb

# systemctl enable --now smb		/*위 두개 합친 것
# systemctl start nmb
# systemctl enable nmb
# systemctl enable --now nmb

방화벽 설정

# firewall-cmd --permanent --add-service=samba --zone=public
# firewall-cmd --reload

# setenforce 0

윈도우 클라이언트 접속 방법

  • win + R > \ {Host IP}를 입력

CentOS7 클라이언트 접속 방법

# yum install -y samba-client
# smbclient '//{samba IP}/share' -U kosa

NFS (Network File System; 리눅스용 파일 공유 시스템) - AWS EFS - 완전 관리형 서비스

  • 네트워크 파일 시스템(Network File System, NFS)은 1984년에 썬 마이크로시스템즈가 개발한 프로토콜입니다.
  • 클라이언트 컴퓨터의 사용자가 네트워크 상의 파일을 직접 연결된 스토리지에 접근하는 방식과 비슷한 방식으로 접근하도록 도와 줍니다.
  • 다른 수많은 프로토콜과 마찬가지로 ONC RPC 시스템을 기반으로 합니다.
  • 네트워크 파일 시스템은 RFC에 정의된 오픈 표준이므로 누구나 구현할 수 있습니다.

프로토콜

  • 이기종간 통신(윈도우-리눅스)을 위한 규약

  • 객체 스토리지 (Object Storage)

    • 현재 WebShare : http 프로토콜 사용
      • 웹서버 기능 탑재
    • SAMBA : NetBIOS 프로토콜 사용
    • NFS : NFS 자체가 프로토콜

ip 범위

  • 192.168.56.0/24
    • 192.168.56 : 네트워크 영역
    • 0/24 : 호스트 영역
  • ip 갯수가 256개 - 2개 = 실제 사용 가능 IP 254개
    • 192.168.56.0 : 네트워크 주소 (시작하는 ip)
    • 192.168.56.255 : 브로드캐스트 주소 (마지막 ip)

XFCE

192.168.56.101

  • 서버
# yum install -y nfs-utils		/* nfs-utils 설치

# mkdir /share && cd $_
# echo "Hello" > test.txt
# chmod o+w test.txt
# chmod 707 /share

# vi /etc/exports				/* 접근할 수 있는 IP주소 범위를 설정
/share 192.168.56.0/24(rw,sync)
# systemctl start nfs-server
# systemctl enable nfs-server

# systemctl enable --now nfs-server
Created symlink from /etc/systemd/system/multi-user.target.wants/nfs-server.service to /usr/lib/systemd/system/nfs-server.service.

# exportfs -v					/* /etc/exports 파일을 읽어서 재적용
/share        	192.168.56.0/24(sync,wdelay,hide,no_subtree_check,sec=sys,rw,secure,root_squash,no_all_squash)
  • 방화벽 처리
    • firewalld 서비스가 동작 중이라면 NFS 서버 서비스에 필요한 포트들 (mountd, nfs, rpc-bind)을 열어 주어야 한다.
# firewall-cmd --permanent --add-service=nfs
# firewall-cmd --permanent --add-service=rpc-bind
# firewall-cmd --permanent --add-service=mountd
# firewall-cmd --reload

Minimal

192.168.56.120

  • 클라이언트
    • rpm -qa : 현재 VM에 설치되어있는 App
# rpm -qa | grep nfs-utils
# yum install -y nfs-utils

# showmount -e 192.168.56.101
Export list for 192.168.56.101:                                                             /share 192.168.56.0/24 

# mkdir share
# mount -t nfs 192.168.56.101:/share /root/share

# df -h
192.168.56.101:/share    124G  3.3G  120G   3% /root/share  

# echo "OK" >> /root/share/test.txt                                       
# cat /root/share/test.txt
Hello                                
OK  

# vi /etc/sysconfig/selinux
SELINUX=disabled

# vi /etc/fstab
192.168.0.69:/share /root/share nfs defaults 0 0
  • mount를 통해 XFCE의 share 폴더 공유

DB서버(Database Management System; MariaDB)

  • MariaDB는 오픈 소스의 관계형 데이터베이스 관리 시스템(RDBMS)입니다.
  • MySQL과 동일한 소스 코드를 기반으로 하며, GPL v2 라이선스를 따릅니다.
  • 오라클 소유의 현재 불확실한 MySQL의 라이선스 상태에 반발하여 만들어졌습니다.

XFCE

# 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
# yum install -y MariaDB
# rpm -qa | grep MariaDB
# mariadb --version

# systemctl start mariadb
# systemctl enable mariadb
# systemctl enable --now mariadb
  • ss (Socket Statistics) : 포트 확인 명령어
# ss -ant

image-20220412144457530

  • 공백을 기준으로 IPv4 / IPv6

    • ESTAB : XFCE와 Minimal 연결
      • XFCE : 192.168.56.101
      • Minimal :192.168.56.120
    • 3306 : MySQL / MariaDB 포트
    • 2049 : NSF
    • 139 : SAMBA
# mysql_secure_installation					/* 보안 설정 관련
# systemctl restart mariadb
# mysql -u root -p							/* MariaDB 실행
  • remote (원격) <-> local (내부)
    • 원격 : ip 통신으로 연결 (DB서버 x)
      • Disallow root login remotely? [Y]

MariaDB

  • SQL 명령어
CREATE USER 'wpuser'@'%' IDENTIFIED BY 'wppass';
CREATE DATABASE IF NOT EXISTS wordpress;
GRANT ALL PRIVILEGES ON wordpress.* TO 'wpuser'@'%';
quit
  • id : wpuser
    • % : 사용자가 remote 접근 가능하도록
    • localhost로 바꾸면 로컬에서만 접근 가능
  • passwd : wppass
  • wordpress : 오픈소스
    • DB 필요
  • wordpress DB 안에서는 wpuser에게 전권 위임

image-20220412154424391

# firewall-cmd --list-all
# firewall-cmd --permanent --add-service=mysql
# firewall-cmd --zone=public --add-service=mysql --permanent
# firewall-cmd --reload

Minimal

# yum install mysql -y
# mysql
# mysql -h 192.168.56.101 -u wpuser -p
Enter password:                                                                       Welcome to the MariaDB monitor.  Commands end with ; or \g.                           Your MariaDB connection id is 10                                                      Server version: 10.4.24-MariaDB MariaDB Server                                                                                                                              Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.                                                                                                        Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.                                                                                              MariaDB [(none)]>    

리눅스 네트워크

Router (IP 공유기; AWS VPC NAT GateWay)

  • 네트워크 주소 변환(NAT; Network Address Translation)은 컴퓨터 네트워킹에서 쓰이는 용어로서, IP 패킷의 TCP/UDP 포트 숫자와 소스 및 목적지의 IP 주소 등을 재기록하면서 라우터를 통해 네트워크 트래픽을 주고 받는 기술을 말합니다.

  • NAT를 이용하는 이유는 대개 사설 네트워크에 속한 여러 개의 호스트가 하나의 공인 IP 주소를 사용하여 인터넷에 접속하기 위함입니다.

  • 많은 네트워크 관리자들이 NAT를 편리한 기법이라고 보고 널리 사용하고 있습니다.

  • 공인 IP = Public IP

    사설 IP = Private IP

    10.0.0.0 ~ 10.0.255.255

    172.16.0.0 ~ 172.31.255.255

    192.168.0.0 ~ 192.168.255.255

기본 사양

NAT GW_DHCP_HAproxy

  • 어댑터 1: 어댑터에 브리지
    • 외부와 연결
  • 어댑터 2 : 내부 네트워크
    • 이름 : vSwitch
    • 내부와 연결

image-20220412164432911

image-20220412164423128

2: enp0s3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 08:00:27:44:ec:a2 brd ff:ff:ff:ff:ff:ff
    inet 192.168.0.148/21 brd 192.168.7.255 scope global noprefixroute dynamic enp0s3
       
3: enp0s8: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 08:00:27:03:66:1e brd ff:ff:ff:ff:ff:ff
    inet6 fe80::c4c9:27ca:c582:4baa/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever
  • enp0s3 : 192.168.0.148
  • enp0s8 : x
  • ping google.com 됨

WEB01_SAMBA

  • 어댑터 1 : 내부 네트워크
    • 이름 : vSwitch
  • 어댑터 2 : 사용안함

WEB02_NFS

  • 어댑터 1 : 내부 네트워크
    • 이름 : vSwitch
  • 어댑터 2 : 사용안함

Database_DNS

  • 어댑터 1 : 내부 네트워크
    • 이름 : vSwitch
  • 어댑터 2 : 사용안함

Router (IP 공유기; AWS VPC NAT GateWay)

저번시간 이어서...

  • 네트워크 주소 변환(NAT; Network Address Translation)은 컴퓨터 네트워킹에서 쓰이는 용어로서, IP 패킷의 TCP/UDP 포트 숫자와 소스 및 목적지의 IP 주소 등을 재기록하면서 라우터를 통해 네트워크 트래픽을 주고 받는 기술을 말합니다.
  • NAT를 이용하는 이유는 대개 사설 네트워크에 속한 여러 개의 호스트가 하나의 공인 IP 주소를 사용하여 인터넷에 접속하기 위함입니다.
  • 많은 네트워크 관리자들이 NAT를 편리한 기법이라고 보고 널리 사용하고 있습니다.

NAT GW_DHCP_HAproxy

  • 어댑터 1: 어댑터에 브리지
    • 외부와 연결
  • 어댑터 2 : 내부 네트워크
    • 이름 : vSwitch
    • 내부와 연결

WEB01_SAMBA

  • 어댑터 1 : 내부 네트워크
    • 이름 : vSwitch
  • 어댑터 2 : 사용안함

WEB02_NFS

  • 어댑터 1 : 내부 네트워크
    • 이름 : vSwitch
  • 어댑터 2 : 사용안함

Database_DNS

  • 어댑터 1 : 내부 네트워크
    • 이름 : vSwitch
  • 어댑터 2 : 사용안함

IP 종류

  • 공인 IP = Public IP
  • 사설 IP = Private IP
    • 10.0.0.0 ~ 10.0.255.255
      172.16.0.0 ~ 172.31.255.255
      192.168.0.0 ~ 192.168.255.255

강의실 네트워크

  • Public Subnet
    192.168.0.0/24
    192.168.0.0 ~ 192.168.0.255 (256개 ip - 2개 = 254개)
    192.168.0.0 네트워크 주소(시작 ip)
    192.168.0.255 브로드캐스팅 주소(마지막 ip)

  • Private Subnet
    172.31.0.0/24
    172.31.0.0 ~ 10.0.0.255 (256개 ip - 2개 = 254개)
    172.31.0.0 네트워크 주소(시작 ip)
    172.31.0.255 브로드캐스팅 주소(마지막 ip)

WIN10 ip 고정

  • 네트워크 및 인터넷 설정 > 네트워크 연결 > 이더넷 > 속성
    • 인터넷 프로토콜 버전 4 속성

image-20220413095127547

image-20220413095159976

image-20220413095354265

  • cmd > 관리자 권한으로 실행

image-20220413101543462

  • KeyPair 생성
>ssh-keygen -t rsa
Generating public/private rsa key pair.

/*SSH 키를 저장할 위치를 지정한다. 엔터를 누르면 기본 경로에 저장된다. (엔터)
Enter file in which to save the key (C:\Users\r2com/.ssh/id_rsa):
/*passphrase 입력, 자동 로그인을 원한다면 생략해야 한다. (엔터)
Enter passphrase (empty for no passphrase):
/* 엔터
Enter same passphrase again:

Your identification has been saved in C:\Users\r2com/.ssh/id_rsa.
Your public key has been saved in C:\Users\r2com/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:S0/R3/76Hvjr7QrtU3YNjwyfx/PHajzp5LGtN8krNn0 r2com@DESKTOP-DD3FU43
The key's randomart image is:
+---[RSA 3072]----+
|                 |
|           .     |
|          . .    |
|           ..... |
|        S .  +.*o|
|       . +   .*oO|
|        . . .o*B*|
|             OBOE|
|            .o&^&|
+----[SHA256]-----+
  • root의 authorized_keys에 r2com의id_rsa.pub 복사
    • scp : 전송하고 싶은 파일 전송
C:\Windows\system3>cd %UserProfile%\.ssh

C:\Users\r2com\.ssh>scp id_rsa.pub root@192.168.0.73:/root/.ssh/authorized_keys
  • key 이름 변경
C:\Users\r2com\.ssh>ren id_rsa my-key.pem
  • key로 VM 접근
C:\Users\r2com\.ssh>ssh -i my-key.pem root@192.168.0.73
  • selinux 설정 변경
# setenforce 0
setenforce: SELinux is disabled

# vi /etc/sysconfig/selinux
SELINUX=disabled

# vi /etc/ssh/sshd_config
Port 2222 주석 없애기
PasswordAuthentication no로 변경

# systemctl restart sshd
  • key로만 로그인 가능
C:\Users\r2com\.ssh>ssh root@192.168.0.73
root@192.168.0.73: Permission denied (publickey,gssapi-keyex,gssapi-with-mic).
  • 포트 확인
# ss -ant
  • ESTAB : 192.168.0.73:22 192.168.0.26:64176

    • 서버 : 192.168.0.73:22
      • 포트 : 22 (고정)
    • 클라이언트 : 192.168.0.26:64176
      • 포트 : 61328 (랜덤)
  • well-known 포트번호 : 0~1023 (서버 포트)

  • unknown 포트번호 : 1025 ~ 65535 (클라이언트 포트)

  • 방화벽 처리
    • VM에서 작업 (RedHat)
# firewall-cmd --permanent --add-port=2222/tcp
# firewall-cmd --reload
# firewall-cmd --list-all
  • 포트 번호 2222로 root에 접근
    • -p 옵션 사용
C:\Users\r2com\.ssh>ssh -p 2222 -i my-key.pem root@192.168.0.73
  • 포트 번호 복구
    • 포트는 주석(#) 처리 해도 22번으로 되돌아감 (디폴트)

image-20220413112151295

Hostname 변경

  • hostnamectl 명령어
[root@localhost ~]# hostnamectl set-hostname nat
[root@localhost ~]# exit
logout

C:\Users\r2com\.ssh>ssh -i my-key.pem root@192.168.0.73
[root@nat ~]#
  • network 확인
    • ifcfg-enp0s8 : 랜카드만 존재, 설정 파일이 없음
[root@nat ~]# cd /etc/sysconfig/network-scripts/
[root@nat network-scripts]# ls
ifcfg-enp0s3  ifdown-ippp  ifdown-routes    ifup          ifup-ipv6   ifup-ppp       ifup-tunnel
ifcfg-lo      ifdown-ipv6  ifdown-sit       ifup-aliases  ifup-isdn   ifup-routes    ifup-wireless
ifdown        ifdown-isdn  ifdown-Team      ifup-bnep     ifup-plip   ifup-sit       init.ipv6-global
ifdown-bnep   ifdown-post  ifdown-TeamPort  ifup-eth      ifup-plusb  ifup-Team      network-functions
ifdown-eth    ifdown-ppp   ifdown-tunnel    ifup-ippp     ifup-post   ifup-TeamPort  network-functions-ipv6

랜카드 설정 변경 - ip 고정

  • 첫번째 랜카드 (외부에서 바라보는)
# vi /etc/sysconfig/network-scripts/ifcfg-enp0s3
TYPE=Ethernet
BOOTPROTO=none				/*dhcp: 자동으로 ip 주소 받기 > none으로 변경
NAME=enp0s3
DEVICE=enp0s3
ONBOOT=yes

IPADDR=192.168.0.73
NETMASK=255.255.255.0
GATEWAY=192.168.0.1			/*공유기 ip
DNS1=8.8.8.8
DNS2=8.8.4.4
  • 두번째 랜카드 (내부-VM에서 바라보는)
# vi /etc/sysconfig/network-scripts/ifcfg-enp0s8
TYPE=Ethernet
BOOTPROTO=none				/*dhcp > 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			/* 랜카드 2개 모두 public
  • nmcli : 네트워크 세팅 명령어 (network manager)
    • 내부 = private / internal / backend
    • 외부 = public / external / frontend
# 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				/* 1 : 활성화
# sysctl -p	# 설정 저장
# cat /proc/sys/net/ipv4/ip_forward
1

DHCP(Dynamic Host Configuration Protocol)

  • 동적 호스트 구성 프로토콜(Dynamic Host Configuration Protocol, DHCP)은 호스트 IP 구성 관리를 단순화하는 IP 표준입니다.
  • 동적 호스트 구성 프로토콜 표준에서는 DHCP 서버를 사용하여 IP 주소 및 관련된 기타 구성 세부 정보를 네트워크의 DHCP 사용 클라이언트에게 동적으로 할당하는 방법을 제공합니다.
  • 자동으로 IP를 부여하기 때문에 보안성 문제
    • 기업내에서는 고정IP를 주로 사용

image-20220413152205420

dhcp 설치 및 설정 변경

# yum install dhcp -y
# vi /etc/dhcp/dhcpd.conf
ddns-update-style interim;
subnet 172.31.0.0 netmask 255.255.255.0 {			 /* 172.31.0.0/24
option routers 172.31.0.1;							/* 라우터
option subnet-mask 255.255.255.0;					 /* 서브넷 마스크
range dynamic-bootp 172.31.0.100 172.31.0.110;		  /* IP 범위
option domain-name-servers 8.8.8.8, 8.8.4.4;		  /* 도메인 IP
default-lease-time 7200;							/* IP 임대시간 - 2시간
max-lease-time 86400;								/* 사용자 추가요청시간 - 하루
}
  • 사용가능한 IP 범위 : 172.31.0.2 ~ 172.31.0.254

    • 172.31.0.1 : 라우터로 제외

    • 172.31.0.255 : 서브넷 마스크로 제외

image-20220413154711495

# systemctl enable dhcpd --now dhcpd
  • systemctl enable dhcpd + systemctl start dhcpd

vSwitch IP 확인

ping도 확인할 것

  • WEB01_SAMBA IP : 172.31.0.101
  • WEB02_NFS IP : 172.31.0.102
  • DATABASE_DNS IP : 172.31.0.103

파일 및 폴더 복사

  • cmd
- 파일 복사
C:\Users\r2com\.ssh> notepad hello.txt
C:\Users\r2com\.ssh> dir		/*확인
C:\Users\r2com\.ssh> scp -i my-key.pem hello.txt root@192.168.0.73:/root/


- 역으로
C:\Users\r2com\.ssh> del hello.txt
C:\Users\r2com\.ssh> scp -i my-key.pem root@192.168.0.73:/root/hello.txt ./

C:\Users\r2com\.ssh> ssh -i my-key.pem root@192.168.0.73		/* 확인
# ls


- 폴더 (-r 옵션)
C:\Users\r2com\.ssh> copy hello.txt test-folder
C:\Users\r2com\.ssh> scp -i my-key.pem -r test-folder root@192.168.0.73:/root/

C:\Users\r2com\.ssh> ssh -i my-key.pem root@192.168.0.73		/* 확인
# ls

3. 터미널 도구 변경 - Mobaxterm

cmd 대신

Mobaxterm 다운로드

  • Portable Edition 다운로드 > 압축해제

  • Session > ssh

image-20220413164758307

image-20220413164907556

web01_SAMBA

image-20220413170525401

image-20220413170613177

# ssh root@{web01_samba IP}
# hosanamectl set-hostname web01
# exit

# ssh root@{web01_samba IP}

web02_NFS

# ssh root@{web02_NFS IP}
# hosanamectl set-hostname web02
# exit

# ssh root@{web02_NFS IP}

Database_DNS

image-20220413171242918

# ssh root@{Database_DNS IP}
# hosanamectl set-hostname ns
# exit

# ssh root@{Database_DNS IP}

Key로 접근

Nat

image-20220413171759608

authorized_keys 보내기

# cp authorized_keys authorized_keys.pub
# ls
authorized_keys authorized_keys.pub known_hosts

# ssh-copy-id -i authorized_keys.pub root@{web01_SAMBA IP}
# ssh-copy-id -i authorized_keys.pub root@{web02_NFS IP}
# ssh-copy-id -i authorized_keys.pub root@{Database_DNS IP}

image-20220413172755012

image-20220413172723880

Key 넣기

  • .ssh 에서 my-key.pem 옮겨오기(드래그)

image-20220413173654797

NAT 터미널

	# cd .ssh
.ssh # ls
.ssh # ssh -i my-key.pem root@{web01_SAMBA}
  • key 아닌 pwd로 들어옴 - 오류
    • my-key.pem : too open (permission : 644)

image-20220413173826867

# chmod 400 my-key.pem
# ssh -i my-key.pem root@{web01_SAMBA}

image-20220413174215587

정리

  • NAT GW 에 key 올리기 (경유지) > 이미 공개키는 나머지 VM에 세팅 끝 (Authorized_keys) > my-key 권한 400으로 (g,o는 아무 권한 없어야)
# cp authorized_keys authorized_keys.pub
# ssh-copy-id -i authorized_keys.pub root@{web01/web02/ns IP}
# chmod 400 my-key.pem
# ssh -i my-key.pem root@{web01/web02/ns IP}

포트 포워드

IP 확인

  • NATGW : 192.168.0.73
  • WEB01_SAMBA IP : 172.31.0.101
  • WEB02_NFS IP : 172.31.0.102
  • DATABASE_DNS IP : 172.31.0.103

image-20220414095707857

네트워크 경로

  • 192.168.0.73:221 -> 172.31.0.101:22 (WEB01)
  • 192.168.0.73:222 -> 172.31.0.102:22 (WEB02)
  • 192.168.0.73:223 -> 172.31.0.103:22 (DNS)
C:\Windows\system32>netstat -a

image-20220414102331169

# ss -ant

image-20220414120248752

  • zone=external : NAT의 의미
  • WEB01 : FROM 22 TO 221
  • WEB02 : FROM 22 TO 222
  • DNS : FROM 22 TO 223
*/ WEB01_SAMBA 
# firewall-cmd --permanent --zone=external --add-forward-port=port=221:proto=tcp:toport=22:toaddr=172.31.0.101


/* WEB02_NFS 
# firewall-cmd --permanent --zone=external --add-forward-port=port=222:proto=tcp:toport=22:toaddr=172.31.0.102


/* DATABASE_DNS
# firewall-cmd --permanent --zone=external --add-forward-port=port=223:proto=tcp:toport=22:toaddr=172.31.0.103


# firewall-cmd --reload
# firewall-cmd --list-all --zone=external
# yum  update -y
  • Multi-exec로 한번에

image-20220414111139418

DNS - AWS Route53

  • 도메인 네임 시스템(Domain Name System, DNS)은 호스트의 도메인 이름을 호스트의 네트워크 주소로 바꾸거나 그 반대의 변환을 수행할 수 있도록 하기 위해 개발되었습니다.
  • 특정 컴퓨터(또는 네트워크로 연결된 임의의 장치)의 주소를 찾기 위해, 사람이 이해하기 쉬운 도메인 이름을 숫자로 된 식별 번호(IP 주소)로 변환해 줍니다.
  • 도메인 네임 시스템은 흔히 "전화번호부"에 비유됩니다.
  • 인터넷 도메인 주소 체계로서 TCP/IP의 응용에서, www.{ex}.com과 같은 주 컴퓨터의 도메인 이름을 192.168.1.0과 같은 IP 주소로 변환하고 라우팅 정보를 제공하는 분산형 데이터베이스 시스템입니다.

DNS 라우팅 과정

도메인을 ip로...

how-route-53-routes-traffic

  1. 사용자가 웹 브라우저 www.{ex}.com 입력 + Enter
  2. www.{ex}.com 요청이 ISP가 관리하는 DNS Resolver(해석기)로 라우팅
    • ISP (Internet Service Provider :인터넷 서비스 제공업체)
      • KT, SKB, LGU+, Dreamline ...
  3. ISP의 DNS Resolver가 www.{ex}.com에 대한 요청을 DNS Root Nameserver에 전달
  4. DNS Resolver가 요청을 .com TLD Nameserver에 다시 전달
  5. DNS Resolver가 요청을 Amazon Route 53 Nameserver에 다시 전달
  6. Amazon Route 53이 {ex}.com 호스팅 영역에서 www.{ex}.com IP 주소를 DNS Resolver로 반환
  7. ISP의 DNS Resolver가 사용자에게 필요한 IP 주소를 확보
    • IP 주소 : 192.0.2.44
    • 이 값을 웹 브라우저로 반환 및 일정 기간 IP 주소를 캐싱(저장)
  8. 웹 브라우저는 얻은 IP 주소로 www.{ex}.com에 대한 요청을 전송
  9. www.{ex}.com의 웹 페이지를 웹 브라우저로 반환, 웹 브라우저는 이 페이지를 표시
  • 자주 접속하면 2 > 7 으로 바로 감
    • resolver가 정보 갖고 있기 때문에 일련의 과정 스킵
  • 우리가 만들 것은 dns resolver : ip가 아닌 도메인으로 네트워크 접속 (사설 도메인)

DNS 설치 및 설정

  • NS에 설치
# yum -y install bind bind-chroot bind-utils
# cp /etc/named.conf /etc/named.conf.bak	/*백업

대표적인 레코드

  • SOA : 다루는 도메인 버전과 업데이트 시간 간격 등의 정보를 저장하는 레코드
  • A : 호스트 이름으로 IPv4 주소를 조회할 때 사용하는 레코드, 도메인을 ip로
    • 예: 호스트 ns.xeomina.shop의 IPv4 주소는 172.31.0.130
  • AAA : 호스트 이름으로 IPv6 주소를 조회할 때 사용하는 레코드
    • 예: jprs.jp의 IPv6 주소는 2001:218:3001:7::80
  • PTR : IP 주소로 호스트 이름을 조회할 때 사용하는 레코드, ip를 도메인으로
    • 예: 172.31.0.130의 호스트 이름은 ns.xeomina.shop
  • NS : DNS 서버의 호스트 이름 혹은 IP 주소를 저장하는 레코드
    • 예: xeomina.shop의 DNS 서버는 ns.xeomina.shop
  • MX : 메일 서버 호스트 이름 혹은 IP 주소를 저장하는 레코드
    • 예: xeomina.shop의 메일 서버는 mail.xeomina.shop
  • CNAME : 호스트 이름의 별칭을 저장하는 레코드, 도메인을 도메인으로
    • 예: www.xeomina.shop은 ns.xeomina.shop의 별칭 (alias)
# vi /etc/named.conf
  • Esc + ggdG : 전부 다 지우기
options {
        listen-on port 53 { 127.0.0.1; 192.168.0/24; 172.31.0/24; };		/* 172.31.0 =  172.31.0.0(마지막 생략가능) : 내부네트워크 정의
        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";	/* 호스팅 영역 생성 (zones)
};
  • zones
# vi /var/named/xeomina.shop.zones
zone "xeomina.shop" IN {
        type master;
        file "xeomina.shop.db";				/* db파일 생성/링크 - db안에 ip와 도메인 정보 매핑
        allow-update { none; };
};

zone "0.31.172.in-addr.arpa" IN {			/*172.31.0 > 0.31.172
        type master;
        file "0.31.172.in-addr.arpa.db";	/*ip를 도메인으로 변경(리버스)
        allow-update { none; };
};
  • db
# vi /var/named/xeomina.shop.db
$TTL    86400
@       IN      SOA     xeomina.shop.   root.xeomina.shop.(		 /* 도메인
                        2022041401 ; Serial						/* 버전(날짜)- 2022041402,3,...
                        3h         ; Refresh
                        1h         ; Retry
                        1w         ; Expire
                        1h )       ; Minimum

        IN      NS      ns.xeomina.shop.
        IN      MX 10   ns.xeomina.shop.			/* 메일서버 DNS 필수 - MX(Mail Exchange;메일 교환기)
ns      IN      A       172.31.0.103				/* 네임서버
web01   IN      A       172.31.0.101
web02   IN      A       172.31.0.102
  • 리버스
    • 리버스 도메인은 IP를 조회하면 도메인
# vi /var/named/0.31.172.in-addr.arpa.db
# vi /var/named/0.31.172.in-addr.arpa.db
$TTL	86400
@	IN	SOA	xeomina.shop.	root.xeomina.shop.(
			2022041401 ; Serial
			3h         ; Refresh
			1h         ; Retry
			1w         ; Expire
                        1h )       ; Minimum

	IN	NS	ns.xeomina.shop.
103	IN	PTR	ns.xeomina.shop.						/* 103 : 네임서버의 IP 맨 끝 
# systemctl enable --now named
# systemctl restart named
  • 오류확인 - 라인 번호
# systemctl status named
  • vi 편집기에 번호 달기
vi /etc/named.conf
: set number
  • nameserver정보
    • 기본 DNS : 사설
      • 우리(로컬) 도메인 NS IP로 세팅
      • 먼저 확인
    • 보조 DNS : 공식
# cat /etc/resolv.conf
# Generated by NetworkManager
nameserver 8.8.8.8
nameserver 8.8.4.4
  • dhcp.conf 파일 수정해서 nameserver 변경
# find / -name dhcpd.conf	/*dhcp.conf 위치 찾기
/etc/dhcp/dhcpd.conf

# vi /etc/dhcp/dhcpd.conf
  • domain-name-servers에 172.31.0.103 추가

image-20220414151859679

  • DNS 변경사항 확인
# systemctl restart NetworkManager

# cat /etc/resolv.conf
# Generated by NetworkManager
nameserver 172.31.0.103
nameserver 8.8.8.8
nameserver 8.8.4.4
  • ns에서 ping 확인
# systemctl restart named

# ping ns.xeomina.shop
# ping web01.xeomina.shop
# ping web02.xeomina.shop

image-20220414152803041

  • 방화벽 설정
# firewall-cmd --permanent --add-service=dns
success
# firewall-cmd --reload
success
  • WEB01에서 다른 서버로 ping 가능
    • WEB02도 마찬가지
# ping web02.xeomina.shop
# ping ns.xeomina.shop

image-20220414153545475

  • NAT 도메인 추가
vi /var/named/xeomina.shop.db
nat     IN      A       172.31.0.1		/* 추가

image-20220414154150513

# ping nat.xeomina.shop
  • IP : 172.31.0.1 (라우터)

image-20220414154251314

HAproxy - AWS ELB

  • HAProxy는 여러 서버에 요청을 분산시키는 TCP 및 HTTP 기반 애플리케이션을 위한 고가용성 로드 밸런서 및 역방향 프록시를 제공하는 무료 오픈 소스 소프트웨어 입니다.
  • C로 작성되었으며 빠르고 효율적(프로세서 및 메모리 사용 측면에서)으로 유명합니다.

로드밸런서(Load Balancer)

  • 새로고침 할 때마다 서버를 증가시켜 부하(트래픽)을 분산
  • HAproxy : 로드밸런서 오픈소스로 구축

image-20220414162204274

  • frontend
    • http로 신호 들어오면(in) backend_servers로 연결
  • backend
    • backend_servers로 웹서버 그룹화
    • web01과 web02로 부하분산:ㅈㅂ
  • 균형 알고리즘 : roundrobin

NAT에서 설치

# yum install -y haproxy
# vi /etc/haproxy/haproxy.cfg
global		/*전역설정
    daemon	/*백그라운드

defaults
    mode               http	/*접속프로토콜=http

frontend  http-in
    bind *:80
    default_backend    backend_servers

backend backend_servers
    balance            roundrobin
#    cookie  SVID insert indirect nocache maxlife 3m
    server             web01 172.31.0.101:80 cookie check
    server             web02 172.31.0.102:80 cookie check
  • cfg = conf

image-20220414162835541

# systemctl enable --now haproxy

웹서버 설치

WEB01/WEB02

# sestatus
Current mode:                   enforcing
Mode from config file:          enforcing
# vi /etc/sysconfig/selinux
SELINUX=disabled 로 변경

# setenforce 0
# sestatus
Current mode:                   permissive
Mode from config file:          disabled
  • httpd 설치
# yum install -y httpd

# systemctl enable --now httpd

홈페이지 꾸미기

  • 방화벽 설정
# firewall-cmd --permanent --add-service=http
# firewall-cmd --reload
  • 경로로 이동
# cd /var/www/html
# mkdir images
# cd images
  • wget 설치
# yum install -y wget
  • two-rabbit.jpg 파일 WebShare에서 다운로드
# wget http://192.168.0.26/FILES/two-rabbit.jpg
--2022-04-14 16:50:41--  http://192.168.0.26/FILES/two-rabbit.jpg
Connecting to 192.168.0.26:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 571622 (558K) [image/jpeg]
Saving to: ‘two-rabbit.jpg’

 0%  0           --.-K/s        100% 571,622     --.-K/s   in 0.02s

2022-04-14 16:50:41 (32.3 MB/s) - ‘two-rabbit.jpg’ saved [571622/571622]

# ls
two-rabbit.jpg
# cd ..
# vi index.html
<html> 코드 입력

NAT에서 방화벽 설정

# firewall-cmd --zone=external --permanent --add-service=http
# firewall-cmd --reload

WEB01과 WEB02 홈페이지 변경

WEB01

<h1>WEB01</h1>
image-20220414171907890

WEB02

<h1>WEB02</h1>
image-20220414171856711
  • 일정 시간 지나면(새로고침) 서버 바뀜 - 로그인 불가 !
    • 해결책 : 쿠키에 시간 지정
    • 주로 하루(1d)로 설정
# vi /etc/haproxy/haproxy.cfg

cookie  SVID insert indirect nocache maxlife 1m		/*1분

정방향(도메인 > IP) 조회

  • bind-utils 설치(dig 포함)
# yum install -y bind-utils
# dig A web01.xeomina.shop

web01.xeomina.shop.     86400   IN      A       172.31.0.101

image-20220414174026635

역방향(IP > 도메인) 조회

# dig -x 172.31.0.103		/* NS IP

103.0.31.172.in-addr.arpa. 86400 IN     PTR     ns.xeomina.shop.

image-20220414174428106

0개의 댓글