Commit 268c6aa1 authored by Arturo Borrero Gonzalez's avatar Arturo Borrero Gonzalez
Browse files

Merge tag 'debian/1.8.5-3' into debian/buster-backports



Debian package 1.8.5-3
Signed-off-by: default avatarArturo Borrero Gonzalez <arturo@debian.org>
parents ada8a2c9 9fa0e185
...@@ -2,3 +2,4 @@ ...@@ -2,3 +2,4 @@
-j IDLETIMER --timeout;;FAIL -j IDLETIMER --timeout;;FAIL
-j IDLETIMER --timeout 42;;FAIL -j IDLETIMER --timeout 42;;FAIL
-j IDLETIMER --timeout 42 --label foo;=;OK -j IDLETIMER --timeout 42 --label foo;=;OK
-j IDLETIMER --timeout 42 --label foo --alarm;;OK
This target is used to set the Netfilter mark value associated with the packet. This target is used to set the Netfilter mark value associated with the packet.
It can, for example, be used in conjunction with routing based on fwmark (needs It can, for example, be used in conjunction with routing based on fwmark (needs
iproute2). If you plan on doing so, note that the mark needs to be set in the iproute2). If you plan on doing so, note that the mark needs to be set in
PREROUTING chain of the mangle table to affect routing. either the PREROUTING or the OUTPUT chain of the mangle table to affect routing.
The mark field is 32 bits wide. The mark field is 32 bits wide.
.TP .TP
\fB\-\-set\-xmark\fP \fIvalue\fP[\fB/\fP\fImask\fP] \fB\-\-set\-xmark\fP \fIvalue\fP[\fB/\fP\fImask\fP]
......
...@@ -24,6 +24,7 @@ Randomize source port mapping ...@@ -24,6 +24,7 @@ Randomize source port mapping
If option If option
\fB\-\-random\fP \fB\-\-random\fP
is used then port mapping will be randomized (kernel >= 2.6.21). is used then port mapping will be randomized (kernel >= 2.6.21).
Since kernel 5.0, \fB\-\-random\fP is identical to \fB\-\-random-fully\fP.
.TP .TP
\fB\-\-random-fully\fP \fB\-\-random-fully\fP
Full randomize source port mapping Full randomize source port mapping
......
:PREROUTING,OUTPUT :PREROUTING,OUTPUT
*raw *raw
# ERROR: cannot find: iptables -I PREROUTING -t raw -j NOTRACK -j NOTRACK;=;OK
#-j NOTRACK;=;OK
iptables-translate -A PREROUTING -t raw -j NOTRACK
nft add rule ip raw PREROUTING counter notrack
...@@ -8,7 +8,8 @@ chains, and user-defined chains which are only called from those ...@@ -8,7 +8,8 @@ chains, and user-defined chains which are only called from those
chains. It redirects the packet to the machine itself by changing the chains. It redirects the packet to the machine itself by changing the
destination IP to the primary address of the incoming interface destination IP to the primary address of the incoming interface
(locally-generated packets are mapped to the localhost address, (locally-generated packets are mapped to the localhost address,
127.0.0.1 for IPv4 and ::1 for IPv6). 127.0.0.1 for IPv4 and ::1 for IPv6, and packets arriving on
interfaces that don't have an IP address configured are dropped).
.TP .TP
\fB\-\-to\-ports\fP \fIport\fP[\fB\-\fP\fIport\fP] \fB\-\-to\-ports\fP \fIport\fP[\fB\-\fP\fIport\fP]
This specifies a destination port or range of ports to use: without This specifies a destination port or range of ports to use: without
......
...@@ -42,5 +42,5 @@ and ...@@ -42,5 +42,5 @@ and
\fB\-\-map\-queue\fP \fB\-\-map\-queue\fP
flags can be used in the OUTPUT, FORWARD and POSTROUTING chains. flags can be used in the OUTPUT, FORWARD and POSTROUTING chains.
.PP .PP
Use of -j SET requires that ipset kernel support is provided, which, for Use of \-j SET requires that ipset kernel support is provided, which, for
standard kernels, is the case since Linux 2.6.39. standard kernels, is the case since Linux 2.6.39.
...@@ -106,6 +106,28 @@ static void SYNPROXY_save(const void *ip, const struct xt_entry_target *target) ...@@ -106,6 +106,28 @@ static void SYNPROXY_save(const void *ip, const struct xt_entry_target *target)
printf(" --ecn"); printf(" --ecn");
} }
static int SYNPROXY_xlate(struct xt_xlate *xl,
const struct xt_xlate_tg_params *params)
{
const struct xt_synproxy_info *info =
(const struct xt_synproxy_info *)params->target->data;
xt_xlate_add(xl, "synproxy ");
if (info->options & XT_SYNPROXY_OPT_SACK_PERM)
xt_xlate_add(xl, "sack-perm ");
if (info->options & XT_SYNPROXY_OPT_TIMESTAMP)
xt_xlate_add(xl, "timestamp ");
if (info->options & XT_SYNPROXY_OPT_WSCALE)
xt_xlate_add(xl, "wscale %u ", info->wscale);
if (info->options & XT_SYNPROXY_OPT_MSS)
xt_xlate_add(xl, "mss %u ", info->mss);
if (info->options & XT_SYNPROXY_OPT_ECN)
xt_xlate_add(xl, "ecn ");
return 1;
}
static struct xtables_target synproxy_tg_reg = { static struct xtables_target synproxy_tg_reg = {
.family = NFPROTO_UNSPEC, .family = NFPROTO_UNSPEC,
.name = "SYNPROXY", .name = "SYNPROXY",
...@@ -119,6 +141,7 @@ static struct xtables_target synproxy_tg_reg = { ...@@ -119,6 +141,7 @@ static struct xtables_target synproxy_tg_reg = {
.x6_parse = SYNPROXY_parse, .x6_parse = SYNPROXY_parse,
.x6_fcheck = SYNPROXY_check, .x6_fcheck = SYNPROXY_check,
.x6_options = SYNPROXY_opts, .x6_options = SYNPROXY_opts,
.xlate = SYNPROXY_xlate,
}; };
void _init(void) void _init(void)
......
iptables-translate -t mangle -A INPUT -i iifname -p tcp -m tcp --dport 80 -m state --state INVALID,UNTRACKED -j SYNPROXY --sack-perm --timestamp --wscale 7 --mss 1460
nft add rule ip mangle INPUT iifname "iifname" tcp dport 80 ct state invalid,untracked counter synproxy sack-perm timestamp wscale 7 mss 1460
This target allows to alter the MSS value of TCP SYN packets, to control This target alters the MSS value of TCP SYN packets, to control
the maximum size for that connection (usually limiting it to your the maximum size for that connection (usually limiting it to your
outgoing interface's MTU minus 40 for IPv4 or 60 for IPv6, respectively). outgoing interface's MTU minus 40 for IPv4 or 60 for IPv6, respectively).
Of course, it can only be used Of course, it can only be used
......
...@@ -32,5 +32,5 @@ longterm releases 2.6.32 (>=.42), 2.6.33 (>=.15), and 2.6.35 (>=.14), there is ...@@ -32,5 +32,5 @@ longterm releases 2.6.32 (>=.42), 2.6.33 (>=.15), and 2.6.35 (>=.14), there is
a bug whereby IPv6 TOS mangling does not behave as documented and differs from a bug whereby IPv6 TOS mangling does not behave as documented and differs from
the IPv4 version. The TOS mask indicates the bits one wants to zero out, so it the IPv4 version. The TOS mask indicates the bits one wants to zero out, so it
needs to be inverted before applying it to the original TOS field. However, the needs to be inverted before applying it to the original TOS field. However, the
aformentioned kernels forgo the inversion which breaks --set-tos and its aformentioned kernels forgo the inversion which breaks \-\-set\-tos and its
mnemonics. mnemonics.
...@@ -5,6 +5,7 @@ ...@@ -5,6 +5,7 @@
* This program is released under the terms of GNU GPL */ * This program is released under the terms of GNU GPL */
#include <stdio.h> #include <stdio.h>
#include <string.h> #include <string.h>
#include <strings.h>
#include <xtables.h> #include <xtables.h>
#include <linux/netfilter/xt_addrtype.h> #include <linux/netfilter/xt_addrtype.h>
......
...@@ -61,14 +61,26 @@ static const struct xt_option_entry bpf_opts_v1[] = { ...@@ -61,14 +61,26 @@ static const struct xt_option_entry bpf_opts_v1[] = {
XTOPT_TABLEEND, XTOPT_TABLEEND,
}; };
static int bpf_obj_get(const char *filepath) static int bpf_obj_get_readonly(const char *filepath)
{ {
#if defined HAVE_LINUX_BPF_H && defined __NR_bpf && defined BPF_FS_MAGIC #if defined HAVE_LINUX_BPF_H && defined __NR_bpf && defined BPF_FS_MAGIC
union bpf_attr attr; /* union bpf_attr includes this in an anonymous struct, but the
* file_flags field and the BPF_F_RDONLY constant are only present
memset(&attr, 0, sizeof(attr)); * in Linux 4.15+ kernel headers (include/uapi/linux/bpf.h)
attr.pathname = (__u64) filepath; */
struct { // this part of union bpf_attr is for BPF_OBJ_* commands
__aligned_u64 pathname;
__u32 bpf_fd;
__u32 file_flags;
} attr = {
.pathname = (__u64)filepath,
.file_flags = (1U << 3), // BPF_F_RDONLY
};
int fd = syscall(__NR_bpf, BPF_OBJ_GET, &attr, sizeof(attr));
if (fd >= 0) return fd;
/* on any error fallback to default R/W access for pre-4.15-rc1 kernels */
attr.file_flags = 0;
return syscall(__NR_bpf, BPF_OBJ_GET, &attr, sizeof(attr)); return syscall(__NR_bpf, BPF_OBJ_GET, &attr, sizeof(attr));
#else #else
xtables_error(OTHER_PROBLEM, xtables_error(OTHER_PROBLEM,
...@@ -125,7 +137,7 @@ static void bpf_parse_string(struct sock_filter *pc, __u16 *lenp, __u16 len_max, ...@@ -125,7 +137,7 @@ static void bpf_parse_string(struct sock_filter *pc, __u16 *lenp, __u16 len_max,
static void bpf_parse_obj_pinned(struct xt_bpf_info_v1 *bi, static void bpf_parse_obj_pinned(struct xt_bpf_info_v1 *bi,
const char *filepath) const char *filepath)
{ {
bi->fd = bpf_obj_get(filepath); bi->fd = bpf_obj_get_readonly(filepath);
if (bi->fd < 0) if (bi->fd < 0)
xtables_error(PARAMETER_PROBLEM, xtables_error(PARAMETER_PROBLEM,
"bpf: failed to get bpf object"); "bpf: failed to get bpf object");
......
...@@ -17,7 +17,7 @@ iptables \-A OUTPUT \-m bpf \-\-object\-pinned ${BPF_MOUNT}/{PINNED_PATH} \-j AC ...@@ -17,7 +17,7 @@ iptables \-A OUTPUT \-m bpf \-\-object\-pinned ${BPF_MOUNT}/{PINNED_PATH} \-j AC
\fB\-\-bytecode\fP \fIcode\fP \fB\-\-bytecode\fP \fIcode\fP
Pass the BPF byte code format as generated by the \fBnfbpf_compile\fP utility. Pass the BPF byte code format as generated by the \fBnfbpf_compile\fP utility.
.PP .PP
The code format is similar to the output of the tcpdump -ddd command: one line The code format is similar to the output of the tcpdump \-ddd command: one line
that stores the number of instructions, followed by one line for each that stores the number of instructions, followed by one line for each
instruction. Instruction lines follow the pattern 'u16 u8 u8 u32' in decimal instruction. Instruction lines follow the pattern 'u16 u8 u8 u32' in decimal
notation. Fields encode the operation, jump offset if true, jump offset if notation. Fields encode the operation, jump offset if true, jump offset if
......
...@@ -156,7 +156,7 @@ static int cluster_xlate(struct xt_xlate *xl, ...@@ -156,7 +156,7 @@ static int cluster_xlate(struct xt_xlate *xl,
xt_xlate_add(xl, "%s %u seed 0x%08x ", jhash_st, xt_xlate_add(xl, "%s %u seed 0x%08x ", jhash_st,
info->total_nodes, info->hash_seed); info->total_nodes, info->hash_seed);
for (node = 0; node < 32; node++) { for (node = 0; node < 32; node++) {
if (info->node_mask & (1 << node)) { if (info->node_mask & (1u << node)) {
if (needs_set == 0) { if (needs_set == 0) {
xt_xlate_add(xl, "{ "); xt_xlate_add(xl, "{ ");
needs_set = 1; needs_set = 1;
......
...@@ -27,7 +27,7 @@ iptables \-A PREROUTING \-t mangle \-i eth1 \-m cluster ...@@ -27,7 +27,7 @@ iptables \-A PREROUTING \-t mangle \-i eth1 \-m cluster
iptables \-A PREROUTING \-t mangle \-i eth2 \-m cluster iptables \-A PREROUTING \-t mangle \-i eth2 \-m cluster
\-\-cluster\-total\-nodes 2 \-\-cluster\-local\-node 1 \-\-cluster\-total\-nodes 2 \-\-cluster\-local\-node 1
\-\-cluster\-hash\-seed 0xdeadbeef \-\-cluster\-hash\-seed 0xdeadbeef
\-j MARK -\-set\-mark 0xffff \-j MARK \-\-set\-mark 0xffff
.IP .IP
iptables \-A PREROUTING \-t mangle \-i eth1 iptables \-A PREROUTING \-t mangle \-i eth1
\-m mark ! \-\-mark 0xffff \-j DROP \-m mark ! \-\-mark 0xffff \-j DROP
......
...@@ -70,18 +70,15 @@ static int connlabel_value_parse(const char *in) ...@@ -70,18 +70,15 @@ static int connlabel_value_parse(const char *in)
static void connlabel_mt_parse(struct xt_option_call *cb) static void connlabel_mt_parse(struct xt_option_call *cb)
{ {
struct xt_connlabel_mtinfo *info = cb->data; struct xt_connlabel_mtinfo *info = cb->data;
bool have_labelmap = !connlabel_open();
int tmp; int tmp;
xtables_option_parse(cb); xtables_option_parse(cb);
switch (cb->entry->id) { switch (cb->entry->id) {
case O_LABEL: case O_LABEL:
if (have_labelmap) tmp = connlabel_value_parse(cb->arg);
if (tmp < 0 && !connlabel_open())
tmp = nfct_labelmap_get_bit(map, cb->arg); tmp = nfct_labelmap_get_bit(map, cb->arg);
else
tmp = connlabel_value_parse(cb->arg);
if (tmp < 0) if (tmp < 0)
xtables_error(PARAMETER_PROBLEM, xtables_error(PARAMETER_PROBLEM,
"label '%s' not found or invalid value", "label '%s' not found or invalid value",
......
...@@ -1257,8 +1257,6 @@ static int _conntrack3_mt_xlate(struct xt_xlate *xl, ...@@ -1257,8 +1257,6 @@ static int _conntrack3_mt_xlate(struct xt_xlate *xl,
} }
if (sinfo->match_flags & XT_CONNTRACK_STATUS) { if (sinfo->match_flags & XT_CONNTRACK_STATUS) {
if (sinfo->status_mask == 1)
return 0;
xt_xlate_add(xl, "%sct status %s", space, xt_xlate_add(xl, "%sct status %s", space,
sinfo->invert_flags & XT_CONNTRACK_STATUS ? sinfo->invert_flags & XT_CONNTRACK_STATUS ?
"!= " : ""); "!= " : "");
......
...@@ -28,6 +28,9 @@ nft add rule ip filter INPUT ct reply daddr 10.100.2.131 counter accept ...@@ -28,6 +28,9 @@ nft add rule ip filter INPUT ct reply daddr 10.100.2.131 counter accept
iptables-translate -t filter -A INPUT -m conntrack --ctproto tcp --ctorigsrcport 443:444 -j ACCEPT iptables-translate -t filter -A INPUT -m conntrack --ctproto tcp --ctorigsrcport 443:444 -j ACCEPT
nft add rule ip filter INPUT ct original protocol 6 ct original proto-src 443-444 counter accept nft add rule ip filter INPUT ct original protocol 6 ct original proto-src 443-444 counter accept
iptables-translate -t filter -A INPUT -m conntrack --ctstatus EXPECTED -j ACCEPT
nft add rule ip filter INPUT ct status expected counter accept
iptables-translate -t filter -A INPUT -m conntrack ! --ctstatus CONFIRMED -j ACCEPT iptables-translate -t filter -A INPUT -m conntrack ! --ctstatus CONFIRMED -j ACCEPT
nft add rule ip filter INPUT ct status != confirmed counter accept nft add rule ip filter INPUT ct status != confirmed counter accept
......
...@@ -772,7 +772,7 @@ static void hashlimit_mt_check(struct xt_fcheck_call *cb) ...@@ -772,7 +772,7 @@ static void hashlimit_mt_check(struct xt_fcheck_call *cb)
if (cb->xflags & F_BURST) { if (cb->xflags & F_BURST) {
if (info->cfg.burst < cost_to_bytes(info->cfg.avg)) if (info->cfg.burst < cost_to_bytes(info->cfg.avg))
xtables_error(PARAMETER_PROBLEM, xtables_error(PARAMETER_PROBLEM,
"burst cannot be smaller than %lub", cost_to_bytes(info->cfg.avg)); "burst cannot be smaller than %"PRIu64"b", cost_to_bytes(info->cfg.avg));
burst = info->cfg.burst; burst = info->cfg.burst;
burst /= cost_to_bytes(info->cfg.avg); burst /= cost_to_bytes(info->cfg.avg);
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment