W zeszłym tygodniu zadzwonił do mnie przestraszony klient, ponieważ myślał, że jego witryna została zhakowana. Kiedy spojrzałem na jego stronę internetową, zobaczyłem apache2
stronę domyślną. Tej nocy mój serwer ( Ubuntu 16.04 LTS
) zaktualizował się i uruchomił ponownie. Zwykle gdy coś pójdzie nie tak, zostałbym powiadomiony w nocy. Tym razem nie, ponieważ system monitorowania sprawdza kod stanu HTTP 200, a apache2
strona domyślna zawiera kod stanu 200.
Stało się tak, że podczas uruchamiania apache2
było szybsze połączenie z portami 80 i 443 niż mój rzeczywisty serwer WWW nginx. Sam nie instalowałem apache2. Przez aptitude why apache2
dowiedziałem się pakiet php7.0 wymaga.
Proste usunięcie apache2
nie zadziała, ponieważ najwyraźniej wymaga tego php7.0. Czy w jakiś sposób można stworzyć ograniczenie, aby tylko nginx mógł się łączyć z portami 80 i 443?
Inne rozwiązania są również mile widziane.
This time not, because the monitoring system checks for HTTP status code 200
. Możesz ulepszyć system monitorowania, sprawiając, że sprawdzi on rzeczywistą zawartość strony internetowej (niektóre ciągi znaków w treści lub nagłówku), będzie to bardziej niezawodne.Odpowiedzi:
Nie można zapobiec powiązaniu portu z niewłaściwą usługą. W twoim przypadku po prostu usuń apache z autostartu i powinieneś być dobry.
W przypadku wersji 16.04 i nowszych:
W przypadku starszych wersji Ubuntu:
źródło
systemctl disable apache2
Jeśli tak naprawdę nie używasz
apache2
, a PHP 7.0 tego wymaga, wygląda na to, że maszlibapache2-mod-php7.0
zainstalowany. Ten pakiet jest bezużyteczny bez Apache. Ponieważ używasz nginx, prawdopodobnie masz również zainstalowanyphp7.0-fpm
lubphp7.0-cgi
zainstalowany, z których każdy jest wystarczający do spełnieniaphp7.0
wymagań dotyczących zależności:Jeśli masz którykolwiek z nich
php7.0-{fpm,cgi}
, możesz śmiało odinstalować Apache.źródło
php7.0-fpm
a niephp7.0
pakiet. Jest to również zalecane przez Ondřej Surý github.com/oerdnj/deb.sury.org/wiki/…Aby odpowiedzieć na twoje pytanie, prawdopodobnie możesz ograniczyć port do konkretnej aplikacji za pomocą SElinux. Sam go nie używałem i mam jedynie powierzchowną wiedzę o jego możliwościach, ale oto wskaźnik, który znalazłem na tej stronie:
/server//a/257056/392230
W tej odpowiedzi wzzrd wydaje się pokazywać, jak udzielić określonej aplikacji (foo) uprawnienia do łączenia się z określonym portem (803). Musisz tylko skonfigurować zasady, aby tylko twoja aplikacja (nginx) była dozwolona dla określonych portów (80 i 443).
Opierając się na odpowiedzi wzzrd, może to być tak proste, jak dodanie tego do polityki
i uruchamiam to
Chociaż wydaje mi się, że będziesz potrzebować również linii w polityce, która określa, że żaden inny program nie może się połączyć z tymi portami.
W końcu zgaduję, jaka jest odpowiednia konfiguracja.
W każdym razie nie sądzę, aby istniało Ubuntu z zainstalowanym i domyślnie włączonym SElinux. Ponieważ uważam, że wymaga zastosowania pewnych poprawek do różnych narzędzi i opcji jądra, łatwiejsze może być po prostu użycie Centos z zainstalowanym i włączonym SElinux od samego początku.
Przepraszam, nie jestem więcej pomocy. Może kiedyś ściągnę obraz Centos i spróbuję tego; to będzie dobry krok do nauki. Zaktualizuję tę odpowiedź, jeśli to zrobię.
źródło
Coś, czego jeszcze nie widziałem w odpowiedziach, ale wciąż istnieje możliwość:
Zmień konfigurację Apache, aby nasłuchiwać na inny port, na wszelki wypadek. Możesz to zrobić, otwierając plik konfiguracyjny Apache i zmieniając linie, które mają
Listen 80
inny port.źródło
Nie mam odpowiedzi na twoje dokładne pytanie, ale może musisz spojrzeć na swoją dystrybucję. Uważam, że każda dystrybucja, która umożliwia usługi (tutaj Apache2) podczas instalacji, jest niepewna. Zastanów się nad dystrybucją, która tego nie robi. Nie mogę powiedzieć, że kiedykolwiek widziałem takie zachowanie na Archlinux, jestem pewien, że są też inni.
źródło