HTTP/3 needs us to make firewall changes
utcc.utoronto.ca
utcc.utoronto.ca
I remember in university having trouble reaching several (admittedly niche) services, including some of my own, because they only allowed traffic to very specific ports like 80 and 443. I couldn't connect through SSH to my own servers because I applied the best practice of not having SSH run on port 22.
I ended up researching eduroam policies (which suggest as little blocking as possible) and arguing with IT about it for a few weeks, but the end result was just a few extra unblocked ports for protocols I could convince them to allow. So I moved all my own stuff to those ports, ignoring the protocols.
Detecting protocol is hard, and much expensive than just port blocking. So I guess the admins were trying to do the best job possible with the limited equipment on their hands.
Of course, in practice, all of the bandwidth can still be sucked up by p2p through VPNs which are probably allowed through the network, so I'm not really sure what the problem those restrictions try to solve is.
Also LoL worked whatever they did. Maybe that was just the admin's game of choice
Very few people would be so silly as to close outbound port 443, and everyone expects that port to see encrypted traffic anyway, so it seemed like the logical choice.
However on a general purpose network I agree. If you’re not using the outbound blocks to alert on you’re just inconveniencing someone who can work around it.
(The third answer is that when we set up firewalls in the beginning, we consciously decided to start with a 'default block' policy.)
(I'm the author of the linked-to entry.)
I don't really understand what the fuss is about. If your city builds a new road, you may need to take different turns to drive to work. If Python deprecates a function, you need to patch up your code. Just deal with it.
If firewall changes are necessary for HTTP/3 to be adopted (eg connection tracking in routers may not work anymore), that can cause big problems in adoption.
Even if the effort required to adopt something would bring in disproportionate returns, they would skip it because the effort is nonzero?
(just a generalization, no idea if H3 worth it or not)
Moving from Python 2.7 to 3 involves a lot of work for some people with an old stable code base, and benefits those writing new code.
Of course as Python is open there’s nothing stoping you from maintaining 2.7 yourself - except that’s more work, and until now you’ve likely benefitted from the work others have done more than you’ve contributed.
I had some fairly new code written in nodejs recently that fubared when node was upgraded. Looking at the tangled web of code to try to get working again, and the fact it was under 13 months old before it was reduced to a valueless mess, I spent 4 hours replacing its function with a stable language as that was a better use of my time.
If firewall changes are necessary for HTTP/3, then it's a slightly 'dumb' protocol in some ways.
If that's a prerequisite, then perhaps more effort should have been spent in getting SCTP and DCCP accepted and run HTTP over one/both of those. QUIC seems to have basically the same feature set AFAICT.
Besides the architecture decision of having QUIC being on top of UDP, are there specific features that are much better than SCTP and/or DCCP? Are the other two better in particular areas? How complementary or competitive are the two approaches? (Genuinely curious.)
> connection tracking in routers may not work anymore
What do you mean by this? Tracking of UDP flows has been supported by routers for decades.
If the incentives aren’t there to do proper maintenance, no amount of blaming people for following those incentives will fix the problem.
In any case it does not really matter; either Utoronto will eventually rewrite their firewall configs, or they won't and then they will not be able to use HTTP3. These issues have a way of eventually becoming urgent enough to fix and at that time the incentives will sort themselves out.
There are only so many hours in the day/week, and it's usually already filled with work that needs to be done for internal needs. Someone external comes along unbidden and wants to add to your work for something that seems to have very little benefit for the organization.
Why should I do the work for them? What problem of mine does this effort solve?
(I'm the author of the linked-to entry, and I should have done a better job of explaining this in the original entry.)
Another way of looking at it would be that you have been actively blocking HTTP/3 (and probably many other useful but uncommon protocols) for your users and all that needs to happen to make it work is for you to stop doing that. Blocking all unknown things by default is just another form of protocol ossification.
That said when you're responsible for network security I can imagine how a block-by-default policy is tempting and hopefully people subjecting their users to such a policy will read your article and add an exception.
You owe it to others on the internet to not allow everything out indiscriminately from untrusted strangers who happen to be on your access network. It’s just neighborly to make sure you’re not sending ddos or spam, for example.
How is that different from an ISP? Or do you think ISPs should also block everything except TCP ports 80 and 443?
Getting a standardized UDP egress port will be a godsend to anyone doing corporate IoT. You'll finally be able to connect your boxes to a VPN and remotely manage your hardware.
This is our bread & butter. We have to deal with many unique and extremely secure environments (banking).
99% of these sorts of problems can be eliminated by being up-front with your system requirements and expectations from your customer. We are in a position to fire our customers if they are not willing to work with us on critical technical constraints like this. You should not punish your technical team because your customer is unable to satisfy their part of the bargain, unless there is some special fee or other compensatory measure in the contract.
That said, we are also mindful of the impact & suffering that shiny new protocols may cause with arbitrary network middleware, even if the customer is willing to work with us on everything.
At my last job, and also every IoT company I've worked at, we've implemented an HTTP endpoint that just returned the current time in milliseconds. Why would we do this? Well, it turns out, many corporate networks just block NTP all together and refuse to open up egress on NTP because "UDP is insecure and we only allow HTTPS"
> We are in a position to fire our customers if they are not willing to work with us on critical technical constraints like this. You should not punish your technical team because your customer is unable to satisfy their part of the bargain, unless there is some special fee or other compensatory measure in the contract.
I would have loved to have this freedom but unfortunately smaller startups, that are just getting established, don't always have this ability. In the end this was solved in a few different ways. One of my favorite is to just get a 4G modem in your device and an IoT data plan from any telecom. You can also pay a little more to get the ISP to NAT you to a VPN you can talk to all of your devices directly.
I've never used this provider but you get an idea of the market: https://www.oliviawireless.com/ipsec-vpn-for-iot
They seem to think that HTTP/3 somehow 'handles' the fallback to TLS/TCP. When in reality the browser will fallback to an older HTTP protocol over TLS/TCP.
Adoption by their corporate network is not in any way important to the success of HTTP/3, in reality mobiles are the primary target market.
There's also discussion of allowing port 443/udp as an incoming port but that's not necessary "because there are no stable servers yet". That's a terrible approach for a research institution, this university will always stay behind the curve because their IT department decides what is or isn't considered part of the "real" internet.
This is the kind of thinking that made DoH win over DoT: "I don't see a use for it and I'd be giving up control so screw you".
At my university, every device gets a fully reachable IPv4 and IPv6 address, optionally coupled with a subdomain. I've never heard anyone having trouble with this approach, probably in part because the network administrators do preemptive port scans to detect vulnerable devices. The biggest problem I have is that some gamer mouse software is broadcasting UDP packets over the entire network, ruining everyone's battery life with useless wakeup of the WiFi hardware.
Because production and research networks should be separate.
If there's IP network research going on, it should be isolated from your labs, printers, secretaries, etc.
* https://en.wikipedia.org/wiki/Science_DMZ_Network_Architectu...
> At my university, every device gets a fully reachable IPv4 and IPv6 address, optionally coupled with a subdomain.
Does that include all the Windows desktops in Finance? Your Oracle/SAP HR servers? Does each "device" you reference also include the SCADA stuff that Facilities uses to monitor environmentals?
There are plenty of devices at an university that should have outgoing (and incoming) filtering.
My university does do filtering, taking action against port scans, traces of active malware, even does some DNS introspection I'm not 100% on board with.
Those desktops in Finance and those servers should have decent firewalls on them anyway, locked down with software policies. An extra layer of firewalls against arbitrary incoming connections is probably also for the best. Outgoing connections, though? Only blocked to known malware domains as far as I know. There's a third party that does network upstream that further monitors the security so I don't know the details on that, but I do know (and have run into this myself) that a mere lookup of a malware domain will get your network connection jailed.
I don't know about any IoT crap in use for monitoring. That stuff should be on a completely separate network anyway, behind many layers of VLANs, firewalls and static routes, because the tech simply cannot be trusted. If you mix Facilities and IoT into one network, you're bound to have problems, no matter the great firewall you put around the network perimeter.
My experience is mostly from the student side of things, but the system for registering WiFi and ethernet devices is not different from the employee side of things outside the OAuth authentication flow.
Yes, and the author of article is writing from IT side of things, and he has to deal with non-student things as well.
Apropos inbound traffic, what is the approach regarding inbound replies?
As in: Even if you do an outbound request, you usually expext an acknowledgement or reply from the server, which constitutes inbound traffic.
With TCP, firewalls can distinguish between unprompted inbound packets and replies by tracking which TCP connection the packet belongs to. This is possible because TCP packets contain unencrypted connection information that can be read by firewalls.
With generic UDP, there is no reliable connection information, so firewalls have to rely on heuristics like hole punching [1] - which are less precise and suboptimal from a security perspective.
I believe QUIC has connection information, however it's encrypted, so it's not accessible to firewalls. So does that mean, the future is hole punching everywhere, or was this changed so the connection info is now public?
[1] https://en.m.wikipedia.org/wiki/Hole_punching_(networking)
Outbound packet 4-tuples (source IP, destination IP, source port,, destination port) are tracked and translated with NAT. For some heuristic amount of time after, if an incoming UDP packet is received matching the same 4-tuple it is let through and the translation is reversed. This is UDP "connection tracking", and the details are a little more complicated than described here but not a lot more.
As with TCP, these are considered outbound connections because the initiating packet is outbound. There's no need for hole punching, which is a set of unreliable techniques to enable inbound connections.
Firewalls and routers have supported NAT for UDP as long as they have for TCP in practice. They haven't supported NAT for other IP protocols such as native SCTP.
This a major reason why QUIC is built on top of UDP, so outbound QUIC connections work already over most NAT routers, at home, at work and mobile.
I'm not sure spoofing is something transport protocols have to solve though. Authenticated bgp and source filtering is the layer for it and we needed it for decades already.
This is already addressed by QUIC (the transport protocol used by HTTP/3). Those things are no more of a problem for HTTP/3 than they are for HTTP/2 or HTTP/1.
The recently published QUIC standard specifies a tweaked version of TCP NewReno. See https://www.rfc-editor.org/rfc/rfc9002.txt and https://datatracker.ietf.org/doc/html/rfc6582 But AFAIU this is not the algorithm Google itself uses for QUIC, nor the one they used for their famous benchmarks showing latency improvements on mobile.
To derive maximum benefit (or even just most of the benefit) of a tailored congestion control algorithm, you'll want to control both sides, keeping them in sync as you iterate improvements and changes. And maintain different flavors for different application environments. Only huge companies like Google and Facebook will be able to do this effectively.
There are other improvements that can't really be added to TCP either such as roaming between IP addresses. (MPTCP exists but IIUC requires make-before-break which is not always possible).
PS may be it's not strictly 3G, but it's displayed as 3G on my phone.
HTTP/1.1 is the final transport for humanity, but you need fiber (external IP, preferably static, but operators/governements are not helping) to sell something.
HTTP/2 has head of line blocking issue.
HTTP/3 wont become a standard outside of biased actors like Google.
For the HTTP versions, I’d put it more this way:
HTTP/1.1 is the baseline that will continue to work forever.
HTTP/2 is normally a significant improvement over HTTP/1.1, but it has one crucial flaw which makes it worse than the alternative of half a dozen HTTP/1.1 connections on connections with high packet loss.
HTTP/3 is the best of both worlds, roundly better than HTTP/1 and HTTP/2, but because it’s using UDP, it’ll have some teething issues for a few years because of badly-configured corporate equipment. But it will become widely supported in server software—there’s no reason for it not to.
Unfortunately everything peaks because of physics and energy.
I'm not adding HTTP/2 or 3 to my HTTP app. server; HTTP/1.1 does everything I'll ever need and I have to focus on other things!
Btw, most production setups don't really have to do anything to support it, as pretty much all load balancers already do. And there isn't any big performance gain if it's only intranet traffic.
/s of course. But what a wonderfully arbitrary threshold to set it at 3G+HTTP/1.1 :)
This is a common problem, where network firewall people think one application == precisely one port on one protocol.
Note how it works despite being udp out though your firewall, being batted to a public ip, and the reply on a connection less protocol coming back in and being let through and correctly sent to the correct internal ip, even though someone else in another ip did exactly the same for www.bing.com at the same time.