他のアプリケーションがポート80および443にバインドしないようにする


16

先週、彼のウェブサイトがハッキングされたと思ったため、怖い顧客から電話がありました。彼のWebサイトを検索すると、apache2デフォルトのページが表示されました。その夜、サーバー(Ubuntu 16.04 LTS)がアップグレードされて再起動しました。通常、何かがうまくいかないとき、私は夜中に警告を受けたでしょう。これは、監視システムがHTTPステータスコード200をチェックし、apache2デフォルトページにステータスコード200が付いているためです。

起こったのは、起動中apache2にポート80と443へのバインドが実際のWebサーバーnginxよりも高速だったことです。私は自分でapache2をインストールしませんでした。aptitude why apache2私が見つけたphp7.0パッケージには、それを必要とします。

削除apache2するだけでは動作しません。どうやらphp7.0が必要だからです。nginxのみがポート80および443にバインドできるように制限を作成することはどういうわけか可能ですか?

他のソリューションも大歓迎です。


15
そして、これは、明示的に更新を要求した場合にのみ更新するようにライブサーバーを構成する必要がある理由です。そのため、最初に開発マシンで更新をテストできます。
-Nzall

2
最初にテストマシンでアップグレードをテストするのではなく、手動でアップグレードスケジュールする前に、常に変更ログを確認します。また、以前のアップグレードでapache2がすり抜けたようです。今回はapache2を再起動したのは、httpポートとhttpsポートに最初にバインドしたからです。
ボイド

9
サイドノートとして- This time not, because the monitoring system checks for HTTP status code 200。Webページの実際のコンテンツ(本文またはヘッダー内の特定の文字列)を確認するようにすることで、監視システムを改善できます。これはより信頼性が高くなります。
VL-80

2
@Boyd 私は最初にテストマシンでアップグレードをテストしませんが、常に変更ログをチェックしますが、その方法がどれほど信頼できないかを経験したばかりです。変更ログを読んでも、デプロイされたシステムへの影響はわかりませんし、導入されたバグや非互換性についてもわかりません。
アンドリューヘンレ

5
@Nzall公平に言うと、この種の問題はテストマシンに現れなかったように聞こえます...彼は事実上、apache2またはnginxがポートをバインドするかどうかに関して競合状態にあり、テストマシンは理論的にはテスト中はnginxが(偶然に)勝つため、問題は発見されません。
ドクターJ

回答:


29

ポートが間違ったサービスにバインドされるのを防ぐことはできません。あなたの場合、autostartからapacheを削除するだけで十分です。

16.04以降の場合:

sudo systemctl disable apache2

古いUbuntuバージョンの場合:

sudo update-rc.d apache2 disable

2
私はこれを行いますが、ポート80と443にバインドする別のパッケージが、別のパッケージの依存関係として知らないうちにシステムにインストールされるという将来の状況から身を守ることができることを望みました。
ボイド

1
これも16.04 systemctl disable apache2
なので、次のとおりです。– muru

12
@Boyd:パッケージを「知らずに」盲目的にインストールするのはなぜですか?顧客が使用しているライブサーバーで、どのパッケージと依存関係がインストールされているかを読み取っていません。そして、実行前にミラーサーバーですべてをテストしないのはなぜですか?これらは基本的な運用原則であり、すべての問題を解決します。
モニカと軽さのレース

6
@BoundaryImpositionポートへのソフトウェアバインディングを防御したいからといって、盲目的にパッケージをインストールしているだけではありません。しかし、私たちも人です。間違いがあります。残念ながら、最初にダミーサーバーですべての操作をテストすることはできませんが、この場合、問題が発生する1週間前にapache2がインストールされたため、問題はすぐには表示されませんでした(その間、システムは問題なく再起動されました) )。すべてのアップグレードをテストすることはできませんが、毎週アップグレードします。限られた(監視による)ダウンタイムリスクよりも、最新のセキュリティパッチをお勧めします。
ボイド

3
@Boyd:「残念ながら、最初にダミーサーバーですべての操作をテストすることはできません顧客はこの手順をスキップすることを知っていますか?
モニカとの軽さのレース

27

を実際に使用しておらずapache2、それを必要としているのがPHP 7.0である場合、libapache2-mod-php7.0インストールされているように見えます。そのパッケージは、Apacheなしでは役に立ちません。nginxを使用しているので、おそらくインストールphp7.0-fpmまたはphp7.0-cgiインストールされていますが、どちらもphp7.0依存関係の要件を満たすには十分です。

$ apt-cache depends php7.0
php7.0
 |Depends: php7.0-fpm
 |Depends: libapache2-mod-php7.0
  Depends: php7.0-cgi
  Depends: php7.0-common
  Conflicts: <php5>

どちらかがphp7.0-{fpm,cgi}インストールされている場合は、先に進んでApacheをアンインストールできます。


6
私は実際、今日の状況php7.0-fpmでは、php7.0パッケージではなくインストールするだけでよいことを学びました。これは、オンドレイSurýから助言を受けているgithub.com/oerdnj/deb.sury.org/wiki/...
ボイド

5
これが本当の問題の本当の解決策です。ApacheをインストールせずにUbuntuにnginxとPHPをインストールする方法。
デビッドカレン

2

質問に答えるために、SElinuxを使用してポートを特定のアプリケーションに制限することができます。私はそれを自分で使用したことはなく、その機能の表面的な知識しか持っていませんが、このサイトで見つけたポインターは次のとおりです。

/server//a/257056/392230

その答えでは、wzzrdは特定のアプリケーション(foo)に特定のポート(803)にバインドする許可を与える方法を示しているようです。アプリケーション(nginx)のみが指定したポート(80および443)を許可されるように、ポリシーを設定する必要があります。

wzzrdの答えに基づいて、これをポリシーに追加するのと同じくらい簡単かもしれません

allow nginx_t nginx_port_t:tcp_socket name_bind;

これを実行する

semanage port -a -t nginx_port_t -p tcp 80
semanage port -a -t nginx_port_t -p tcp 443

ただし、他のプログラムがこれらのポートにバインドできないことを指定するポリシーの行も必要になると思います。

最後に、適切な構成が何であるかを推測しています。

とにかく、デフォルトでSElinuxがインストールされて有効になっているUbuntuがあったとは思わない。さまざまなユーティリティとカーネルオプションに特定のパッチを適用する必要があると思うため、get-goからSElinuxをインストールして有効にしたCentosを使用する方が簡単かもしれません。

申し訳ありませんが、私はこれ以上助けにはなりません。おそらく別の時間に、Centosのイメージをダウンロードして、これを試してみます。良い学習ステップになります。更新したら、この回答を更新します。


2
lol @「単純にCentosを使用する方が簡単かもしれません」
デビッドカレン

2

私はまだ答えを見ていませんが、まだ可能性があります:

念のため、別のポートをリッスンするようにApache構成を変更します。これを行うには、Apache構成ファイルを開き、Listen 80別のポートにある行を変更します。


これは、受け入れられた答えと同じように問題を「解決」しますが、変更を説明/文書化する必要があるという追加の問題があります。また、問題は解決しますが、どちらも問題全体を解決しません。Apacheが無効になっているが、次に再起動すると、アプリケーションXがポート80にバインドされ、同じ障害が再び発生します。
ダレンH

0

正確な質問に対する答えはありませんが、ディストリビューションを確認する必要があるかもしれません。インストール時にサービス(ここではapache2)を安全にするディストリビューションを検討します。それをしないディストリビューションを検討することを検討してください。Archlinuxでその動作を見たことはありませんが、他にもあると確信しています。


1
サーバーをフォーマットし、他のディストリビューションをインストールするには、何をお勧めしますか?そして、他の回答が示したように、なぜubuntuは特定のサービスを処理できないと思いますか?この答えは宗教的なコメントであり、まったく役に立ちません。
Wtower

今はサーバーをフォーマットして新しいディストリビューションをインストールするつもりはありませんが、次回サーバーをアップグレードする必要が生じたときには必ず変更します。この投稿では、Ubuntuは設定されていないサービスを有効にしているため、不適切であることが示されました(これは、グラフィカルログインまたはサウンドサービスのようなもので、通常は正常に機能し、パブリックインターネットに公開されないものです) )。私は答えが少し宗教的ではないかと心配しましたが、それは意図ではなく、より大きな問題として見たものに対する解決策を指摘しようとしていました。
-phelbore

1
ディストリビューションがそれを行うのは不適切であることに同意しますが、実際には質問に答えていないので、これはコメントとしてより適切だったと思います。
-JoL

それは公平なポイントです。
モニカとの軽度のレース
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.