Edited at

iptablesで外部への接続を遮断する


1.はじめに

ipv6も使える環境だとだめだ。

知識が正しくないかも。

外部へのアクセス制限の方法を頑張って考えた。


2.新規接続のDROP

自ホストからのコネクション開始を禁止します1


2.1.TCP

 iptables -t filter -I OUTPUT 1 -m state --state NEW -j DROP -p tcp


2.2.UDP

 iptables -t filter -I OUTPUT 1 -m state --state NEW -j DROP -p udp


3.1.特定のポートが宛先になっている通信を禁止する

dportで宛先をアクセス禁止にします。


3.1.1.TCP only

iptables -A OUTPUT -p tcp --dport 80 -j REJECT --reject-with tcp-reset

iptables -A OUTPUT -p tcp --dport 443 -j REJECT --reject-with tcp-reset


3.2宛先のポートを範囲指定してdrop

単純にdropします。well-knownポートの例。 2


3.2.1.TCP

iptables -A OUTPUT -p tcp --dport 1:1023 -j DROP


3.2.2.UDP

iptables -A OUTPUT -p udp --dport 1:1023 -j DROP


4.HTTPの内容を吟味して落とす

httpのみ、HTTPリクエストを盗み見てアクセス禁止できます3 4 5

iptables -I OUTPUT -p tcp --dport 80 -m string --string "example.com" --algo kmp -j REJECT --reject-with tcp-reset


5.Docker内でも

Docker内でiptablesを使う。6

docker run -it --cap-add=NET_ADMIN ubuntu


6. まとめ

外部に勝手にアクセスされることがなくなります。

Webホスティングで使えそう。


おすすめ文献

https://unix.stackexchange.com/questions/203791/how-to-redirect-all-http-request-to-a-local-web-server

https://superuser.com/questions/505622/iptables-block-everything-except-http