はじめに
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/