Date: Tue, 5 Nov 1996 12:30:08 +0300 (MVW) From: Viacheslav Andreev <cliff@st.simbirsk.su> To: freebsd-hackers@FreeBSD.ORG Subject: ip_fw.c - bug or feature ? Message-ID: <199611050930.AA26920@mpool.st.simbirsk.su>
next in thread | raw e-mail | index | archive | help
Hi!
I am not shure, this is a bug or feature.
While trying to disable tcp traffic for some port, f.e.
ipfw add 1070 deny log tcp from any to 192.168.0.1 80
, there are false dropping of fragmented (i.e. 2-nd and next-s without
tcp port info) packets of ftp traffic. IMHO, it is a result of
matching fragments over firewall rules with tcp port specs :
-----------/sys/netinet/ip_fw.c-----------------------------
/* Check TCP flags and TCP/UDP ports only if packet is not fragment */
if (!(ip->ip_off & IP_OFFMASK)) {
/* TCP, a little more checking */
if (prt == IP_FW_F_TCP &&
(f->fw_tcpf != f->fw_tcpnf) &&
(!tcpflg_match(tcp, f)))
continue;
if (!port_match(&f->fw_pts[0], f->fw_nsp,
src_port, f->fw_flg & IP_FW_F_SRNG))
continue;
if (!port_match(&f->fw_pts[f->fw_nsp], f->fw_ndp,
dst_port, f->fw_flg & IP_FW_F_DRNG))
continue;
}
!!! fragmented packets matches here with rules with tcp port spec.
got_match:
f->fw_pcnt++;
f->fw_bcnt+=ip->ip_len;
f->timestamp = time.tv_sec;
if (f->fw_flg & IP_FW_F_PRN) {
IMHO, to sovle this porblem, source should look like this :
/* Check TCP flags and TCP/UDP ports only if packet is not fragment */
if (!(ip->ip_off & IP_OFFMASK)) {
/* TCP, a little more checking */
if (prt == IP_FW_F_TCP &&
(f->fw_tcpf != f->fw_tcpnf) &&
(!tcpflg_match(tcp, f)))
continue;
if (!port_match(&f->fw_pts[0], f->fw_nsp,
src_port, f->fw_flg & IP_FW_F_SRNG))
continue;
if (!port_match(&f->fw_pts[f->fw_nsp], f->fw_ndp,
dst_port, f->fw_flg & IP_FW_F_DRNG))
continue;
} else { /* fragment here */
if (f->fw_ndp > 0 || f->fw_nsp > 0) {
continue; /* don't match fragment with "precize" rule */
}
}
--
Viacheslav Andreev
Dimitrovgrad town, Middle Volga, Russia.
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?199611050930.AA26920>
