İnternete açık bir sunucuyu yeniden başlatmak güvenli midir?


29

özellikle

CentOS çalıştıran bir sunucuda tanımlanmış bir iptables kural kümem var. Ağ bağlantısı çevrimiçi olduğunda (makinenin önyüklemesinde veya ağ hizmetini yeniden başlattıktan sonra) iptables kural setinin zaten uygulandığını (ve iptables başlatılamıyorsa veya kural setini uygulayamazsa) garanti verebilir miyim / nasıl garanti edebilirim / nasıl garanti edebilirim ağ arayüzü gelip başarısız olur)?

(Bunun bir noob sorusu olduğunu biliyorum, ancak hiçbir zaman bir sunucuyu, maskeli bir DHCP NAT ve bir güvenlik duvarının arkasındaki güvenilir ağlardan başka bir şeyde çalıştırmadım, bu yüzden noobs'dan noob soruları bekleyin.)


15
Gerçekten noob bir soru değil. Bu aslında hacker'ların 2011 yılında PlayStation ağına nasıl girdiğini ve 24 gün boyunca kesinti yapıp yerleşim yerlerinde 15 Milyar Dolara neden olduğunu gösteriyor. Güvenlik duvarları yeniden başlatıldığında (olduğu gibi) güvenlik duvarı birkaç dakika boyunca açık bir şekilde açıldı - görünüşe göre yeterince uzun.
Chris S,

@ChrisS Bu konuda en garip olan şey, birisinin güvenlik duvarını kapatmayı önerdiği halde kirpik takmadığı halde, o ağdan sorumlu sistem yöneticilerinin neredeyse balklamak için yeterince akıllı olacağından emin olacağım. , kapatılıyor ... ve sonra tekrar açılıyor. Bunların hangi kombinasyonunun açıklayacağından emin değilim .
Parthian Shot,

Başka bir seçenek de, sitedeyseniz ve anahtar erişiminiz varsa, sunucu tamamen önyükleninceye kadar ağ anahtarına bağlantıyı devre dışı bırakmaktır. Bu ideal değildir, ancak sunucunun NFS gibi bir ağ bağımlılığı olmadığı sürece kesinlikle işe yarayacaktır.
jftuga

@jftuga Pekala, elbette. Fakat o zaman sunucu internete bağlı olmaz ve bu yüzden teknik olarak bu çözüm bu sorunun kapsamına girmez. Eğer yerinde olursam, yeniden başlatma sırasında ethernet kablosunu çıkarabilirim. Ve altta yatan sorun, yine de liman engelleme çözümüyle birlikte kalacaktı; ağa saldıran başka bir bilgisayarın yerel güvenlik duvarı tarafından durdurulmaması. Yönlendirici saldırıya uğrarsa veya arıza yaparsa veya yerel ağdaki bir başkası tehlike altındaysa, oyun hala sona erer.
Parthian,

@jftuga Aslında, konu bundan daha da kötü. Birinin yerel makinede çalıştırmak için zaten bir yazılım parçası edindiğini varsayarsak, ancak güvenlik duvarım çıkış filtreleme yapıyor, kuralın, giden paketlere yalnızca kurulursa veya bağlanırsa izin verildiğini ve gelen yeni bağlantıların yalnızca bağlantı noktası 80'e izin verildiğini söylediğini varsayalım. Normalde bu, imtiyazsız bir hesaptan ters bir kabuğu engeller. Ancak bağlantı açılışta başlatılırsa, güvenlik duvarı başlatmasıyla sürdürülecektir. Sanırım, güvenlik duvarı kurallarının da değişmesi gerektiği anlamına geliyor, ancak bu yapılması kolay bir hata.
Parthian

Yanıtlar:


18

Kutudan, iptables'ın arayüz başlangıç ​​betiği sırasına getirilmeden önce başlayacağı garanti edilir. Her başlangıç ​​betiğindeki "chkconfig" satırına bakın; aktif, başlangıç ​​sırası ve durma sırasını "açık" olduğu çalışma seviyelerini göreceksiniz.

Eğer iptables kural seti doğru bir şekilde uygulanmamışsa (ya da hiç) arayüzün getirilmeyeceği garanti edilmez.

Örnek:
chkconfig: 2345 08 92
Bu satır, söz konusu hizmetin 2, 3, 4 ve 5. çalışma seviyelerinde aktif olacağını ve 8'de başlayıp 92'de duracağını belirtir. Daha büyük bir "başlangıç" değeri olan herhangi bir şey yalnızca bu komut dosyası tamamlandıktan sonra başlayacaktır, ancak bu betiğin hatalı çıkması bir tamamlanma olarak kabul edilir ve akış aşağı komut dosyalarının çalışmasını engellemez.

Lütfen bu cevabın mutlaka CentOS 7 için değil, CentOS 6 ve önceki sürümleri için geçerli olduğunu unutmayın. Bu soruyu 7 için cevaplayacak kadar kişisel araştırma yapmamıştım.


1
+1 Ve ... ağzına bir hediye atına bakmamak, çünkü cevabınız oldukça yardımcı olur, ancak… Hizmetlere bir bağımlılık emri vermek için standart bir yol olduğunu biliyor musunuz? zincirin başlarında sonrakiler başlamıyor mu? Ooh- ve ayrıca birisi güvenlik duvarını (bir şekilde) çökertmeyi başarırsa, ağ arayüzünün "gemiyle aşağı ineceğini" mi? İdeal olarak, her şeyin güvenli bir şekilde yapılmasını isterdim, hatta birinin güvenlik duvarı DoS'a 0dayı olmasına rağmen ...
Parthian Shot

5
SysV başlangıç ​​komut dosyalarıyla (yani CentOS 6 ve önceki sürümler), bunu yapmanın iyi bir yolu yoktur. CentOS 7 istediğiniz gibi bağımlılıklar yapar - B A'ya bağlıysa ve A başarısız olursa B başlamaz. 7, bağımlılıkları kullanmak görmek için systemctl list-dependencies --all(sadece 30 saniye önce man sayfasına baktım).
John,

Bu haber biraz hayal kırıklığı yaratıyor olsa da (şu anda 6 yaşıyorum), en azından şimdi init betiğini değiştirmenin kabul edilebilir derecede kötü bir saldırı olduğunu biliyorum.
Parthian Shot,

5
Init komut dosyalarının değiştirilmesi konusunda çok dikkatli olun - böyle yapmak, sahip olabileceğiniz herhangi bir izinsiz giriş algılama yazılımı üzerinde yanlış alarmlara neden olabilir ve initscriptspaket daha önce güncellendiğinde değişiklik yapılması üzerine yazılır (örneğin, bir sürüm serbest bırakılması gibi). Bunu yapmayı gerçekten tavsiye etmiyorum.
John,

Henüz bir IDS kurmadım, bu yüzden yanlış alarmlar şu anda sorun değil (sunucu henüz yayınlanmadı ve konuşlandırmaya hazır hiçbir yerde olmadığımı biliyorum; bu soru hazırlığımın bir parçası. Ama ben bir HIDS koyacağım). Elimden geldiğince dikkatli olacağım ve eğer init'in config bölümünün el ile değiştirilmesini içermeyen bir yol varsa, kesinlikle bunu yapıyorum.
Parthian Shot,

1

Ayrıca, centos'ta ifup-post seçeneğini de kullanabilirsiniz:

/ Etc / sysconfig / network-scripts / ifup-post

Herhangi bir ağ cihazı bir SLIP cihazının DIŞINDA çıkınca çağrılır. Bu cihaza bağlı statik yollar getirmek için / etc / sysconfig / network-scriptleri / ifup-route'ları çağırır. Bu aygıtın diğer adlarını getirmek için / etc / sysconfig / network-scripts / ifup-aliases çağırır. Önceden ayarlanmadıysa ve bu cihazın IP'si için bir ana bilgisayar adı bulunabilirse ana bilgisayar adını ayarlar. SIGIO'yu ağ olaylarının bildirilmesini isteyen programlara gönderir.

Gerekirse ad servisi yapılandırmasını düzeltmek, isteğe bağlı komut dosyaları çağırmak, vb. Genişletilebilir.

Bu komut dosyası çalışır ve yukarıdakilerden sonra (ifup-route ve ifup-aliases) ifup-local arar

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

Böylece bu dosyayı oluşturabilir ve iptables-restore kullanarak tekrar iptables'ı çağırdığından emin olabilirsiniz:

iptables-restore < /etc/sysconfig/iptables

1

Küçük bir ek: sunucuyu bir sonraki açılışınızda gerekli kuralların orada olmasını sağlamak için

sudo sh -c "iptables-save > /etc/iptables.rules"
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.