macOS paket filtresi (port yönlendirme)


4

Giden trafiği, hedef port 80'e yerel proxy port 127.0.0.1:8080'e yönlendirmeye çalışıyorum

/etc/pf.anchors/com.forwarding

rdr pass inet proto tcp from any to any port 80 -> 127.0.0.1 port 8080

/etc/pf.conf

scrub-anchor "com.apple/*"
nat-anchor "com.apple/*"
rdr-anchor "com.apple/*"
rdr-anchor "myproxy"
dummynet-anchor "com.apple/*"
anchor "com.apple/*"
load anchor "com.apple" from "/etc/pf.anchors/com.apple"
load anchor "myproxy" from "/etc/pf.anchors/com.forwarding"

Sonra:

sudo sysctl net.inet.ip.forwarding=1
sudo pfctl -ef /etc/pf.conf

Yerel trafik 127.0.0.1:80, 127.0.0.1:8080’e yönlendirilir, ancak dış değil, internete yönlendirilir.


: Onlar tüm parçaları usta böylece sıfırdan bir proxy oluşturmak artisanaly gerekmez herkes için bu için bir uygulama var charlesproxy.com
bmike

1
Teşekkür ederim, ama amacım vekil kendisi değil, en önemli şey bu kuralı işlemektir.
aminovich

Mükemmel - Sadece bu seçeneğe sahip olmak için kolay bir proxy arayan insanların aranmasını istedim. Bilgi, eğer bu ağ, başka pek çok şey yapabileceğiniz anlamına gelirse, güçlü ve derin bir bilgidir. Bir cevap bekliyorum ve belki de kendim bir şeyler öğrenmek için
bmike

Yanıtlar:


2

Sadece gelen trafiği yönlendirebilirsiniz . 80 numaralı bağlantı noktasına giden herhangi bir trafik, rdr kuralınızdan etkilenmez.

Giden trafiği 80 numaralı bağlantı noktasına yönlendirmek için önce lo0'a yönlendirmeniz, ardından proxy bağlantı noktasına yönlendirmeniz gerekir:

Config dosyasındaki sıra mutlaka gelen paketleri rdr , ardından paketleri (pass gibi) süzün , ancak kronolojik olarak 2. kural ilk (en0) aktif olur, bu durumda ilk kural aktif olur (lo0 üzerinde).

# Step "2". redirect those same packets that were routed to lo0 below
rdr pass log on lo0 proto tcp from any to any port 80 -> 127.0.0.1 port 8080
# Step "1". Route new IPv4 TCP connections leaving en0 to lo0
pass out on en0 route-to lo0 proto tcp from en0 to any port 80 keep state

pf.conf'ta bu şöyle görünür:

...
scrub-anchor "com.apple/*"
nat-anchor "com.apple/*"
rdr-anchor "com.apple/*"
rdr pass log on lo0 proto tcp from any to any port 80 -> 127.0.0.1 port 8080
dummynet-anchor "com.apple/*"
anchor "com.apple/*"
load anchor "com.apple" from "/etc/pf.anchors/com.apple"
pass out on en0 route-to lo0 proto tcp from en0 to any port 80 keep state

Yukarıdaki örnekte, en0'ın yalnızca giden en arabirim olduğunu varsayıyorum .

Mevcut pf.conf boşaltın ve pf durdurmak: sudo pfctl -d. Ardından yukarıdaki iki ek satırı ekleyin. Pf.conf dosyasını değiştirdikten sonra sudo pfctl -vnf /etc/pf.conf, aşağıdaki çıktıya neden olması gereken dosyanın sözdizimini kontrol edin :

pfctl: Use of -f option, could result in flushing of rules
present in the main ruleset added by the system at startup.
See /etc/pf.conf for further details.

scrub-anchor "/*" all fragment reassemble
nat-anchor "/*" all
rdr-anchor "/*" all
rdr pass log on lo0 proto tcp from any to any port 80 -> 127.0.0.1 port 8080
anchor "/*" all
pass out on en0 route-to lo0 proto tcp from en0 to any port 80 flags S/SA keep state
dummynet-anchor "/*" all

ve eğer başarılı olursa ile yükleyin sudo pfctl -e -f /etc/pf.conf.


Uygun bir sistem ve proxy yapılandırması (ve iyi davranış gösteren uygulamalar) bu tür kurallar gerektirmez!


Evet! çalışır, açıklamalarınız için çok teşekkürler, bana çok yardımcı oluyor.
aminovich
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.