mac os x için iptables eşdeğeri


55

Ben isteklerini iletmek istediğiniz 192.168.99.100:80için 127.0.0.1:8000. Linux kullanarak nasıl yapardım iptables:

iptables -t nat -A OUTPUT -p tcp --dport 80 -d 192.168.99.100 -j DNAT --to-destination 127.0.0.1:8000

MacOS X'te de aynı şeyi nasıl yaparım? Çok ipfwfazla başarılı olmayan bir komut kombinasyonunu denedim :

ipfw add fwd 127.0.0.1,8000 tcp from any to 192.168.99.100 80

(Benim için başarı bir tarayıcıyı işaret ediyor http://192.168.99.100ve üzerinde çalıştığım bir geliştirme sunucusundan yanıt alıyor localhost:8000)


OSX İstemcisi veya Sunucusu ile mi konuşuyoruz?
Scott Pack

1
Kar leoparı.
nafe,

192.168.99.100:80’de de dinleyebilmek için web sunucunuzu yapılandıramamanızın bir nedeni var mı?
Zoredache,

1
@Zoredache 80 numaralı bağlantı noktasını dinlemek sudo'ya ihtiyaç duyar ve bazı web sunucuları, sudo ile güvenli bir şekilde çalıştırmak için ayrıcalıkları bırakmaz.
Navin

Yanıtlar:


33

Böylece bunu yapmanın bir yolunu öğrendim . Tercih edilen yol olup olmadığından emin değilim ama işe yarıyor! En sevdiğiniz kabuğunda:

sudo ifconfig lo0 10.0.0.1 alias
sudo ipfw add fwd 127.0.0.1,9090 tcp from me to 10.0.0.1 dst-port 80

(Takma ad lo0eksik kısım gibi görünüyor)

Bir (sahte) alan adının bu yeni takma adı göstermesini istiyorsanız, / etc / hosts dosyasının satırı içerdiğinden emin olun:

10.0.0.1 www.your-domain.com

4
IPFW

25

Mac 10.10.2'deki ifconfigand pfctlkomutlarını kullanarak bu çalışmayı başarabildim . Aşağıdaki yaklaşımla başarılı bir 127.0.0.1:3000şekilde mydomain.comyerel olarak makineme eşleştiriyorum .

Komut satırında bağlantıları iletmek için aşağıdaki iki komutları girin 127.0.0.1:3000için 10.0.0.1:

sudo ifconfig lo0 10.0.0.1 alias
echo "rdr pass on lo0 inet proto tcp from any to 10.0.0.1 port 80 -> 127.0.0.1 port 3000" | sudo pfctl -ef -

Ardından, dosyanızı /etc/hostsveya /private/etc/hostsdosyanızı düzenleyin ve etki alanınızı eşlemek için aşağıdaki satırı ekleyin 10.0.0.1.

10.0.0.1 mydomain.com

Ana makine dosyanızı kaydettikten sonra yerel DNS’inizi temizleyin:

sudo discoveryutil udnsflushcaches

Şimdi mydomain.combir tarayıcıda açıldığında yerel sunucunuzda barındırılan sunucuyu göreceksiniz (örn. 127.0.0.1:3000). Temelde bu süreç bir eşleyen <ip>:<port>bir yeniye <ip>sonra IP olduğu bir dizi harita böylece.


1
Sadece biraz kesmek, ama işi halletmek. İyi gösteri.
Joey Carson

6
Teşekkür ederim. Takma adı ve iletmeyi nasıl geri alırsınız?
Carlos Nuñez

1
Merhaba sudo discoveryutil udnsflushcachesbana verir command not foundama yine de girişi doğru şekilde eşleştirir. Fakat ikinci bir portu nasıl haritalayabilirim? 1 + 2 numaralı adımları id ile yapmaya çalıştım: 10.0.0.2ve başka bir bağlantı noktası, ancak her zaman yalnızca son bağlantıyı alır. Öyleyse son yaparsam 10.0.0.1ve port 3000ileri sürer 3000, son yaparsam 10.0.0.2ve 4000ileriye doğru taşırsam 4000. Benim /private/etc/hostsher iki girişi de (göre) farklı kimliği ile yazdım.
Andi Giga,

Çalışıyor, ancak OSX'i yeniden başlattığımda tekrar ihtiyacım var .... Bunu kalıcı olarak kaydetmek için herhangi bir şey var mı?
Kasper

1
Lütfen ile güncelleyinsudo dscacheutil -flushcache
northtree 16:18 '

5

Ben de son zamanlarda benzer bir şey yapmak zorunda kaldım ve arama yaparken bu cevap geldi. Ne yazık ki, Nafe kullanımlarının ipfwşu anda kullanım dışı olan ve OSX'te bulunmayan cevapları ; ve Kevin Leary'nin cevabı gerçekten biraz aceleci. Bu yüzden daha iyi (daha temiz) bir şey yapmak zorunda kaldım ve posterity için burada paylaşmaya karar verdim. Bu cevap büyük ölçüde bu özünde belirtilen yaklaşıma dayanmaktadır .

OP’nin dediği gibi, 192.168.99.100’de bir tarayıcıyı işaret etmek localhost: 8000 adresindeki bir sunucudan yanıt almalıdır. Bir takma ad eklemek ifconfiggerçekten gerekli değil, pfctltek başına yeterli: Bunu yapabilmek için pf.confdosyanın /etc/pf.confdeğiştirilmesi gerekiyor.

Önce yeni bir çapa dosyası (diyelim (sudo ile) oluşturmak redirectionda): /etc/pf.anchors/redirection. Bu temelde normal bir metin dosyasıdır ve (Kevin Leary cevap gibi) aşağıdaki satırı içerir: rdr pass on lo0 inet proto tcp from any to 192.168.99.100 port = 80 -> 127.0.0.1 port 8000. Yeni bağlantı dosyası oluşturulduktan sonra, pf.confdosya içinde referans alınmalıdır . Açpf.confDosyayı sudo ilerdr-anchor "redirection" son rdr-çapa satırından (ki rdr-anchor "com.apple/*") load anchor "redirection" from "/etc/pf.anchors/redirection"sonra ekleyin ve sonuna ekleyin .

Sonuçta, bu pf.conf dosyasının nasıl görünmesi gerektiğidir:

scrub-anchor "com.apple/*"
nat-anchor "com.apple/*"
rdr-anchor "com.apple/*"
rdr-anchor "redirection"  #added for redirection/port forwarding
dummynet-anchor "com.apple/*"
anchor "com.apple/*"
load anchor "com.apple" from "/etc/pf.anchors/com.apple"
load anchor "pow" from "/etc/pf.anchors/redirection"  #added for redirection/port forwarding

Ve bu neredeyse. Sadece yeniden başlatpfctlsudo pfctl -dİlk önce onu devre dışı bırakmak ve ardından sudo pfctl -fe /etc/pf.conftekrar başlatmak için düzenleyerek .

Şimdi, bunun her yeniden başlatmadan sonra otomatik olarak gerçekleşmesi gerekiyorsa, başka bir küçük iş yapılması gerekiyor: başlatılması pfctlgereken programın güncellenmesi gerekiyor. Dava koda bakmaktan). (Sudo ile) açın System/Library/LaunchDaemons/com.apple.pfctl.plistve şunu arayın:

<array>
          <string>pfctl</string>
          <string>-f</string>
          <string>/etc/pf.conf</string>
</array>

ve <string>-e</string>nihayetinde böyle yapmak için satırı ekleyin :

<array>
         <string>pfctl</string>
         <string>-e</string>
         <string>-f</string>
         <string>/etc/pf.conf</string>
</array>

Bunu yapmalı.

Uyarı : Apple artık fırlatma iblisinin dosyalarını böyle değiştirmeye izin vermiyor (sudo, chmod veya başka bir şey değil). Sadece yolu ile tamircilik olduğunu Sistem Bütünlüğü Koruma çizme kurtarma modu ve fırlatma terminale: ayarlarla. SIP durumunu kontrol edin, csrutil statusgenellikle etkinleştirilmesi gerekir. Bunu devre dışı bırakın csrutil disableve normal modda yeniden başlatın ve sonra yukarıda tartışıldığı gibi plist dosyasındaki değişiklikleri yapın. Bir kez yapılırsa, kurtarma moduna geri dönün ve korumayı yeniden etkinleştirerek (iyi bir nedenden dolayı yerine) yeniden etkinleştirin csrutil enable.

Açıklama: Bir zaten localhost lo0 için (varsayılan) diğer adı olan ifconfigkomutu yayınlayarak kontrol edebilirsiniz 127.0.0.1- bu gerçek, localhost için fazladan bir takma ad eklemek zorunda kalmamak ve sadece pf.confdosyadaki varsayılan adresi kullanmak için kullanılıyor .

GÜNCELLEME: Ne yazık ki, başlangıçta dosyayı yükleme çalışmıyor gibi görünüyor. Hala sıralaması için yardım almaya çalışıyorum. O zamana kadar, sudo pfctl -f /etc/pf.confbaşladıktan sonra çalışan hile yapar.


Bunun için teşekkürler, bu benim için OS X Sierra'da işe yaradı. Yönlendirme dosyasının yeni bir satırla bitmesi çok önemlidir.
kadrian

Sistem dosyalarının üzerine yazmak güvenli görünmüyor System/Library/LaunchDaemons/com.apple.pfctl.plist; bu muhtemelen bir işletim sistemi güncellemesinden kurtulur mu?
Tom,


1

10.5'ten itibaren, OS X yerine, yeni, uygulamaya yönelik bir güvenlik duvarı geliyor ipfw. Ancak ipfw hala kuruludur. Sözdizimi ile ilgili sorun yaşıyorsanız, WaterRoofveya gibi grafiksel ön uçlara göz atın Flying Buttress.

HTH, PEra


1

Kuralların sıralanması önemlidir, izin kurallarınızdan önce "reddet" in olmadığından emin olun.


Tavsiyen için teşekkür ederim, ancak belirli bir sorunun olduğunu sanmıyorum (ipfw listesi sadece kuralımı gösterir ve 65535 allow ip from any to any).
nafe,

1

Emrinizde bir kural numarası eksik görünüyor; Deneyin:

ipfw add 100 fwd 127.0.0.1,8000 tcp from any to 192.168.99.100 80

(root olarak çalışmıyorsanız, onu sudo ile öneklendirmeniz gerekir). Kontrol edilecek başka bir şey de güvenlik duvarının etkin olmasıdır:

sysctl net.inet.ip.fw.enable

0 (kapalı) değeriyle geri gelirse, şu şekilde açın:

sysctl -w sysctl net.inet.ip.fw.enable=1

... ve bilgisayar yeniden başlatıldığında yeniden etkinleştirilmesini sağlayın. Bunu yapmanın "uygun" yolu muhtemelen fırlatılan bir öğe oluşturmaktır ( Lingon bunu oldukça kolaylaştırır). Ya da sadece belirtilen PEI GUI araçlarından birini kullanın ve ayrıntılarıyla ilgilenmesine izin verin.

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.