Dockerでproxyサーバ


はじめに

Dockerでsquidによるproxyサーバを構築。
特別なことはしてません。

対象機器および環境

検証環境

  • CentOS8(8.1.1911)
  • Docker(19.03.5)
  • squid(4.4)

作業内容

firewallでmasqueradeを設定

firewall-cmd --add-masquerade --zone=public --permanent
firewall-cmd --reload

Dockerイメージの準備

再利用できるようにイメージをつくっておきます。
Dockerfileと設定ファイルを置くための適当なディレクトリを作成しておきます

mkdir -p /opt/docker/proxy
cd /opt/docker/proxy

Dockerfileを作成

/opt/docker/proxy/proxy.df
FROM centos:centos8
ENV TZ='Asia/Tokyo'
RUN ln -sf /usr/share/zoneinfo/Asia/Tokyo /etc/localtime ; \
    dnf -y update ; dnf install -y squid ; \
    sed -i -e "s/http_port 3128/http_port 8080/" /etc/squid/squid.conf ;  \
    systemctl enable squid ; \
    dnf -y install rsyslog ;
COPY rsyslog.conf /etc
CMD [ "/usr/sbin/init" ]

syslog転送用の設定

ローカルのログファイルの変更を検知するモジュール imfile を利用して、リモートへsyslogを転送します。
転送先は別のエントリで作成した syslogサーバにUDP:514で指定しています。
ネットワークサービス用のDockerネットワーク infraserv-network に所属させているため、 syslog というホスト名で転送ができるようになっています。

/opt/docker/proxy/rsyslog.conf
module(load="imfile")
input(type="imfile"
      file="/var/log/squid/access.log"
      tag="pseudolog_squid_access_log"
      facility="local0"
      severity="notice")
:syslogtag, isequal, "pseudolog_squid_access_log" @syslog:514

Dockerfileからイメージをビルドしてコンテナ作成

Dockerfileが作成できたら、ビルドします。

docker build --force-rm -t infraserv:proxy . -f ./proxy.df && \
docker run --cap-add sys_admin --security-opt seccomp:unconfined  -v /sys/fs/cgroup:/sys/fs/cgroup:ro \
  --network infraserv-network -it -d --name proxy --hostname proxy  -p 8080:8080 infraserv:proxy

もし、dnfでコケたら、以下のコマンドが効くかもしれない。

# firewall-cmd --add-masquerade --permanent
# firewall-cmd --reload

動作確認

診断くん、などでチェック。
http://taruo.net/e/