Good day, all,
One of the projects I'm working on (snort2iptables, see
http://www.stearns.org/snort2iptables/) needs the ability to check the
length of the _data_ portion of a packet, i.e., the datagram minus the IP
and protocol headers. To that end, I've made a match module for dsize.
More accurately, I have shamelessly made off with James Morris'
length match and modified it to be a dsize match. I'm hoping the blatant
theft is seen as an efficient use of time and a win for the GPL, and not
as the laziness that motivated the theft. :-)
Because the module is so small, I've attached it to this message
and will make it available at http://www.stearns.org/ipt_dsize/ . The
ipt_dsize module tar includes:
2.4.15-pre6-ipt_dsize-patch: The following 4 objects, patched against 2.4.15-pre6
dsize.patch: The actual patch, .c and .h, for p-o-m
dsize.patch.config.in: The config.in change, for p-o-m
dsize.patch.configure.help: The help text, for p-o-m
dsize.patch.help: The description, for p-o-m
dsize.patch.makefile: The makefile update, for p-o-m
iptables-1.2.4-dsize-patch: The userspace util patch, against 1.2.4
Please treat this with caution. While it's based on the stable
ipt_length match, the chance of my making a mistake actually exceeds 100%
because of a statistical anomaly associated with my inability to code.
Consider it yet another example of why people like myself should only look
at code through a glass window with sufficient security alarms and rabid
dogs protecting the code.
Any and all suggestions, requests, patches are welcome! Please
let me know what changes this could use to work correctly and fit into the
netfilter framework.
Well, Rusty, it took 2 years, but I finally got you a netfilter
module. :-)
Cheers,
- Bill
Example:
iptables -N TestChain
iptables -I OUTPUT -j TestChain
iptables -A TestChain -m dsize --dsize 5 -j LOG --log-prefix 'Dsize5 '
iptables -A TestChain -m dsize --dsize 20 -j LOG --log-prefix 'Dsize20 '
iptables -A TestChain -m dsize --dsize 32 -j LOG --log-prefix 'Dsize32 '
iptables -L TestChain -n -x -v
[root@sparrow /root]# iptables -L TestChain -n -x -v
Chain TestChain (1 references)
pkts bytes target prot opt in out source
destination
0 0 LOG all -- * * 0.0.0.0/0 0.0.0.0/0
dsize 5 LOG flags 0 level 4 prefix `Dsize5 '
0 0 LOG all -- * * 0.0.0.0/0 0.0.0.0/0
dsize 20 LOG flags 0 level 4 prefix `Dsize20 '
0 0 LOG all -- * * 0.0.0.0/0 0.0.0.0/0
dsize 32 LOG flags 0 level 4 prefix `Dsize32 '
iptables -I OUTPUT -j TestChain
tail --lines=0 -f /var/log/messages
Nov 19 22:02:38 sparrow kernel: Dsize20 IN= OUT=eth0 SRC=x.x.x.x
DST=y.y.y.y LEN=72 TOS=0x00 PREC=0x00 TTL=64 ID=23130 PROTO=TCP
SPT=34886 DPT=22 WINDOW=6432 RES=0x00 ACK PSH URGP=0
Example 2:
for X in `seq 0 100` ; do iptables -A TestChain -m dsize --dsize $X -j LOG
--log-prefix " Dsize$X " ; done
#Put in log rules that check the data length of all packets up
to 100 bytes and report it.
---------------------------------------------------------------------------
'SYN! .. SYN|ACK! .. ACK!' - the mating call of the internet
(Courtesy of Bert Hubert <[EMAIL PROTECTED]>)
--------------------------------------------------------------------------
William Stearns ([EMAIL PROTECTED]). Mason, Buildkernel, named2hosts,
and ipfwadm2ipchains are at: http://www.pobox.com/~wstearns
LinuxMonth; articles for Linux Enthusiasts! http://www.linuxmonth.com
--------------------------------------------------------------------------