Многие общие правила брандмауэра включают ряд строк, блокирующих определенный входящий трафик. Возьмите это, например, из ipfw:
# Fragments
$cmd 00420 deny all from any to any frag in via $pif
# ACK packets that did not match the dynamic rule table
$cmd 00430 deny tcp from any to any established in via $pif
В конце, однако, обычно блокируется все, что не соответствует ни одному из правил:
# Deny any other inbound traffic, with logging
$cmd 00998 deny log all from any to any in via $pif
# Deny any other traffic, with logging
$cmd 00999 deny log all from any to any
Какую пользу принесет включение первого набора правил, если мы все равно блокируем весь другой трафик, как показано выше?
Я не могу говорить с ipfw
, но в iptables
это имеет смысл, так как выигрывает первый диспозитивный матч, и обычно существуют разрешающие правила между явным отказом вверху и общим отказом внизу (если вы не создаете очень и очень тихое устройство!).
Так, например, если вы явно хотите исключить все Марсиане, вам нужно иметь такие строки, как
iptables -A INPUT -s 10.0.0.0/8 -j DROP
iptables -A INPUT -s 172.16.0.0/12 -j DROP
iptables -A INPUT -s 192.168.0.0/16 -j DROP
перед строками вроде
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
iptables -A INPUT -j DROP
потому что в противном случае строка ACCEPT для ssh разрешит марсианам прежде, чем они когда-либо увидят blanket DENY.
Спасибо Майклу Хэмптону за установление того, что та же логика применима к ipfw
наборы правил.