web-dev-qa-db-ja.com

私のiptablesは安全ですか?

新しいUbuntuサーバーのrc.localにこれがあります。

iptables -F

iptables -A INPUT -i eth0 -p tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT

iptables -A INPUT -i eth0 -p tcp --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT

iptables -A OUTPUT -o eth0 -p tcp --dport 9418 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A INPUT -i eth0 -p tcp --sport 9418 -m state --state ESTABLISHED -j ACCEPT

iptables -A OUTPUT -o eth0 -p tcp --dport 5000 -m state --state NEW,ESTABLISHED -j ACCEPT # Heroku
iptables -A INPUT -i eth0 -p tcp --sport 5000 -m state --state ESTABLISHED -j ACCEPT # Heroku

iptables -A INPUT -p udp -s 74.207.242.5/32 --source-port 53 -d 0/0 --destination-port 1024:65535 -j ACCEPT
iptables -A INPUT -p udp -s 74.207.241.5/32 --source-port 53 -d 0/0 --destination-port 1024:65535 -j ACCEPT

iptables -A OUTPUT -o eth0 -p tcp --dport 443 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A INPUT -i eth0 -p tcp --sport 443 -m state --state ESTABLISHED -j ACCEPT

iptables -P INPUT DROP
iptables -P FORWARD DROP

9418はGitのポートです。 5000は、Herokuアプリの管理に使用されるポートです。そして、74.207.242.574.207.241.5は私たちのDNSサーバーです。

これは安全だと思いますか?ここに穴が見えますか?

更新: OUTPUTをブロックすることが重要なのはなぜですか?この機械は私だけが使用します。

6
Patricia

私が見ることができる唯一の主要な穴はIPv6です。あなたは必要になるでしょう ip6tablesそのため。いずれかのサービスがIPv6でリッスンする場合(およびsshを含む多くのサービスがデフォルトでIPv6でリッスンする場合)、攻撃者はそれを使用して、上記のすべてのルールを完全にバイパスできます。ネットワークは、IPv4が利用可能な場合、IPv4よりもIPv6を使用します。

OUTPUTポリシーがDROPであると仮定すると、IPv4はかなり適切に制限されています。

RELATEDオプションをスキップすると、サービスがダウンしてTCP RSTパケットは、このコンテキストではNEWでもESTABLISHEDでもありません。


あなたの質問の更新に答えるには:それがnotあなただけが使用する場合。

私たち全員がどれほど注意を払っていても、何かを見逃したり、一時的に不注意になり、他の誰かにボックスをある程度制御させたりする可能性が常にあります。攻撃者がつま先を握った後、最初に行うことは、特権昇格キット、ルートキット、コマンドアンドコントロールシステム、およびボックスで実際に実行したいものをダウンロードすることです。アウトバウンド接続を制限すると、その特権昇格キットをダウンロードできなくなります。つまり、ApacheユーザーやGitユーザー、または攻撃したものとして実行されたままになります。 root権限がないと、非表示にしたり、ファイアウォールを変更したりすることはできません。これは攻撃者を永遠に止めることはできませんが、攻撃者がそこにいることに気付くのに十分長い間彼を止めるか、彼が諦めてどこか簡単に行くのに十分なほどイライラするかもしれません。

上記のルールは、リモートファイルインクルード攻撃はリモートファイルがSSLでホストされている場合にのみ機能することを意味します。このボックスとインターネットの間にプロキシサーバーを配置し、特定のURLパターンのみを許可する場合は、通常の操作を許可しながら、そのトラックでRFIを停止できます。これは多層防御です。

10
Ladadadada

OUTPUTチェーンの欠落とESTABLISHEDルールの繰り返しについて他の人が投稿したコメントに加えて、SSH(TCP /ポート22)などのプロトコルを特定のIPに制限できます(該当する場合)。

セットアップを確認するには、NMAPを試して開いているポートを確認します。これは、ファイアウォールルールがより複雑になった場合にさらに役立ちます。

4
Khaled

/ etc/network/interfaces(man 5 interfacesを参照)の事前設定行からスクリプトを実行して、ネットワークが使用可能になりサービスが開始される前にファイアウォールルールが適用されるようにする必要があります。 rc.localは最後に実行されるものであるため、保護されていない不要な時間枠があります。

あなたがしているこの種のことはある種の魔法の弾丸ではないことを心に留めておくことも賢明です。あなたが見つめているがアクセスを妨げようとしている他のサービスがあるなら、あなたはそもそもそれらを始めるべきではありません。ここでの考え方が、開始するつもりのないサービスへのアクセスを防ぐことである場合、これは、信頼できない人々がすでにあなたのマシンで何かをしていることを意味しますか?その場合、あなたはすでに負けており、悪意のあるユーザーがあなたのボックスでコードを実行している時点で、ファイアウォールルールも操作される可能性があると考えるのが安全です。

2
stew

私は数日前にgithubでオープンソース iptables-boilerplate です。その本質的には、事前定義されたiptable-rulesの優れたセットであり、広範囲にわたってコメントされています。

多分使用して読むことはあなたを助けるかもしれません

1
bmaeser