Bezpieczny serwer LAMP do użytku produkcyjnego

10

Jaka jest procedura zabezpieczania Linuksa, Apache, MySQL, PHP Server (a nawet Perla) do użytku produkcyjnego?

Poza ustawieniem hasła MySQL i hasła roota dla Linuksa, jakie inne (może nie tak oczywiste) kroki należy podjąć?

Jakie kroki mogę podjąć, jeśli miałbym być wyjątkowo paranoikiem, co zwykle nie jest konieczne?

Ma to zastosowanie podstawowe w pojedynczej witrynie, ale musi być bezpieczne.

WalterJ89
źródło
Hartowanie Apache na siostrzanej stronie.
Marcin

Odpowiedzi:

13

Te zalecenia są poza moim zasięgiem i nie są wyczerpujące.

Sprawdź Bastille, to seria skryptów, które implementują najlepsze praktyki w Linuksie.

Nie wysyłaj danych uwierzytelniających przez protokoły w postaci zwykłego tekstu. Na przykład wyłącz FTP. Jeśli wysyłasz dane uwierzytelniające przez Apache, użyj SSL.

Wyłącz i usuń niepotrzebne oprogramowanie, w tym interfejs GUI.

Przeprowadź inspekcję wszystkich plików z ustawionym i usuniętym bitem SUID. (To poważnie ograniczy umiejętności inne niż root. Zrozum implikacje dla każdej indywidualnej zmiany).

Kontroluj publiczne katalogi z możliwością zapisu i usuń bit do zapisu. (Pozostaw / tmp w spokoju.)

Unikaj uruchamiania dowolnego demona jako root.

Zbadaj całe oprogramowanie dla wielu użytkowników, które szczegółowo nasłuchuje na gniazdach, aby poznać najlepsze praktyki bezpieczeństwa.

Unikanie dodawania użytkowników do systemu jest jednym z najlepszych podejść. Systemy dla wielu użytkowników wymagają większej dbałości o szczegóły.

Egzekwuj standardy haseł. Na przykład: minimum 10 znaków, znaki niealfanumeryczne, przy użyciu liter i cyfr. Ma to na celu utrudnienie brutalnego wymuszania w przypadku naruszenia bezpieczeństwa plików haseł. Wymuszaj to przez system.

Zablokuj użytkowników po 5 nieudanych próbach uwierzytelnienia z co najmniej 10-minutową blokadą. Zachowaj historię haseł, aby użytkownicy nie mogli używać ostatnich 5 haseł.

Jeśli masz większe środowisko, bezwzględnym wymogiem jest segregacja sieci z wieloma podsieciami w celu odizolowania ryzyka. W mniejszym środowisku zalecane jest uruchomienie zapory sieciowej w systemie lokalnym w celu ograniczenia narażenia. Na przykład, zezwalając tylko SSH na twoje IP. tcpwrappers może być również użyty jako dodatkowa warstwa. (/etc/hosts.allow, /etc/hosts.deny)

I oczywiście aktualizowanie całego oprogramowania. Zwłaszcza demony publiczne.

Z SSH:

  • Wyłącz protokół SSH 1
  • Zezwalaj tylko na uwierzytelnianie użytkownika root without-password(tylko para kluczy)

Z Apache:

  • Wyłącz wszystkie niepotrzebne moduły
  • Wyłącz .htaccess i katalogi publiczne
  • Wyłącz FollowSymlink i wszelkie niepotrzebne opcje
  • Nie instaluj PHP, jeśli go nie potrzebujesz.

Z MySQL:

  • Wyłącz domyślnych użytkowników.
  • Nie używaj hostów z symbolami wieloznacznymi.
  • Pamiętaj, aby ustawić unikalny host dla każdego użytkownika.
  • Nie słuchaj na komputerze, chyba że jest to konieczne. (Niezwykle nieuniknione.)
  • Ogranicz uprawnienia użytkownika aplikacji w jak największym stopniu. (SELECT, INSERT, UPDATE, DELETE idealny do zapisu i SELECT do odczytu)

Poleciłbym poszukać tuningu php.ini dla bezpieczeństwa. Domyślnie jest to bardziej ryzykowne oprogramowanie.

Bastille

Warner
źródło
2

Oto dobry artykuł, którego możesz użyć jako podstawy konfiguracji i zmienić odpowiednio do swojej dystrybucji: http://it.toolbox.com/blogs/rayheffer/how-to-build-a-secure-lamp-web- server-with-centos-5-36786

Alexandre Nizoux
źródło
Ale w zasadzie nie ładuj modułów, których nie potrzebujesz, ukryj wszystkie numery wersji i strony debugowania / informacji, utwórz użytkownika mysql dla każdej aplikacji z zahartowanymi hasłami, zawsze pozwól, aby ludzie pracowali na twoim serwerze za pomocą zwykłego konta użytkownika i uczyń je sudo jeśli potrzebują uprawnień roota, użyj zapory ogniowej, takiej jak iptables, i otwieraj tylko porty w oparciu o to, czego absolutnie potrzebujesz, aby znaleźć się w twoim pudełku ... To plus najnowsze łatki zapewnią ci już całkiem bezpieczną konfigurację.
Alexandre Nizoux,
Ten artykuł nie jest dobry. Wyłączanie selinux, nic o hartowaniu mysql, wyłączanie niepotrzebnych modułów apache ...
sumar