iptables: belirli ips'lere izin ver ve diğer tüm bağlantıları engelle


26

Belirli ips'lere izin verebilir ve iptables'daki diğer tüm bağlantıları nasıl engelleyebilirim?


As Gilles gösteriyor konsept şöyledir: Eğer kaynak IP veya diğer nitelikleri ile, daha sonra REJECT Varsayılan politika ayarlanmış olup olmadığını izin vermek istediğiniz her bir spesifik şey kurallarını KABUL ekleyin.
Caleb,

Yanıtlar:


27

Uzun süre önce masaüstü kullanıcısı için temel Iptables kuralları hakkında bir blog yazısı yazdım ve muhtemelen onu ve Stateful firewall tasarımı ile ilgili makalesini okumalısınız . Ancak öncesi 2.6.39 öncesi çekirdek (bu içerir ipsetve 10'dan fazla beyaz listeye sahipseniz (10'un keyfi olduğu durumlarda) IP'yi beyaz listeye eklemek için kullanabilirsiniz.

Öncelikle, kabul ya da düşürmek istediğimizi bildiğimiz durumla ilgilenir ve arayüzler kurarız.

iptables -P FORWARD DROP # we aren't a router
iptables -A INPUT -m state --state INVALID -j DROP
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -s 192.168.1.1 -j ACCEPT
iptables -P INPUT DROP # Drop everything we don't accept

Sadece IP ile izinsiz yapmak istiyorsanız, devletsiz

iptables -A INPUT -s 192.168.1.1 -j ACCEPT
iptables -A OUTPUT -d 192.168.1.1 -j ACCEPT
iptables -P INPUT DROP
iptables -P OUTPUT DROP

Bunu yaparken sorunlarla karşılaşmanız muhtemeldir ve hayatınızı kolaylaştırmak için devlet kullanmayı öneriyorum. Örneğin, izin vermemek -i love -o lokesinlikle bazı uygulamalar için sorunlara neden olacaktır.


4
DROP yerine, istenmeyen paketleri reddetmelisiniz, çünkü sorunları teşhis etmeyi çok kolaylaştırır ve zaman aşımını önler. Bkz: IP paketlerini ICMP hatası ile reddetme mi, yoksa sadece bırakma mı?
Gilles 'SO- kötülük' dur

Hem kurulumu denedim, hem de KeePass2 başlamayacak, bir fikrin var mı? Ayrıca iptables -F, tüm kuralları temizlemem gerekiyorsa, ubuntu.com adresine ping bile yapamıyorum
Pawel Cioch

@PawelCioch neden KeePass2 internet bağlantısına ihtiyaç duyuyor?
Alex

@ DB dosyasını uzak bir yerde saklamak için bu tek IP istiyorum. Ama herşeyi anlıyorum, kurulum buradaki örnekten daha karmaşık.
Pawel Cioch

10

İşte yalnızca gelen bağlantıları engelleyen (denenmemiş!) Bir örnek . 192.168.3.x, ICMP veya SSH bağlantı noktasına gelen geridöngü arabirimi üzerinden bağlantılara izin verilir. Diğer tüm bağlantılar reddedilir.

iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A INPUT -p icmp -j ACCEPT
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
iptables -A INPUT -s 192.168.3.0/24 -j ACCEPT
iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -j REJECT

@Gilles, İLGİLİ ve KURULAN durumları uygun şekilde kullanabilmek için, başlangıç ​​paketini YENİ bir durum olarak eşleştirmeniz gerekir. loYukarıdaki örnekte durum eşleştirmesinin dışında tutulur ve her zaman izin verilir.
penguin359

@ penguin359: YENİ'ye neden ihtiyaç duyulduğunu açıklayabilir misiniz? Bir iptables uzmanından uzaktayım, bu kuralları kısmen YENİ ile eşleşmeyen ev yönlendiricimden kopyaladım. Anladığım kadarıyla, ilk kuraldan sonra geriye kalanlar, yine de YENİ (veya UNTRACKED) paketlerdir. (İşaretin çok ötesindeyseniz ve bir yorumda açıklayamazsanız, sürümlerinizi bir cevap olarak açıklamalarla gönderin ve benimkileri sileceğim.)
Gilles 'kötü'

@Gilles Bir şeyi kabul etmeden önce her zaman INVALID durumunu bıraktım ... INVALID, İLGİLİ, KURULAN DEĞİL, YENİ bir şey olmalı. Ama başka her şeyin YENİ'yi belirtmesi için herhangi bir neden bilmiyorum. Teoride INVALID ile başa çıkmazsanız ve YENİ belirtmezseniz, INVALID'i kabul etmelisiniz. Ancak INVALID bir kez ele alındığında, her kuralda YENİ durumunu kontrol etmenin sadece paket için daha fazla işlem gerektirdiği anlaşılıyor.
xenoterracide

@Gilles ayrıca varsayılan bir reddetme politikası da kötüdür, çünkü alınan her paket için bir reddetme paketi gönderir, bu bir DOS saldırısı oluşturur.
xenoterracide


7

Aşağıdaki kural, yalnızca IP’nize izin verir ve diğer tüm IP’leri 22 veya ssh portu üzerinden engeller. Bağlantıyı kesmeden önce yeni bir terminal ile test edin.

iptables -I INPUT -p tcp ! -s yourIPaddress --dport 22 -j DROP

3
özlü cevap için teşekkür ederim. Birkaç IP ve IP aralığına izin vermek istersem bu nasıl değişebilirdi. Bunun yerine yourIPaddressbirkaç IP adresi ve aralığı ekleyebilir miyim? Ve eğer SSH'yi 2888 gibi standart olmayan bir bağlantı noktasında kullanıyorsam, o zaman komut 22sizin örneğinizde 2288? Ayrıca, rsync, sftp, vb. İzin verilenler dışındaki tüm IP'lerden bu sunucuya engellenir mi?
PKHunter

1
-p tcpBurada önemli olduğuna dikkat edin çünkü --dportonsuz çalışmaz. Bunun -j REJECTyerine kullanmayı öneririm , DROPçünkü REJECTlimanı kapalı bağlantı DROPnoktasıyla aynı yapar ve bu bağlantı noktasına yönlendirilmiş paketleri siyah delikli yapar. Pratikte, uzaktan saldırgan, DROPaslında kapalı portlardan yapılandırılmış portları algılayabilir .
Mikko Rantalainen

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.