Frage FreeBSD Jail mit Loopback-IP, IPFW und natd - Ausgehende Verbindungen scheitern aus dem Gefängnis


Ich habe einen FreeBSD 9.0 Server. Es hat mehrere Gefängnisse, aber sie haben alle dasselbe Problem. Sie können keine Verbindungen zur Außenwelt initiieren. Sie kommunizieren miteinander und der Gastgeber fein.

relevant rc.conf die Einstellungen:

firewall_enable="YES"                   # IPFW
firewall_type="/etc/ipfw.rules"         # Rule script for IPFW

natd_enable="YES"                       # NAT for Internet Routing
natd_interface="wan0"                   # NAT Card
natd_flags="-f /etc/natd.conf -dynamic" # NAT Conf

ifconfig_lo1_name="jail1"
ifconfig_jail1="inet 192.168.1.101/32"

jail_asdf_rootdir="/jails/asdf"
jail_asdf_hostname="asdf.example.net"
jail_asdf_ip="192.168.1.101"
jail_asdf_devfs_enable="YES"

Von sysctl.conf

security.jail.allow_raw_sockets=1

Von ipfw.rules

# XXX 00050 divert natd ip4 from any to any via wan0
add 00060 check-state

# Allow me out
add 00135 allow ip from me to any keep-state
add 00136 allow ip6 from me6 to any keep-state

# HTTP
add 11010 allow tcp from any to me http setup keep-state
add 11011 allow tcp from any to me6 http setup keep-state
add 11012 allow tcp from any to me https setup keep-state
add 11013 allow tcp from any to me6 https setup keep-state
.... lots more rules like the above ....

# General Network - ICMP
add 61001 allow icmp from any to any

# XXX last rule is deny everything

Von natd.conf

redirect_port tcp 192.168.1.101:80 80
redirect_port tcp 192.168.1.101:443 443

Dies funktioniert hervorragend für eingehende Verbindungen. Das habe ich von mehreren Rechnern aus getestet, ich komme auf die Website ganz gut.

Wenn ich jexec 1 csh Um eine Shell in der Jail zu bekommen, kann ich keine ausgehende Verbindung erstellen. Das Gefängnis resolv.conf verweist auf den Host-Server und führt die Namensauflösung durch. Wenn ICMP weiterhin ohne Ausnahme übergeben wird, kann ich aus der Jail pingen.

Ich kann es tun tcpdump -i wan0 host 1.2.3.4 auf dem Host und beobachten Sie den Verkehr, wie es passiert. Ich sehe das SYN ausgehen und ein SYN ACK kommt zurück. Dann ein paar Sekunden später wieder dasselbe wie das Gefängnis versucht.

Wie kann ich ausgehende Verbindungen aus meinen Gefängnissen zulassen?

Aktualisieren:
Ich glaube, ich verstehe das Problem. Das ausgehende Paket beginnt mit den Firewallregeln, erhält NAT übersetzt, erlaubt und wird als externe IP aufgezeichnet, die eine ausgehende Verbindung herstellt. Wenn das zurückkehrende Paket zurückkommt, durchläuft es die Übersetzung, stimmt aber jetzt nicht mit der Prüfzustandsregel überein, da das Paket die interne IP hat. Ich suche immer noch nach einer Lösung.


6
2018-03-14 01:54


Ursprung




Antworten:


Die Lösung sollte aus dem Problem ersichtlich sein, dass die Adressumsetzung immer vor der Überprüfung der Statusregeln erfolgte. Die Adressübersetzung muss aufgeteilt werden.

Die korrigierte Version der oben gefundenen Regeln ist:

add 00050 divert natd ip4 from any to any via wan0 in
add 00060 check-state

# Talking to myself
add 00200 allow ip from me to me keep-state

# HTTP
add 11010 skipto 63000 tcp from any to me http,https setup keep-state
add 11011 skipto 63000 tcp from any to me6 http,https setup keep-state

# General Network - ICMP
add 61001 allow icmp from any to any

# Last rule of "normal" traffic
add 62000 deny ip from any to any

# Only for my outbound and specifically allowed incoming
add 63000 divert natd ip from any to any via wan0 out
add 63001 allow ip from any to any

# XXX last rule is deny everything

2
2018-03-15 13:55