리눅스 환경의 서버를 사용할 때,
외부 네트워크와 연결되지 않은 상태에서 일부 외부의 네트워크와 연결이 필요할 경우 Proxy 시스템을 필요로 합니다.
이 때, 리눅스 환경에서는 주로 Squid 서비스를 사용하여 Proxy 시스템을 구축합니다.
Proxy(프록시)
외부 네트워크와 연결되지 않은 클라이언트 서버에서도 연결할 수 있도록 수행하는 시스템입니다.
외부 네트워크와 클라이언트 서버 간 통신을 수행할 때,
Proxy 서버에 시스템 구축하고 Proxy 서버를 경유하는 구조입니다.

Squid
리눅스 환경에서 Proxy 시스템을 구축할 수 있도록 지원하는 서비스입니다.
TCP 3128 서비스 포트를 할당하며,
사용자가 원하는 서비스 포트로 외부 네트워크와 클라이언트 서버 간의 네트워크 통신을 지원합니다.
이번 글에서는 리눅스 서버에 Squid 서비스를 설치하여 Proxy 시스템을 구축해보도록 하겠습니다.
Proxy Server
Squid 서비스 설치
Proxy 서버에 Squid 서비스를 설치합니다.
# dnf install squid
Proxy 네트워크 설정
Squid 서비스 설정 파일을 통해 Proxy 시스템을 구축합니다.
# vim /etc/squid/squid.conf
Squid 서비스의 설정 구조는 크게 2가지로 구분할 수 있으며,
각각의 역할을 참고하여 구축하고자 하는 서비스에 맞게 설정을 하면 됩니다.
허용할 IP 및 포트

어떠한 클라이언트 IP 및 IP 대역에서 외부 네트워크와 연결할 것인지 설정하는 부분입니다.
기본적으로 제공하고 있는 IP 대역 외에 특정 IP 및 IP 대역을 허용하고 싶다면 아래와 같이 설정을 추가합니다.
acl localnet src 172.27.0.0/24
acl localnet src 172.27.0.198/32

외부 네트워크와 어떠한 서비스 포트 통신을 연결할 것인지 설정하는 부분입니다.
기본적으로 제공하고 있는 서비스 포트 외에 특정 서비스 포트를 허용하고 싶다면 아래와 같이 설정을 추가합니다.
acl Safe_ports port 22
acl Safe_ports port 1-65535
acl SSL_ports port 443
웹 액세스 허용 및 차단

Squid 서비스를 통해 웹 액세스 허용 및 차단을 설정하는 부분입니다.
Proxy 시스템을 구축할 때 가장 신경을 써야 하는 설정으로,
꼭 상황에 맞게 보안 설정을 구축해야 안전하게 서비스를 운영할 수 있습니다.
http_access allow all // 웹 액세스 전체 허용
http_access allow localnet // 클라이언트 서버의 웹 액세스 허용
http_access deny all // 웹 액세스 전체 차단
http_access deny !Safe_ports // 웹 액세스 서비스 포트 차단
http_access deny CONNECT !SSL_ports // 웹 액세스 서비스 포트 차단(SSL)
Squid 서비스 시작
설정을 모두 완료하였다면, Proxy 시스템을 사용하기 위해 서비스를 시작합니다.
# systemctl start squid
# netstat -tlnp | grep 3128
tcp6 0 0 :::3128 :::* LISTEN 686878/(squid-1)
이제 Client Server에서도 Proxy Server를 연결하고 외부 네트워크 통신을 확인하도록 하겠습니다.
Client Server
Proxy Server 연결
Client Server에서 Proxy Server를 경유할 수 있도록 연결 설정을 합니다.
해당 설정은 /etc/bashrc 파일의 하단에 추가해주면 됩니다.
# vim /etc/bashrc
...
export http_proxy=172.27.0.199:3128
export https_proxy=172.27.0.199:3128
Bash 설정 적용
/etc/bashrc 파일에 추가한 설정이 시스템에 적용될 수 있도록 합니다.
# source /etc/bashrc
외부 네트워크 통신 확인
외부의 웹 사이트 또는 서버로 통신 시도를 하여 정상적으로 송/수신을 할 수 있는지 확인합니다.
저는 Google 사이트를 통해 확인하였으며, 아래의 이미지와 같이 컨텐츠를 정상적으로 호출할 수 있다면 성공입니다.
# curl www.google.com

이번 글에서는 외부 네트워크와 연결이 불가한 폐쇄망 서버에서도 연결할 수 있도록 Squid 서비스를 활용해 보았습니다.
네트워크 방화벽에서 직접 외부 네트워크와 연결하는 방법도 가능하겠지만,
보안 이슈 또는 직접 연결이 불가한 환경이라면 Squid 서비스를 통해 Proxy 구조를 구축하는 것도 유용한 방법입니다.
단, 강력한 Squid 보안 설정을 적용 및 관리하여 폐쇄망 서버에서 네트워크 보안 이슈가 발생하지 않도록 주의를 부탁드립니다.
감사합니다.