220414

HyeonKi Jo·2022년 4월 14일
0
post-thumbnail

복습

포트번호

well-known 알려진 포트번호

  • 0 ~ 1023 (서버 포트)
  • 21(FTP)
  • 22(SSH)
  • 23(TELNET) : 옛날에 명령프롬프트로 접근하듯이 서버에 접속하는 포트였다. 현재의 SSH같지만 Secure가 아니라 보안이 약하다.
  • 25(SMTP) : 메일을 보낼때 사용하는 포트
  • 53(DNS) : 우리가 단순히 naver.com 이라고 들어갔었는데, 기계들 사이에서는 도메인을 IP로 변환하는 작업이 일어나고 있었다.
  • 67(DHCP)
  • 80(HTTP) : naver.com으로 들어갈 때, 자동으로 naver.com:80이 들어가서 접속 할 수 있는 것이다.
  • 443(HTTPS) : HTTP + Secure, 서버에 인증서를 넣고, 보안접속이 되는 프로토콜의 포트, 일반 HTTP는 스니핑의 가능성이 있다. 따라서, 쇼핑몰 같은 개인정보를 보관하는 사이트의 경우 법적으로 HTTPS를 사용하게 되어있다. 그래서 그런 사이트는 HTTPS 인증서를 구매해야한다.

unknown 알려지지 않은 포트번호

  • 1024 ~ 65535 (클라이언트 포트)
  • 3306(MYSQL) : MYSQL이 사용하는 서버포트 이지만, 예외적으로 unknown포트를 사용한다. unknown포트 수의 한계 때문이다.

실습

NAT

  • 우리는 진짜 NAT를 구성한 것이다. VBox에서 구성한 것이 아닌, 실제와 비슷한 환경으로 구축한 것이다.
  • 포트포워드를 구현할 것이다.
  • 밖에서 안쪽으로 들어오기 위해, 또 안쪽에 여러대의 서버가 있을 때 사용하는 포트포워드이다.

moba Xterm

  • SSH로 접속하기 위해, 아래 3가지가 있어야 한다.
    - Private Key
    • UserName
    • IP address (Domain 이 될 수도 있다.)
  • ESTAB에 현재 위치 ([IPaddress]:22)와 접속자 주소([IPaddress]:53525) 가 표시된다.
  • 왼쪽 Quick메뉴에서 192.168.0.123(root)에서 오른쪽 마우스 Edit해서 이름과 포트를 바꿀 수 있다.
  • root를 NAT로 설정하고 확인
  • 방금 설정한 Session을 오른쪽 마우스 클릭 Duplicate한다.
  • 총 4개를 만들고 각 서버에 맞는 이름과 포트를 설정한다.

포트포워팅

  • firewall-cmd --permanent --zone=external --add-forward-port=port=221:proto=tcp:toport=22:toaddr=[IPaddress]
  • firewall-cmd --permanent --zone=external --add-forward-port=port=222:proto=tcp:toport=22:toaddr=[IPaddress]
  • firewall-cmd --permanent --zone=external --add-forward-port=port=223:proto=tcp:toport=22:toaddr=[IPaddress]
  • firewall-cmd --reload
  • firewall-cmd --list-all --zone=external

DNS

Amazon route53

  • 도메인 주소와 IP 주소를 매핑하는 시스템이다.
  • 여러가지 그림이 있고 사람마다 다르지만, 위 그림이 기본적이다.

  • 도메인 네임 시스템(Domain Name System, DNS)은 호스트의 도메인 이름을 호스트의 네트워크 주소로 바꾸거나 그 반대의 변환(리버스)을 수행할 수 있도록 하기 위해 개발되었습니다.
  • 특정 컴퓨터(또는 네트워크로 연결된 임의의 장치)의 주소를 찾기 위해, 사람이 이해하기 쉬운 도메인 이름을 숫자로 된 식별 번호(IP 주소)로 변환해 줍니다.
  • 도메인 네임 시스템은 흔히 "전화번호부"에 비유됩니다. 인터넷 도메인 주소 체계로서 TCP/IP의 응용에서, www.example.com과 같은 주 컴퓨터의 도메인 이름을 192.168.1.0과 같은 IP 주소로 변환하고 라우팅 정보를 제공하는 분산형 데이터베이스 시스템입니다.
  • 그림에서 보면 첫번째 작업에서 ISP도메인서버에 물어본다.
    - ISP (Internet Service Provider) : KT, Uplus, sk등 인터넷 통신사
  • ISP도메인서버에서 알고 있다면 바로 답해주지만, 서버에서 모른다면 그 상위 도메인서버에 가서 물어본다.
  • 거기에도 없다면 최상위 서버에 올라간다.
  • DNS resolver가 한번 접속한 도메인은 일정기간 보유하고 있어, 한번 접속도메인에 또 접속하면 더 빠르게 접속할 수 있다.

  • 우리는 여기서 DNS Resolver를 만들 것이다.

DNS설치

  • yum -y install bind bind-chroot bind-utils
  • cp /etc/named.conf /etc/named.conf.bak :백업 만들기
  • vi /etc/named.conf
    - ggdG
    • 아래 options 복사
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/cocudeny.shop.zones";
};
  • 위에서 IP주소 제일 뒷부분이 0이라면 생략해준다.
  • 또, DNS Resolver에 없다면 다른 도메인 서버로 나갈 수 있도록 8.8.8.8, 8.8.4.4 주소를 넣어준다.

호스팅 영역 생성

  • 먼저 파일을 만든다.
# vi /var/named/cocudeny.shop.zones
zone "cocudeny.shop" IN {
        type master;
        file "cocudeny.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; };
};
  • 첫번째 zone은 도메인 -> IP로 바꿔주는 작업
  • 두번째, IP를 도메인으로 바꿔주는 작업 (보면 IP주소 순서가 거꾸로 되어있다.)
  • 세팅할 때는 도메인 끝에 점을 찍어준다.
  • 먼저 첫번째 zone의 cocudent.shop.db 파일 생성
    • WEB01_SAMBA [IPaddress]
    • WEB02_NFS [IPaddress]
    • DNS_DATABASE [IPaddress]
# vi /var/named/cocudeny.shop.db
$TTL    86400
@       IN      SOA     cocudeny.shop.   root.cocudeny.shop.(
                        2022041401 ; Serial
                        3h         ; Refresh
                        1h         ; Retry
                        1w         ; Expire
                        1h )       ; Minimum

        IN      NS      ns.cocudeny.shop.
        IN      MX 10   ns.cocudeny.shop.
DNS      IN      A       [IPaddress]
samba   IN      A       [IPaddress]
nfs   IN      A       [IPaddress]
  • 두번째 zone (리버스) 파일 생성
# vi /var/named/0.31.172.in-addr.arpa.db
$TTL	86400
@	IN	SOA	cocudeny.shop.	root.cocudeny.shop.(
			2022040401 ; Serial
			3h         ; Refresh
			1h         ; Retry
			1w         ; Expire
                        1h )       ; Minimum

	IN	NS	ns.cocudeny.shop.
5	IN	PTR	ns.cocudeny.shop.
  • record 가 호스트네임 IN A IP주소 순으로 되어있다.
  • SOA 정보
    - Serial : 년월일01, 만약 내용이 추가되면 02로 바꾸면 된다.(버전관리)

대표적인 레코드

  • SOA : 다루는 도메인 버전과 업데이트 시간 간격 등의 정보를 저장하는 레코드
  • A : 호스트 이름으로 IPv4 주소를 조회할 때 사용하는 레코드
    예: 호스트 ns.cocudeny.shop의 IPv4 주소는 172.31.0.130
  • AAAA : 호스트 이름으로 IPv6 주소를 조회할 때 사용하는 레코드
    예: jprs.jp의 IPv6 주소는
  • PTR : IP 주소로 호스트 이름을 조회할 때 사용하는 레코드
    예: 172.31.0.130의 호스트 이름은 ns.cocudeny.shop
  • NS : DNS 서버의 호스트 이름 혹은 IP 주소를 저장하는 레코드
    예: cocudeny.shop의 DNS 서버는 ns.cocudeny.shop
  • MX : 메일 서버 호스트 이름 혹은 IP 주소를 저장하는 레코드
    예: cocudeny.shop의 메일 서버는 mail.cocudeny.shop
    (메일 교환기, 메일서버를 구축할 때 사용한다.)
  • CNAME: 호스트 이름의 별칭을 저장하는 레코드
    예: www.cocudeny.shop은 ns.cocudeny.shop의 별칭
    (도메인을 도메인[별칭, alias]으로 바꿔준다.)

DNS 설정

  • systemctl enable --now named
  • vi /etc/dhcp/dhcpd.conf : dhcp설정에서 도메인 서버에 우리 도메인서버를 올린다.
  • systemctl restart dhcpd
  • systemctl restart NetworkManeger: 변경된 dhcp서버 업데이트
  • DNS서버, 그외의 다른 서버들에서 NetworkManager를 업데이트하고
  • cat /etc/resolv.conf 를 확인해준다.

방화벽 설정

  • firewall-cmd --permanent --add-service=dns
  • firewall-cmd --reload

HAproxy - AWS ELB - 로드밸런서 - 부하분산

  • HAProxy는 여러 서버에 요청을 분산시키는 TCP 및 HTTP 기반 애플리케이션을 위한 고가용성 로드 밸런서 및 역방향 프록시를 제공하는 무료 오픈 소스 소프트웨어 입니다. C로 작성되었으며 빠르고 효율적(프로세서 및 메모리 사용 측면에서)으로 유명합니다.
  • 필요할 때 마다. Web서버1 2 3 등 계속 수평적으로 확장하여 늘리고, 필요없다면 줄인다.
  • 부하가 몰리면 (로드) 분산시키는 역할을 한다.
  • 서버를 안정적으로 이어나갈 수 있도록 한다.

  • yum install -y 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
    server             web01 [IPaddress]:80 cookie check
    server             web02 [IPaddress]:80 cookie check
  • global : 전역, daemon(백그라운드에서 실행)
  • frontend를 80번포트를 사용하겠다. (default port, 따로 입력 안해도 들어가짐)
  • frontend에서 default_backend에서 뒤 backend_servers와 연결해준다.
  • backend에서 서버를 그룹으로 묶어준다.
  • backend backend_servers에서 처음 backend는 backend를 뜻하고,
    backend_servers는 이 서버 그룹의 이름이다.
  • 또, 이 서버들의 분산을 roundrobin방법을 사용할 것이다
  • cookie 는 앞에 #을 넣어 일단 주석처리 하겠다.

SELINUX 수정

  • 만약 sestatus가 disable이 아니라면
  • vi /etc/sysconfig/selinux
    - SELINUX = disabled 설정하고 저장한다.

web설정

  • web1, web2 둘다 실행해준다.
  • yum install -y httpd
  • systemctl enable --now httpd
  • firewall-cmd --permanent --add-service=http
  • firewall-cmd --reload

간단 web만들기

  • web1, web2에게 mkdir /var/www/html/images 해준다.
  • 위 폴더에 image를 넣어준다.
  • vi /var/www/html/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>

방화벽 조정

  • firewall-cmd --zone=external --list-all
  • firewall-cmd --zone=external --permanent --add-service=http
  • firewall-cmd --reload

그 외

  • dig A ns.cocudeny.shop : ip가 잘 연결되는지 확인 가능
  • dig -x [IPaddress]: 역방향 조회
  • yum install -y bind-utils : 이걸 설치해야 dig를 쓸 수 있다.
profile
Talking Potato

0개의 댓글