Jak upuścić pakiety wychodzące na określony host / port?

6

Chcę przetestować coś lokalnie. W tym celu chciałbym móc upuszczać pakiety wychodzące wysyłane do określonego hosta / portu. Próbowałem zadzierać z regułami pf przy użyciu Murusa (wersja niewolna), ale zakończyło się to niepowodzeniem.

Czuję się komfortowo w terminalu, ale nie jestem pewien, gdzie wprowadzić zmiany i jak je zastosować. Znam iptables na Linuksie.

Czy mogę uzyskać wskazówki, jak to osiągnąć?

Ovesh
źródło
Zobacz odpowiedź na to pytanie od @klanomath .
jmhindle
Dodaj swoją wersję systemu. Czy wolisz rozwiązanie Murusa (aby lepiej zrozumieć Murusa) czy moja powiązana odpowiedź jest wystarczająca?
klanomath
Dziękuję @klanomath. Przepraszam, że byłem offline przez kilka dni.
Ovesh

Odpowiedzi:

10

Aby trwale zablokować ruch wychodzący do określonych domen i / lub portów, należy utworzyć nowy plik kotwicy i dodać go do pliku pf.conf.

  1. Utwórz plik kotwicy org.user.block.out w /private/etc/pf.anchors

    sudo touch /private/etc/pf.anchors/org.user.block.out
    

    o następującej treści i końcowej pustej linii

    mybadtcphosts = "{ www.domain.com, domain.com, 135.0.9.17, 10.0.0.17 }"
    mybadtcpports = "{ 443, 80 }"
    mybadudphosts = "{ www.domain3.com, domain3.com, 27.134.89.124, 192.168.5.37 }"
    mybadudpports = "{ 53, 5353 }"
    
    block drop out proto tcp from any to $mybadtcphosts port $mybadtcpports
    block drop out proto udp from any to $mybadudphosts port $mybadudpports
    

    Dodatkowe nazwy domen / adresy IP na hostach mybad * to tylko przykład dodawania dodatkowych domen. To samo dotyczy portów 80/5353 w portach mybad *.

    Proste, ale mniej elastyczne rozwiązanie to:

    block drop out proto tcp from any to domain.com port 80
    
  2. Zmodyfikuj plik /private/etc/pf.conf, ale pozostaw końcową pustą linię

    oryginalny plik:

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

    do

    scrub-anchor "com.apple/*"
    nat-anchor "com.apple/*"
    rdr-anchor "com.apple/*"
    dummynet-anchor "com.apple/*"
    anchor "com.apple/*"
    anchor "org.user.block.out"
    load anchor "com.apple" from "/etc/pf.anchors/com.apple"
    load anchor "org.user.block.out" from "/etc/pf.anchors/org.user.block.out"
    
  3. Analizuj i testuj plik kontrolny, aby upewnić się, że nie ma błędów:

    sudo pfctl -vnf /etc/pf.anchors/org.user.block.out
    
  4. Teraz zmodyfikuj /System/Library/LaunchDaemons/com.apple.pfctl.plist z

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

    do

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

    Musisz wyłączyć Ochronę integralności systemu, jeśli El Capitan jest zainstalowany, aby to osiągnąć. Po edycji pliku można ponownie włączyć SIP. Po ponownym uruchomieniu komputera Mac pf zostanie włączony (jest to opcja -e).

    Alternatywnie możesz utworzyć własnego demona uruchamiania podobnego do odpowiedzi tutaj: Używanie serwera 5.0.15 do udostępniania Internetu BEZ udostępniania Internetu .

Po aktualizacji systemu lub aktualizacji niektóre oryginalne pliki powyżej mogły zostać zastąpione i trzeba ponownie zastosować wszystkie zmiany.


Murus:

Otwórz Murusa. Kliknij koło zębate w panelu konfiguracji, aby utworzyć niestandardową regułę:

Murus Config

Wprowadź wszystkie niezbędne szczegóły:

niestandardowa reguła

Naciśnij niebieski przycisk     Add Custom PF rule    i uruchom PF w prawym górnym rogu strzałką w prawo (lub przyciskiem „odtwarzaj”).

klanomath
źródło
11

Możesz użyć zapory ogniowej PF:

Dodaj tę linię do /etc/pf.conf, aby upuścić wszystkie pakiety na podany port ip:

block drop out quick proto tcp  to 192.168.1.103 port 80

Po zmianie pf.conf powinieneś go ponownie załadować

sudo pfctl -f /etc/pf.conf

W końcu będziesz musiał włączyć to za pomocą

sudo pfctl -e
hetOrakel
źródło