2009/09/03(木)proxy

PC

途中だけどメモ

条件

  • 親に謎なプロクシ(parent-proxy.foo.com)がある\そこ通らないと出られない
  • ローカルのネットワーク(10.xxx.xxx.xxx と .foo.com)は通してはならない
  • 透過型プロクシにしたい

環境

  • linux (debian 5 leny)
  • squid 3
  • iptables

構築

aptitudeとか使ってsquidとかいれる

賢いので、勝手にいろいろ設定してくれる

squidの設定

なにが効いてるのかわからないけど、取り合えず動く
標準の設定ファイルに追記したものだけ抜粋

/etc/squid3/squid.conf

# aclnameを定義して許可する
acl localnet src 10.0.0.0/8
acl to-localnet dst 10.0.0.0/8
acl to-localdomain dstdomain .foo.com
http_access allow localnet

# 親プロクシの設定
# 少なくとも squid ではない(echoも閉じているのでicp-portは0にしておく?)
cache_peer parent-proxy.foo.com parent 3128 0

# 親プロクシ使用の許可とか
#  :ローカルネットワーク行きは禁止
#  :他はすべて許可
# (とりあえず書いたけど、意味ないっぽい?)
cache_peer_access parent-proxy.foo.com deny to-localnet to-localdomain
cache_peer_access parent-proxy.foo.com allow all

# 親プロクシ通さずに直接接続することを許可したり禁止したり
# このへん書いておかないと親プロクシにキャッシュがないときに直接外部に行こうとします
#  :ローカルネットワークは常に直接接続する
#  :(残りの)すべては決して直接接続しない
always_direct allow to-localnet to-localdomain
never_direct  allow all

# 透過の設定追加
http_port 3128 transparent

書いたらsquid(再)起動
/etc/init.d/squid (re)start

iptablesの設定

eth0は外につながるインターフェース
eth1は内側のインターフェース

# policy
iptables -P INPUT DROP
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -P OUTPUT ACCEPT
iptables -P FORWARD DROP
iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT

# lo, localnet
iptables -A INPUT -i lo -j ACCEPT
#iptables -A OUTPUT -o lo -j ACCEPT
iptables -A INPUT -i eth1 -s 10.0.0.0/8 -j ACCEPT

# proxy
iptables -A INPUT -p tcp -m state --state NEW,ESTABLISHED,RELATED -s 10.0.0.0/8 --dport 3128 -j ACCEPT
iptables -t nat -A PREROUTING -i eth1 -p tcp --dport 80 -j REDIRECT --to-port 3128

# NAT
iptables -t nat -A POSTROUTING -o eth0 -s 10.0.0.0/8 -j MASQUERADE

必要なら、/etc/network/if-pre-up.d/iptablesとか編集(作成)しておく

/etc/sysctl.confを編集してnet.ipv4.ip_forward=1にする

書いたらネットワーク or PC を再起動

検索用

[debian] [proxy] [squid] [iptables] [プロクシ]