ICMP traffic through the firewall isn’t allowed by default and must be specifically allowed by creating access-list/access-group commands or conduit commands on older IOS versions (4.x). These commands are covered in detail in the next chapter. Access lists, including those required to allow ICMP traffic, are also covered in the next chapter.
On the other hand, ICMP traffic originating on or terminating at the firewall is allowed by default. The configuration mode command icmp controls ICMP traffic that terminates anywhere on the PIX Firewall. If no ICMP access control list is configured, then the PIX Firewall accepts all ICMP traffic that terminates at the interface. The key word here is “terminates”—the firewall is the destination.
Using the icmp {permit | deny} command to allow or block pings to an interface is referred to as configurable proxy pinging. Use the no form of the command to remove a specific ICMP statement, or use the clear icmp command to remove the entire ICMP control list. The syntax is
pix(config)#icmp {permit | deny} [host] src_addr [src_mask] [type] int_name
pix(config)#no icmp {permit | deny} [host] src_addr [src_mask] [type] int_name
pix(config)#clear icmp
permit |
Allows the PIX Firewall interface to be pinged (default) |
deny |
Prevents the PIX Firewall interface from being pinged |
host src_addr |
Specifies a host address to be permitted or denied to ping the interface |
src_addr src_mask |
Defines network address and network mask used with define multiple hosts |
type |
Describes ICMP message type, as in the following table |
int_name |
Defines interface name of permitted/denied PIX Firewall interface |
The following table lists possible ICMP type values and their literal equivalents. While either form can be used with the command, the literal is much easier to interpret for anyone who has to support the PIX device in the future. The ? will list the acceptable options while building the command.
Type |
Literal |
Type |
Literal |
---|---|---|---|
0 |
echo-reply |
12 |
parameter-problem |
3 |
unreachable |
13 |
timestamp-reply |
4 |
source-quench |
14 |
timestamp-request |
5 |
redirect |
15 |
information-request |
6 |
alternate-address |
16 |
information-reply |
8 |
echo |
17 |
mask-request |
9 |
router-advertisement |
18 |
mask-reply |
10 |
router-solicitation |
31 |
conversion-error |
11 |
time-exceeded |
32 |
mobile-redirect |
It’s important to understand that creating an ICMP control list effectively switches the firewall from accepting all ICMP traffic to all interfaces to accepting only that traffic specifically allowed by the ICMP statements. There is, in fact, an implicit deny any statement similar to other ACLs. If the new packet is matched first by a permit statement, the ICMP packet continues to be processed normally. But, if the first matched entry is a deny statement or no matching statement exists, then the PIX Firewall discards the ICMP packet and generates the %PIX-3-313001 Syslog message. The Syslog message syntax is
%PIX-3-313001: Denied ICMP type=type, code=code from src_addr on interface int_nam
To avoid unintentionally stopping IPSec and PPTP traffic when the ICMP control list is used, create a statement that permits ICMP unreachable (type 3) message traffic to the appropriate interface. Denying the ICMP unreachable messages disables ICMP Path MTU discovery, which is required by IPSec and PPTP. The next examples show the statement.
The following example denies all ping requests directed at the outside interface and permits all unreachable messages at the outside interface. Notice that the ACL keyword any can be used as the source address.
pix(config)#icmp deny any echo-reply outside pix(config)#icmp permit any unreachable outside
This next example will permit host 192.168.1.49 or hosts on the network 192.168.2.0/24 to ping the outside interface. The last line again permits all unreachable messages at the outside interface.
pix(config)#icmp permit host 192.168.1.49 echo-reply outside pix(config)#icmp permit 192.168.2.0 255.255.255.0 echo-reply outside pix(config)#icmp permit any unreachable outside
The show icmp command displays any icmp commands in the configuration.
The debug icmp trace command shows in real-time all icmp echo requests and replies to or through the PIX.
pix#debug icmp trace 1: Outbound ICMP echo request (len 32 id 7 seq 1004) 192.168.1.2 > 172.16.1.78 > 172.16.4.50 2: Inbound ICMP echo reply (Len 32 id 26 seq 1004) 172.16.4.50 > 172.16.1.78 > 192.168.1.2 3: Outbound ICMP echo request (Len 32 id 7 seq 1051) 192.168.1.2 > 172.16.1.78 > 172.16.4.50 4: Inbound ICMP echo reply (Len 32 id 26 seq 1051) 172.16.4.50 > 172.16.1.78 > 192.168.1.2 ---- output omitted ----