Neden iptables OUTPUT zincirimde REJECT politikasını kullanamıyorum?


11

Şu anda OUTPUT zincirimi DROP olarak ayarladım. Bunu reddetmek için değiştirmek istiyorum, böylece güvenlik duvarımın erişmeye çalıştığım herhangi bir hizmetle ilgili bir sorundan ziyade bir yere gitmemi engellediğine dair bir ipucu var (zaman aşımı yerine hemen reddetmek). Ancak, iptables bunu umursamıyor gibi görünüyor. Kaydedilmiş kurallar dosyamı manuel olarak düzenler ve geri yüklemeye çalışırsam, alıyorum iptables-restore v1.4.15: Can't set policy 'REJECT' on 'OUTPUT' line 22: Bad policy nameve kuralları yüklemeyi reddediyor. Bunu manuel olarak ayarlamaya çalışırsam ( iptables -P OUTPUT REJECT), iptables: Bad policy name. Run 'dmesg' for more information.dmesg'de çıktı yok.

Uygun kuralın çekirdeğe derlendiğini ve yüklendiğinden emin olmak için yeniden başlattığımı doğruladım:

# CONFIG_IP_NF_MATCH_TTL is not set
CONFIG_IP_NF_FILTER=y
***
CONFIG_IP_NF_TARGET_REJECT=y
***
CONFIG_IP_NF_TARGET_LOG=y
CONFIG_IP_NF_TARGET_ULOG=y

(Geçerli kuralı vurgulamak için yıldız işaretleri eklendi)

Bulabildiğim her şey, REJECT'in geçerli bir politika / hedef olduğunu (genel olarak) belirtir, ancak INPUT, FORWARD veya OUTPUT zincirleri için geçerli olmadığını söyleyen hiçbir şey bulamıyorum. Google fu'm yardımcı olmuyor. Gentoo'dayım, eğer bu bir fark yaratırsa. Burada kimse bir fikir var mı?


Söz konusu iptableskuralları gösterebilir misiniz ?
bahamat

Yanıtlar:


15

REJECTbir zincir politikası hedef olmak zorundayken , bir hedef uzantıdır . Man sayfası (gerçekten açık olmasa da) diyor, ancak söylediklerinden bazıları düz yanlış.

Politika yalnızca yerleşik zincirlerde ACCEPTveya DROPüzerinde olabilir . Önceki kurallara uymayan tüm paketleri reddetme efektini istiyorsanız, son kuralın her şeyle eşleştiğinden ve REJECThedef uzantıya sahip bir kural eklediğinden emin olun . Başka bir deyişle, tüm ilgili kuralları ekledikten sonra yapın iptables -t filter -A OUTPUT -j REJECT.

Daha fazla ayrıntı için netfilter listesindeki "olası zincir ilkeleri nelerdir" konusuna bakın .


Bu mantıklı ve sonunda genel bir reddetme işe yarayacak. Meraktan, hedef uzantı tanımı oldukça açık bir yerde ve bunu kaçırdım ya da kötü belgelenmiş bitlerden biri mi?
ND Geek

1
Tüm kılavuz sayfasını okuduktan sonra, REJECT'in bir hedef uzantı olduğu açıktır, ancak kılavuz sayfası çok uzundur, bu yüzden "TL; DR" uygulama eğilimindedir. Ayrıca DROP, ACCEPT ve QUEUE'nun geçerli politika hedefleri olduğunu; geçerli koddan, QUEUE değil!
StarNamer

4

Belgelendirilmiş bulamadım, ancak burada bir referans , izin verilen tek politikaların KABUL veya DAMLA olduğunu gösterir. Bu bakarak teyit edilir kaynağın ait libiptckod vardır hattının 2429, etrafında (kurallarını manipüle sorumludur)

2429         if (strcmp(policy, LABEL_ACCEPT) == 0)
2430                 c->verdict = -NF_ACCEPT - 1;
2431         else if (strcmp(policy, LABEL_DROP) == 0)
2432                 c->verdict = -NF_DROP - 1;
2433         else {
2434                 errno = EINVAL;
2435                 return 0;
2436         }

Orijinal iplik , yapılacak en iyi şeyin, olması gereken zincirin sonuna REJECT eklemektir iptables -A OUTPUT -j REJECT.

Bundan hemen önce kodun:

2423         if (!iptcc_is_builtin(c)) {
2424                 DEBUGP("cannot set policy of userdefinedchain `%s'\n", chain);
2425                 errno = ENOENT;
2426                 return 0;
2427         }
2428 

Dolayısıyla, ilkeyi Kullanıcı Tanımlı bir zincirde ayarlayamazsınız.


İş parçacığındaki bu komut yanlış; -pbir protokol üzerinde eşleştirme içindir; -Acevabımın söylediği gibi demek istiyordu .
Shawn J. Goff

Bu oldukça ilginç. İçimdeki merak, arkasında bir neden olup olmadığını veya muhtemelen basitlik uğruna bir şeylerin böyle olup olmadığını merak ediyor (daha basit kod, sonuçta güvenlik açıkları için daha az olası nokta anlamına geliyor). Eğer ılımlı bir geliştirici olsaydım, yerel olarak hacklemeye cazip gelebilirdim, ama olmadığımdan ve bu bir güvenlik parçası olduğu için ona dokunmayacağım.
ND Geek

2

REJECTüzerinde OUTPUThiçbir mantıklı; a REJECT, bir ağdan geçmesi gereken bir ICMP paketi döndürür .

Zincire neyin bu kadar yaklaştığını görmek -j LOGiçin son kuralınız olarak (bu nedenle DROPpolitikadan önce ) yeni bir tane ekleyin OUTPUT.


1
Olabilir değil REJECTlo arabirimde ICMP paketi dönüş? A'nın LOGsorun giderme için yararlı olduğunu kabul ediyorum , ancak gerçekten umduğum şey, 5 dakikaDROP boyunca sorun gidermek yerine "Ah, evet ... muhtemelen benim iptables varsayılanım tarafından engelleniyor" un hatırlatmanın bir yolu . Access XYZ sunucusu muhtemelen yerel olduğunu fark eder , ki bu benim en yaygın yaklaşımımdır, çünkü tipik iş günüm nadiren bir delik açmadım. Tabii ki bunu aklımdan daha iyi tutmalıyım, ama bir daire REJECTdaha açıktır.
ND Geek

Arayüzün birçok nedenden dolayı arayüzde ethXtrafik oluşturmasını isteyeceğinizi düşünmüyorum lo. Çok bağımsızlar; zincirlerin kolayca diğerine uygulanmasını sağlayabilirsiniz.
Aaron D. Marasco
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.