外部サーバにプロキシを立てる必要に迫られたのでメモ。
まとめ
- squidでプロキシサーバを立ち上げ、そこ経由でWebにアクセスできる
- 内部ネットではなく、外部ネットから見たときの挙動確認とかに便利
- yumで5~10分程度で構築できる
- Cenos7だとiptablesではなくfirewalldを使うのが主流(?)
インストール
yumで入ります。
yum -y install squid
設定変更
適度に自分の環境に合わせて設定します。
emacs /etc/squid/squid.conf
# デフォルトはほとんどいじらないので省略
# アクセスを許可したいアドレス
# デフォルトでプライベートアドレスはA~Cまで許可済み
# 今回は外部のサーバにWebプロキシを立てるので書く
acl allowadress src x.x.x.x/255.255.255.255
http_access allow allowadress
http_access deny all
# 匿名性をあげる設定
forwarded_for off
request_header_access X-Forwarded-For deny all
request_header_access Via deny all
request_header_access Cache-Control deny all
# Refererを切ると一部のサイトではおかしくなったりするので、
# 匿名プロキシじゃないと困る場合以外は設定しない方が良い
# request_header_access Referer deny all
# サーバのホストネームを入れる
visible_hostname example.com
# ポートを変更(デフォルトは3128)
http_port 12345
# キャッシュさせたくないのでOFF
no_cache deny all
squid起動
service squid start
firewall-cmdの設定
このままだと外部からアクセスできないので、アクセスできるように設定します。
また、Squidが動いていることを知らせない方がより安全なので、指定したアドレスからのみアクセスできるようにします。
firewall-cmd --permanent --zone=public --add-rich-rule="rule family="ipv4" source address="x.x.x.x" port protocol="tcp" port="12345" accept"
firewall-cmd --reload
その他
以上の手順により、プロキシを使ってアクセスできると思いますが、
うまくいかない場合は以下のように調べると良いと思います。
- サーバ上でSquidのポートにcurlでアクセス
- アクセスできなければSquidが動いてない
- アクセスできたら手元でSquidサーバのポートにcurlでアクセス
- アクセスできなければポートが開放されていない
- アクセスできているなら手元のマシンのプロキシ設定がおかしい
また、Webは見られるがたまに特定サイトでSquidのエラー画面が出てくる場合、上記のvisible_hostnameの設定を正しくすることで解決しましたが、確定ではないです。