Diğer uygulamaların 80 ve 443 numaralı bağlantı noktalarına bağlanmasını önleme


16

Geçen hafta korkmuş bir müşteriden telefon aldım çünkü web sitesinin saldırıya uğradığını düşündü. Web sitesine baktığımda apache2varsayılan sayfayı gördüm . O gece sunucum ( Ubuntu 16.04 LTS) yükseltilmiş ve yeniden başlatılmıştı. Normalde bir şeyler ters gittiğinde gece boyunca uyarılırdım. Bu kez değil, çünkü izleme sistemi HTTP durum kodu 200'ü kontrol eder ve apache2varsayılan sayfa 200 durum kodu ile birlikte gelir.

Olan şey, başlangıç ​​sırasında apache280 ve 443 numaralı bağlantı noktalarına bağlanmak için gerçek web sunucusu nginx'imden daha hızlı olmasıdır. Apache2'yi kendim kurmadım. Aracılığıyla aptitude why apache2php7.0 paketinin gerektirdiğini öğrendim.

apache2Görünüşe göre php7.0 gerektirdiği için kaldırma işlemi işe yaramaz. 80 ve 443 numaralı bağlantı noktasına yalnızca nginx'in bağlanmasına izin vermek için bir şekilde bir kısıtlama oluşturmak mümkün mü?

Diğer çözümler de memnuniyetle karşılanmaktadır.


15
Bu nedenle, canlı sunucularınızı yalnızca açıkça bir güncelleme isteğinde bulunduğunuzda güncelleyecek şekilde yapılandırmanız gerekir;
Nzall

2
İlk önce bir test makinesindeki yükseltmeleri test etmiyorum, ancak yükseltmeyi manuel olarak zamanlamadan önce her zaman changelog'ları kontrol ediyorum . Ayrıca, daha önceki bir yükseltme sırasında apache2'nin kaydığı görülüyor. Sadece bu sefer apache2'yi yeniden başlattı, http ve https portlarına ilk bağlanan oldu.
Boyd

9
Yan not olarak - This time not, because the monitoring system checks for HTTP status code 200. İzleme sisteminin web sayfasının gerçek içeriğini (gövde veya başlıktaki belirli bir dize) kontrol etmesini sağlayarak geliştirebilirsiniz, bu daha güvenilir olacaktır.
VL-80

2
@Boyd İlk önce bir test makinesindeki yükseltmeleri test etmiyorum, ancak her zaman değişiklik günlüklerini kontrol ediyorum . Bir değişiklik günlüğü okumak, konuşlandırılan bir sistem üzerindeki etkinin ne olacağını size söyleyemez, ayrıca getirilen hatalar veya uyumsuzluklar hakkında size bilgi vermez.
Andrew Henle

5
@Nzall, bu tür bir sorunun bir test makinesinde ortaya çıkmamış olabileceği gibi görünüyor ... apache2 veya nginx'in portları bağlayıp bağlamayacağı ve test makinesinin teorik olarak nginx testi (şans eseri) test süresi boyunca kazanır, böylece sorun keşfedilmez.
Doktor J

Yanıtlar:


29

Bir bağlantı noktasının yanlış hizmet tarafından bağlanmasını engelleyemezsiniz. Sizin durumunuzda, apache'yi otomatik başlatmadan kaldırın ve iyi olmalısınız.

16.04 ve daha yeni sürümler için:

sudo systemctl disable apache2

Eski Ubuntu sürümleri için:

sudo update-rc.d apache2 disable

2
Bunu yapacağım, ancak kendimi, 80 ve 443 numaralı bağlantı noktasına bağlanan başka bir paketin bilmeden başka bir paketin bağımlılığı olarak sistemime kurulduğu gelecekteki durumlardan koruyabileceğimi umuyordum.
Boyd

1
Bu 16.04 olduğundan, ayrıca:systemctl disable apache2
muru

12
@Boyd: Neden "körü körüne" paketleri körü körüne kuruyorsun? Müşteriler tarafından kullanılan canlı sunucunuzda, hangi paketlerin ve bağımlılıkların yüklendiğini bile okumuyorsunuz? Peki ya uygulamadan önce ayna sunucusundaki her şeyi test etmiyorsunuz? Bunlar temel çalışma prensipleridir ve tüm sorunlarınızı çözecektir.
Monica ile Hafiflik Yarışları

6
@BoundaryImposition Bağlantı noktalarına yazılım bağlanmasına karşı savunmak istemek, paketleri körü körüne kurduğum anlamına gelmez. Ama biz de insanlarız, hatalar yapılır. Ne yazık ki ilk önce bir kukla sunucudaki her işlemi test edemiyoruz, ancak bu durumda sorunu hemen göstermezdi, çünkü apache2, sorunun ortaya çıkmasından bir hafta önce kurulduğundan (sistem bu arada herhangi bir sorun olmadan yeniden başlatıldı) ). Her yükseltmeyi test edemesek de yine de haftalık olarak yükseltiyoruz. Sınırlı (izleme yoluyla) kesinti riski yerine güncel güvenlik yamalarını tercih ediyoruz.
Boyd

3
@Boyd: "Maalesef önce sahte bir sunucudaki her işlemi test edemiyoruz " Neden olmasın? Müşterileriniz bu prosedürü atladığınızın farkında mı?
Monica ile Hafiflik Yarışları

27

Gerçekten kullanmıyorsanız apache2ve bunu gerektiren PHP 7.0 ise, libapache2-mod-php7.0yüklediğiniz gibi görünüyor . Bu paket Apache olmadan işe yaramaz. Nginx kullandığınızdan, muhtemelen bağımlılık gereksinimlerinizi karşılamak için yeterli olan php7.0-fpmveya php7.0-cgiyüklediğiniz 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>

Yüklü sistemlerden herhangi birine php7.0-{fpm,cgi}sahipseniz, devam edip Apache'yi kaldırabilirsiniz.


6
Gerçekten de bugün öğrendim ki, benim durumumda paketi php7.0-fpmdeğil sadece kurulumu daha iyi yapıyorum php7.0. Bu ayrıca tavsiye edilir Ondřej Surý github.com/oerdnj/deb.sury.org/wiki/…
Boyd

5
Bu gerçek soruna gerçek bir çözümdür: Apache kurmadan Ubuntu'ya nginx ve PHP nasıl kurulabilir.
David Cullen

2

Sorunuzu cevaplamak için, bir bağlantı noktasını SElinux kullanarak belirli bir uygulamayla sınırlayabilirsiniz. Kendim kullanmadım ve yetenekleri hakkında sadece yüzeysel bilgiye sahibim, ama işte bu sitede bulduğum bir işaretçi:

/server//a/257056/392230

Bu yanıtta wzzrd, belirli bir uygulamaya (foo) belirli bir bağlantı noktasına bağlanmak için nasıl izin verileceğini gösteriyor (803). Yalnızca ayarladığınız bağlantı noktalarına (80 ve 443) yalnızca uygulamanıza (nginx) izin verilecek şekilde ilke ayarlamanız gerekir.

Kendimi wzzrd'ın cevabına dayandırmak, bunu politikaya eklemek kadar basit olabilir

allow nginx_t nginx_port_t:tcp_socket name_bind;

ve bunu çalıştırıyorum

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

Yine de, politikada başka hiçbir programın bu bağlantı noktalarına bağlanamayacağını belirten bir satıra ihtiyacınız olacağını hayal ediyorum.

Sonunda, sadece uygun yapılandırmanın ne olduğunu tahmin ediyorum.

Her neyse, varsayılan olarak SElinux yüklü ve etkinleştirilmiş bir Ubuntu olduğunu sanmıyorum. Çeşitli yardımcı programlara ve bir çekirdek seçeneğine belirli yamaların uygulanmasını gerektirdiğine inanıyorum, SElinux'un yüklü ve etkinleştirilmiş halde kullanılmasını sağlayan Centos'u kullanmak daha kolay olabilir.

Üzgünüm, daha fazla yardım etmem. Belki başka bir zaman, Centos'un bir görüntüsünü indireceğim ve bunu deneyeceğim; iyi bir öğrenme adımı olacak. Eğer yaparsam bu cevabı güncelleyeceğim.


2
lol @ "sadece Centos'u kullanmak daha kolay olabilir"
David Cullen

2

Henüz cevaplarda görmediğim bir şey, ama yine de bir olasılık:

Her durumda, başka bir bağlantı noktasını dinlemek için Apache yapılandırmasını değiştirin. Bunu, Apache yapılandırma dosyasını açıp Listen 80başka bir bağlantı noktasına sahip olan satırları değiştirerek yapabilirsiniz .


Bu, sorunu kabul edilen cevapla aynı şekilde "çözer", ancak daha sonra değişikliğinizi açıklamak / belgelemek zorunda kalmasıyla eklenir. Ayrıca, bir sorunu çözse de, tüm sorunu çözmez. Apache devre dışı bırakılırsa, ancak yeniden başlatıldığında X uygulaması 80 numaralı bağlantı noktasına bağlanırsa, aynı hatayı tekrar alırsınız.
Darren H

0

Tam sorunuza bir cevabım yok, ama belki dağıtımınıza bakmanız gerekiyor. Yüklemedeki hizmetlerin (burada apache2) güvensiz olmasını sağlayan herhangi bir dağıtımı düşünürüm. Bunu yapmayan bir dağıtımı düşünün. Archlinux'da bu davranışı daha önce gördüğümü söyleyemem, eminim başkaları da var.


1
Sunucuyu biçimlendirmek ve başka bir dağıtım yüklemek için ne öneriyorsunuz? Ve neden ubuntu'nun diğer bazı cevapların belirttiği gibi belirli hizmetleri yerine getiremediğine inanıyorsunuz? Bu cevap dini bir yorumdur ve hiçbir şekilde yardımcı değildir.
Wtower

Sunucuyu şu anda biçimlendirmem ve yeni bir dağıtım yüklemem, ancak sunucuları bir daha yükseltmem gerektiğinde kesinlikle değişirdim. Ubuntu, bu yayında henüz yapılandırılmamış hizmetleri etkinleştirdiği için uygun olmadığını gösterdi (bunun istisnası, grafiksel bir giriş veya ses hizmeti gibi bir şey, normalde çalışan ve herkese açık internete maruz kalmayan şeyler) ). Cevabın biraz dindar olabileceğinden korkuyordum, ama niyet bu değildi, daha büyük sorun olarak gördüğüm şeye bir çözüm bulmaya çalışıyordu.
phelbore

1
Her ne kadar bunu yapmak için bir dağıtımın uygun olmadığını kabul etsem de, soruyu gerçekten cevaplamadığı için bunun bir yorum olarak daha uygun olacağını düşünüyorum.
JoL

Bu adil bir nokta.
Monica ile Hafiflik Yarışları
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.