On Thu, May 8, 2008 at 1:58 PM, Daniel Roethlisberger <[EMAIL PROTECTED]> wrote: > CZUCZY Gergely <[EMAIL PROTECTED]> 2008-05-08: >> On Thu, 08 May 2008 11:36:26 +0300 Oleksandr Samoylyk >> <[EMAIL PROTECTED]> wrote: >> > >> That iptables rule worked for any destination. >> > > You cannot rewrite a packet's destination address to _any_ >> > > destination. >> > > >> > > It's like you cannot submit a package at the post office with the >> > > destination address "any". It's just meaningless. >> > >> > However it works with iptables. :) >> > >> > What can I do in my situation in order to gain the same >> > functionality by means of pf or other additional daemons? >> No, it doesn't. That iptables rule only affects the port number, where >> it defaults to the original dst address. So it defaults to something, >> where as pf doesn't. With pf you have to explicitly specify the >> rewritten dst IP. >> >> In my first reply I've told you to read the openbsd FAQ. You haven't >> done it. I _strongly_ suggest you, before doing your next reply to the >> list. go and read that FAQ. Here's the URL once more, I bet you've >> lost it under your desk... http://www.openbsd.org/faq/pf/ > > Netfilter allows to rewrite the destination port without rewriting the > destination address. It would seem like that this is not possible with > pf, at least not using rdr. But it is not necessary, since > my.smtp.server is the only destination on port 25 that will not be > dropped by the previous rule, so you can just specify my.smtp.server as > destination in the rdr rule. > > Just in case this is about submitting mail around port 25 filters (in > contrast to a fixed MTA-MTA "tunnel" on port 2525), you probably want to > use SMTP AUTH on the submission port (587) to solve this problem, not > just provide plain SMTP on a different port. On the submission port, > authentication is mandatory, which prevents it being used by spambots to > deliver mail directly to your MTA. Using submission and blocking port > 25 for end-user address ranges does have anti-spam benefits. > > -- > Daniel Roethlisberger > http://daniel.roe.ch/ > _______________________________________________ > freebsd-pf@freebsd.org mailing list > http://lists.freebsd.org/mailman/listinfo/freebsd-pf > To unsubscribe, send any mail to "[EMAIL PROTECTED]" >
How about this patch. I have not really tested it but should do just port rewriting with a rule as rdr on $int proto tcp from any to any port 255 -> port 25 any Ermal Index: contrib/pf/pfctl/parse.y =================================================================== RCS file: /home/ncvs/src/contrib/pf/pfctl/parse.y,v retrieving revision 1.8 diff -u -r1.8 parse.y --- contrib/pf/pfctl/parse.y 3 Jul 2007 12:30:02 -0000 1.8 +++ contrib/pf/pfctl/parse.y 8 May 2008 16:33:30 -0000 @@ -3326,6 +3326,12 @@ $$->host = $2; $$->rport.a = $$->rport.b = $$->rport.t = 0; } + | ARROW PORT rport { + $$ = calloc(1, sizeof(struct redirection)); + if ($$ == NULL) + err(1, "redirection: calloc"); + $$->rport = $4; + } | ARROW redirspec PORT rport { $$ = calloc(1, sizeof(struct redirection)); if ($$ == NULL) @@ -3442,6 +3448,13 @@ pool_opts.marker |= POM_STICKYADDRESS; pool_opts.opts |= PF_POOL_STICKYADDR; } + | ANY { + if (pool_opts.type) { + yyerror("pool type cannot be redefined"); + YYERROR; + } + pool_opts.type = PF_POOL_ANY; + } ; redirection : /* empty */ { $$ = NULL; } @@ -3549,6 +3562,10 @@ YYERROR; } } else { + r.rpool.opts = $10.type; + if ((r.rpool.opts & PF_POOL_TYPEMASK) != + PF_POOL_ANY) { + if ($9 == NULL || $9->host == NULL) { yyerror("translation rule requires '-> " "address'"); @@ -3562,6 +3579,14 @@ YYERROR; if (check_netmask($9->host, r.af)) YYERROR; + } + + if ((r.rpool.opts & PF_POOL_TYPEMASK) == + PF_POOL_ANY && r.action != PF_RDR) { + yyerror("any pool type valid only for rdr" + " action"); + YYERROR; + } r.rpool.proxy_port[0] = ntohs($9->rport.a); @@ -3596,7 +3621,6 @@ break; } - r.rpool.opts = $10.type; if ((r.rpool.opts & PF_POOL_TYPEMASK) == PF_POOL_NONE && ($9->host->next != NULL || $9->host->addr.type == PF_ADDR_TABLE || @@ -3614,7 +3638,7 @@ "is only supported in round-robin " "redirection pools")) YYERROR; - if ($9->host->next != NULL) { + if ($9 != NULL && $9->host != NULL && $9->host->next != NULL) { if ((r.rpool.opts & PF_POOL_TYPEMASK) != PF_POOL_ROUNDROBIN) { yyerror("only round-robin " Index: sys/contrib/pf/net/pf.c =================================================================== RCS file: /home/ncvs/src/sys/contrib/pf/net/pf.c,v retrieving revision 1.46.2.1 diff -u -r1.46.2.1 pf.c --- sys/contrib/pf/net/pf.c 25 Nov 2007 19:26:46 -0000 1.46.2.1 +++ sys/contrib/pf/net/pf.c 8 May 2008 16:33:31 -0000 @@ -2859,13 +2859,18 @@ } break; case PF_RDR: { - if (pf_map_addr(pd->af, r, saddr, naddr, NULL, sn)) - return (NULL); - if ((r->rpool.opts & PF_POOL_TYPEMASK) == - PF_POOL_BITMASK) - PF_POOLMASK(naddr, naddr, - &r->rpool.cur->addr.v.a.mask, daddr, - pd->af); + if ((r->rpool.opts & PF_POOL_TYPEMASK) == + PF_POOL_ANY) { + PF_ACPY(naddr, daddr, pd->af); + } else { + if (pf_map_addr(pd->af, r, saddr, naddr, NULL, sn)) + return (NULL); + if ((r->rpool.opts & PF_POOL_TYPEMASK) == + PF_POOL_BITMASK) + PF_POOLMASK(naddr, naddr, + &r->rpool.cur->addr.v.a.mask, daddr, + pd->af); + } if (r->rpool.proxy_port[1]) { u_int32_t tmp_nport; Index: sys/contrib/pf/net/pfvar.h =================================================================== RCS file: /home/ncvs/src/sys/contrib/pf/net/pfvar.h,v retrieving revision 1.16.2.1 diff -u -r1.16.2.1 pfvar.h --- sys/contrib/pf/net/pfvar.h 12 Apr 2008 18:26:48 -0000 1.16.2.1 +++ sys/contrib/pf/net/pfvar.h 8 May 2008 16:33:31 -0000 @@ -130,7 +130,7 @@ PF_LIMIT_TABLES, PF_LIMIT_TABLE_ENTRIES, PF_LIMIT_MAX }; #define PF_POOL_IDMASK 0x0f enum { PF_POOL_NONE, PF_POOL_BITMASK, PF_POOL_RANDOM, - PF_POOL_SRCHASH, PF_POOL_ROUNDROBIN }; + PF_POOL_SRCHASH, PF_POOL_ROUNDROBIN, PF_POOL_ANY }; enum { PF_ADDR_ADDRMASK, PF_ADDR_NOROUTE, PF_ADDR_DYNIFTL, PF_ADDR_TABLE, PF_ADDR_RTLABEL, PF_ADDR_URPFFAILED }; #define PF_POOL_TYPEMASK 0x0f _______________________________________________ freebsd-pf@freebsd.org mailing list http://lists.freebsd.org/mailman/listinfo/freebsd-pf To unsubscribe, send any mail to "[EMAIL PROTECTED]"