BCP38 on public-facing Ubuntu servers

Grant Taylor gtaylor at tnetconsulting.net
Wed Jun 2 21:01:43 UTC 2021


On 6/2/21 4:35 AM, Jean St-Laurent via NANOG wrote:
> Maybe you can explore the in kernel feature call RP filter or reverse 
> path filter. In router gear it's called uRPF.
> 
> cat /proc/sys/net/ipv4/conf/default/rp_filter

+100 to rp_filter

> There are 2 modes: Loose or strict.
> 
> If your server is BGP multi-homed, then you must use loose. Loose is 
> still very powerful and useful.

I think loose with any default will fail to do what you want.  If you 
are running your router without a default, then loose would probably be 
okay.

> Basically, RP is doing what a router does, but the opposite way. When 
> a packet arrives on your server, it checks the routing table for 
> destination next-hop and RP also check whether the frames arrived from 
> the good source interface.

For strict mode, the router allows the incoming packet if the incoming 
interface would be the outgoing interface when sending a packet to the 
incoming packet's source IP.

> If your routing is asymmetric or spoofed, then RP drops it.  It's a 
> nice feature, but it's doing a double route checkup so for sure, it's 
> slightly slower. I'm not sure we can say that it's twice slower though.

I'm confident that it is at least some slower.  However ...

I have a lowly AMD E-350 APU (lscpu says it's at 918 MHz) processing 
multiple hundred Mbps on GPON against a full DFZ feed with no noticeable 
delay.  (I've never felt the need nor desire to instrument it.)

As such, I'm confident that any system that would be used in a 
greenfield deployment will be able to *easily* handle the traffic that 
most servers will see.

> I assume your network is not asymmetric, so RP would help you for 
> ingress traffic. For egress, then add blackholes routes to /dev/null 
> interface or with the bogon scripts in python. I wouldn't use iptables 
> for that as it's purely routing, but there are many ways to achieve 
> the same goal.

"unreachable" routes (in Linux parlance) or "null" routes (in Cisco 
parlance) combined with Reverse Path Filtering (RPF) is a HUGE win in my 
book.

I've expanded this methodology to federate Fail2Ban between multiple 
systems.  EBGP via bird to trade fail2ban specific tables between 
machines and ip rule to make sure the fail2ban table is processed. 
Works great in my opinion.

> I recommend to explore the rp_filter as it might do what you're 
> looking for.

+100

> As a side note, iptables is super slow when under attack and/or under 
> heavy load.  There are a lot of limitations, like the kernel can only 
> forward ~1.4 Mpps per cpu/socket with iptables. It's too slow slow 
> in my opinion and this was still true recently, but I can't confirm 
> with the latest 5.x kernel. It could have been fix or improve.

That may be the case.  However, that's Apples (iptables) to walnuts 
(RPF).  They are both food (processing packets), but they are 
significantly different.



-- 
Grant. . . .
unix || die


More information about the NANOG mailing list