You need to make a rule in Global Rules to allow ICMP in/out. This should let it thru the firewall. You might also have to go to the Application Rules tab and add it there also for tracert.exe. Mine works fine with the two rules this way. Be sure to allow logging for the rules so you can see it working.
According to the help (which you need to open the .chm file separately to avoid CPF3 from crashing), the app rules take precedence over global rules. That is, app rules are ran first. Since there is an app rule that get auto-generated (probably because it is in Comodo's certified safe list) when tracert.exe is executed then that rule should fire and be used without ever rolling into the global rules.
I defined the following global rule and tracert then worked:
Allow ICMP In/Out to IP Any from IP Any
(that is my writeup of the rule since another of my posts mentions that the Description field is not getting properly populated when making changes in a rule).
Okay, so the help is wrong. Global rules take precedence [in this case] over app rules. This is arse backwards. App rules are specific rules on specific executables/processes and should always take precedence over global rules. Global rules are, after all, global and provide coverage when no app-specific rule applies. Well, that's how it should be for outbound connects. The help file says:
* For Outgoing connection attempts, the application rules are consulted first then the global rules.
* For Incoming connection attempts, the global rules are consulted first then application specific rules.
The firewall should see tracert.exe is making an outbound connection so the app-specific rule should apply, which is:
Allow IP Out From IP Any To IP Any Where Protocol is Any
Due to stateful packet inspection, the return (inbound) packet should be allowed back to tracert.exe. Changing Out to In/Out for the app rule doesn't help. With stateful packet inspection (
http://en.wikipedia.org/wiki/Stateful_packet_inspection), an app rule set for both directions (In/Out) shouldn't have to rely on a global rule (to complete the connection for the inbound traffic). Something is wrong with rules in CFP3.
By the way, the rule you mention to allow in/out for ICMP means anyone can ping my host and get a response. Other firewalls, even the prior version of this one, let me block inbound ICMP echo requests but they didn't stop tracert from working. When I changed your global rule to:
Allow ICMP In from IP Any to IP Any Where ICMP Message is ECHO REPLY
the tracert failed again. The outbound echo request from tracert should've been handled by the app rule. The inbound echo reply to tracert should've been handled by this global rule (but then the return packet should've been handled by the app rule using stateful packet inspection because Out was changed to In/Out for the app rule).
The auto-generated app rule created by CPF because tracert.exe is a certified app seems wrong. It shouldn't be just Out but In/Out for direction since it needs to send the echo request and wait for the echo reply. Yet the change doesn't get this app rule to work. I've never had to separately define global rules to cover what the app rule should cover. Rules aren't working properly in CFP3.
Did you have to define any other rule after okaying tracert.exe to get a connection back in CFP 2.4? Nope. Looks like I'll be reverting back to the prior version of CFP.