On 25/07/16 16:28, Dr. Rolf Jansen wrote:
I have written a ipfw divert filter daemon for IPv4 geo-blocking. It is working 
flawlessly on two server installations since a week.

Anyway, I am still in doubt whether I do the blocking in the correct way. Once 
the filter receives a packet from the respective divert socket it looks up the 
country code of the source IP in the IP-Ranges database, and if the country 
code shall be allowed then it returns the unaltered packet via said socket, 
otherwise, the filter does no further processing, so the packet is effectively 
gone, lost, dropped, discarded, or whatever would be the correct terminology. 
Is this the really the correct way of denying a packet, or is it necessary to 
inform ipfw somehow about the circumstances, so it can run a proper dropping 
procedure?

I uploaded the filter + accompanying tools to GitHub

   https://github.com/cyclaero/ipdb

Many thnaks for any advices in advance.

I would use a set of IPFW tables with skipto/call tablearg rules instead. Use the daemon to maintain the IPFW tables. I assume your database is a list of of (CIDR, country code) pairs. In that case the daemon config should probably map from sets of country codes to table values e.g.

        table 1 { DE, NL } -> 10000,
                { US, UK } -> 10100
        table 2 { CN, KO, TR } -> 20000

Next the daemon would calculate the minimal set of table entries to match these policies exactly and patch the kernel table contents if the database changes.

This design avoids the userspace<->kernel copies without losing flexibility.
_______________________________________________
[email protected] mailing list
https://lists.freebsd.org/mailman/listinfo/freebsd-ipfw
To unsubscribe, send any mail to "[email protected]"

Reply via email to