2009/09/03(木)proxy
途中だけどメモ
条件
- 親に謎なプロクシ(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] [プロクシ]