新しい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.5
と74.207.241.5
は私たちのDNSサーバーです。
これは安全だと思いますか?ここに穴が見えますか?
更新: OUTPUTをブロックすることが重要なのはなぜですか?この機械は私だけが使用します。
私が見ることができる唯一の主要な穴はIPv6です。あなたは必要になるでしょう ip6tables
そのため。いずれかのサービスがIPv6でリッスンする場合(およびsshを含む多くのサービスがデフォルトでIPv6でリッスンする場合)、攻撃者はそれを使用して、上記のすべてのルールを完全にバイパスできます。ネットワークは、IPv4が利用可能な場合、IPv4よりもIPv6を使用します。
OUTPUT
ポリシーがDROP
であると仮定すると、IPv4はかなり適切に制限されています。
RELATED
オプションをスキップすると、サービスがダウンしてTCP RST
パケットは、このコンテキストではNEW
でもESTABLISHED
でもありません。
あなたの質問の更新に答えるには:それがnotあなただけが使用する場合。
私たち全員がどれほど注意を払っていても、何かを見逃したり、一時的に不注意になり、他の誰かにボックスをある程度制御させたりする可能性が常にあります。攻撃者がつま先を握った後、最初に行うことは、特権昇格キット、ルートキット、コマンドアンドコントロールシステム、およびボックスで実際に実行したいものをダウンロードすることです。アウトバウンド接続を制限すると、その特権昇格キットをダウンロードできなくなります。つまり、ApacheユーザーやGitユーザー、または攻撃したものとして実行されたままになります。 root権限がないと、非表示にしたり、ファイアウォールを変更したりすることはできません。これは攻撃者を永遠に止めることはできませんが、攻撃者がそこにいることに気付くのに十分長い間彼を止めるか、彼が諦めてどこか簡単に行くのに十分なほどイライラするかもしれません。
上記のルールは、リモートファイルインクルード攻撃はリモートファイルがSSLでホストされている場合にのみ機能することを意味します。このボックスとインターネットの間にプロキシサーバーを配置し、特定のURLパターンのみを許可する場合は、通常の操作を許可しながら、そのトラックでRFIを停止できます。これは多層防御です。
OUTPUT
チェーンの欠落とESTABLISHED
ルールの繰り返しについて他の人が投稿したコメントに加えて、SSH(TCP /ポート22)などのプロトコルを特定のIPに制限できます(該当する場合)。
セットアップを確認するには、NMAPを試して開いているポートを確認します。これは、ファイアウォールルールがより複雑になった場合にさらに役立ちます。
/ etc/network/interfaces(man 5 interfaces
を参照)の事前設定行からスクリプトを実行して、ネットワークが使用可能になりサービスが開始される前にファイアウォールルールが適用されるようにする必要があります。 rc.localは最後に実行されるものであるため、保護されていない不要な時間枠があります。
あなたがしているこの種のことはある種の魔法の弾丸ではないことを心に留めておくことも賢明です。あなたが見つめているがアクセスを妨げようとしている他のサービスがあるなら、あなたはそもそもそれらを始めるべきではありません。ここでの考え方が、開始するつもりのないサービスへのアクセスを防ぐことである場合、これは、信頼できない人々がすでにあなたのマシンで何かをしていることを意味しますか?その場合、あなたはすでに負けており、悪意のあるユーザーがあなたのボックスでコードを実行している時点で、ファイアウォールルールも操作される可能性があると考えるのが安全です。
私は数日前にgithubでオープンソース iptables-boilerplate です。その本質的には、事前定義されたiptable-rulesの優れたセットであり、広範囲にわたってコメントされています。
多分使用して読むことはあなたを助けるかもしれません