TCP ana bilgisayarından gelen trafiği "düzenlemenin" kolay yolu (linux)


9

Bilinen bir tcp ana bilgisayardan gelen trafiğe bazı küçük değişiklikler yapmalıyım: bağlantıyı işlemden geçirmeden önce akışı alın.

Örneğin, 192.168.1.88 bir web sunucusu çalıştıran uzak bir ana bilgisayar olsun.
Yerel ana bilgisayarımdaki bir işlem 192.168.1.88:80'den (örneğin tarayıcı) veri aldığında, veri ilk önce text-Abununla değiştirilerek değiştirilir text-B:

  • 127.0.0.1: ... 192.168.1.88:80'e bağlanıyor
  • 127.0.0.1: ... 192.168.1.88:80'e gönderir:

    GET /
    
  • 192.168.1.88:80 127.0.0.1'e gönderilir: ...:

    HTTP/1.0 200 OK
    Content-Type: text/plain
    
    Some text-A, some other text
    
  • Bu veriler sistem tarafından bir şekilde ele geçirilir ve çıktısı olan bir programa aktarılır:

    HTTP/1.0 200 OK
    Content-Type: text/plain
    
    Some text-B, some other text
    
  • sistem bu şekilde değiştirilen verileri, 192.168.1.88:80'den geliyormuş gibi, 127.0.0.1: ... işlem idaresine verir.

Bu değişiklikleri yapmak için akış tabanlı bir yolum olduğunu varsayarsak ( sedörneğin kullanarak ), gelen tcp akışını önceden işlemenin en kolay yolu nedir?

Sanırım bu içerecektir iptables, ama pek de iyi değilim.

Uygulamanın orijinal ana bilgisayarla uğraşmak zorunda olduğunu unutmayın, bu nedenle bir proxy ayarlamak muhtemelen bir çözüm değildir.


Bu HTTP istekleri mi?
polinom

Sorunuz yeterince açık değil. Daha fazla ayrıntı sağlamanız gerekiyor.
Khaled

1
Paket düzeyinde yapamazsınız. Bir paket "metin-" içerebilir ve diğeri "A" içerebilir. Protokolü takip eden görünmez bir proxy geliştirmeniz gerekecektir. (Protokolü izlemelisiniz çünkü eğer "text-" alırsanız ve "text-A" ​​nın bir parçasıysa, bir sonraki parçayı geçirmeden önce beklemeniz gerekir, aksi halde filtreniz çalışmaz. Ama sonsa mantıklı bir mesajla bekleyemezsin, çünkü sonsuza kadar beklersin.) Bunu yapmanın kolay bir yolu olmadığına inanıyorum.
David Schwartz

FTP trafiğinin NAT üzerinde çalışabilmesi için yeniden yazılmasını sağlayan halihazırda durum bilgisi olan paket inceleme sistemleri vardır. Bu başlangıç ​​için bir yer.
pjc50

Öncelikle http yanıtı ile çalışmak gerekiyor ama herhangi bir uygulama katmanında çalışırsa iyi olurdu.
etuardu

Yanıtlar:


21

Netsed ve iptables proxy'lerini kullanın.

iptables -t nat -D PREROUTING -s yourhost -d desthost -p tcp --dport 80 -j REDIRECT --to 10101

O zaman koş:

netsed tcp 10101 desthost 80 s/text-A/text-B

NetSED , ağınız üzerinden iletilen paketlerin içeriğini gerçek zamanlı olarak değiştirmek için tasarlanmış küçük ve kullanışlı bir yardımcı programdır. Ağ paket değişikliği, dövme veya manipülasyonu için gerçekten yararlıdır. NetSED şunları destekler:

  • kara kutu protokol denetimi - belgelenmemiş bir protokol kullanarak iletişim kuran iki veya daha fazla tescilli kutu olduğunda. Devam eden iletimlerde değişiklikleri uygulayarak, incelenen uygulamanın güvenli talep edilip edilemeyeceğini test edebileceksiniz.

  • fuzz üreten deneyler, bütünlük testleri - bir uygulamanın kararlılık testlerini her ne zaman veri bütünlüğüne önem verdiğini görmek için;

  • diğer yaygın kullanım durumları: yanıltıcı aktarımlar, içerik filtreleme, protokol dönüştürme - elinizdeki göreve en uygun olan şey.


Bu gerçekten basit ve havalı.
mbrownnyc

Bilmiyordum netsed, amacım için neredeyse mükemmel uyuyor. Ben alamadım tek şey "yerel şeffaf proxy" kurmak için nasıl (soruya bakın). Belki bunu elde etmek için başka bir (sanal) ağ arayüzü kurmalıydım. Bu arada, şimdilik bu en tatmin edici cevap.
etuardu

Genel bir dağıtım çekirdeği mi kullanıyorsunuz? Iptables iseniz muhtemelen zaten derlenmiş. Şeffaf proxy ayarlamak için sadece ana makine / bağlantı noktaları için uygun ayrıntıları doldurmanız gerekir. Benioku dosyasına bir göz atın ve bazı ayrıntıları doldurup doldurmadığına bakın. silicone.homelinux.org/git/netsed.git/blob_plain/HEAD:/README
dfc

Netsed'in bir seferde sadece bir paket üzerinde çalışacağını düşündüm? Bu nedenle, http isteği iki pakete bölünmüşse, ikame için normal ifade eşleşmez ve istek değiştirilmemiş sunucuya geçirilir.
Paulos

1
Tamam şimdi, sadece birinin bir gün ihtiyacı olması durumunda: tam olarak anladığımdan değil, aslında Giden paketleri (yani op yapmak istemiyordu) değiştirmek için OUTPUTdeğil , değiştirmek zorunda kalacaksınız PREROUTING. ayrıca, -Dseçenek -A benim için olmalıydı . Ayrıca, -jseçenek için, DNAT --to-destination (ip) veya kullanmak zorunda kaldı REDIRECT --to-port. Son olarak, netsed'in segmentasyon hatasını düzeltemedim. ayrıca bkz: ubuntuforums.org/showthread.php?t=2337389
phil294


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.