Upside Down Ternet
この記事では mogrify を使用して画像を上下逆に反転する透過的な Squid プロキシサーバーを作成する方法を説明します。
インストール
公式リポジトリから squid, apache, wget, imagemagick パッケージをインストールしてください。
設定
flip.pl
を作成して /usr/local/bin
フォルダに配置:
/usr/local/bin/flip.pl
#!/usr/bin/perl $|=1; $count = 0; $pid = $$; while (<>) { @splitted=split(/ /,$_); chomp $_; if ($_ =~ /(.*\.jpg)/i) { $url = $1; system("/usr/bin/wget", "-q", "-O","/srv/http/images/$pid-$count.jpg", "$url"); system("/usr/bin/mogrify", "-flip","/srv/http/images/$pid-$count.jpg"); print "http://127.0.0.1/images/$pid-$count.jpg\n"; } elsif ($_ =~ /(.*\.gif)/i) { $url = $1; system("/usr/bin/wget", "-q", "-O","/srv/http/images/$pid-$count.gif", "$url"); system("/usr/bin/mogrify", "-flip","/srv/http/images/$pid-$count.gif"); print "http://127.0.0.1/images/$pid-$count.gif\n"; } elsif ($_ =~ /(.*\.png)/i) { $url = $1; system("/usr/bin/wget", "-q", "-O","/srv/http/images/$pid-$count.png", "$url"); system("/usr/bin/mogrify", "-flip","/srv/http/images/$pid-$count.png"); print "http://127.0.0.1/images/$pid-$count.png\n"; } else { print "$splitted[0]\n"; } $count++; }
実行可能属性を付与:
# chmod 755 /usr/local/bin/flip.pl
Squid の設定ファイルを掃除 (必須ではありません):
# sed -i "/^#/d;/^ *$/d" /etc/squid/squid.conf
squid.conf
ファイルを編集して末尾に以下を追加:
squid.conf
url_rewrite_program /usr/local/bin/flip.pl
http_port
を探して以下のように変更:
squid.conf
http_port 3128 intercept
反転した画像を保存するためのフォルダを作成してパーミッションを設定してください (ディレクトリの所有者は proxy ユーザーにする必要があります):
# mkdir /srv/http/images # chown proxy:proxy /srv/http/images # chmod 755 /srv/http/images
最後に http ユーザーを proxy グループに追加:
# usermod -aG proxy http
http ユーザーが proxy グループのメンバーになったことを確認:
# groups http
または:
# id -Gn http
ルーターの設定
ルーターやゲートウェイの iptables を編集して http トラフィックをプロキシにリダイレクトにするようにしてください。
あなたのルーターで DD-WRT を使っている場合、Administration -> Commands から以下を貼り付けることで設定できます:
#!/bin/sh PROXY_IP=192.168.1. PROXY_PORT=3128 LAN_IP=`nvram get lan_ipaddr` LAN_NET=$LAN_IP/`nvram get lan_netmask` iptables -t nat -A PREROUTING -i br0 -s $LAN_NET -d $LAN_NET -p tcp --dport 80 -j ACCEPT iptables -t nat -A PREROUTING -i br0 -s ! $PROXY_IP -p tcp --dport 80 -j DNAT --to $PROXY_IP:$PROXY_PORT iptables -t nat -I POSTROUTING -o br0 -s $LAN_NET -d $PROXY_IP -p tcp -j SNAT --to $LAN_IP iptables -I FORWARD -i br0 -o br0 -s $LAN_NET -d $PROXY_IP -p tcp --dport $PROXY_PORT -j ACCEPT
起動
httpd.service
と squid.service
をブート時に起動するように設定してください。
詳しくはデーモンを読んでください。