【AWS 메모⑥】프록시 서버 구축(Squid3.5)

Squid3.5를 일로 사용할 기회가 있었으므로 비망록적인 것을 남겨둔다.

전제



다음 환경에서 실행.

서브넷


서브넷 이름
라우팅 테이블 설정


public-subnet
・local

private-subnet
· local · 인터넷 게이트웨이


보안 그룹


보안 그룹 이름
설정


public-sg
・사내 글로벌 IP 주소로부터의 액세스를 허가(포트 22) ・public-sg로부터의 액세스를 허가(포트 3128) ※ Squid의 포트

private-sg
· public-sg로부터의 액세스 만 허가 (포트 22)


EC2


호스트 이름
OS
보안 그룹


proxy-server
Amazon Linux 2
public-sg

private-server
Amazon Linux 2
private-sg


Squid의 동작 모드는, 포워드 프록시로 실시해, 프라이빗 서브넷 내의 EC2의 패키지 갱신은, Squid를 인스톨한 프록시 서버를 중계해 실시한다.



프록시 서버 설정



proxy-server에 Squid3.5를 설치합니다.
$ sudo yum install squid -y

자동 시작을 활성화합니다.
$ sudo systemctl enable squid

설정방법①



관리하는 서버의 대수나 서브넷의 수가 적은 경우는, Squid의 설정 파일에 직접 대상의 IP 주소 또는 서브넷의 CIDR을 기술하는 일이 있다.

Squid 설정 파일을 엽니다.
$ sudo vi /etc/squid/squid.conf

설정 파일에 다음 설정을 추가합니다.

여기에서는 프라이빗 서브넷으로부터의 모든 액세스를 허가한다.
# 追加: プライベートサブネット用の変数を作成
acl private-subnet src <プライベートサブネットのCIDR>
# 追加: プライベートサブネットからのアクセス許可
http_access allow private-subnet

포트 번호 지정(기본적으로 3128)
# Squid normally listens to port 3128
http_port 3128

설정 완료 후 서비스를 다시 시작합니다.
$ sudo service squid restart

설정 방법②



설정방법 ①과 달리 서버의 대수나 서브넷의 수가 많은 경우에 관리를 쉽게 하기 위해 화이트리스트라는 외부파일을 준비하는 방법이 있다.

다음 파일을 만듭니다.
$ sudo vi /etc/squid/acl/whitelist.txt

프록시를 경유하려는 서버의 사설 IP 주소 또는 서브넷의 CIDR을 설명합니다.
プライベートサブネットのCIDR
サーバーのプライベートIPアドレス
サーバーのプライベートIPアドレスその2
        ・
        ・

작성한 외부 파일을 설정 파일로 읽도록 설정한다.
$ sudo vi /etc/squid/squid.conf

다음 설정을 추가합니다.
# 外部ファイルを読み込み、変数を生成
acl Whitelist dstdomain "/etc/squid/acl/Whitelist.txt"
# 外部ファイルに設定されたサーバー、サブネットからのアクセスを許可
http_access allow Whitelist
http_access deny all

설정 완료 후 서비스를 다시 시작합니다.
$ sudo service squid restart

개인 서버 설정



프록시 서버를 통해 액세스하기 위해 yum 및 wget 구성 파일에 프록시 설정을 수행합니다.

yum 설정



구성 파일을 엽니다.
$ sudo vi /etc/yum.conf

프록시 설정을 추가합니다. (포트 번호는 Squid의 기본값)
proxy=http://<プロキシサーバーのプライベートIPアドレス>:3128

wget 설정



구성 파일을 엽니다.
$ sudo vi /etc/wgetrc

프록시 설정을 추가합니다. (포트 번호는 Squid의 기본값)
http_proxy=http://<プロキシサーバーのプライベートIPアドレス>:3128/
https_proxy=http://<プロキシサーバーのプライベートIPアドレス>:3128/
ftp_proxy=http://<プロキシサーバーのプライベートIPアドレス>:3128/

동작 확인



개인 서버에서 패키지를 설치합니다.
$ sudo yum install vim

wget의 동작도 확인한다.
$ wget -pkK https://www.gnu.org/software/wget/

덤 ① : 로그 포맷 설정



프라이빗 서버로부터의 액세스가 있으면, 프록시 서버에 로그가 보존된다.
$ sudo vi /var/log/squid/access.log

기본 설정이라면 액세스 시간을 알기 어렵습니다.
1568267525.352   1183 xxx.xx.xx.xx TCP_TUNNEL/200 19161 CONNECT www.gnu.org:443 - HIER_DIRECT/209.51.188.148 -
1568267525.946    591 xxx.xx.xx.xx TCP_TUNNEL/200 4197 CONNECT www.gnu.org:443 - HIER_DIRECT/209.51.188.148 -
1568267526.558    610 xxx.xx.xx.xx TCP_TUNNEL/200 6509 CONNECT www.gnu.org:443 - HIER_DIRECT/209.51.188.148 -
1568267527.168    609 xxx.xx.xx.xx TCP_TUNNEL/200 7403 CONNECT www.gnu.org:443 - HIER_DIRECT/209.51.188.148 -
1568267527.919    748 xxx.xx.xx.xx TCP_TUNNEL/200 19351 CONNECT www.gnu.org:443 - HIER_DIRECT/209.51.188.148 -
1568267528.520    600 xxx.xx.xx.xx TCP_TUNNEL/200 5569 CONNECT www.gnu.org:443 - HIER_DIRECT/209.51.188.148 -
1568267529.211    689 xxx.xx.xx.xx TCP_TUNNEL/200 11569 CONNECT www.gnu.org:443 - HIER_DIRECT/209.51.188.148 -
1568267529.817    603 xxx.xx.xx.xx TCP_TUNNEL/200 6385 CONNECT www.gnu.org:443 - HIER_DIRECT/209.51.188.148 -

로그 포맷의 설정은, Squid의 설정 파일에 추가한다.
$ sudo vi /etc/squid/squid.conf

여기 를 참고로 로그 설정을 추가한다.
logformat squid [%{%Y/%m/%d.%H:%M:%S}tl] %>a %Ss/%03>Hs %<st %rm %ru %[un %Sh/%<a %mt

추가하면 서비스를 다시 시작하고 다시 로그 출력 확인을 한다.
$ sudo service squid restart
$ sudo cat /var/log/squid/access.log

로그 형식이 변경되었는지 확인합니다.
[2019/09/12.06:16:28] xxx.xx.xx.xx TCP_TUNNEL/200 19161 CONNECT www.gnu.org:443 - HIER_DIRECT/209.51.188.148 -
[2019/09/12.06:16:29] xxx.xx.xx.xx TCP_TUNNEL/200 4197 CONNECT www.gnu.org:443 - HIER_DIRECT/209.51.188.148 -
[2019/09/12.06:16:29] xxx.xx.xx.xx TCP_TUNNEL/200 6509 CONNECT www.gnu.org:443 - HIER_DIRECT/209.51.188.148 -
[2019/09/12.06:16:30] xxx.xx.xx.xx TCP_TUNNEL/200 7403 CONNECT www.gnu.org:443 - HIER_DIRECT/209.51.188.148 -
[2019/09/12.06:16:31] xxx.xx.xx.xx TCP_TUNNEL/200 19351 CONNECT www.gnu.org:443 - HIER_DIRECT/209.51.188.148 -
[2019/09/12.06:16:31] xxx.xx.xx.xx TCP_TUNNEL/200 5569 CONNECT www.gnu.org:443 - HIER_DIRECT/209.51.188.148 -
[2019/09/12.06:16:32] xxx.xx.xx.xx TCP_TUNNEL/200 11569 CONNECT www.gnu.org:443 - HIER_DIRECT/209.51.188.148 -
[2019/09/12.06:16:32] xxx.xx.xx.xx TCP_TUNNEL/200 6385 CONNECT www.gnu.org:443 - HIER_DIRECT/209.51.188.148 -

덤 ② : 요청 헤더 설정



요청 헤더에 정보를 올리고 싶지 않은 경우, 설정으로 무효로 할 수 있다.

구성 파일을 엽니다.
$ sudo vi /etc/squid/squid.conf

이하의 설정을 추가하는 것으로 무효로 할 수 있다.
request_header_access Referer deny all

덤 ③ : Git의 프록시 설정



다음 명령을 실행합니다.
$ git config --global http.proxy http://<プロキシサーバーのプライベートIPアドレス>:3128
$ git config --global https.proxy http://<プロキシサーバーのプライベートIPアドレス>:3128

덤 ④ : Curl의 프록시 설정



다음 명령을 실행합니다.
$ echo 'proxy = "http://<プロキシサーバーのプライベートIPアドレス>:3128"' >> ~/.curlrc

좋은 웹페이지 즐겨찾기