[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[openbsd] Re: Странная фишка с новым pf



On Sat, Nov 07, 2009 at 03:04:04PM +0200, irix wrote:
> Hello Openbsd,
> 
>   Обновлялся  до карента когда уже синтаксис pf поковыряли как у scrub
>   так  и  наты  с  редиректами.  На одной машинке которая цепляется в
>   укртелеком  ядрённым pppoe клиентом на 4.5 был полный ажур. Но когда
>   обновил  и секцию scrub in заменил на match in all scrub (no-df) раз
>   в   несколько  дней  начали  отваливатся  несколько  компьютеров  от
>   интернета  ни  пинги  ничего  не  ходит. Причём компьютеры меняються
>   произвольно из 15 стабильно два, три компа не работают а когда когда
>   начинают  глючить  другие,  те  которые  раньше не работали начинают
>   работать.  Когда  захожу и руками просто перегружаю правила pfctl -f
>   /etc/pf.conf   все   компы  начинаю  работать  нормально  в  течении
>   нескольких дней, а потом всё по новой.
> 
>   Опция  set  reassemble  в  конфиге  не  фигурирует,  судя по ману по
>   умолчанию она включена.
> 
>   Порядок правил
> 
>   #Scrub all
> match in all scrub (no-df)
> 
> #enable nat on ext_if
> match out on $ext_if from !($ext_if) nat-to ($ext_if:0)
> 
> #enable nat on sl_if
> match out on $sl_if from !($sl_if) nat-to ($sl_if:0)
> 
> #DC++ Redirect for dc_host
> match in on $sl_if inet proto { tcp udp } to ($sl_if) port $dc_port rdr-to $dc_host
> 
> #Antispoof rules
> antispoof quick for { lo $int_if }
> 
> #Last anchor for ftp-proxy
> anchor "ftp-proxy/*"
> 
> #Redirect ftp connections for ftp-proxy
> match in on $int_if inet proto tcp to !(self) port ftp rdr-to 127.0.0.1 port 8021
> 
> 
> Дальше идут правила фильтрации.
> 
> Идро генерик.
> 
> И как исправить ситуацию.

0. Ознакомиться с проблемой: http://marc.info/?l=openbsd-misc&m=125594592125229&w=2

1. Применить патч:

itp[p1]:/usr/src>cvs di -r1.118 -r1.120 sys/net/pf_norm.c
Index: sys/net/pf_norm.c
===================================================================
RCS file: /cvs/src/sys/net/pf_norm.c,v
retrieving revision 1.118
retrieving revision 1.120
diff -u -p -r1.118 -r1.120
--- sys/net/pf_norm.c   25 Jun 2009 09:30:28 -0000      1.118
+++ sys/net/pf_norm.c   1 Sep 2009 15:51:06 -0000       1.120
@@ -1,4 +1,4 @@
-/*     $OpenBSD: pf_norm.c,v 1.118 2009/06/25 09:30:28 sthen Exp $ */
+/*     $OpenBSD: pf_norm.c,v 1.120 2009/09/01 15:51:06 jsing Exp $ */

 /*
  * Copyright 2001 Niels Provos <provos@citi.umich.edu>
@@ -113,11 +113,6 @@ void                        pf_free_fragment(struct pf_fragm
 struct pf_fragment     *pf_find_fragment(struct ip *, struct pf_frag_tree *);
 struct mbuf            *pf_reassemble(struct mbuf **, struct pf_fragment **,
			    struct pf_frent *, int);
-void                    pf_scrub_ip(struct mbuf **, u_int16_t, u_int8_t,
-                           u_int8_t);
-#ifdef INET6
-void                    pf_scrub_ip6(struct mbuf **, u_int8_t);
-#endif

 #define        DPFPRINTF(x) do {                               \
	if (pf_status.debug >= PF_DEBUG_MISC) {         \
@@ -541,7 +536,7 @@ pf_normalize_ip(struct mbuf **m0, int di
		goto drop;

	/* Clear IP_DF if we're in no-df mode */
-       if (!(pf_status.reass & PF_REASS_NODF) && h->ip_off & htons(IP_DF)) {
+       if (pf_status.reass & PF_REASS_NODF && h->ip_off & htons(IP_DF)) {
		u_int16_t ip_off = h->ip_off;

		h->ip_off &= htons(~IP_DF);

2. Попробовать снова.

-- 
To unsubscribe send an e-mail to openbsd+unsubscribe@uaoug.org.ua
For retrieval in messages archive http://www.uaoug.org.ua/archive