squid3.5 Proxy 서버 구축(RHEL7.3)

9529 단어 RHEL7.3squid

개요


지금까지의 복습은 Linux 7 시스템으로 각종 서버를 구축하는 1탄을 겸하고 있다.
비즈니스 환경에서 구축해 운용한 적이 없으며 약 10년 전 사내 검증 환경에서 살짝 구축해 보았습니다.
squid 버전: 3.5.20
squid 설정 파일:/etc/squid/squid.conf
로그 파일 액세스:/var/log/squid/access.log
OS 버전: RHEL7.3

해보자.


AWS에서 PC에서 제작된 Proxy를 탐색하는 것이 목표입니다.

사전 준비

  • EC2 인스턴스 생성
    RHEL7.3에서 인스턴스를 생성합니다.
    기본 설정은 OK입니다. 마음에 드시면 로켈을 변경하십시오.
    ※ 일지 방문 시간
  • 안전팀의 입국허가
    입국 프록시 서버에서 기다리는 포트를 허용해 주십시오.
    squid 기본값은 31288080과 8008도 가능합니다.
  • squid 설치


    기본적으로 squid가 설치되어 있지 않기 때문에yum에 설치합니다.
    [ec2-user@ip-172-XX-XX-XX ~]$ sudo yum install squid
    Loaded plugins: amazon-id, rhui-lb, search-disabled-repos
    Resolving Dependencies
    --> Running transaction check
    ---> Package squid.x86_64 7:3.5.20-2.el7_3.3 will be installed
    --> Processing Dependency:/usr/bin/perl for package: 7:squid-3.5.20-2.el7_3.3.x86_64
    --> Processing Dependency: perl(DBI) for package: 7:squid-3.5.20-2.el7_3.3.x86_64
    --> Processing Dependency: perl(Data::Dumper) for package: 7:squid-3.5.20-2.el7_3.3.x86_64
    --> Processing Dependency: perl(Digest::MD5) for package: 7:squid-3.5.20-2.el7_3.3.x86_64
    --> Processing Dependency: perl(English) for package: 7:squid-3.5.20-2.el7_3.3.x86_64
    --> Processing Dependency: perl(FileHandle) for package: 7:squid-3.5.20-2.el7_3.3.x86_64
    --> Processing Dependency: perl(Getopt::Long) for package: 7:squid-3.5.20-2.el7_3.3.x86_64
    (생략)
    perl-macros.x86_64 4:5.16.3-291.el7
    perl-parent.noarch 1:0.225-244.el7
    perl-podlators.noarch 0:2.5.1-3.el7
    perl-threads.x86_64 0:1.87-4.el7
    perl-threads-shared.x86_64 0:1.43-6.el7
    squid-migration-script.x86_64 7:3.5.20-2.el7_3.3
    Complete!
    [ec2-user@ip-172-XX-XX-XX ~]$
    설치 완료!

    설정


    이번에는 단순히 고객의 PC에서 구축된 Proxy 서버를 통해 웹 조회를 할 수 있었으면 좋겠습니다.
    설정 절차는 다음과 같다.
    1. 프록시 서버에 연결할 수 있는 클라이언트 설정
    2. 그룹을 명시적으로 승인하고 거부 설정
    3. 포트 설정
    4.squid 재시작

    프록시 서버에 연결할 수 있는 클라이언트 설정


    /etc/squid/squid.conf를 편집합니다.
    기본적으로 주 내부 네트워크의 주소는 다음과 같습니다.
    /# 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 fc00::/7 # RFC 4193 local private network range
    acl localnet src fe80::/10 # RFC 4291 link-local (directly plugged) machines
    이번에는 상관없기 때문에 위의 기재를 모두 논평하고 자신의 IP 기록을 조사한다.
    #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 fc00::/7 # RFC 4193 local private network range
    #acl localnet src fe80::/10 # RFC 4291 link-local (directly plugged) machines
    acl localnet src 115.XXX.XX.XX/32 #me

    그룹을 명시적으로 허용하고 마지막으로 설정을 거부합니다.


    기본적으로 localnet,localhost는 허용되며, 마지막으로deny all가 있기 때문에 확인만 합니다.
    # Example rule allowing access from your local networks.
    # Adapt localnet in the ACL section to list your (internal) IP networks
    # from where browsing should be allowed
    http_access allow localnet
    http_access allow localhost
    # And finally deny all other access to this proxy
    http_access deny all

    포트 설정


    squid에서 기본적으로 3128을 기다립니다.
    # Squid normally listens to port 3128
    http_port 3128
    변경하고 싶을 때, 이곳의 포트 번호를 수정합니다.

    squid 시작


    설정이 완료되면 파일을 저장하고 squid를 시작합니다.
    [ec2-user@ip-172-XX-XX-XX ~]$ *sudo systemctl start *
    상태를 확인하다.
    [ec2-user@ip-172-XX-XX-XX ~]$ sudo systemctl status
    \● squid.service - Squid caching proxy
    Loaded: loaded (/usr/lib/systemd/system/squid.service; enabled; vendor preset: disabled)
    Active: active (running) since Thu 2017-05-04 23:31:27 EDT; 5s ago
    Process: 16605 ExecStart=/usr/sbin/squid\$SQUID_OPTS -f $SQUID_CONF (code=exited, status=0/SUCCESS)
    Process: 16600 ExecStartPre=/usr/libexec/squid/cache_swap.sh (code=exited, status=0/SUCCESS)
    Main PID: 16609 (squid)
    CGroup:/system.slice/squid.service
    tq16609/usr/sbin/squid -f/etc/squid/squid.conf
    tq16611 (squid-1) -f/etc/squid/squid.conf
    mq16612 (logfile-daemon)/var/log/squid/access.log
    May 04 23:31:27 ip-172-XX-XX-XX.us-west-2.compute.internal systemd[1]: Starti...
    May 04 23:31:27 ip-172-XX-XX-XX.us-west-2.compute.internal systemd[1]: Starte...
    May 04 23:31:27 ip-172-XX-XX-XX.us-west-2.compute.internal squid[16609]: Squi...
    May 04 23:31:27 ip-172-XX-XX-XX.us-west-2.compute.internal squid[16609]: Squi...
    Hint: Some lines were ellipsized, use -l to show in full.
    [ec2-user@ip-172-XX-XX-XX ~]$
    겸사겸사 자동 가동도 설정해야 한다.
    [ec2-user@ip-172-XX-XX-XX ~]\$systemctl enabled squid
    [ec2-user@ip-172-XX-XX-XX ~]$systemctl is-enabled squid
    enabled

    동작 확인


    설정도 끝났으니 동작을 확인하세요.
    이 EC2 인스턴스의 IP 및 연결 포트를 IE 프록시에 넣습니다.

    적절한 사이트를 방문하여 로그를 확인하세요.
    [root@ip-172-XX-XX-XX squid]# tail -100/var/log/squid/access.log
    1493956288.080 18 115.XX.XX.XX TCP_MISS/304 346 GET http://www.googletagservices.com/tag/js/gpt.js - HIER_DIRECT/216.58.193.66 -
    1493956288.094 21 115.XX.XX.XX TCP_MISS/304 601 GET http://livedoor.4.blogimg.jp/karapaia_zaeega/imgs/e/b/eb45e2ee.png - HIER_DIRECT/54.230.141.124 -
    1493956288.133 139 115.XX.XX.XX TCP_MISS/302 666 GET http://livedoor.blogimg.jp/karapaia_zaeega/imgs/0/0/004be9b5.jpg - HIER_DIRECT/125.6.190.4 text/html
    1493956288.155 147 115.XX.XX.XX TCP_MISS/302 666 GET http://livedoor.blogimg.jp/karapaia_zaeega/imgs/5/4/54c99608.jpg - HIER_DIRECT/125.6.190.4 text/html
    1493956288.167 143 115.XX.XX.XX TCP_MISS/302 666 GET http://livedoor.blogimg.jp/karapaia_zaeega/imgs/a/e/ae04335c.jpg - HIER_DIRECT/125.6.190.4 text/html
    1493956288.170 27 115.XX.XX.XX TCP_MISS/304 601 GET http://livedoor.4.blogimg.jp/karapaia_zaeega/imgs/b/f/bfce72b1.png - HIER_DIRECT/54.230.141.124 -
    Proxy 서버에서 웹 브라우징이 가능한지 확인하였습니다!

    로그 형식 편집


    그나저나 위의 로그는 방문 시간을 전혀 몰라서...
    예전에 아파치로 바꾸는 옵션이 있었던 것 같아요.
    3.5 그 설정은 작동하지 않는 것 같다.
    그래서 첫 페이지를 보고 다음과 같이 설정하기로 했습니다.
  • LocalTime
  • Client IP
  • Squid Request Status/HTTP Status Code
  • Size
  • Request Method
  • Request URL
  • user name
  • Squid Hierarchy Status Code/Destination IP
  • MIME Content Type
  • /etc/squid/squid.conf에 다음과 같은 내용이 추가되었습니다.
    logformat squid %tl %>a %Ss/%03>Hs %squid를 다시 시작하여 어떤 사이트를 방문하다
    일지가 보기 쉬워졌어!
    [root@ip-172-XX-XX-XX squid]# tail -100/var/log/squid/access.log
    05/May/2017:00:12:58 -0400 115.XXX.XX.XX TCP_MISS/200 137705 GET http://livedoor.4.blogimg.jp/karapaia_zaeega/imgs/3/0/30497336.jpg - HIER_DIRECT/54.192.117.245 image/jpeg
    05/May/2017:00:12:58 -0400 115.XXX.XX.XX TCP_MISS/200 512 GET http://jsoon.digitiminimi.com/twitter/count.json ? - HIER_DIRECT/210.135.97.193 text/javascript
    05/May/2017:00:12:58 -0400 115.XXX.XX.XX TCP_TUNNEL/200 4856 CONNECT platform.twitter.com:443 - HIER_DIRECT/199.96.57.6 -
    05/May/2017:00:12:58 -0400 115.XXX.XX.XX TCP_MISS/200 1827 GET http://optimized-by.rubiconproject.com/a/13136/73628/349040-9.js ? - HIER_DIRECT/8.39.37.31 text/javascript
    05/May/2017:00:12:58 -0400 115.XXX.XX.XX TCP_MISS/200 468 GET http://jsoon.digitiminimi.com/twitter/count.json ? - HIER_DIRECT/210.135.97.193 text/javascript

    끝맺다


    로그 형식에 시간을 쓰지 않는다면, 여기까지는 10분이면 충분하다.
    또한 디스크 캐시 양은 기본적으로 100MB로 이 근처에서 변경하여 성능을 향상시키거나 호스트 이름이나 사용자 에이전트 등의 정보를 숨길 수 있습니다.
    첫 투고.MardDown에 익숙하지 않으면...(:3)

    좋은 웹페이지 즐겨찾기