본문 바로가기
AWS Cloud School 8기/서버가상화_클라우드 이미지

Proxy[정방향 프록시 (Forward Proxy)], SSH

by YUNZEE 2025. 2. 5.
728x90

📌 프록시 서버 (Proxy Server)란?

출처: https://fomaios.tistory.com/entry/Network-%ED%94%84%EB%A1%9D%EC%8B%9C-%EC%84%9C%EB%B2%84%EB%9E%80-feat-%ED%95%84%EC%9A%94%ED%95%9C-%EC%9D%B4%EC%9C%A0-What-is-a-Proxy-server

 

사용자와 인터넷 사이에서 중개 역할을 하는 서버 = 다수의 클라이언트를 대리함
➡ 사용자의 요청을 대신 처리하고, 대신 응답을 받아 전달

📌 즉, 사용자가 직접 웹사이트에 접근하는 것이 아니라, 프록시 서버를 거쳐서 접근하는 방식

✅ 2. 프록시 서버의 주요 기능

(1) IP 주소 숨기기 (익명성 제공)

✔ 사용자의 실제 IP 주소를 숨기고 프록시 서버의 IP로 웹사이트에 접근
익명성 보장 및 보안 강화

(2) 인터넷 속도 향상 (캐싱 기능)

✔ 자주 방문하는 웹사이트 데이터를 미리 저장
✔ 같은 요청이 있을 경우 인터넷에서 다시 다운로드하지 않고 저장된 데이터를 제공하여 속도 향상

(3) 보안 강화 (방화벽 및 필터링)

악성 웹사이트 차단, 유해 콘텐츠 제한 가능
✔ 기업에서는 직원들의 인터넷 사용을 제한하거나 모니터링 가능

(4) 네트워크 트래픽 절감

✔ 여러 사용자가 같은 콘텐츠를 요청할 경우 한 번만 다운로드하고 공유하여 트래픽 감소

 

✅ 3. 프록시 서버의 종류

(1) 정방향 프록시 (Forward Proxy)

💡 사용자가 프록시 서버를 통해 외부 인터넷에 접근하는 방식
예: 학교, 회사에서 인터넷 제한을 두기 위해 사용
예제:

  • 사용자가 YouTube에 접속하려고 하면, 프록시 서버를 통해 접속
  • 회사에서 특정 웹사이트 차단 가능

📌 동작 방식: 사용자 → 프록시 서버 → 인터넷 (YouTube 등)


(2) 리버스 프록시 (Reverse Proxy)

💡 외부 사용자가 특정 서버에 직접 접근하지 못하도록 중개 역할
✔ 주로 보안 강화 및 부하 분산(로드 밸런싱) 용도로 사용
예: 네이버, 구글 같은 대형 웹사이트에서 사용자 요청을 서버 여러 대에 분산 처리

📌 동작 방식: 사용자 → 리버스 프록시 서버 → 내부 웹 서버

 

기초 환경 설정 실습

- proxy server 구축

2 core 2GB 20GB로 만드시면 됩니다. IP는 211.183.3.77 /24

 

- 클라이언트 설치

-> 클라이언트 역할을 할 민트도 설치.

-> 민트 - 우분투 계열의 데스크톱을 위한 운영체제.

 

- 우하단의 네트워크 설정

 

프록시 서버로 가서

[root@proxy ~]# yum install -y squid

# 프록시 서버 패키지 설치.

 

[root@proxy ~]# vi /etc/squid/squid.conf

# 대상 설정.

- localnet이라는 이름의 출발지 주소 = 대리하고 싶은 서버인 민트가 속한 211.183.3.0/24

- 첫 번째 주석처리

- 두 번째 추가

- deny -> allow로 변경

- 주석 해제

-> 대리하여 가져온 파일들을 저장할 디렉터리 지정

 

[root@proxy ~]# systemctl restart squid

 

민트로 다시 돌아가서

- 실제로 프록시서버를 통해 접속한 건지 확인하기 위해 프록시 서버로 이동

✅ GW(기본 게이트웨이) 없이 네이버 웹페이지를 얻어온 이유

✔ 일반적으로, 기본 게이트웨이(GW)는 인터넷과 통신할 때 필요한 장치임.
✔ 그런데 GW 없이도 네이버 웹페이지가 로딩되었다는 것은?
클라이언트가 직접 인터넷에 나가지 않고, 프록시 서버를 통해 우회해서 요청을 보냈기 때문!


🔍 쉽게 설명하면:

✔ 원래 인터넷을 사용하려면 GW(라우터)가 필요함.
✔ 하지만, 프록시 서버가 대신 인터넷에 연결되어 있으면 GW 없이도 프록시 서버를 통해 우회 가능!


📌 네트워크 흐름을 쉽게 정리하면:

🚫 [GW가 없는 경우]

❌ 클라이언트(PC) → (GW 없음, 인터넷 못 감) → ❌ 인터넷

✅ [프록시 서버를 활용한 경우]

🟢 클라이언트(PC) → 프록시 서버인터넷
✔ 클라이언트가 직접 인터넷에 나가지 않고, 프록시 서버가 대신 요청을 처리함.
즉, 클라이언트는 프록시 서버만 알면 인터넷이 없어도 웹페이지를 볼 수 있음!

 

다시 proxy서버로 돌아가서

내가 설정한 211.183.3.100으로 잘 받아온다는 걸 알 수 있음

 

실습 과제

계정의 패스워드 설정 명령은 password <계정명> <패스워드>입니다. 민트 서버의 root 계정을 설정한 다음. root 계정으로 ssh 접속을 해보세요! 

- 게이트웨이 재설정 

- 터미널에서 핑 가는지 확인

 

user1@mint:~$ sudo passwd root
-> sudo: 관리자 권한으로 명령 실행
[sudo] password for user1: #user1       
New password: #test123
Retype new password: #test123
passwd: password updated successfully

- ssh 서버 서비스가 없는 걸 확인할 수 있음 

-> 설치 필요

- 우분투는 패키지 관리가 apt 혹은 apt-get(상위호환 느낌)

 

root@mint:/home/user1# apt install -y openssh-server

- 패키지 설치

- 만약 우분투를 비롯한 리눅스 서버에서 패키지가 설치 안되면, apt update -y로  update를 해보면 좋음.

그래도 안되면 다른 원인을 찾으면 됨. 

- 재시작을 시켜주지 않았지만 알아서 동작하는 걸 확인할 수 있음

- 방화벽이 존재하지 않고, 대부분 우분투 서버들은 방화벽이 off 되어있는 상태, 우분투에서는 방화벽 설정 명령 'ufw'

- 방화벽이 없는 상태

- user1로 하니까 접속이 잘되는 걸 확인할 수 있음

ssh 서버에 클라이언트로서 접속을 하면, 서버는 공개키를 제공함.

특히, 처음 접속하면, 클라이언트 스스로 사용자에게 위와 같은 경고메시지를 띄우고 자신의 목록에 내가 접속했던 서버의 공개키와 주소(IP나 호스트네임 등..)를 추가함.

다시 접속하면 이미 목록(리눅스의 경우 ~/.ssh/known_hosts)에 내가 접속한 서버의 주소에 대한 공개키가 존재한다면, 경고를 띄우지 않음.

- 리눅스의 경우 ~/.ssh/known_hosts 에 공개키가 저장됨.

📌 SSH (Secure Shell)란?

SSH는 원격 서버에 안전하게 접속할 수 있도록 도와주는 프로토콜
즉, 인터넷이나 네트워크를 통해 다른 컴퓨터에 접속하고, 명령어를 실행할 수 있는 기술임.

🔹 예제

💻 내 컴퓨터 (클라이언트) → 🌍 네트워크 (인터넷, 내부망) → 🖥 원격 서버 (Linux Mint, Ubuntu 등)

✅ SSH의 주요 기능

  1. 원격 접속 → 내 컴퓨터에서 다른 컴퓨터(서버)에 연결 가능
  2. 파일 전송 → scp, sftp를 사용해 파일을 전송할 수 있음
  3. 보안 강화 → 비밀번호 또는 SSH 키 인증을 사용하며, 암호화된 통신 제공

1. 키페어(key pair)

- private key(개인키 = client): 노출 불가능(열쇠) -> 비대칭키 = 다름

- public key(공개키 = server): 노출 가능(자물쇠) -> 비대칭키 = 다름

 

2. 인증

- 아이디 / 패스워드

- 공개키 방식(키페어 사용하는 방식)

세션 수립 전


세션 수립 후

3. 암호화(AES = 대칭키)

- 메시지를 어떻게 암호화/ 복호화할지 

 

root 계정으로 민트서버에 접속이 안 됐던 이유는? 인증방식이 아이디/ 패스워크를 불허라고 했기 때문임 => openssh -server의 설정을 변경하면 될 것

tab 두 번 탓탓 하면 나옴

 

root@mint:/home/user1# vi /etc/ssh/sshd_config

- ssh서버의 인증방식을 아이디/패스워드를 허용하게끔 하고 싶다.

 

root@mint:/home/user1# apt install -y vim

- vi 편집기가 이상하면 vim 편집기를 설치.

주석 해제 후 yes로 수정

root@mint:/home/user1# systemctl restart sshd

- 수정 후 재시작

로그인이 잘 됨

 

 

- 다시 proxy서버로 빠져나와서

- mint의 공개키

 

문제) mint 서버에 첫 접속 시(=공개키 모르는 상태) yes를 추가로 입력 안 하고 실행할 수 있는 방법이 뭐가 있을까요?

 

방법 1

- ssh 접속 명령어에 no를 전달하는 방식

 

방법 2

- ssh_config 파일을 수정

- 직접 가서 no로 수정해 주는 방식

@proxy .ssh]# vi /etc/ssh/ssh_config

 

- 다음 블로그에서는 3 tier architecture에 대해 공부하도록 하겠습니다!

728x90