Linux

http-proxy 설정, forward proxy, reverse proxy

eden.do 2022. 8. 19. 16:33

설정 배경

docker image를 받아올 때 외부 repo에서 가져올 경우 받아온 이미지에 악성 코드가 심어져 있거나 하는 보안적인 문제가 발생할 수 있습니다. 그래서 사내 container registry를 만들어 docker image를 가져와 사용하도록 하는데 최근 구성된 k8s 클러스터는 이 registry 설정이 되어 있었지만, 이전에 구성된 k8s 클러스터의 경우에는 설정이 필요합니다. 

사내 네트워크와 외부 네트워크가 통신할 때는 회사에서 설정해놓은 프록시를 거쳐 통신을 하게 됩니다. 예를 들면, 이전에 docker hub에서 이미지를 Pull 해올 때 사내 네트워크에서 보내는 요청이 프록시 서버로 전송이 되고 이 프록시 서버가 이 요청을 대신 처리하여 사내 네트워크의 서버로 응답을 해줍니다. 

사내에서 제공하는 서버들은 이러한 프록시 설정이 기본으로 되어 있기 때문에 내부 repository로 접근하게 될 때는 no proxy(프록시를 거치지 않고 통신하는 도메인들)로 설정해야 합니다. 그 이유는, 프록시가 설정되어 있어 내부 repository에 접근할 때도 프록시를 거치기 되는데 이 프록시 ip로 다시 내부에 접근하는 것으로 보여서 접근을 막게 됩니다. 그러므로 사내 repo는 no proxy로 설정이 필요합니다. 

forward proxy, reverse proxy

forward proxy는 내부망에서 외부망으로 데이터가 전달이 될 때, 특정 사이트를 가려고 할 때, 가고 싶은 목적지 사이트의 주소를 직접 프록시 서버에 전달하며 프록시 서버가 해당 목적지 사이트의 내용을 받아와서 요청한 쪽으로 전달을 해주는 개념이고 말 그대로 대신 처리해주는 역할을 합니다. 캐싱 기능이 있으므로 자주 사용되는 컨텐츠들은 프록시 서버에 캐싱해놓아 성능 향상을 가져올 수 있고, 프록시에서 특정 사이트는 접근이 불가능하도록 제한을 걸 수도 있기 때문에 기업 환경에서 많이 사용되는 방식입니다. 

 

reverse proxy는 사용자가 reverse proxy로 설정된 서버의 주소로 데이터를 요청하면, 프록시 서버가 이 요청을 받아서 실제 내부 서버에서 데이터를 받아와 클라이언트에게 전달해주는 개념입니다. forward는 내부에서 외부로 요청을 하는거였다면, reverse는 외부에서 내부로 요청하는 경우가 해당합니다. 보안을 위해서 주로 사용하고, 보통 기업은 내부 네트워크와 외부 네트워크 사이에 위치하는 DMZ라는 구간이 있는데 이 구간에는 메일, 웹, FTP 서버 등 외부 서비스를 제공하는 서버들이 있습니다. DMZ에 보통 WAS 서버를 위치시키는데 이 WAS 서버는 DB 서버와도 연결이 되기 때문에 WAS 서버가 공격을 당하면 DB 서버도 같이 공격을 당할 수 있겠죠. 그래서 이런 이유 때문에 reverse proxy를 두고 실제 서비스는 내부에 위치시켜서 프록시 서버가 내부 서버와 통신을 해서 데이터를 받아오는 형식으로 사용합니다. 

 

설정 방법

약간 삼천포로 빠진거 같지만... 어쨌든! 이 docker의 프록시 설정을 하려면 아래의 방법으로 진행하면 됩니다. 

no-proxy로 사내 repo 설정을 하면 됩니다. docker의 경우에는 아래와 같이 진행하지만, apt, yum 등등 http-proxy에 대한 설정 방법은 여러 가지가 있습니다. 

[root@kep-cloudeng-mgmt1 ~]# vi /etc/systemd/system/docker.service.d/http-proxy.conf
[Service]
Environment="HTTP_PROXY=" "HTTPS_PROXY=" "NO_PROXY= *.xxxxxx.xxx.xxx"