본문 바로가기
SeSAC/네트워크 & 리눅스

[SeSAC 성동캠퍼스 1기] 네트워크&리눅스 4일차

by zivvon 2023. 11. 8.
목차 접기

💡Mission!

이미지 브릿지 모드로 변경하고, 포트 번호 80번으로 변경하고, 친구 컴퓨터에서 잘 나오는지 확인하기!

 

- 이미지 브릿지 모드로 변경하기

VMware Workstation Edit에서 'Virtual Network Editor' 편집기 열고 Bridged 모드로 변경해주기

 

- PuTTY 들어가서 네트워크 재설정

sudo nmtui

 

- nginx 80번 포트로 변경하기

vi /etc/nginx/sites-enabled/default

 

- index.html 파일 꾸미기

vi /var/www/html/index.html
<html>
  <head>
    <meta charset="utf-8">
  </head>
  <body>
    <img src="./001.jpg">
    안녕하세요. Jiwon's 페이지입니다!
  </body>
</html>

 

✏️ 브릿지 모드란?

Bridged 모드를 사용하면 모든 게스트 가상 시스템이 호스트 물리적 시스템과 동일한 서브넷 내에 표시됨. 동일한 물리적 네트워크에 있는 기타 모든 물리적 시스템은 가상머신을 인식하고 가상머신에 액세스 가능.

 

Host-Only?

외부 네트워크와 연결 없이 Host-only 방식을 사용하는 VMware끼리만 통신이 가능. 즉, VMware끼리의 네트워크 대역이 따로 구축되어있어, 외부 네트워크와 호스트 PC와는 통신이 안되고 서로 통신만 가능함

 

NAT?

VMware를 사용할 때, 가장 많이 사용하는 네트워크 방식. NAT 방식을 사용하는 VMware는 IP를 호스트 PC에게서 할당받음. 그리고 호스트 PC는 공유기에게서 IP를 할당받음. (즉, 외부 네트워크와 호스트 PC 전부와 통신 가능)

 

✏️ Bridge와 NAT의 차이? ⭐

A ) VMware가 IP 할당을 어디서 받느냐의 차이. NAT 방식을 사용하는 VMware가 IP를 호스트 PC에게서 받았다면 Bridge 방식을 사용하는 VMware는 IP를 공유기에게 부여받음. 즉 공유기가 호스트 PC와 가상머신에 같은 네트워크 대역의 IP를 각각 할당하기 때문에 호스트 PC와 가상머신은 동일한 수준의 물리적 PC로 인식됨.

 


 

💡Mission!

테트리스 게임을 설치해서 실행해보자!

https://github.com/vicgeralds/vitetris/releases/tag/v0.59.1

 

Release 0.59.1 · vicgeralds/vitetris

Fix some options not taking effect (#20)

github.com

 

1. wget을 통해 tar.gz 파일을 받아온다
2. tar.gz 파일 압축 해제
tar xvzf​

3.
apt-get install build-essential

4. 실행할 수 있는 파일을 찾아 실행하기
./configure

5. 상호 접속
./tetris listen 8888 (기다리는 쪽)
./tetris connect 접속할 IP:8888 (접속하는 쪽)

결과 화면

 


 

시스템 네트워크 보안 기술

[ 프로토콜의 이해 ]

- 프로토콜(protocol) : 컴퓨터가 메시지를 전달하고, 메시지가 제대로 도착했는지 확인하며, 메시지가 제대로 도착하지 않으면 메시지를 재전송하는 일련의 방법을 가리키는 '기술적 은어'라는 뜻

 

- 프로토콜의 3가지 요소!

-1) 구문(syntax) : 데이터의 형식이나 신호로, 부호화 방법 등을 정의

-2) 의미(semantics) : 오류 제어, 동기 제어, 흐름 제어 같은 각종 제어 절차에 관한 제어 정보 정의

-3) 순서(timing) : 송/수신자 간 혹은 양단(end-to-end)의 통신 시스템과 망 사이의 통신 속도나 순서 등을 정의

 

- 프로토콜의 기능

~> 주소 설정(Addressing) : 각 전송 계층에 맞는 송신자와 수신자의 주소 지정

~> 순서 제어(Sequence Control) : 데이터 단위가 전송될 때 보내지는 순서 명시

~> 데이터 대열의 단편화 및 재조합(Fragmentation & Reassembly)

: 전송 효율이 높은 작은 단위로 단편화 및 응용 프로그램에서 사용하기 위해 재조합

~> 캡슐화(Encapsulation) : 데이터에 제어 정보 덧붙임

~> 연결 제어(Connection Control) : 연결 설정, 데이터 전송, 연결 해제에 대한 통제 수행

~> 흐름 제어(Flow Control) : 송신측 개체로부터 오는 데이터의 양이나 속도 조절

~> 오류 제어(Error Control)

: 데이터를 교환할 때 SDU(Service Data Unit)나 PCI(Protocol Control Information)에 대한 오류 검사

~> 동기화(Synchronization)

: 두 개체 간에 데이터가 전송될 때 각 개체는 특정 타이머 값이나 윈도우 크기 등을 통해 서로의 상태를 일치시킴

~> 다중화(Multiplexing) : 여러 시스템이 동시에 통신할 수 있는 기법

~> 전송 서비스 : 우선순위 결정, 서비스 등급과 보안 요구 등을 제어

 

[ 네트워크 계층 프로토콜 ]

- ICMP(Internet Control Message Protocol) : 송신측의 상황과 목적지 노드의 상황을 진단하는 프로토콜

~> 호스트 서버와 인터넷 게이트웨이 사이에서 메시지를 제어하고 오류를 알려줌

~> ICMP를 사용하는 대표 툴은 ping

~> IP는 비연결형 프로토콜로 패킷이 확실히 전송된다는 보장이 없기 때문에 라우터나 노드(호스트) 등에서 오류가 생겨 목적지까지 도달하지 못할 수 있으므로 송신측의 상태를 알려줘야 하는데, 이 때 필요한 것이 ICMP!

~> IP 계층 위에서 동작하지만 TCP, UDP의 전송 계층 프로토콜과는 별개

~> ICMP Echo Request 메시지, ICMP Destination Unreachable 메시지

 

- IGMP(Internet Group Message Protocol) : 멀티캐스트에 관여하는 프로토콜로 멀티캐스트 그룹 관리

~> 유니캐스트

    -> 한 호스트에서 다른 호스트로 전송 (송/수신단이 1:1로 대비)

    -> 일반적인 IP 데이터의 전송은 모두 유니캐스트 사용

 

~> 브로드캐스트

    -> 호스트에서 IP 네트워크에 있는 전체 호스트로 데이터 전송

    -> TCP/IP에서 브로드캐스트용 주소는 IP 호스트 대역 주소가 모두 '1(2진수로 표현할 시에)'인 경우

    -> 일반적인 브로드캐스트는 255.255.255.255

    -> 특정 네트워크에 브로드캐스팅 하는 것을 다이렉트 브로드캐스팅

         ex) C 클래스의 211.32.34.0 네트워크 대해 브로드캐스팅 하고자 하는 경우 목적지 주소 211.32.34.255

 

~> 멀티캐스트

    -> 유니캐스트와 브로드캐스트의 중간 형태

    -> 송신하는 하나의 호스트에 특정한 호스트를 묶어서 전송

    -> 지정한 주소로 패킷을 한 번만 전달하면 멀티캐스트 그룹에 속한 모든 호스트에 전달되기 때문에 효율이 높음

    -> IP 멀티캐스트 주소는 Class D 주소 대역(244.0.0.1 ~ 239.255.255.255)로 규정

 

[ 전송 계층 프로토콜 ]

- TCP(Transmission Control Protocol) : 전송 계층에서 동작하는 연결 지향형 프로토콜

 

[ 응용 계층 프로토콜 ]

: 사용자가 사용하는 응용 프로그램이 네트워크와 통신하기 위해 사용하는 프로토콜

 

- FTP(File Transfer Protocol) : 파일 전송을 위한 가장 기본 프로토콜, RFC 114로 1971년에 만들어짐

~> FTP 연결은 컨트롤 연결과 데이터 연결로 나뉨

~> 컨트롤 연결 

 FTP 서버가 21번 포트를 열고 클라이언트의 요청을 기다림(수동적 포트 오픈) -> 클라이언트에서 임의의 포트를 설정하여 FTP 요청을 보냄(능동적 포트 오픈)

 

- Telnet(23) : 사용자가 원격에 있는 서버에 로그인하도록 TCP 연결을 설정하며, 단말기가 원격 컴퓨터 바로 옆에 있는 것처럼 직 접 조작할 수 있게 해줌

 

~> 텔넷이 제공하는 서비스

- 원격 시스템에 표준 인터페이스를 제공하는 네트워크 가상 단말기(NVT, Network Virtual Terminal) 기능을 제공
- 클라이언트와 서버가 통신 옵션을 교환할 수 있는 메커니즘을 제공한다. 예를 들어, 7비트 ASCII 코드로 데이터를 주고받을 수도 있고, 8비트 코드로 데이터를 주고받기 가능
- 양단 간의 통신이 대칭적으로 수행되며, 클라이언트측에서 항상 사용자 단말기가 사용되는 대신 임의의 프로그램이 클라이 언트로 작동할 수 있다

 

 

- SMTP(Simple Mail Transfer Protocol) : 메일 전송을 위한 프로토콜

 

- DNS(Domain Name Service) : 도메인 이름 주소를 통해 IP 주소를 확인할 수 있는 프로토콜

 

- TFTP(Trivial File Trasfer Protocol) : 1985년에 만들어졌으며 FTP처럼 파일을 전송하기 위핸 프로토콜

 

- HTTP(Hyper Text Transfer Protocol) : 인터넷 서비스를 위한 프로토콜

 

- POP3(Post Office Protocol 3) & IMAP(Internet Message Access Protocol)

: 메일 서버로 전송된 메일을 확인할 때 사용하는 프로토콜.

⚠️ IMAP도 POP3와 기본적으로 같으나 메일을 읽은 후에도 메일이 서버에 남는다는 점이 다름

 

- RPC(Remote Procedure Call) : 썬(Sun)의 Remote Procedure Call을 가리킴

 

- NetBIOS(Network Basic Input/Output System) : 사무기기와 윈도우 시스템 간의 파일공유를 위한 프로토콜

 

- SNMP(Simple Network Management Protocol) : 네트워크 관리와 모니터링을 위한 프로토콜

 

[ 네트워크 서비스 ] 

- NAT(Network Address Translation)

- DHCP(Dynamic Host Configuration Protocol)

- DNS(Domain Name System)

 


 

💡Mission!

3tier 구축하고 ping 공격해보기

 

1. 이미지 3개 구축하기

 

용량이 없어서 여기서부터 못 따라갔다 ^^...

동기분이 차근차근 알려줘서 이해 완료

이 자리를 빌어 정말 감사합니다 ㅎ.ㅎ...ㅎ..

 

2. Attacker, WEB 이미지 가동

ping 보낼 Attacker에 hping3 다운받기

apt-get install hping3

 

3. 'Ping of Death'

: ICMP를 이용해 대용량의 조각화 된 패킷을 전송해 Target에서 재조립하지만, 모든 자원을 사용하게 되어 시스템이 다운됨

hping3 --icmp [Target_IP주소] --rand-source

 

⚠️ log 메세지 그만 보고 싶으면!

hping3 --icmp [Target_IP주소] --rand-source --flood

 

이로써 ping을 계속 계속 보내는 ping 공격이 완료됨!

 

4. 공격 받는 서버에서 ping 공격 확인하기!

netstat로 안 보이기 때문에 tcpdump를 사용해서 확인하자!

 

✏️ tcpdump란?

A) 리눅스/유닉스 계열 OS에서 조건식에 만족하는 네트워크를 통해 송수신 되는 패킷 정보를 표시해주는 프로그램

tcpdump -w icmp.pcap

 

 

5. 윈도우에 icmp.pcap 파일 보내서 확인하기

다양한 방법이 있지만 was 서버랑 연동되어 있어서 404 에러가 뜨는 바람에 winSCP 툴을 사용해서 확인했다.

 


 

💡Mission!

WAS-WEB 이미지 연동하기!

 

[ WAS 설치 및 설정 ]

1. VMware Workstation에서 WAS 이미지 가동하기
2. 터미널로 WAS 서버에 접속하기
ssh 계정명@ip주소​

3. 톰캣 소스 다운로드
wget http://archive.apache.org/dist/tomcat/tomcat-9/v9.0.4/bin/apache-tomcat-9.0.4.tar.gz

4. 압축 해제 & 경로 이동
tar xvzf ./apache-tomcat-9.0.4.tar.gz
mkdir /usr/local/tomcat
mv ./apache-tomcat-9.0.4/* /usr/local/tomcat/

5. java sdk 설치
sudo apt-get install openjdk-8-jdk

6. 톰캣 실행
/usr/local/tomcat/bin/startup.sh

+ 번외로! 톰캣 다운시키는 명령어
/usr/local/tomcat/bin/shutdown.sh

7. 톰캣 구동 확인하기
netstat -anp | grep "8080" or "java"

 

[ WEB 설정하기 ]

1. nginx 파일 수정하기
vi /etc/nginx/sites-available/default​
location / {
    index index.html index.htm index.jsp;
    proxy_pass http://[WAS 서버 IP주소]:8080;
}


2. nginx 재구동

systemctl start nginx
service nginx start

3. 브라우저를 통해 웹서버로 요청한 결과 확인하기!
하단 결과화면 참고!
but... ROOT 디렉토리로 설정을 옮겨서 404 에러가 뜬다.
하지만 정상이라는 점! ^^

4. /usr/local/tomcat/webapps/ 아래에 "ROOT" 디렉토리 생성하기
mkdir /usr/local/tomcat/webapps/ROOT/​

5. "ROOT"를 "ROOT.ori"로 바꿔주기
mv ROOT ROOT.ori​

6. 다시 "ROOT" 생성하기
mkdir ROOT​

7. ROOT 디렉토리에 test.jsp 파일 만들어서 꾸며주기
vi test.jsp​

8. 톰캣 내렸다가 다시 재구동
/usr/local/tomcat/bin/shutdown.sh
/usr/local/tomcat/bin/startup.sh​

9. 브라우저 상에서 확인하기
[WEB IP 주소]/test.jsp​

하단 결과화면2 참고!

✏️ jsp 파일에서 한글이 깨진다면?!
A) 아래 코드를 vi 파일 상단에 달아주자! jsp에서는 메타 태그가 작동하지 않는다.
<%@ page language="java" contentType="text/html; charset="UTF-8" pageEncoding="UTF-8"%>

결과 화면
결과 화면2


 

오늘의 후기

: 용량을 정리해야겠다. 아직 왜 리눅스를 배우는지조차 잘 이해가 되지 않는데 코딩 처음 시작했을 때처럼 하다보면 자연스럽게 이해가 되는 부분이 생기지 않을까 싶다. 열심히! 매일매일! 꾸준히.. 해야겠다 파이팅 :) ㅋ