Iptables kalıcı servisi neden değişiklikleri kaydetmiyor?


19

Ubuntu 12.04'te IP kuralları ayarlamak için bu öğreticiyi takip ettim . Kurulumda her şey iyi çalıştı - ancak şimdi yeniden başlatma sırasında devam etmeyen güvenlik duvarında değişiklikler yaptım. Bunun neden olduğunu anlamıyorum. İşte nasıl iptables-persistent kullandığımın bir gösteri. Neyi yanlış yapıyorum?

$ sudo service iptables-persistent start
 * Loading iptables rules...                                                                                             *  IPv4...                                                                                                              *  IPv6...   

$ sudo iptables -L   //shows a certain rule
$ iptables -D INPUT ... //command successfully drops the rule
$ sudo iptables -L   //shows rule has been deleted

 $ sudo service iptables-persistent restart
 * Loading iptables rules...                                                                                             *  IPv4...                                                                                                              *  IPv6...                                                                                                      [ OK ] 
 $ sudo iptables -L  //rule is back

iptables -D INPUTKuralın içinde olmadığını fark ediyorum , sudoaslında bir başarı rapor ettiğinden emin misiniz? İçinde çalıştırırsanız davranış değişir sudomi?
Bratchley

Yanıtlar:


42

iptables-persistentbu şekilde çalışmaz. iptables-persistent"Hizmet" in yeniden başlatılması iptables'ın mevcut durumunu yakalamaz ve kaydetmez; tek yaptığı, paket en son yapılandırıldığında kaydedilen iptables kurallarını eski durumuna getirmek.

Yapılandırmak için iptables-persistent, mevcut iptables kural kümenizden bahsetmeniz gerekir.

Bunu başarmanın bir yolu şöyledir:

iptables-save >/etc/iptables/rules.v4
ip6tables-save >/etc/iptables/rules.v6

Veya, aynı iptables-persistentzamanda , paket ayrıca şunları sağlar:

dpkg-reconfigure iptables-persistent

(Kuralların kaydedilip kaydedilmeyeceği ile ilgili sorulara evet yanıtı vermeniz gerekir.)

Bundan sonra, bir dahaki sefer iptables-persistentbaşlatıldığında / yeniden başlatıldığında, beklediğiniz iptables kural kümeleri yüklenecektir.


9

Geçerli iptables kurallarını kaydetmenin çok basit bir yolu komutu kullanmaktır:

sudo service netfilter-persistent save

netfilter-persistent(Ve iptables-persistent) paketini kurduktan sonra en azından Ubuntu'da çalışan yukarıdakileri kullanarak iptables komutlarını manuel olarak çalıştırmaya veya paketi yeniden yapılandırmaya gerek yoktur (yukarıdaki kabul edilen Yanıt tarafından bile önerildiği gibi).


Öyle mi sudo service netfilter-persistent saveyoksa sudo service netfilter-persistent save .? (

Bunu not ettiğiniz için teşekkürler, doğru komut satır sonundaki nokta w / o. Cevabı buna göre düzeltildi.
OpenITeX

3
$ iptables ... DROP //command successfully drops the rule
$ sudo iptables -L   //shows rule has been deleted

Bunun DROPanlamı ya da anlamı bu değil . Gönderen man iptables:

... KABUL, DÜŞÜR, KUYRUK veya İADE özel değerleri . KABUL, paketin geçmesine izin vermek anlamına gelir. DROP , paketi yere düşürmek anlamına gelir . QUEUE anlamı ...

Yaptığınız şey yeni bir kural eklemek. Herhangi bir sayıda başka kuralın yerine geçebilir, ancak bu kurallar hala mevcuttur.

Böyle bir şeyi kontrol ederken ( iptables -Lçıktınız), grep "string unique to this rule"gözlerinizi kullanmak yerine onu beslerdim. Yapması daha kolay ve daha hızlı ve daha az hataya yatkın.

iptables -L | grep "some unique string"

Bir kuralı silmek istiyorsanız, -Danahtarı kullanın ; kılavuz sayfasında bunun iki şekli açıklanmaktadır:

-D, - zincir kuralı belirtimini sil

-D, --delete zincir rulenum

Seçilen zincirden bir veya daha fazla kuralı silin. Bu komutun iki sürümü vardır: kural zincirde bir sayı olarak (ilk kural için 1'den başlayarak) veya eşleşecek bir kural olarak belirtilebilir.


üzgünüm bu belirsizdi. Bir kuralı DAMLA yapmak için -D seçeneğini kullanıyorum. Yukarıdaki değişikliği görün
bernie2436

3
-D"DROP" değil "delete" anlamına gelir. "DROP" teriminin, atlama hedefi dışında bir şey ifade etmek için iptableskullanılması cehennem olarak kafa karıştırıcıdır.
Bratchley

1

@ Steven-monday tarafından açıklandığı gibi , sizin belirlediğiniz kuralınızı uygun dizine kaydedebilirsiniz (yani:) /etc/iptables/rules.v{4,6}.

Ancak, @OpenITeX haklıdır: saveeylemini çağırmak service netfilter-persistentdaha iyidir.

(18.10 olarak) Bugün itibariyle iptables kaydetme yerleşik, ancak iptables-persistentedilir değil yüklenmiş. Bu nedenle, tarafından çağrılan eklenti dizini service netfilter-persistentboştur ve hizmet kural kümesinin kaydedildiğini, oysa kaydedilmediğini yazdırır.

TLDR: iptables-persistenteklenti dizininin /usr/share/netfilter-persistent/plugins.deklentiler içerdiğini yükleyin ve kontrol edin .


İşte bunu nasıl anladım:

$ cat /etc/init.d/netfilter-persistent 
...
case "$1" in
...
save)
    log_action_begin_msg "Saving netfilter rules"
    /usr/sbin/netfilter-persistent save
    log_action_end_msg $?
    ;;

Ardından /usr/sbin/netfilter-persistentkomut dosyasını kontrol edin, harici komut dosyalarını çağırdığına dikkat edin:

$ cat /usr/sbin/netfilter-persistent
...
PLUGINS=/usr/share/netfilter-persistent/plugins.d
...
run_plugins () {
    if [ -d ${PLUGINS} ]; then
        run-parts -v -a ${1} ${PLUGINS}
    fi
}

case $1 in
start|save|flush)
    run_plugins ${1}
    ;;

Sonra bunun /usr/share/netfilter-persistent/plugins.dboş olduğunu fark ettim .


1

İptables-persistent uygulamasını yükleyin:

sudo apt install iptables-persistent

İstediğiniz değişiklikleri yaptıktan sonra kuralları kaydedin:

sudo netfilter-persistent save
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.