네트워크 - 실습 1

jsbak·2023년 2월 27일
0

Cloud

목록 보기
2/59

CentOS7 리눅스 서버 (AWS EC2 - Amazon Linux 2 Image)

💤(구축에 필요한 부분은 아니다.)

  • 네트워트 변경 시 network 와 NetworkManager 둘다 재시작

커맨드 자동완성

  • yum install -y bash-completion

cf. LAN 카드 온 설정

  • # vi /etc/sysconfig/network-scripts/ifcfg-enp0s8
    onboot=no -> yes 변경

cf. key-pair

key-pair 중 공개키를 서버에 저장, 접속하는 사람이 private 키를 가지고 있다. - 아무나 접속 불가능하다.

1. SSHD(Secure Shell Daemon; KeyPair 생성 및 활용) - AWS KeyPair

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

# systemctl restart network

# ssh root@192.168.0.85

# ssh-keygen -t rsa: -t 옵션: 키 암호 타입, rsa로 지정

저장할 위치 지정 (Enter 저 위치에 생성)

Generating public/private rsa key pair.
Enter file in which to save the key (/home/COM/.ssh/id_rsa): (💥Enter💥)
Created directory '/home/COM/.ssh'.
## 암호 지정을 물어보는것인데 키를 사용할 것이기 때문에 엔터 두번으로 아래꺼 까지 넘어간다.
Enter passphrase (empty for no passphrase): (💥Enter💥)
Enter same passphrase again: (💥Enter💥)
Your identification has been saved in /home/COM/.ssh/id_rsa
Your public key has been saved in /home/COM/.ssh/id_rsa.pub
The key fingerprint is:
SHA256:X+krJ3MnXuYlIw2vW+3zcYYXU4ylG8QerCUBwP4oUmg COM@DESKTOP-L2F7LSG
The key's randomart image is:
+---[RSA 3072]----+
|       ......+. .|
|        .   ..== |
|     . .     =+.o|
|    E . .   ...o.|
|   . .  So  + .o |
|    . . ...o + oo|
|     . .  . o X.*|
|          + +O.Oo|
|           B=+. =|
+----[SHA256]-----+

# ssh-copy-id -i .ssh/id_rsa root@192.168.56.102 : 서버로 위에서 생성한 Key를 전송

SCP; 서버와 파일 주고받기

  • 도구를 이용하는 경우 : Berryz WebShare
  • [Linux] 리눅스 scp 명령어 사용법
  • secure copy의 줄임말로 ssh를 이용하여 네트워크로 연결된 호스트간에 파일을 주고받는 명령어
  • 원격지에 있는 파일과 디렉터리를 보내거나 가져올 때 사용하는 파일 전송 프로토콜 (SFTP)
  • ssh와 동일한 22번 포트와 identity file을 사용해서 파일을 송수신하기 때문에 안정된 프로토콜

# scp -i my-key.pem hello.txt root@192.168.0.85:/root/
# scp -i my-key.pem root@192.168.0.85:/root/hello.txt ./
# scp -i my-key.pem -r test-folder root@192.168.0.85:/root/
# ssh -i my-key.pem root@192.168.0.85

패스워드 방식 제거

# vi /etc/ssh/sshd_config

PasswordAuthentication no - yes ➡ no로 변경

# systemctl restart sshd : 패스워드 방식 제거를 적용하기 위해서 sshd 재 실행

참고 - 방화벽과 포트번호 활성화하는법

  • well-known 알려진 포트번호 : 0 ~ 1023 (서버 포트)
    • 21(FTP), 22(SSH), 23(TELNET), 25(SMTP(SendMailTransferProtocol), 53(DNS), 67(DHCP) 80(HTTP), 443(HTTPS),
  • unknown 알려지지 않은 포트 : 1024 ~ 65535 (클라이언트 포트)
    • 3306(MYSQL), 3389(RDP)

http://netdoctor.co.kr

  • 2222번 포트 오픈 규칙 추가
    • # firewall-cmd --permanent --add-port=2222/tcp : 2222번 포트 활성화
      • --permanent : 옵션은 영구적으로 규칙 추가한다는 옵션(재부팅해도 적용)
    • # firewall-cmd --reload : 재실행
    • # firewall-cmd --list-all

2-1. VirtualBox VM 네트워크 설정

NATNAT Network호스트 전용 네트워크어댑터에 브릿지호스트 + NAT
호스트(192.168.0.* 같은 네트워크 대역) -> 가상X (포트포워딩 시, O)X (포트포워딩 시, O)XOO
호스트(MY PC, 192.168.0.155) -> 가상X (포트포워딩 시, O)X (포트포워딩 시, O)OOO
가상 -> 호스트OOXOO
가상 -> 가상XOOOO
가상 -> 인터넷OOXOO

💦 가상 머신과의 포트포워딩 (필요할 때 참고)

  • NAT (Network Address Translation) : 네트워크 주소 변환
  • PAT (Port Address Translation) : 포트 주소 변환, port forward
  • NAT ➡ NAT 네트워크로 설정해주는 것이 좋다. 서버의 역할 을 수행하는데 똑같은 ip 보다는 서로 다른 ip인 것이 좋음.
    • NAT 네트워크 IP 주소로 포트포워딩 설정 및 윈도우 방화벽도 풀어주거나 규칙을 생성해준다.
      - 파일 ➡ 환경설정 ➡ 네트워크 ➡ 포트포워딩 ➡ 규칙 추가

    • 위 처럼 하면 기존에 Host 에서 80번 포트를 사용하는 Object Storage 서버(WebShare)와 포트 충돌이 나기 때문에 HOST에서 WEB01로 가는 포트를 80 ➡ 8081 로 변경해준다!

💦 SSH 로 협업할 경우 포트포워딩 (필요할 때 참고)

  • 외부의 다른 PC에서 내 PC의 VM 서버로 접속 가능하도록 SSH 22 포트로 포트포워딩

2. HTTPD(Hyper Text Transfer Protocol Daemon; 웹서버 구축 및 간단 홈페이지 꾸미기) - AWS Linux (apache, nginx), WIN (IIS:Internet Information Services)

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

SELinux 보안 도구 Disable

  • 너무 어렵고 사용에 장애가 된다.
  • 퍼블릭 클라우드에서도 Disable
\# ssh -i id_rsa root@192.168.56.120
\# sestatus
\# vi /etc/sysconfig/selinux
	SELINUX=disabled # SELINUX 설정 끄기
  • 실시간 Disable : # setenforce 0
  • 상태 확인 : # sestatus

구축

# rpm -qa | grep httpd : httpd가 설치 되었는지 확인
# yum install -y httpd
----# systemctl start httpd : httpd 서비스 시작
----# systemctl enable httpd : 재부팅시 서비스 자동활성화 설정
# systemctl enable --now httpd : start와 enable 두개를 동시에 수행
# systemctl status httpd
# systemctl restart httpd
-- (systemctl start | stop | restart | status | enable | disable | enable --now | disable --now httpd)
# curl 127.0.0.1
# systemctl status firewalld
# firewall-cmd --get-active-zone
# firewall-cmd --zone=public --list-all
# firewall-cmd --permanent --add-service=http : 서비스 이름으로 활성화 하기
# firewall-cmd --permanent --add-port=80/tcp : 포트 번호로 활성화 하기
# firewall-cmd --permanent --remove-service=http : http 서비스 거부(차단)
# firewall-cmd --permanent --remove-port=80/tcp : 80/tcp 포트 거부
# firewall-cmd --reload : 방화벽 내역 재적용

  • 부트스트랩으로 대체
    # cd /var/www/html
    # mkdir images && cd $_
    # wget http://192.168.0.3/files/two-rabbit.jpg # 파일 서버에서 내려받기
    안된다면 # wget --http-user USER_ID -http-password USER_PASSWORD http://192.168.0.3/files/two-rabbit.jpg
    # cd ..
    # vi index.html : /var/www/httpd/index.html 웹서버 index 페이지 !
<!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>

구축한 네트워크 토폴로지

  • WEB01, WEB02, (SAMBA, NFS, SSH) 등을 쓰기 위해서는 위에서의 네트워크 변경 설정 (NAT ➡ NAT Network) 및 포트포워딩 설정 확인하기

❗ 3. Storage 추가(Mount; Block Storage 다루기 -> sda(root volume) -> OS, App ) - AWS EBS

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

# df -h
# lsblk
# mkfs -t xfs /dev/sdb # 포멧
# mkdir /data
# mount /dev/sdb /data # 디스크 마운트
# file -s /dev/sdb
# cp /etc/fstab /etc/fstab.orig
# blkid
# vi /etc/fstab
UUID="3ffe9c91-2ce7-457a-9fbc-07922ff6b652" /data xfs defaults,nofail 0 2

# umount /data

클라우드 3대 스토리지

  • 블록 스토리지(Block Storage) : *.vdi(가상 하드디스크 추가)
    • Amazon EBS
  • 객체 스토리지(Object Storage) : WebShare
    • Amazon S3
  • 파일 스토리지(File Storage) : SAMBA, SMB, NFS(linux)
    • Amazon FSx(win), EFS

4. SAMBA(Server Message Block; file storage -> 네트워크 파일 공유 -> 윈도우용 파일 시스템) - Amazon FSx 유사 - 완전 관리형 서비스

  • [LINUX] 📚 삼바(SAMBA) 설치 & 설정 ※ 총정리
  • 파일 공유, 폴더 공유
  • File Storage 라고한다.
  • 서버 메시지 블록(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 # 공개 자료로 생각해서 777, 보안적 요소가 필요하면 접근 권한 조절하기
\# adduser kosa
\# passwd kosa # kosa0220

# samba(SMB, Server Message Block) 에서 계정을 사용할 수 있도록 연결
\# smbpasswd -a kosa
\# vi /etc/samba/smb.conf

# 수정
		# 윈도우의 워크 그룹 지정(작업 그룹)
        workgroup = devops	# 없어도 된다.
[share]
		# comment 공유할 디랙터리 설명
        comment = Share Directory
        # 파일 서버에서 공유할 경로
        path = /var/samba/share
        # 공개 설정, kosa 사용자뿐만 아니라 쉽게 접근 가능하게 설정
        browserable = yes
        # 공유폴더에 데이터를 저장할 수 있는 권한
        writable = yes
        valid users = kosa
        # 디렉터리내에 create 시 기본 권한
        create mask = 0777
        directory mask = 0777

smb.conf 설정 파일 추가

  • [share] 설정의 path의 이름은 원하는 디렉터리 경로 아무거나 해도된다.
    • Samba로 접속하면 Share 디렉터리는 Samba에서 설정한 공유 path이고
    • 우측에 [로그인한 사용자명] 디렉터리는 Samba 서버에 있는 [로그인한 유저의 홈디렉터리]이다.
    • kosa 폴더 (로그인한 kosa 유저의 Home 디렉터리); share 폴더 (samba에서 share의 Path로 설정한 디렉터리)

start와 동시에 부팅서비스 등록

\# systemctl enable --now smb 
\# systemctl enable --now nmb
\# systemctl restart smb
\# systemctl restart nmb
\# systemctl status smb nmb 

# 445와 139가 활성화됨
\# ss -ant 

# samba 서비스를 활성화 하여 139 와 445 포트를 방화벽에서 규칙 활성화시킴. 
# --permanent: 영구적으로 활성화 옵션
\# firewall-cmd --permanent --add-service=samba
# 방화벽에 적용
\# firewall-cmd --reload

## SELinux 꺼져있는지 확인
/*
	vi /etc/sysconfig/selinux - disabled
    setenforce 0
*/

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

  • 접속
    탐색기 - \\192.168.56.120

kosa 폴더 접근이 차단되는 경우 - SELinux 설정 해제

  • 1번 방식 임시 방식
    setenforce 0

  • 2번 방식 영구 방식
    vi /etc/sysconfig/selinux - SELINUX=enforcing ➡ disabled

    • systemctl restart network/NetworkManager

CentOS7 클라이언트 접속 방법

# smb 클라이언트 설치
\# yum install -y samba-client
# 192.168.56.101 파일 공유 서버에 kosa 유저로 접속
\# smbclient //192.168.56.101/share -U kosa

Ubuntu 클라이언트 접속 방법

# smb 클라이언트 설치
$ sudo apt install smbclient
# 10.19.0.100 파일 공유 서버에 kosa 유저로 접속
$ smbclient //10.19.0.100/share -U kosa

smbclient 업로드 / 다운로드; Get / Put

  • smbclient 프롬프트에서 ? 입력시 사용 가능한 명령어를 알려주는데 get(파일서버에서 다운로드) / put(파일서버로 업로드)
    get [FILE_PATH], put [FILE_PATH]

Host-Only 말고 다른 사람이 VM FS에 접속 가능하도록 포트포워딩?

# TCP 포트 확인
\# ss -ant

# UDP 포트 확인
\# ss -anu 

5. NFS(Network File System; file storage -> 네트워크 파일 공유 -> 리눅스용 파일 시스템) - AWS EFS - 완전 관리형 서비스

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

NFS 서버 구축

# nfs 설치
\# yum install -y nfs-utils

# 루트 경로에 share 디렉터리 만들고 share 디렉터리로 이동
\# mkdir /share && cd $_
\# echo "Hello" > test.txt

# nfs 파일 시스템의 접근할 수 있는 ip 대역 및 권한 설정
\# vi /etc/exports
----------------------------------------------------------------------------------
# /etc/exports 입력 내용(공유할 경로 , IP 대역(권한, sync)) 
# - (권한, sync) 에 들어갈 내용은 많으나 필요하면 찾아보자
# /etc/exports 는 접근 제어와 권한을 설정하는 파일
/share 192.168.56.0/24(rw,sync)
----------------------------------------------------------------------------------


# 공유 디렉터리 권한 설정
\# chmod 707 /share
# NFS 서비스 활성화, nfs-server.service 로 해도된다.
\# systemctl enable --now nfs-server 

## export 하고 있는 NFS 디렉토리 확인
# NFS 서버에 익스포트(Export)된 디렉터리 정보를 관리 해주는 명령
# -v: 설정도니 내용을 자세히 출력
\# exportfs -v

# 방화벽 포트 규칙 설정
\# firewall-cmd --permanent --add-service=nfs # tcp 2049
\# firewall-cmd --permanent --add-service=rpc-bind # tcp 111
\# firewall-cmd --permanent --add-service=mountd
\# firewall-cmd --reload

클라이언트에서 NFS 마운트

\# rpm -qa | grep nfs-utils
\# yum install -y nfs-utils

## showmount - NFS/NIS 명령으로 지정한 시스템에서 원격으로 파일시스템을 마운트한 클라이언트 목록들을 보여준다. 
# -e 공유되거나 내보낸 파일 목록을 인쇄합니다.
# nfs IP
\# showmount -e 192.168.56.102
/*
	Export list for 10.0.0.129:
	/share 10.0.0.0/24
*/


\# mkdir my-nfs
# 마운트, nfs 타입의 네트워크로 공유된 디렉터리 
# 192.168.56.102:/share 을 /my-nfs 마운트한다.
\# mount -t nfs 192.168.56.102:/share ./my-nfs


# nfs 서버의 구축한 전체 디스크 정보를 가져온다.
\# df -h
/*
	192.168.56.102:/share    125G  1.6G  124G   2% /root/my-nfs
*/

부팅 시 NFS 서버 자동 마운트 설정

\# vi /etc/fstab

# /etc/fstab 입력 내용
## 192.168.56.102:/share(네트워크 정보) 대신 UUID자리이기도 함.
192.168.56.102:/share /root/my-nfs nfs defaults 0 0

우분투에 NFS 설치

설치 명령어

$ sudo apt update
$ sudo apt install nfs-common nfs-kernel-server portmap -y
$ sudo mkdir /share && cd $_
$ sudo vi /etc/exports
----------------------------------------------------------------
/share 10.19.0.0/24(rw,sync)
----------------------------------------------------------------

$ sudo chmod 707 /share
$ sudo systemctl restart nfs-server
$ sudo exportfs -v

윈도우 서버에 NFS Client 기능 설치

3. 윈도우 서버에 NFS Client 기능 설치

서버 관리자에서 역할 및 기능 추가 실행

다음

역할 기반 다음

서버 선택 및 다음

다음

NFS용 클라이언트 선택 및 다음

설치

설치 완료 확인

This PC - Computer - Map network drive

nfs 정보 입력 후 Finish

실습 1 (NAT) 최종 토폴로지

새로운 VM

가상 시스템 가져오기 centos7_minimal - ova 이미지 선택 - 다음 - 가져오기

초기 스냅샷 찍기

원본의 가상 mac 주소를 사용할 수도 있기 때문에 ip도 같을 수도 있다?

mac address 변경

머신 설정 ➡ 네트워크 ➡ NAT - NAT 네트워크로 변경 ➡ 고급 ➡ 새로고침 ➡ 확인

VM 랜카드

enp0s3-bridge 외부(public)
enp0s8-internal 내부(private)

자동 완성 설치

yum install -y bash-completion
source /etc/profile.d/bash_completion.sh

profile
끄적끄적 쓰는곳

0개의 댓글