インターネットに開かれたサーバーを再起動しても安全ですか?


29

具体的には

CentOSを実行しているサーバーでiptablesルールセットが定義されています。保証されていますか/保証できますか/ネットワークがオンラインになったとき(マシンの起動時、またはネットワークサービスの再起動後)、iptablesルールセットがすでに適用されていることを保証できますか(iptablesが起動に失敗したか、ルールセットを適用できなかった場合)ネットワークインターフェイスが起動に失敗します)?

(これはnoobの質問であることは知っていますが、マスカレードDHCP NATとファイアウォールの背後にある信頼できるネットワーク以外ではサーバーを実行したことがないため、noobからのnoobの質問を期待しています。)


15
まったくnoobの質問ではありません。これは基本的に、2011年にハッカーがPlayStationネットワークに侵入し、24日間の停止と1500万ドルの和解をもたらした方法です。ファイアウォールが(毎月のように)リブートすると、ファイアウォールはしばらくの間-明らかに十分に長く開いた。
クリスS 14

@ChrisSそれについて私にとって最も奇妙なことは、そのネットワークを担当するシステム管理者は、誰かがファイアウォールをオフにすることを提案したが、まつげを毎月打たなかった場合、ほぼ確実に白熱するだろうということです、オフにしてから再びオンにします。ただし、これらのどの組み合わせがそれを説明するかはわかりません。
パルティアショット14

もう1つのオプションは、サーバーが完全に起動するまでネットワークスイッチのポートを無効にすることです(サイトにいてスイッチにアクセスできる場合)。これは理想的ではありませんが、サーバーにNFSなどのネットワーク依存関係がない限り、確実に機能します。
jftuga

@jftugaまあ、確かに。しかし、サーバーはインターネットに接続されないため、技術的にはこの質問の範囲に該当しません。サイトにいる場合は、再起動中にイーサネットケーブルを抜くだけで済みます。とにかく、根本的な問題はポートブロッキングソリューションに残ります。ネットワークを攻撃する別のコンピューターがローカルファイアウォールによって停止されないことを確認します。ルーターがハッキングされたり、誤動作したり、ローカルネット上の他の誰かが危険にさらされたりした場合でも、ゲームは終了します。
パルティアショット14

@jftuga事実、問題はそれよりもさらに深刻です。誰かが既にローカルマシンで実行するソフトウェアを入手しているが、ファイアウォールが出力フィルタリングを行うと仮定すると、ルールは、発信パケットは確立または関連する場合にのみ許可され、新しい接続はポート80にのみ許可される通常、これにより、権限のないアカウントからの逆シェルが防止されます。ただし、ブート時に接続が開始された場合、ファイアウォールの初期化を通じて接続が維持されます。これはファイアウォールのルールも変更する必要があることを意味すると思いますが、それは簡単な間違いです。
パルティアショット14

回答:


18

初期設定では、起動スクリプトの順序によってインターフェイスが起動される前にiptablesが起動することが保証されています。各起動スクリプトの「chkconfig」行を見ると、アクティブなときに「オン」になっているランレベル、開始順序、停止順序が表示されます。

iptablesルールセットが適切に適用されなかった場合(またはまったく適用されなかった場合)、インターフェイスが起動しないことは保証されません。

例:
chkconfig: 2345 08 92
この行は、問題のサービスがランレベル2、3、4、および5でアクティブになり、8で開始して92で停止することを示しています。より大きい「start」値を持つものは、このスクリプトが完了した後にのみ開始され、ただし、このスクリプトエラーは完了と見なされ、ダウンストリームスクリプトの実行を妨げません。

この回答はCentOS 6以前に適用されることに注意してください。必ずしもCentOS 7に適用されるわけではありません。


1
+1そして...あなたは答えが非常に役立つので、口の中で贈り物の馬を見てはいけません...しかし...あなたがサービスに依存関係の順序を与えるための標準的な方法を知っていますか?チェーンの早い段階で後続のものは起動しませんか?また、誰かがファイアウォールを(なんとかして)クラッシュさせた場合、ネットワークインターフェースが「船と共にダウン」するでしょうか。理想的には、私はoffchance誰かがDoS攻撃ファイアウォール...へのエクスプロイトの危険があっても上で、すべてがフェールセーフにしたいと思います
パルティアショット

5
SysV起動スクリプト(CentOS 6以前)では、これを行う良い方法はありません。CentOS 7は、必要に応じて依存関係を実行します。BがAに依存し、Aが失敗すると、Bは起動しません。7の場合、依存関係の使用を確認しますsystemctl list-dependencies --all(30秒前にそのマニュアルページを見たところです)。
ジョン14

そのニュースは少しがっかりですが(現時点では6になっています)、少なくとも、initスクリプトを変更することは受け入れられるほどひどいハックであることを知っています。
パルティアショット14

5
initスクリプトの変更には非常に注意してください-実行すると、侵入検知ソフトウェアで誤ったアラームが発生する可能性があります。また、initscriptsパッケージが更新されると(たとえば、正誤表リリースなど)変更が上書きされます。そんなことは本当にお勧めしません。
ジョン14

私はまだIDSをセットアップしていないので、現時点では誤報は問題になりません(サーバーはまだ稼働しておらず、展開する準備がどこにもできていないことを知っています。この質問は準備の一部です。しかし、私はHIDSに入れます)。できる限り慎重になります。initの構成のコア部分を手動で変更する方法がない場合は、間違いなくそれを行っています。
パルティアショット14

1

また、centosでifup-postオプションを使用できます。

/ etc / sysconfig / network-scripts / ifup-post

SLIPデバイスを除くネットワークデバイスが起動したときに呼び出されます。/ etc / sysconfig / network-scripts / ifup-routesを呼び出して、そのデバイスに依存する静的ルートを起動します。/ etc / sysconfig / network-scripts / ifup-aliasesを呼び出して、そのデバイスのエイリアスを表示します。ホスト名がまだ設定されていない場合はホスト名を設定し、そのデバイスのIPのホスト名を見つけることができます。ネットワークイベントの通知を要求したプログラムにSIGIOを送信します。

ネームサービスの構成を修正したり、必要に応じて任意のスクリプトを呼び出したりするように拡張できます。

このスクリプトが実行され、上記(ifup-routeおよびifup-aliases)の後にifup-localが検索されます

if [ -x /sbin/ifup-local ]; then
   /sbin/ifup-local ${DEVICE}
fi

したがって、このファイルを作成し、iptables-restoreなどを使用してiptablesを再度呼び出すことを確認できます。

iptables-restore < /etc/sysconfig/iptables

1

少し補遺:次回サーバーを起動するときに必要なルールが確実に存在するようにするには、

sudo sh -c "iptables-save > /etc/iptables.rules"
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.