fw4: do not allow setting ports for non-TCP or -UDP rules and redirects #42
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Currently, it is possible to set source and destination ports for
proto
likeall
oricmp
, although onlytcp
andudp
ports are converted into thenftables
ruleset.While this might not be a problem for a protocol like
ICMP
, there is a security risk when the user specifiesall
, because then the rule/redirect applies to all L4 ports, includingTCP
andUDP
, regardless if the user sets specific ports.This commit checks for rules and redirects that if any port was set the protocol must be
TCP
and/orUDP
. If not, the user will be informed via a warning, and the rule/redirect won't be applied. Should the protocol beall
, it is automatically correctedto
TCP
andUDP
by theucode
functionensure_tcpudp
.Here are two examples for an input and a DNAT rule:
Resulting into the following
nftables
rules:The input rule ignores the destination port and, therefore, accepts any incoming traffic, while the DNAT rule redirects any IPv4 traffic to the given destination IP
192.168.1.2
, ignoring any port settings.