[Firehol-support] problem matching packet length

High Mobley firehol at prioritynetworks.net
Wed Oct 27 22:25:54 BST 2004

Ummm.... Answered my own question as usual. Turns out that the iptables
rules I ws trying to use (read below for full details) worked fine. What
happened is that I was generating the test pings from a Linux box (no
Windoze available for testing), and using the -s switch to the ping
command to specify a size for the packet. Well, I knew that the -s
switch specifies the raw data size, not the overall packet size.
However, I was looking at the wrong numbers in hte output from the ping
command to check that I was sending 92-byte packets. So the command that
I used (ping -s84 A.B.C.D) was actually sending 112-byte packets. The
correct data size to generate packets of 92-byte size was 64. So my new
command is 'ping -s64 A.B.C.D'

And here are the rules that I added to my FireHOL config file to make
this work:

interface eth1 INTERIOR src ${interior_ips}
         policy reject
         server icmp drop custom "--icmp-type echo-request --match
length --length 92"
         server icmp drop custom "--icmp-type echo-reply --match length
--length 92"
         server icmp accept
         client all accept

router INTERIOR_NAT inface eth1 outface eth0
         route icmp drop custom "--icmp-type echo-request --match length
--length 92"
         route icmp drop custom "--icmp-type echo-reply --match length
--length 92"
         route all accept

<sigh> At least I got it figured out...

High Mobley wrote:
> We have a gateway that is doinig NAT and port forwarding. We also need 
> to add some rules to prevent the spread of Microsoft Windows worms and 
> viruses. So we need to block 92-byte ICMP echo requests and replies. 
> (Several of the worms in the wild are pinging hosts using the default 
> Windows ping packet size of 92 bytes)
> I already have this running on some of my Cisco routers. Here is a 
> snippet from my router configs that shows what I'm doing:
> ------------snip-------------
> access-list 199 permit icmp any any echo
> access-list 199 permit icmp any any echo-reply
> !
> route-map nachia-worm permit 10
>  match ip address 199  (This is packets matched by access-list #199)
>  match length 92 92
>  set interface Null0
> !
> ------------snip-------------
> Here is our basic FireHOL config before the length matching attempts. It 
> works fine for the basic NAT and port forwarding functions that we want:
> #!/etc/rc.d/init.d/firehol
> #
> # Read in custom list of networks from separate file:
> . /etc/firehol/networks
> # Read in list of custom services from separate file:
> . /etc/firehol/services
> #
> # Services to allow to our administrative IPs whome we trust:
> Trusted_services="ssh icmp http"
> # Services to allow to the whole world:
> Public_services=""
> #
> # IP addresses behind the NAT on eth1:
> interior_ips=""
> #
> # Forward incoming requests on port 80 of eth0 to port 80 on
> # a web server sitting behind the NAT on eth1:
> nat to-destination proto tcp dport 80 dst
> #
> interface eth0 EXTERIOR src not "${UNROUTABLE_IPS}"
>         policy drop loglimit debrouter
>         protection strong
>         server "icmp" accept src "${ICMP_monitor}"
>         server "${Trusted_services}" accept src "${Trusted_Networks}"
>         server "${Public_services}" accept
>         client all accept
>         server all reject src "${Trusted_Networks}"
>         server ident reject with tcp-reset
> #
> interface eth1 INTERIOR src ${interior_ips}
>         policy reject
>         client all accept
> #
> router INTERIOR_NAT inface eth1 outface eth0
>         route all accept
>         masquerade
> #
> router PORT_FORWARD inface eth0 outface eth1
>         route "${Trusted_services}" accept src "${Trusted_Networks}"
>         route ident reject with tcp-reset
> So now I need to add something that finds all 92-byte long ICMP echo 
> requests and echo-replies and drops them. I have been unable to figure 
> out how to do this with plain iptables on a Linux machine without 
> FireHOL either. It seems like the following two rules should work, but I 
> still get replies back from the Linux machine when I ping it with 
> 92-byte long ICMP packets...
> iptables -t filter -A INPUT --protocol icmp --icmp-type echo-request 
> --match length --length 92 -j DROP
> iptables -t filter -A INPUT --protocol icmp --icmp-type echo-reply 
> --match length --length 92 -j DROP
> Does anybody have some suggestions?
> TIA,
> High Mobley
> -------------------------------------------------------
> This SF.Net email is sponsored by:
> Sybase ASE Linux Express Edition - download now for FREE
> LinuxWorld Reader's Choice Award Winner for best database on Linux.
> http://ads.osdn.com/?ad_id=5588&alloc_id=12065&op=click
> _______________________________________________
> Firehol-support mailing list
> Firehol-support at lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/firehol-support

More information about the Firehol-support mailing list