summaryrefslogtreecommitdiffstats
Commit message (Collapse)AuthorAgeFilesLines
* build: Bump dependency on libnftnlPhil Sutter2023-09-301-1/+1
| | | | | | | | Recently added support for broute table emulation requires libnftnl version 1.2.6. Fixes: 73611d5582e72 ("ebtables-nft: add broute table emulation") Signed-off-by: Phil Sutter <phil@nwl.cc>
* include: linux: Update kernel.hPhil Sutter2023-09-143-25/+65
| | | | | | | | | | | | | | | | | | | | | Its contents were moved into const.h and sysinfo.h, apply these changes to the cached copies. Fixes for the following warning when compiling xtables-monitor.c with new kernel headers in /usr/include: | In file included from ../include/linux/netfilter/x_tables.h:3, | from ../include/xtables.h:19, | from xtables-monitor.c:36: | ../include/linux/kernel.h:7: warning: "__ALIGN_KERNEL" redefined | 7 | #define __ALIGN_KERNEL(x, a) __ALIGN_KERNEL_MASK(x, (typeof(x))(a) - 1) | | | In file included from /usr/include/linux/netlink.h:5, | from /home/n0-1/git/libmnl/install/include/libmnl/libmnl.h:9, | from xtables-monitor.c:30: | /usr/include/linux/const.h:31: note: this is the location of the previous definition | 31 | #define __ALIGN_KERNEL(x, a) __ALIGN_KERNEL_MASK(x, (__typeof__(x))(a) - 1) | | Signed-off-by: Phil Sutter <phil@nwl.cc>
* nft: Fix for useless meta expressions in rulePhil Sutter2023-09-149-72/+36
| | | | | | | | | | | | | | | | | | | A relict of legacy iptables' mandatory matching on interfaces and IP addresses is support for the '-i +' notation, basically a "match any input interface". Trying to make things better than its predecessor, iptables-nft boldly optimizes that nop away - not entirely though, the meta expression loading the interface name was left in place. While not a problem (apart from pointless overhead) in current HEAD, v1.8.7 would trip over this as a following cmp expression (for another match) was incorrectly linked to that stale meta expression, loading strange values into the respective interface name field. While being at it, merge and generalize the functions into a common one for use with ebtables' NFT_META_BRI_(I|O)IFNAME matches, too. Fixes: 0a8635183edd0 ("xtables-compat: ignore '+' interface name") Closes: https://bugzilla.netfilter.org/show_bug.cgi?id=1702 Signed-off-by: Phil Sutter <phil@nwl.cc>
* tests: shell: Fix for ineffective 0007-mid-restore-flush_0Phil Sutter2023-09-141-5/+5
| | | | | | | | | | | | | The test did not catch non-zero exit status of the spawned coprocess. To make it happen, Drop the line killing it (it will exit anyway) and pass its PID to 'wait'. While being at it, put the sleep into the correct spot (otherwise the check for chain 'foo' existence fails as it runs too early) and make said chain existence check effective. Fixes: 4e3c11a6f5a94 ("nft: Fix for ruleset flush while restoring") Signed-off-by: Phil Sutter <phil@nwl.cc>
* extensions: Fix checking of conntrack --ctproto 0Quentin Armitage2023-09-142-9/+10
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | There are three issues in the code: 1) the check (sinfo->invflags & XT_INV_PROTO) is using the wrong mask 2) in conntrack_mt_parse it is testing (info->invert_flags & XT_INV_PROTO) before the invert bit has been set. 3) the sense of the error message is the wrong way round 1) To get the error, ! -ctstatus XXX has to be specified, since XT_INV_PROTO == XT_CONNTRACK_STATUS e.g. | iptables -I CHAIN -m conntrack ! --ctstatus ASSURED --ctproto 0 ... 3) Unlike --proto 0 (where 0 means all protocols), in the conntrack match --ctproto 0 appears to mean protocol 0, which can never be. Therefore --ctproto 0 could never match and ! --ctproto 0 will always match. Both of these should be rejected, since the user clearly cannot be intending what was specified. The attached patch resolves the issue, and also produces an error message if --ctproto 0 is specified (as well as ! --ctproto 0 ), since --ctproto 0 will never match, and ! --ctproto 0 will always match. [Phil: - Added Fixes: tag - it's a day 1 bug - Copied patch description from Bugzilla - Reorganized changes to reduce diff - Added test cases] Closes: https://bugzilla.netfilter.org/show_bug.cgi?id=874 Fixes: 5054e85be3068 ("general conntrack match module userspace support files") Signed-off-by: Quentin Armitage <quentin@armitage.org.uk> Signed-off-by: Phil Sutter <phil@nwl.cc>
* Revert --compat option related commitsPhil Sutter2023-09-0120-198/+35
| | | | | | | | | | | | | | | | | | | This reverts the following commits: b14c971db6db0 ("tests: Test compat mode") 11c464ed015b5 ("Add --compat option to *tables-nft and *-nft-restore commands") ca709b5784c98 ("nft: Introduce and use bool nft_handle::compat") 402b9b3c07c81 ("nft: Pass nft_handle to add_{target,action}()") This implementation of a compatibility mode implements rules using xtables extensions if possible and thus relies upon existence of those in kernel space. Assuming no viable replacement for the internal mechanics of this mode will be found in foreseeable future, it will effectively block attempts at deprecating and removing of these xtables extensions in favor of nftables expressions and thus hinder upstream's future plans for iptables. Signed-off-by: Phil Sutter <phil@nwl.cc>
* doc: fix example of xt_cpuVictor Julien2023-08-291-2/+2
| | | | | | | | | REDIRECT uses --to-ports instead of --to-port. Fixes: 2d59208943a3 ("extension: add xt_cpu match") Signed-off-by: Victor Julien <victor@inliniac.net> Signed-off-by: Florian Westphal <fw@strlen.de>
* tests: Test compat modePhil Sutter2023-08-112-4/+78
| | | | | | | | | | Extend iptables-test.py by a third mode, which is using xtables-nft-multi and passing --compat to all calls creating rules. Also add a shell testcase asserting the effectiveness of --compat by comparing debug (-vv) output. Signed-off-by: Phil Sutter <phil@nwl.cc>
* Add --compat option to *tables-nft and *-nft-restore commandsPhil Sutter2023-08-1111-13/+95
| | | | | | | | | | | | | | | The flag sets nft_handle::compat boolean, indicating a compatible rule implementation is wanted. Users expecting their created rules to be fetched from kernel by an older version of *tables-nft may use this to avoid potential compatibility issues. Changes since v1: - Expect short option '-C' in {ip,ip6,eb}tables-nft-restore command line parser - Support -C/--compat in arptables-nft-restore, too - Update man pages with the new flag Signed-off-by: Phil Sutter <phil@nwl.cc>
* nft: Introduce and use bool nft_handle::compatPhil Sutter2023-08-113-5/+8
| | | | | | | | If set, create rules using compat expressions where possible and disable the bitwise expression avoidance introduced in 323259001d617 ("nft: Optimize class-based IP prefix matches"). Signed-off-by: Phil Sutter <phil@nwl.cc>
* nft: Pass nft_handle to add_{target,action}()Phil Sutter2023-08-116-13/+17
| | | | | | Prepare for varying rule content based on a global flag. Signed-off-by: Phil Sutter <phil@nwl.cc>
* Use SOCK_CLOEXEC/O_CLOEXEC where availablePhil Sutter2023-08-103-27/+4
| | | | | | | | | | | | No need for the explicit fcntl() call, request the behaviour when opening the descriptor. One fcntl() call setting FD_CLOEXEC remains in extensions/libxt_bpf.c, the indirect syscall seems not to support passing the flag directly. Reported-by: Gaurav Gupta <g.gupta@samsung.com> Closes: https://bugzilla.netfilter.org/show_bug.cgi?id=1104 Signed-off-by: Phil Sutter <phil@nwl.cc>
* tests: shell: Test chain policy counter behaviourPhil Sutter2023-08-101-0/+78
| | | | | | Test the last two fixes in that area. Signed-off-by: Phil Sutter <phil@nwl.cc>
* Revert "libiptc: fix wrong maptype of base chain counters on restore"Phil Sutter2023-08-101-1/+1
| | | | | | | | | | | | | This reverts commit 7c4d668c9c2ee007c82063b7fc784cbbf46b2ec4. The change can't be right: A simple rule append call will reset all built-in chains' counters. The old code works fine even given the mentioned "empty restore" use-case, at least if counters don't change on the fly in-kernel. Closes: https://bugzilla.netfilter.org/show_bug.cgi?id=912 Fixes: 7c4d668c9c2ee ("libiptc: fix wrong maptype of base chain counters on restore") Signed-off-by: Phil Sutter <phil@nwl.cc>
* nft: Create builtin chains with counters enabledPhil Sutter2023-08-101-6/+8
| | | | | | | | | | | | | | The kernel enables policy counters for nftables chains only if NFTA_CHAIN_COUNTERS attribute is present. For this to be generated, one has to set NFTNL_CHAIN_PACKETS and NFTNL_CHAIN_BYTES attributes in the allocated nftnl_chain object. The above happened for base chains only with iptables-nft-restore if called with --counters flag. Since this is very unintuitive to users, fix the situation by adding counters to base chains in any case. Fixes: 384958620abab ("use nf_tables and nf_tables compatibility interface") Signed-off-by: Phil Sutter <phil@nwl.cc>
* tests: iptables-test: Fix command segfault reportsPhil Sutter2023-08-101-3/+6
| | | | | | | Logging produced a stack trace due to undefined variable 'cmd'. Fixes: 0e80cfea3762b ("tests: iptables-test: Implement fast test mode") Signed-off-by: Phil Sutter <phil@nwl.cc>
* nft-ruleparse: parse meta mark set as MARK targetFlorian Westphal2023-08-101-12/+28
| | | | | | | | | | | | | | | | | | Mixing nftables and iptables-nft in the same table doesn't work, but some people do this. v1.8.8 ignored rules it could not represent in iptables syntax, v1.8.9 bails in this case. Add parsing of meta mark expressions so iptables-nft can render them as -j MARK rules. This is flawed, nft has features that have no corresponding syntax in iptables, but we can't undo this. Link: https://bugzilla.netfilter.org/show_bug.cgi?id=1659 Signed-off-by: Florian Westphal <fw@strlen.de> Signed-off-by: Phil Sutter <phil@nwl.cc>
* nft-ruleparse: Introduce nft_create_target()Phil Sutter2023-08-106-87/+52
| | | | | | | | | | | | | | | | Like nft_create_match(), this is a small wrapper around the typical target extension lookup and (standard) init code. To use it from nft_parse_target() and nft_parse_log(), introduce an inner variant which accepts the target payload size as parameter. The call to rule_parse_ops::target callback was problematic with standard target, because the callbacks initialized iptables_command_state::jumpto with the target name, "standard" in that case. Perform its tasks in nft_create_target(), keep it only for bridge family's special handling of watcher "targets". Signed-off-by: Phil Sutter <phil@nwl.cc>
* extensions: libip6t_icmp: Add names for mld-listener typesPhil Sutter2023-08-052-0/+11
| | | | | | | Add the three names (plus one alias) just as in nftables. Closes: https://bugzilla.netfilter.org/show_bug.cgi?id=1250 Signed-off-by: Phil Sutter <phil@nwl.cc>
* nft: move processing logic out of assertsJan Palus2023-08-052-6/+17
| | | | | | | | | | [Phil: Introduce assert_nft_restart() to keep things clean, also add fallback returns to nft_action() and nft_prepare(), sanitizing things at least a bit.] Closes: https://bugzilla.netfilter.org/show_bug.cgi?id=1487 Signed-off-by: Jan Palus <atler@pld-linux.org> Signed-off-by: Phil Sutter <phil@nwl.cc>
* man: iptables-save.8: Start paragraphs in upper-casePhil Sutter2023-08-051-2/+2
| | | | | | | Also add a missing full stop. Fixes: 117341ada43dd ("Added iptbles-restore and iptables-save manpages") Signed-off-by: Phil Sutter <phil@nwl.cc>
* man: iptables-save.8: Fix --modprobe descriptionPhil Sutter2023-08-051-3/+4
| | | | | | | | | - Consistently use 'modprobe' as option argument name - Add a reference to modprobe man page - Put the path in italics and the command in bold Fixes: fbb5639c02218 ("iptables-save: module loading corrections") Signed-off-by: Phil Sutter <phil@nwl.cc>
* man: iptables-save.8: Clarify 'available tables'Phil Sutter2023-08-051-1/+4
| | | | | | | | This appears to be confusing. Since a missing table is also not flushed ("restored") when feeding the dump into iptables-restore, such a restore call may be considered incomplete. Signed-off-by: Phil Sutter <phil@nwl.cc>
* man: Trivial: Missing space after commaPhil Sutter2023-08-052-2/+2
| | | | | Fixes: 6a79d78986c02 ("iptables: mention iptables-apply(8) in manpages") Signed-off-by: Phil Sutter <phil@nwl.cc>
* man: iptables-restore.8: Start paragraphs in upper-casePhil Sutter2023-08-051-2/+2
| | | | | | | Also add a missing full stop in one spot. Fixes: 117341ada43dd ("Added iptbles-restore and iptables-save manpages") Signed-off-by: Phil Sutter <phil@nwl.cc>
* man: iptables-restore.8: Put 'file' in italics in synopsisPhil Sutter2023-08-051-2/+2
| | | | | | | The text has it this way already, be consistent. Fixes: 081d57839e91e ("iptables-restore.8: file to read from can be specified as argument") Signed-off-by: Phil Sutter <phil@nwl.cc>
* man: iptables-restore.8: Drop -W option from synopsisPhil Sutter2023-08-051-2/+2
| | | | | | | | The description was dropped already, there is no benefit in still listing it. Fixes: 07e2107ef0cbc ("xshared: Implement xtables lock timeout using signals") Signed-off-by: Phil Sutter <phil@nwl.cc>
* man: iptables-restore.8: Consistently document -w optionPhil Sutter2023-08-051-2/+2
| | | | | | | Use the same name for the option's argument. Fixes: 65801d02a482b ("iptables-restore.8: document -w/-W options") Signed-off-by: Phil Sutter <phil@nwl.cc>
* man: iptables-restore.8: Fix --modprobe descriptionPhil Sutter2023-08-051-3/+4
| | | | | | | | | - Consistently use 'modprobe' as option argument name - Add a reference to modprobe man page - Put the path in italics, and the command in bold Fixes: 8c46901ff5785 ("doc: document iptables-restore's -M option") Signed-off-by: Phil Sutter <phil@nwl.cc>
* man: iptables.8: Trivial font fixesPhil Sutter2023-08-051-3/+3
| | | | | | | No content changes intended, just type commands in bold and the single path reference in italics. Signed-off-by: Phil Sutter <phil@nwl.cc>
* man: Use HTTPS for links to netfilter.orgPhil Sutter2023-08-052-3/+3
| | | | | | | The browser is redirected there anyway, but who cares about such minor details nowadays. Signed-off-by: Phil Sutter <phil@nwl.cc>
* man: iptables.8: Clarify --goto descriptionPhil Sutter2023-08-051-1/+1
| | | | | | | | | Text speaks about behaviour of RETURN target when used in chains redirected to using --goto instead of --jump, not the difference between --jump option and "return". Fixes: 17fc163babc34 ("add 'goto' support (Henrik Nordstrom <hno@marasystems.com>)") Signed-off-by: Phil Sutter <phil@nwl.cc>
* man: iptables.8: Fix intra page referencePhil Sutter2023-08-051-2/+2
| | | | | | | | When sections MATCH EXTENSIONS and TARGET EXTENSIONS were combined, the reference could have been updated to specify the exact title. Fixes: 4496801821c01 ("doc: deduplicate extension descriptions into a new manpage") Signed-off-by: Phil Sutter <phil@nwl.cc>
* man: iptables.8: Trivial spelling fixesPhil Sutter2023-08-051-5/+5
| | | | | | | | | | - Missing "and" as well as full stop - Missing comma in enumeration - Duplicate "previous" - Confusions are avoided rather than simplified - Missing space after comma Signed-off-by: Phil Sutter <phil@nwl.cc>
* man: iptables.8: Extend exit code descriptionPhil Sutter2023-08-051-3/+6
| | | | | | | | Codes 3 and 4 were missing. Reported-by: Steven Barre <steven.barre@dxcas.com> Closes: https://bugzilla.netfilter.org/show_bug.cgi?id=1353 Signed-off-by: Phil Sutter <phil@nwl.cc>
* tests: libipt_icmp.t: Enable tests with numeric outputPhil Sutter2023-08-041-6/+3
| | | | | | | | | | Unrelated to the question whether numeric (save) output is desired or not, enable the tests and expect the known format. Using --list without --numeric prints the names, BTW. Fixes: 49d5b7277c7f2 ("extensions: libipt_icmp: add unit test") Signed-off-by: Phil Sutter <phil@nwl.cc>
* extensions: libipt_icmp: Fix confusion between 255/255 and anyPhil Sutter2023-08-042-1/+4
| | | | | | | | | | | | | | | | Per definition, ICMP type "any" is type 255 and the full range of codes (0-255). Save callback though ignored the actual code values, printing "any" for every type 255 match. This at least confuses users as they can't find their rule added as '--icmp-type 255/255' anymore. It is not entirely clear what the fixed commit was trying to establish, but the save output is certainly not correct (especially since print callback gets things right). Reported-by: Amelia Downs <adowns@vmware.com> Closes: https://bugzilla.netfilter.org/show_bug.cgi?id=1600 Fixes: fc9237da4e845 ("Fix '-p icmp -m icmp' issue (Closes: #37)") Signed-off-by: Phil Sutter <phil@nwl.cc>
* iptables-apply: Eliminate shellcheck warningsPhil Sutter2023-08-011-8/+8
| | | | | | | | | | | | | Actual warnings were only about use of '-a' in bracket expressions (replace by '&&' pipeline) and the immediate evaluation of the variable in trap command. The remaining changes silence info-level messages: missing quoting around variables, pointless '$' in arithmetic expressions, backticks instead of $(...), missing '-r' parameter when calling read and an awkward negated '-z' check. Signed-off-by: Phil Sutter <phil@nwl.cc>
* iptables-restore: Drop dead codePhil Sutter2023-08-011-2/+0
| | | | | | | | Handle initialization is guarded by 'in_table' boolean, so there can't be a handle already (because the branch which unsets 'in_table' also frees the handle). Signed-off-by: Phil Sutter <phil@nwl.cc>
* tests: shell: Fix and extend chain rename testPhil Sutter2023-07-282-12/+40
| | | | | | | | | | The old version exited unintentionally before testing ip6tables. Replace it by a more complete variant testing for all tools, creating and renaming of,chains with various illegal names instead of just renaming to a clashing name. Fixes: ed9cfe1b48526 ("tests: add initial save/restore test cases") Signed-off-by: Phil Sutter <phil@nwl.cc>
* ebtables: Improve invalid chain name detectionPhil Sutter2023-07-281-5/+28
| | | | | | | | | | | | | | | | Fix several issues: - Most importantly, --new-chain command accepted any name. Introduce ebt_assert_valid_chain_name() for use with both --new-chain and --rename-chain. - Restrict maximum name length to what legacy ebtables allows - this is a bit more than iptables-nft, subject to be unified. - Like iptables, legacy ebtables rejects names prefixed by '-' or '!'. - Use xs_has_arg() for consistency, keep the check for extra args for now. Fixes: da871de2a6efb ("nft: bootstrap ebtables-compat") Signed-off-by: Phil Sutter <phil@nwl.cc>
* *tables: Reject invalid chain names when renamingPhil Sutter2023-07-281-0/+1
| | | | | | | | | While given chain name was sanity checked with --new-chain command, --rename-chain command allowed to choose an invalid name. Keep things consistent by adding the missing check. Fixes: e6869a8f59d77 ("reorganized tree after kernel merge") Signed-off-by: Phil Sutter <phil@nwl.cc>
* *tables-restore: Enforce correct counters syntax if presentPhil Sutter2023-07-283-21/+24
| | | | | | | | | If '--counters' option was not given, restore parsers would ignore anything following the policy word. Make them more strict, rejecting anything in that spot which does not look like counter values even if not restoring counters. Signed-off-by: Phil Sutter <phil@nwl.cc>
* nft: Include sets in debug outputPhil Sutter2023-07-282-1/+15
| | | | | | | Rules referencing them are incomplete without, so add debug output on the same level as for rules. Signed-off-by: Phil Sutter <phil@nwl.cc>
* nft: Do not pass nft_rule_ctx to add_nft_among()Phil Sutter2023-07-281-6/+5
| | | | | | | | It is not used, must be a left-over from an earlier version of the fixed commit. Fixes: 4e95200ded923 ("nft-bridge: pass context structure to ops->add() to improve anonymous set support") Signed-off-by: Phil Sutter <phil@nwl.cc>
* nft: More verbose extension comparison debuggingPhil Sutter2023-07-282-0/+9
| | | | | | Dump extension data if it differs. Signed-off-by: Phil Sutter <phil@nwl.cc>
* nft: Special casing for among match in compare_matches()Phil Sutter2023-07-281-2/+5
| | | | | | | | | | | When other extensions may have "garbage" appended to their data which should not be considered for match comparison, among match is the opposite in that it extends its data beyond the value in 'size' field. Add special casing to cover for this, avoiding false-positive rule comparison. Fixes: 26753888720d8 ("nft: bridge: Rudimental among extension support") Signed-off-by: Phil Sutter <phil@nwl.cc>
* tests: shell: Sanitize nft-only/0009-needless-bitwise_0Phil Sutter2023-07-191-1/+1
| | | | | | | | | | | Some versions of awk (gawk-4.2.1-4.el8 in particular) also print the non-debug ruleset listing's empty lines, causing the diff to fail. Catch this by exiting upon seeing the first table heading. For the sake of comparing bytecode, the actual ruleset listing is not interesting, anyway. Fixes: 0f7ea0390b336 ("tests/shell: Fix nft-only/0009-needless-bitwise_0") Signed-off-by: Phil Sutter <phil@nwl.cc>
* nft-bridge: pass context structure to ops->add() to improve anonymous set ↵Pablo Neira Ayuso2023-07-128-37/+62
| | | | | | | | | | | | | | | | | support Add context structure to improve bridge among support which creates an anonymous set. This context structure specifies the command and it allows to optionally store a anonymous set. Use this context to generate native bytecode only if this is an add/insert/replace command. This fixes a dangling anonymous set that is created on rule removal. Fixes: 26753888720d ("nft: bridge: Rudimental among extension support") Reported-and-tested-by: Igor Raits <igor@gooddata.com> Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
* iptables: Fix handling of non-existent chainsJacek Tomasiak2023-06-212-1/+2
| | | | | | | | | | | | | | | | | Since 694612adf87 the "compatibility" check considers non-existent chains as "incompatible". This broke some scripts which used calls like `iptables -L CHAIN404` to test for chain existence and expect "No chain/target/match by that name." in the output. This patch changes the logic of `nft_is_table_compatible()` to report non-existent chains as "compatible" which restores the old behavior. Fixes: 694612adf87 ("nft: Fix selective chain compatibility checks") Closes: https://bugzilla.netfilter.org/show_bug.cgi?id=1648 Signed-off-by: Jacek Tomasiak <jtomasiak@arista.com> Signed-off-by: Jacek Tomasiak <jacek.tomasiak@gmail.com> Signed-off-by: Phil Sutter <phil@nwl.cc>