patches for easier mirroring, to eliminate a special copy, to make www.freebsd.org/security a full copy of security.freebsd.org and be eventually be the same. For now files are just sitting there. The symlinks are missing. Discussed on: www (repository location) Discussed with: simon (so)
220 lines
7.7 KiB
Diff
220 lines
7.7 KiB
Diff
Index: sbin/ip6fw/ip6fw.c
|
|
===================================================================
|
|
RCS file: /usr/home/ncvs/src/sbin/ip6fw/ip6fw.c,v
|
|
retrieving revision 1.1
|
|
diff -u -r1.1 ip6fw.c
|
|
--- sbin/ip6fw/ip6fw.c 2000/01/29 13:54:44 1.1
|
|
+++ sbin/ip6fw/ip6fw.c 2001/01/22 19:43:54
|
|
@@ -363,7 +363,7 @@
|
|
if (chain->fw_ip6nopt & IPV6_FW_IP6OPT_OPTS) PRINTOPT("!opts");
|
|
}
|
|
|
|
- if (chain->fw_tcpf & IPV6_FW_TCPF_ESTAB)
|
|
+ if (chain->fw_ipflg & IPV6_FW_IF_TCPEST)
|
|
printf(" established");
|
|
else if (chain->fw_tcpf == IPV6_FW_TCPF_SYN &&
|
|
chain->fw_tcpnf == IPV6_FW_TCPF_ACK)
|
|
@@ -1052,7 +1052,7 @@
|
|
}
|
|
if (rule.fw_prot == IPPROTO_TCP) {
|
|
if (!strncmp(*av,"established",strlen(*av))) {
|
|
- rule.fw_tcpf |= IPV6_FW_TCPF_ESTAB;
|
|
+ rule.fw_ipflg |= IPV6_FW_IF_TCPEST;
|
|
av++; ac--; continue;
|
|
}
|
|
if (!strncmp(*av,"setup",strlen(*av))) {
|
|
Index: sys/netinet6/ip6_fw.c
|
|
===================================================================
|
|
RCS file: /usr/home/ncvs/src/sys/netinet6/ip6_fw.c,v
|
|
retrieving revision 1.2.2.3
|
|
diff -u -r1.2.2.3 ip6_fw.c
|
|
--- sys/netinet6/ip6_fw.c 2000/10/24 19:27:39 1.2.2.3
|
|
+++ sys/netinet6/ip6_fw.c 2001/01/22 19:43:54
|
|
@@ -149,9 +149,15 @@
|
|
{
|
|
u_char flg_set, flg_clr;
|
|
|
|
- if ((f->fw_tcpf & IPV6_FW_TCPF_ESTAB) &&
|
|
- (tcp6->th_flags & (IPV6_FW_TCPF_RST | IPV6_FW_TCPF_ACK)))
|
|
- return 1;
|
|
+ /*
|
|
+ * If an established connection is required, reject packets that
|
|
+ * have only SYN of RST|ACK|SYN set. Otherwise, fall through to
|
|
+ * other flag requirements.
|
|
+ */
|
|
+ if ((f->fw_ipflg & IPV6_FW_IF_TCPEST) &&
|
|
+ ((tcp6->th_flags & (IPV6_FW_TCPF_RST | IPV6_FW_TCPF_ACK |
|
|
+ IPV6_FW_TCPF_SYN)) == IPV6_FW_TCPF_SYN))
|
|
+ return 0;
|
|
|
|
flg_set = tcp6->th_flags & f->fw_tcpf;
|
|
flg_clr = tcp6->th_flags & f->fw_tcpnf;
|
|
@@ -571,7 +577,9 @@
|
|
}
|
|
PULLUP_TO(off + 14);
|
|
tcp6 = (struct tcphdr *) ((caddr_t)ip6 + off);
|
|
- if (f->fw_tcpf != f->fw_tcpnf && !tcp6flg_match(tcp6, f))
|
|
+ if (((f->fw_tcpf != f->fw_tcpnf) ||
|
|
+ (f->fw_ipflg & IPV6_FW_IF_TCPEST)) &&
|
|
+ !tcp6flg_match(tcp6, f))
|
|
continue;
|
|
src_port = ntohs(tcp6->th_sport);
|
|
dst_port = ntohs(tcp6->th_dport);
|
|
Index: sys/netinet6/ip6_fw.h
|
|
===================================================================
|
|
RCS file: /usr/home/ncvs/src/sys/netinet6/ip6_fw.h,v
|
|
retrieving revision 1.3.2.2
|
|
diff -u -r1.3.2.2 ip6_fw.h
|
|
--- sys/netinet6/ip6_fw.h 2000/10/24 19:27:39 1.3.2.2
|
|
+++ sys/netinet6/ip6_fw.h 2001/01/22 19:43:54
|
|
@@ -59,6 +59,7 @@
|
|
u_short fw_number; /* Rule number */
|
|
u_short fw_flg; /* Flags word */
|
|
#define IPV6_FW_MAX_PORTS 10 /* A reasonable maximum */
|
|
+ u_int fw_ipflg; /* IP flags word */
|
|
u_short fw_pts[IPV6_FW_MAX_PORTS]; /* Array of port numbers to match */
|
|
u_char fw_ip6opt,fw_ip6nopt; /* IPv6 options set/unset */
|
|
u_char fw_tcpf,fw_tcpnf; /* TCP flags set/unset */
|
|
@@ -137,6 +138,11 @@
|
|
|
|
#define IPV6_FW_F_MASK 0xFFFF /* All possible flag bits mask */
|
|
|
|
+/*
|
|
+ * Flags for the 'fw_ipflg' field, for comparing values of ip and its protocols. */
|
|
+#define IPV6_FW_IF_TCPEST 0x00000020 /* established TCP connection */
|
|
+#define IPV6_FW_IF_TCPMSK 0x00000020 /* mask of all TCP values */
|
|
+
|
|
/*
|
|
* For backwards compatibility with rules specifying "via iface" but
|
|
* not restricted to only "in" or "out" packets, we define this combination
|
|
@@ -171,7 +177,6 @@
|
|
#define IPV6_FW_TCPF_PSH TH_PUSH
|
|
#define IPV6_FW_TCPF_ACK TH_ACK
|
|
#define IPV6_FW_TCPF_URG TH_URG
|
|
-#define IPV6_FW_TCPF_ESTAB 0x40
|
|
|
|
/*
|
|
* Main firewall chains definitions and global var's definitions.
|
|
|
|
Index: sbin/ipfw/ipfw.c
|
|
===================================================================
|
|
RCS file: /usr/home/ncvs/src/sbin/ipfw/ipfw.c,v
|
|
retrieving revision 1.80.2.7
|
|
retrieving revision 1.80.2.8
|
|
diff -u -r1.80.2.7 -r1.80.2.8
|
|
--- sbin/ipfw/ipfw.c 2000/10/17 13:44:55 1.80.2.7
|
|
+++ sbin/ipfw/ipfw.c 2001/01/10 03:43:33 1.80.2.8
|
|
@@ -426,7 +426,7 @@
|
|
if (chain->fw_ipnopt & IP_FW_IPOPT_TS) PRINTOPT("!ts");
|
|
}
|
|
|
|
- if (chain->fw_tcpf & IP_FW_TCPF_ESTAB)
|
|
+ if (chain->fw_ipflg & IP_FW_IF_TCPEST)
|
|
printf(" established");
|
|
else if (chain->fw_tcpf == IP_FW_TCPF_SYN &&
|
|
chain->fw_tcpnf == IP_FW_TCPF_ACK)
|
|
@@ -1893,7 +1893,7 @@
|
|
}
|
|
if (rule.fw_prot == IPPROTO_TCP) {
|
|
if (!strncmp(*av,"established",strlen(*av))) {
|
|
- rule.fw_tcpf |= IP_FW_TCPF_ESTAB;
|
|
+ rule.fw_ipflg |= IP_FW_IF_TCPEST;
|
|
av++; ac--; continue;
|
|
}
|
|
if (!strncmp(*av,"setup",strlen(*av))) {
|
|
Index: sys/netinet/ip_fw.c
|
|
===================================================================
|
|
RCS file: /usr/home/ncvs/src/sys/netinet/ip_fw.c,v
|
|
retrieving revision 1.131.2.10
|
|
retrieving revision 1.131.2.11
|
|
diff -u -r1.131.2.10 -r1.131.2.11
|
|
--- sys/netinet/ip_fw.c 2000/11/07 09:50:58 1.131.2.10
|
|
+++ sys/netinet/ip_fw.c 2001/01/10 03:43:34 1.131.2.11
|
|
@@ -244,10 +244,16 @@
|
|
tcpflg_match(struct tcphdr *tcp, struct ip_fw *f)
|
|
{
|
|
u_char flg_set, flg_clr;
|
|
-
|
|
- if ((f->fw_tcpf & IP_FW_TCPF_ESTAB) &&
|
|
- (tcp->th_flags & (IP_FW_TCPF_RST | IP_FW_TCPF_ACK)))
|
|
- return 1;
|
|
+
|
|
+ /*
|
|
+ * If an established connection is required, reject packets that
|
|
+ * have only SYN of RST|ACK|SYN set. Otherwise, fall through to
|
|
+ * other flag requirements.
|
|
+ */
|
|
+ if ((f->fw_ipflg & IP_FW_IF_TCPEST) &&
|
|
+ ((tcp->th_flags & (IP_FW_TCPF_RST | IP_FW_TCPF_ACK |
|
|
+ IP_FW_TCPF_SYN)) == IP_FW_TCPF_SYN))
|
|
+ return 0;
|
|
|
|
flg_set = tcp->th_flags & f->fw_tcpf;
|
|
flg_clr = tcp->th_flags & f->fw_tcpnf;
|
|
@@ -1208,7 +1214,9 @@
|
|
|
|
if (f->fw_tcpopt != f->fw_tcpnopt && !tcpopts_match(tcp, f))
|
|
continue;
|
|
- if (f->fw_tcpf != f->fw_tcpnf && !tcpflg_match(tcp, f))
|
|
+ if (((f->fw_tcpf != f->fw_tcpnf) ||
|
|
+ (f->fw_ipflg & IP_FW_IF_TCPEST)) &&
|
|
+ !tcpflg_match(tcp, f))
|
|
continue;
|
|
goto check_ports;
|
|
}
|
|
Index: sys/netinet/tcp.h
|
|
===================================================================
|
|
RCS file: /usr/home/ncvs/src/sys/netinet/tcp.h,v
|
|
retrieving revision 1.13
|
|
retrieving revision 1.13.2.2
|
|
diff -u -r1.13 -r1.13.2.2
|
|
--- sys/netinet/tcp.h 2000/01/09 19:17:25 1.13
|
|
+++ sys/netinet/tcp.h 2001/01/09 18:25:18 1.13.2.2
|
|
@@ -67,7 +67,9 @@
|
|
#define TH_PUSH 0x08
|
|
#define TH_ACK 0x10
|
|
#define TH_URG 0x20
|
|
-#define TH_FLAGS (TH_FIN|TH_SYN|TH_RST|TH_ACK|TH_URG)
|
|
+#define TH_ECE 0x40
|
|
+#define TH_CWR 0x80
|
|
+#define TH_FLAGS (TH_FIN|TH_SYN|TH_RST|TH_ACK|TH_URG|TH_ECE|TH_CWR)
|
|
|
|
u_short th_win; /* window */
|
|
u_short th_sum; /* checksum */
|
|
Index: sys/netinet/ip_fw.h
|
|
===================================================================
|
|
RCS file: /usr/home/ncvs/src/sys/netinet/ip_fw.h,v
|
|
retrieving revision 1.47.2.3
|
|
retrieving revision 1.47.2.5
|
|
diff -u -r1.47.2.3 -r1.47.2.5
|
|
--- sys/netinet/ip_fw.h 2000/08/22 00:33:18 1.47.2.3
|
|
+++ sys/netinet/ip_fw.h 2001/01/10 03:43:34 1.47.2.5
|
|
@@ -62,6 +62,7 @@
|
|
#define IP_FW_ICMPTYPES_DIM (IP_FW_ICMPTYPES_MAX / (sizeof(unsigned) * 8))
|
|
unsigned fw_icmptypes[IP_FW_ICMPTYPES_DIM]; /* ICMP types bitmap */
|
|
} fw_uar;
|
|
+ u_int fw_ipflg; /* IP flags word */
|
|
u_char fw_ipopt,fw_ipnopt; /* IP options set/unset */
|
|
u_char fw_tcpopt,fw_tcpnopt; /* TCP options set/unset */
|
|
u_char fw_tcpf,fw_tcpnf; /* TCP flags set/unset */
|
|
@@ -208,6 +209,12 @@
|
|
#define IP_FW_F_MASK 0x1FFFFFFF /* All possible flag bits mask */
|
|
|
|
/*
|
|
+ * Flags for the 'fw_ipflg' field, for comparing values of ip and its protocols.
|
|
+ */
|
|
+#define IP_FW_IF_TCPEST 0x00000020 /* established TCP connection */
|
|
+#define IP_FW_IF_TCPMSK 0x00000020 /* mask of all TCP values */
|
|
+
|
|
+/*
|
|
* For backwards compatibility with rules specifying "via iface" but
|
|
* not restricted to only "in" or "out" packets, we define this combination
|
|
* of bits to represent this configuration.
|
|
@@ -247,7 +254,6 @@
|
|
#define IP_FW_TCPF_PSH TH_PUSH
|
|
#define IP_FW_TCPF_ACK TH_ACK
|
|
#define IP_FW_TCPF_URG TH_URG
|
|
-#define IP_FW_TCPF_ESTAB 0x40
|
|
|
|
/*
|
|
* Main firewall chains definitions and global var's definitions.
|