[tor-bugs] #18496 [Tor]: stateful firewalling on relays

Tor Bug Tracker & Wiki blackhole at torproject.org
Mon Mar 7 19:45:54 UTC 2016


#18496: stateful firewalling on relays
-----------------------------+--------------------------
     Reporter:  thomas       |      Owner:
         Type:  enhancement  |     Status:  new
     Priority:  Medium       |  Milestone:
    Component:  Tor          |    Version:  Tor: 0.2.7.6
     Severity:  Normal       |   Keywords:
Actual Points:               |  Parent ID:
       Points:               |    Sponsor:
-----------------------------+--------------------------
 Le me suggest doing a documentation enhancement and raise some awareness
 regarding operation of Tor relays behind stateful firewalls/packet
 filters.

 Recently, I’ve enabled a stateful packet filter on my relays. Later on,
 consensus weight, guard probability and observed bandwidth started to
 decrease. Additionally, the avg count of open connections decreased. After
 some effort in debugging this I found out that the stateful tracking
 algorithm in the firewall started to drop packets due to TCP sequence
 number mismatches. I had approx. 3 - 7 mismatches per second, with relays
 serving an avg of 8mbyte/s and an avg of 13k open connections. When I
 reconfigured the ruleset to not perform sequence number verification,
 drops no longer occured and consensus weight and observed bandwidth is now
 slowly increasing again.

 Of course, this can’t be fixed in Tor, as it is a fault in the TCP/IP
 stacks on the remote end, or might be caused by NAT operations in
 residential CPEs. Or maybe this happens because residential equipment is
 usually not designed to carry long-lasting TCP sessions and might have
 issues with sequence number wraps. But nevertheless, documentation should
 cover this and raise awareness:

 1.) If possible, TCP sequence number verification should be disabled in
 the firewall, as a Tor relay must expect to receive packets that might not
 pass such verification.
 2.) Even if the sequence number verification recovers after the remote end
 retransmits the packets, this might still trigger congestion avoidance in
 TCP/IP stacks - resulting in performance degradation for the end-user and
 resource starvation on the relay side.
 3.) Firewalls should be configured to not drop invalid packets, but send
 an RST instead. Even if some fault with stateful firewalling happens, this
 prevents that TCP sessions are stalled and connections established by end-
 users run into timeout.
 4.) With the increasing shortage of IPv4 addresses a lot of ISPs will
 start placing their customers behind CGNAT or NAT444. This might result in
 causing more issues on Tor nodes behind firewalls with security-cautious
 stateful filtering.
 5.) Some areas of the world might already place their users behind
 gateways, that are doing unexpected TCP header modifications on NAT. This
 might also cause security-cautious stateful firewalling on a relay to
 fail.

 Another issue might be the following: Some stateful firewalling
 implementations don’t allow either side of the connection to
 increase/decrease their MSS after the TCP connection is established. Maybe
 some low-end and residential devices do this, which also results in
 packets being dropped.

 From my point of view, the overall risk is as follows: Due to the shortage
 of IPv4 addresses, more and more ISPs put their customers behind NAT. As
 such residential implementations often don’t implement the RFCs properly,
 stateful firewalling on the relays results in an increasing instability in
 the Tor network.

 Maybe it’s also a good idea having Tor generate a warning message if it
 sees repeating bursts of timeouts in TCP connections.

 This happened with Tor 0.2.7.6 on FreeBSD 10.1, using PF as firewall.
 Relays have public IP addresses, so no NAT is performed by the packet
 filter. Disabling TCP sequence number verification can be configured with
 the “sloppy” option on relevant rules. Most certainly, this can also
 happen with other firewalls, like iptables or commercial vendors (but
 haven’t verified this).

--
Ticket URL: <https://trac.torproject.org/projects/tor/ticket/18496>
Tor Bug Tracker & Wiki <https://trac.torproject.org/>
The Tor Project: anonymity online


More information about the tor-bugs mailing list