RealPath:
WebPath:
2017/01/13 17:02 (JST) 更新
各種サービス >>

squid

Contents

プロキシ。

インストール

bash
# yum -y install squid

設定例1

/etc/squid/squid.conf
(コメントアウト)
# kobake: comment out.
#acl localnet src 10.0.0.0/8    # RFC1918 possible internal network
#acl localnet src 172.16.0.0/12 # RFC1918 possible internal network
#acl localnet src 192.168.0.0/16        # RFC1918 possible internal network

(追記)
# kobake: myhouse ip.
acl myhouse src 12.34.56.78/32

# kobake: Hostname showed when error.
visible_hostname clock-up.jp

# kobake: Hide client ip address.
forwarded_for off

# kobake: Hide proxy info.
request_header_access Referer deny all
request_header_access X-Forwarded-For deny all
request_header_access Via deny all
request_header_access Cache-Control deny all

# kobake: Apache style log output.
access_log /var/log/squid/access.log auto
emulate_httpd_log on

# kobake: allow myhouse
http_access allow myhouse

(書き換え)
http_port 3128
↓
http_port 8080

squid のアクセス制限では、コネクション自体はブロックしないので
コネクションをブロックしたかったら iptables とかを使うのが良い

設定例2 (レンタルサーバ内プロクシの例)

squid.conf
#使用するポート番号
http_port 8080

#キャッシュメモリのサイズ
cache_mem 8 MB

#キャッシュするサイズ
cache_dir ufs /var/spool/squid 100 16 256

#Apacheと同じログ形式を指定
emulate_httpd_log on

#ftpユーザのメールアドレスを指定 (たぶんFTPプロクシ用)
#ftp_user Squid@

# ACL定義 (接続元ホストを定義)
acl all src 0.0.0.0/0.0.0.0                    #デフォルト
acl localhost src 127.0.0.1/255.255.255.255    #デフォルト
acl friendhost src www.hogehoge.jp fugafuga.net
#acl homenet src 192.168.1.0/255.255.255.0
#acl friend src friend.com

# ACL定義 (接続先ホストを定義)
acl forbidden_site dst www.goo.ne.jp

# ACL定義 (ポートを定義)
acl SSL_ports port 443                                #デフォルト
acl Safe_ports port 80          # http                #デフォルト
acl Safe_ports port 21          # ftp                 #デフォルト
acl Safe_ports port 443         # https               #デフォルト
acl Safe_ports port 70          # gopher              #デフォルト
acl Safe_ports port 210         # wais                #デフォルト
acl Safe_ports port 1025-65535  # unregistered ports  #デフォルト
acl Safe_ports port 280         # http-mgmt           #デフォルト
acl Safe_ports port 488         # gss-http            #デフォルト
acl Safe_ports port 591         # filemaker           #デフォルト
acl Safe_ports port 777         # multiling http      #デフォルト
acl myhttp port 80 81

# ACL定義 (メソッドを定義)
acl CONNECT method CONNECT     #デフォルト

# ACL定義 (プロトコルを定義)
acl manager proto cache_object #デフォルト

# アクセス制御 (上で定義したホスト定義に対して権限を付与)
# ※この定義をしなかった場合、デフォルトではすべてのリクエストが拒否される
#
# (順序に関して)
# Squid のアクセス制御では、記述された順番通りに
# http_access タグのルールを調査し、
# ルールとマッチしたパケットは、それ以降のルールを調査しません。
# つまり、パケットがルールとマッチした時点で調査は終了します。

# manager(cache_objectプロトコル)はlocalhost(127.0.0.1ホスト)からのみ許可。
http_access allow manager localhost #デフォルト

# それ↑以外のmanager(cache_objectプロトコル)は拒否。
http_access deny manager            #デフォルト

# Safe_ports(80,21,443,70,...)以外へのアクセスを拒否。
http_access deny !Safe_ports        #デフォルト

# Deny CONNECT to other than SSL ports
# CONNECT(CONNECTメソッド)のSSL_ports(443ポート)以外へのアクセスを拒否。
http_access deny CONNECT !SSL_ports #デフォルト

# localhost(127.0.0.1ホスト)からのアクセスは許可。
http_access allow localhost         #デフォルト

# 自分用設定
http_access allow friendhost        #知ってるホストからのみ許可
http_access deny forbidden_site     #goo.ne.jpを見れないようにする

# 上記設定以外のすべての接続元を拒否。
http_access deny all                #デフォルト

#クライアントのIPアドレスを教えない
forwarded_for off

#プロキシ経由でアクセスしていることをアクセス先に知られないようにする
header_access X-Forwarded-For deny all
header_access Via deny all
header_access Cache-Control deny all

構文確認

bash
# squid -k parse

プロクシ禁止サイトを通過させる方法

プロクシっぽいポートを閉じる

80,1080,8080 を閉じておく。
サイトによっては、サイト側からポートチェックがかかることがある。

または、特定ドメイン (2ch.net 等) から上記ポートへのアクセスをブロック(パケットフィルタ)するのも有効。

BBQメモ (Perl)

perl
sub checkProxyList
{
    my $RADDR = $ENV{'REMOTE_ADDR'};
    $RADDR =~ /^(\d+)\.(\d+)\.(\d+)\.(\d+)$/;
    my $query_addr = "$4.$3.$2.$1.niku.2ch.net";
    my $addr = join('.', unpack('C*', gethostbyname($query_addr)));
    if ($addr eq '127.0.0.2')
    {
        die("公開PROXYからの投稿不可");
    }
}

参考