본문 바로가기
Linux

Proxy server 만들기

by Nirah 2022. 11. 15.

 

<< Proxy >>

 

옛날 인터넷 속도가 느렸을 때 외부 사이트에 접속을 더 빠르게 하기 위해 프록시 한대를 앞에 두었다.

지금은 인터넷 속도가 빨라져서 필요 없지만

리버스 프록시 라는 기술은 계속 쓰이고 있다. (ip 추적을 회피한다던지)

리버스 프록시는 프록시와는 반대로 외부에서 우리 네트워크로 접속할 때,

172.16.0.4 하나로 받기만 해도 172.16.0.1~3 서비스가 라운드로빈 방식으로 적절히 트레픽 분배가 되는 방식이다.

따라서 Proxy 서버는 로드밸런서로 쓰이면서 동시에 장애 발생 시 폴트 톨러런트 용으로 쓰인다.

뒷단인 내부 서비스 망에서는 10.0.0.1~3으로 별도로 통신하기 때문에 보안상에서도 이점이 있다.

 

참고로 AWS 에서도 이 haproxy 서비스를 제공하고 있다고 한다!

 

 

 

 

+) 2023.09.11 추가 공부

 

리버스(Reverse) 프록시

  • 클라이언트가 example.com 웹 서비스에 데이터를 요청하면
  • Reverse Proxy는 이 요청을 받아서 내부 서버에서 데이터를 받은 후
  • 이 데이터를 클라이언트에 전달하게 된다.

 

  • 내부 서버가 직접 서비스를 제공해도 되지만 이렇게 구성하는 이유는 보안 때문이다.
  • 보통 기업의 네트워크 환경은 DMZ라고 하는 내부 네트워크와 외부 네트워크 사이에 위치하는 구간이 존재하며
  • 이 구간에는 메일 서버, 웹 서버, FTP 서버등 외부 서비스를 제공하는 서버가 위치하게 된다.
  • example.com 사는 서비스를 자바로 구현해서 WAS를 DMZ에 놓고 서비스해도 되지만
  • WAS는 보통 DB 서버와 연결되므로 WAS가 최전방에 있으면
  • WAS가 털릴 경우 DB 서버까지 같이 털리는 심각한 문제가 발생할 수 있다.
  • 이 때문에 리버스 프록시 서버를 두고 실제 서비스 서버는 내부망에 위치시키고
  • 프록시 서버만 내부에 있는 서비스 서버와 통신해서 결과를 클라이언트에게 제공하는 방식으로 서비스를 하게 된다.

 

  • 특히 리눅스 환경이라면 리버스 프록시로 아파치 웹 서버를 사용한다면 SELinux 를 켜 놓으면
  • SELinux 의 기본 정책이 웹 서버는 톰캣의 8080, 8009 포트만 접근 할 수 있으므로
  • 아파치 웹 서버가 해킹당해도 웹 서버 권한으로는 내부망으로 연결이 불가하다.

 

 

 

 

 

<< Proxy Server 설정 >>

 

프록시 서버를 템플릿 클론으로 생성 후 어뎁터 카드 추가

호스트 온리로 카드 설정

# vi /etc/sysconfig/network-scripts/ifcfg-ens34

 

아래와 같이 처음 카드는 10.0.0.x로

새로 꼽은 카드는 172.16.0.x로 구성한다

 

 

 

웹 서비스 DNS 서버인 CentOS 1~3도 동일하게 추가해 준다.

(기존 10.0.0.x 어뎁터와는 별도로 172.16.0.x 아이피로 새 어뎁터 카드를 구성해준다)

 

# systemctl restart network

 

 

 

 

Proxy Server 구성

 

# yum install haproxy

# vi /etc/haproxy/haproxy.cfg

 

외부에서 들어오는 포트 번호 80번은 Haproxy가 쓸 것이기 때문에 프론트엔드의 포트 값을 변경해 준다.

d이름은 main 으로 한다.

 

우리가 운영하는 서비스 10.0.0.1~3 의 다른 네트워크 카드인 172.16.0.1~3을 프록시 통신용으로 제공한다.

app1~4 부분은 임의로 이름을 정해줘도 된다.

 

# systemctl start haproxy

 

# firewall-cmd --permanent --add-port=80/tcp

 

# firewall-cmd --reload

 

이렇게 프록시 서버를 서비스들 앞단에 운영하게 되면

아래와 같이 서비스를 제공하는 서버 자체에서 로드밸런스를 시도하는 것 보다 훨씬 안정적이다.

 

 

 

참고!

포트번호 여러개로 받거나, 여러 쌍의 로드밸런싱을 하고 싶으면

더 자세한/etc/haproxy/haproxy.cfg  설정 정보는 여기를 참조해라.

https://raid-1.tistory.com/111

 

HAProxy - Multi LoadBalancing

Docker + HAProxy + WEB(httpd,nginx) HAProxy에서 다중 port를 활용하여 Multi LoadBalancing 을 구현해 보겠다. 사실 Proxy서버는 WEB서버랑 분리되어 있는 것이 맞지만 편의상 안에 들어가 있게 설계해 보겠다. HAProx

raid-1.tistory.com

 

 

============================================================================

 

~중간 설명 타임~

 

저번에 만들었던 존파일 자체의 로드밸런스다. 문제점이 많이 있었다.

 

원래 존파일로 하던 로드밸런스 문제점:

같은 도메인 서버를 갖는 내부 네트워크에선 위와 같은 설정을 서버와 똑같이 받으니까 로드밸런스를 할 수 있는데,

외부 네트워크에 대한 존 파일을 작성할 땐 로드밸런스를 적용하기 어렵다.

왜냐면 저 10.0.0.1~3 부분은 아래와 같이 전부 외부IP주소를 적기 때문이다.

아래와 같이 접속처가 다 똑같아서 로드밸런스가 작동 안한다.

(아래는 rkm.com이라는 사이트를 본인 DNS에 등록하는 존파일 설정 장면이다.)

 

===========================================================================

 

 

Proxy Server설정 후 프록시를 거쳐 외부 네트워크로 나갈 수 있게 되면,

기존 DNS 존파일 설정을 다음과 같이 바꾸어 주면 된다.

프록시 뒷단 주소: 10.0.0.4 쪽으로 @와 www를 받는 것으로 설정해 본다.

 

# vi /var/named/shrshr.shop

 

정방향 존

역방향 존

# systemctl restart named

 

 

다음과 같이 window 머신에서 10.0.0.4로 접속하거나 shrshr.shop으로 접속한 뒤

새로고침F5를 연타하면 1번서버html - 2번서버html - 3번서버html 순서대로 페이지가 바뀌는 것을 볼 수 있다.

1~3번 센토스로 잘 로드분산 되고 있는 것이다.

 

'Linux' 카테고리의 다른 글

Mail Server 만들기  (0) 2022.11.16
history에 시간정보 표시하는 명령어  (0) 2022.11.16
WEB  (0) 2022.11.14
보조 DNS 설정 (Master, Slave)  (0) 2022.11.14
DNS Server  (0) 2022.11.11