Date: Sun, 12 May 1996 14:40:28 -0500 (CDT) From: Alex Nash <alex@zen.nash.org> To: FreeBSD-gnats-submit@freebsd.org Cc: phk@freebsd.org Subject: bin/1193: IPFW configuration program Message-ID: <199605121940.OAA00746@zen.nash.org> Resent-Message-ID: <199605121950.MAA10432@freefall.freebsd.org>
next in thread | raw e-mail | index | archive | help
>Number: 1193 >Category: bin >Synopsis: Cleanup + ability to zero individual chain entries >Confidential: no >Severity: non-critical >Priority: low >Responsible: freebsd-bugs >State: open >Class: change-request >Submitter-Id: current-users >Arrival-Date: Sun May 12 12:50:05 PDT 1996 >Last-Modified: >Originator: Alex Nash >Organization: >Release: FreeBSD 2.1-STABLE i386 >Environment: -current and -stable systems that use ipfw. >Description: ipfw.c: Make it clear in usage display that multiple port ranges are not allowed. Added ability to zero a single accounting entry. (See matching sys/netinet/ip_fw.c PR.) Spelling error corrected. ipfw.8: Document ability to accept a specific entry when using 'ipfw zero.' Document the 'allow' option (I've placed allow first to agree with the ipfw.c usage display). Document the IP_FIREWALL_VERBOSE_LIMIT option, how it relates to the log keyword and packet counter clearing. >How-To-Repeat: N/A >Fix: --- ipfw.c Sun May 12 13:28:12 1996 *************** *** 281,288 **** "\trule:\taction proto src dst extras...\n" "\t\taction: {allow|deny|reject|count} [log]\n" "\t\tproto: {ip|tcp|udp|icmp}}\n" ! "\t\tsrc: from {any|ip[{/bits|:mask}]} [{port|port-port},...]\n" ! "\t\tdst: to {any|ip[{/bits|:mask}]} [{port|port-port},...]\n" "\textras:\n" "\t\tfragment\n" "\t\t{in|out|inout}\n" --- 281,288 ---- "\trule:\taction proto src dst extras...\n" "\t\taction: {allow|deny|reject|count} [log]\n" "\t\tproto: {ip|tcp|udp|icmp}}\n" ! "\t\tsrc: from {any|ip[{/bits|:mask}]} [{port|port-port},[port],...]\n" ! "\t\tdst: to {any|ip[{/bits|:mask}]} [{port|port-port},[port],...]\n" "\textras:\n" "\t\tfragment\n" "\t\t{in|out|inout}\n" *************** *** 589,594 **** --- 589,628 ---- err(1,"setsockopt(IP_FW_ADD)"); } + void + zero (ac, av) + int ac; + char **av; + { + av++; ac--; + + if (!ac) { + /* clear all entries */ + if (setsockopt(s,IPPROTO_IP,IP_FW_ZERO,NULL,0)<0) { + fprintf(stderr,"%s: setsockopt failed.\n",progname); + exit(1); + } + printf("Accounting cleared.\n"); + } else { + /* clear a specific entry */ + struct ip_fw rule; + int i; + + memset(&rule, 0, sizeof rule); + + /* Rule number */ + if (isdigit(**av)) { + rule.fw_number = atoi(*av); av++; ac--; + + if (setsockopt(s, IPPROTO_IP, IP_FW_ZERO, &rule, sizeof rule)) + err(1, "setsockopt(Zero)"); + } + else { + show_usage("expected number"); + } + } + } + int ipfw_main(ac,av) int ac; *************** *** 632,642 **** } printf("Flushed all rules.\n"); } else if (!strncmp(*av, "zero", strlen(*av))) { ! if (setsockopt(s,IPPROTO_IP,IP_FW_ZERO,NULL,0)<0) { ! fprintf(stderr,"%s: setsockopt failed.\n",progname); ! exit(1); ! } ! printf("Accounting cleared.\n"); } else if (!strncmp(*av, "print", strlen(*av))) { list(--ac,++av); } else if (!strncmp(*av, "list", strlen(*av))) { --- 666,672 ---- } printf("Flushed all rules.\n"); } else if (!strncmp(*av, "zero", strlen(*av))) { ! zero(ac,av); } else if (!strncmp(*av, "print", strlen(*av))) { list(--ac,++av); } else if (!strncmp(*av, "list", strlen(*av))) { *************** *** 662,668 **** s = socket( AF_INET, SOCK_RAW, IPPROTO_RAW ); if ( s < 0 ) { fprintf(stderr,"%s: Can't open raw socket.\n" ! "Must be root to use this programm. \n",progname); exit(1); } --- 692,698 ---- s = socket( AF_INET, SOCK_RAW, IPPROTO_RAW ); if ( s < 0 ) { fprintf(stderr,"%s: Can't open raw socket.\n" ! "Must be root to use this program. \n",progname); exit(1); } --- ipfw.8 Sun May 12 13:44:42 1996 *************** *** 11,16 **** --- 11,19 ---- flush .Nm ipfw zero + .Oo + .Ar number + .Oc .Nm ipfw delete .Ar number *************** *** 79,89 **** .Pp .Ar action : .Bl -hang -offset flag -width 1234567890123456 ! .It Nm accept ! Accept packets that match rule. The search terminates. .It Nm pass ! same as accept. .It Nm count update counters for all packets that match rule. The search continues with next rule. --- 82,94 ---- .Pp .Ar action : .Bl -hang -offset flag -width 1234567890123456 ! .It Nm allow ! Allow packets that match rule. The search terminates. .It Nm pass ! same as allow. ! .It Nm accept ! same as allow. .It Nm count update counters for all packets that match rule. The search continues with next rule. *************** *** 98,103 **** --- 103,114 ---- When a packet matches a rule with the .Nm log keyword, a message will be printed on the console. + If the kernel was compiled with the + .Nm IP_FIREWALL_VERBOSE_LIMIT + option, then logging will cease after the number of packets + specified by the option are recieved for that particular + chain entry. Logging may then be re-enabled by clearing + the packet counter for that entry. .Pp .Ar proto : .Bl -hang -offset flag -width 1234567890123456 >Audit-Trail: >Unformatted:
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?199605121940.OAA00746>