AWS Squid on EC2로 프록시 서버 구축

8523 단어 squidC#프록시
AWS VPC 환경 구축 피어링 연결 에서 Public VPC, Private VPC를 각각 만들고 연결 가능한 환경을 구축했습니다. Private VPC의 EC2에 크롤러를 이동하여 NATGateway를 통해 인터넷에 연결합니다.
이번에는 Public VPC에 프록시 서버를 도입하여보다 안전한 인터넷 연결 환경을 실현하고 싶습니다.

이번에 이용하는 프록시 서버 소프트웨어는 Squid 입니다. Squid는 웹 프록시, 캐시 프록시, 역방향 프록시로도 사용할 수 있습니다.

환경 구성



모든 EC2는 Windows Server 2012를 사용하며 Crawler Bot은 C#으로 제작되었습니다.


인스턴스
Private IP
설명


sample-proxy-ec2
10.100.0.19
프록시 서버

sample-private-ec2
10.100.1.12
CrawlerBot 서버




Squid 설치



Squid는 Unix 기반 시스템에서 작동하도록 설계되었지만 Windows 용 Squid의 경우 squid-cache wiki에서 찾을 수 있습니다.
squid.msi를 다운로드하여 실행하고 마법사를 따라 설치합니다.

설치 후 시작되고 Desktop의 오른쪽 하단에 아이콘이 표시되고 마우스 오른쪽 버튼을 클릭하면 설정 메뉴가 표시됩니다.

Open Squid Configuration에서 squid.conf를 열고 편집할 수 있습니다.

Squid 설정



Open Squid Configuration에서 squid.conf를 열고
1. 허용할 네트워크를 지정합니다.

squid.conf
#
# Recommended minimum configuration:
#

# Example rule allowing access from your local networks.
# Adapt to list your (internal) IP networks from where browsing
# should be allowed

#acl localnet src 10.0.0.0/8    # RFC1918 possible internal network
#acl localnet src 172.16.0.0/12 # RFC1918 possible internal network
#acl localnet src 192.168.0.0/16# RFC1918 possible internal network
acl localnet src 10.100.0.0/24  # Public VPC
acl localnet src 10.100.1.0/24  # Private VPC
acl localnet src fc00::/7       # RFC 4193 local private network range
acl localnet src fe80::/10      # RFC 4291 link-local (directly plugged) machines
...

기본 네트워크를 주석 처리하여 허용할 네트워크를 지정합니다.
acl localnet src 10.100.0.0/24
acl localnet src 10.100.1.0/24

2.Squid 대기 포트 번호 설정

squid.conf
...
# Squid normally listens to port 3128
# http_port 3128
http_port 8080
...

여기 8080 사용

Firewall 및 SecurityGroup 설정



1. Firewall
프록시 서버에 로그인하고 제어판에서 "Windows 방화벽"을 클릭하고 고급 설정 화면에서 "수신 규칙"에 8080의 TCP 규칙 "Squid Proxy Port"를 새로 추가

프로토콜 및 포트에서 로컬 포트를 3128에서 8080으로 수정


2. SecurityGroup
sample-proxy-ec2의 SecurityGroup을 열고 Inbound 규칙에 8080 추가


소통 확인



먼저 IE의 인터넷 옵션 – 연결 탭에서 LAN 설정을 클릭하여 Squid를 통해 설정합니다.

안전하게 인터넷 접속이 가능했습니다.

CrawlerBot의 프로그램도 특히 조정없이 움직였다!

SampleCrawlerBot.cs
using System;
using System.Net;
using System.Windows.Forms;
using System.IO;

namespace SampleCrawlerBot
{
    public partial class CrawlerBot : Form
    {
        private Logger logger;

        public CrawlerBot()
        {
            InitializeComponent();
        }

        /// <summary>
        /// Crawl html from url
        /// </summary>
        public void Crawl()
        {
            logger = new Logger();
            string url = "https://office.yahoo.co.jp/";
            try
            {
                HttpWebRequest req = (HttpWebRequest)System.Net.WebRequest.Create(url);
                req.Method = "GET";

                HttpWebResponse res;
                //サーバーからの応答を受信するためのWebResponseを取得
                res = (HttpWebResponse)req.GetResponse();

                StreamReader reader = new StreamReader(res.GetResponseStream());

                logger.Write(reader.ReadToEnd());
                req.Abort();
            }
            catch (Exception ex)
            {
                logger.Write(ex.ToString());
            }
        }
    }
}


참고 기사


  • Windows용 Squid
  • Squid로 안전한 인터넷 액세스 환경을 구축하는 방법
  • 네트워크 엔지니어로 - 프록시 서버
  • 좋은 웹페이지 즐겨찾기