iptablesで特定の外部サーバへのSSL接続を制限・禁止したい 概要■iptablesとsquidでゲートウェイサーバを構築しようとしているのですが、ローカルPCからの特定サーバに対するSSL接続を禁止することが出来ません。 ・httpアクセスについては、squid、もしくはiptablesにて禁止することが出来ます。 ・squidは透過プロキシで、SSLのURLをフィルタリングしようとすると 仕様として難しい(中間者攻撃じみたことになるので)旨をgoogle先生より頂いております。 透過プロキシであるということが環境的なマストになります。個別のPCをいじれないためです。 質問1 そもそもiptablesであっても、squidと同様でこのようなフィルタリングは出来ないものなのでしょうか。 明確な理由が知りたいです。 質問2 質問1が問題なかったとして、たとえば、LAN内のPCからゲートウェイサーバを通して、 https://google.com(https://173.194.117.192/とか)への接続を禁止するにはどういうルールを書けば良いでしょうか。 質問3 質問1にひっかかったとして、代替の手段は何が考えられますでしょうか。出来れば具体的な方策を御願いしたく(squidの透過を止める、以外で) 足りない情報ありましたらまた書かせて頂きますので、どうぞよろしく御願いいたします。 環境 centos6.5 64bit nic2枚でルータとpc群の間に挟んでいます。 iptables v1.4.7 ←起動時にシェルスクリプトで読ませています squid v3.10.10-20 ネットワーク図は インターネット | ルータ | ゲートウェイサーバ(eth0がインターネット側、eth1がローカル側) | ハブ |||||| PC群 iptablesのシェルスクリプト(抜粋 デフォルトルールとプロキシ関係のみ) ############## #--BASIC SETTINGS--# ############## trusthost='192.168.21.0/24' internal_ip='192.168.21.0/24' my_internet_ip='192.168.40.15' my_internal_ip='192.168.21.1' ############## #PROXY PORT ############## proxy_port='6666' ############## #RESET SETTINGS CANT -T -X and F RESET ############## iptables -P INPUT ACCEPT iptables -P OUTPUT ACCEPT iptables -P FORWARD ACCEPT ############## #Deafult Rule ############## iptables -P INPUT DROP iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT iptables -P OUTPUT DROP iptables -P FORWARD DROP iptables -A FORWARD -i eth1 -o eth0 -s $internal_ip -j ACCEPT iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT #--Deafult Rule END ####################### #ssh trusthost-> myhost ####################### iptables -A INPUT -p tcp ! --syn -m state --state NEW -j DROP iptables -A INPUT -p tcp -m state --state NEW,ESTABLISHED,RELATED -s $trusthost -d $my_internal_ip --dport 22 -j ACCEPT iptables -A OUTPUT -p tcp -s $my_internal_ip --sport 22 -d $trusthost -j ACCEPT #--PROXY ######################### #Proxy trusthost-> myhost ######################### iptables -A INPUT -p tcp -m state --state NEW,ESTABLISHED,RELATED -s $internal_ip -d $my_internal_ip --dport $proxy_port -j ACCEPT iptables -A OUTPUT -p tcp -s $my_internal_ip --sport $proxy_port -d $internal_ip -j ACCEPT ################# #SNAT(masquerade) ################# iptables -t nat -A POSTROUTING -o eth0 -s $internal_ip -j MASQUERADE #################### #Transparently proxy #################### iptables -t nat -A PREROUTING -i eth1 ! -s $my_internal_ip -p tcp --dport 80 -j DNAT --to-destination $my_internal_ip:$proxy_port iptables -t nat -A PREROUTING -i eth1 -p tcp --dport 80 -j REDIRECT --to-port $proxy_port #################### #DEFAULT RULE(OUTPUT ALL ACCEPT) #################### iptables -A OUTPUT -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
↧