Upside Down Ternet

提供: ArchWiki
ナビゲーションに移動 検索に移動

この記事では 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.servicesquid.service をブート時に起動するように設定してください。

詳しくはデーモンを読んでください。

参照