Indice del forum www.zeroshell.net
Distribuzione Linux ZeroShell
 
 FAQFAQ   CercaCerca  GruppiGruppi   RegistratiRegistrati 
 ProfiloProfilo  Log inLog in   Messaggi privatiMessaggi privati 

X fulvio - Virtual Server - Multiport

 
Nuovo argomento   Rispondi    Indice del forum -> ZeroShell
Precedente :: Successivo  
Autore Messaggio
ufoonline



Registrato: 03/07/08 22:16
Messaggi: 261

MessaggioInviato: Mer Dic 10, 2008 11:23 pm    Oggetto: X fulvio - Virtual Server - Multiport Rispondi citando

Ciao fulvio,

Stavo cercando di abilitare la configurazione del NATTING multiport su ZS.

In effetti bypassando il JS di controllo sulle porte, e modificando il file /root/kerbynet.cgi/scripts/router_patconfig si riesce ad abilitare la cosa... ovviamente col rischio e pericolo, che se sbagli la sintassi di IPtables, la cosa non vada in porto e nel mainframe ti appaia l'errore di iptables.

Nella prossima release implementerai la cosa oppure no?

Se non l'hai già fatto.. a me praticamente manca la parte di controllo in JS che mi farà perdere tempo, visto che non sono una cima in JS.. nel caso che finisco, ti interessa se ti passo i file modificati?

Se invece l'hai fatti.. mi passi i file modificati? Razz purtroppo è una funzione troppo utile.. per chi come me, ha tante.. troppe porte da nattare, e verrebbe una lista infinita!

Grazie e ciao!
Top
Profilo Invia messaggio privato
fulvio
Site Admin


Registrato: 01/11/06 17:45
Messaggi: 1558

MessaggioInviato: Gio Dic 11, 2008 11:30 pm    Oggetto: Rispondi citando

Non ho ancora fatto niente a riguardo. Posta la patch, almeno comincio a capire cosa devo fare esattamente. Poi al Javascript ci penso io.

Ciao
Fulvio
Top
Profilo Invia messaggio privato
ufoonline



Registrato: 03/07/08 22:16
Messaggi: 261

MessaggioInviato: Ven Dic 12, 2008 1:59 am    Oggetto: Rispondi citando

Ciao,

Ecco il patchfile.. ho fatto anche il JS.. che mi ha richiesto meno tempo di quanto pensavo (ho riutilizzato il tuo Wink ), la sintassi da usare è STARTPORT-ENDPORT.

Sto vedendo come realizzare la parte per poter inserire le porte tipo:
1010,1020,1030-1050

Non ci riesco perchè nel -j DNAT non posso dargli le porte con la 'virgola' e li mi rende inutile il modulo multiports, dato che la RemotePorts non rispecchierebbe il voluto.

Sto pensando come poter far in bash a splittare il tutto in un multicomando automatico di iptables.. che aggiunge\rimuove le varie regole da solo... mi sono un pochino arruginito a dir la verità Razz

I file modificati sono:
/root/kerbynet.cgi/scripts/router_delpat
/root/kerbynet.cgi/template/router_pat
/root/kerbynet.cgi/scripts/router_patconfig

Codice:
diff -urNp /root/kerbynet.cgi/scripts/router_delpat /root/kerbynet.cgi/scripts/router_delpat
--- /root/kerbynet.cgi/scripts/router_delpat   2008-12-12 02:26:32.000000000 +0100
+++ /root/kerbynet.cgi/scripts/router_delpat   2008-12-12 02:26:53.000000000 +0100
@@ -25,5 +25,11 @@ else
 fi
 cd ..
 #iptables -t nat -D SNATVS $DST -p $PROTOCOL --dport $REMOTEPORT -j MASQUERADE
+
+# - Fix Multiport by Massimiliano Cianelli - 12/12/2008
+if echo $LOCALPORT | grep -q "-"; then
+  LOCALPORT=`echo $LOCALPORT | sed -e 's#-#:#g'`
+fi
+
 iptables -t nat -D PREROUTING $INT $VIP -p $PROTOCOL --dport $LOCALPORT -j DNAT --to $REMOTEIP:$REMOTEPORT
 rm -rf "$CONFIG"
diff -urNp /root/kerbynet.cgi/template/router_pat /root/kerbynet.cgi/template/router_pat
--- /root/kerbynet.cgi/template/router_pat      2008-12-12 02:39:26.000000000 +0100
+++ /root/kerbynet.cgi/template/router_pat      2008-12-12 02:41:27.000000000 +0100
@@ -25,6 +25,30 @@ function isValidIPRange(Range) {
   alert("The remote IP address is not valid.");
   return false;
 }
+
+function isValidPortRange(Range) {
+  if (isValidPort(Range)) return true;
+  if ((p=Range.indexOf('-'))!=-1) {
+    PORT1=Range.substr(0,p);
+    PORT2=Range.substr(p+1);
+    if (!isValidPort(PORT1)) {
+      alert("The first PORT number of the range "+Range+" is not valid.");
+      return false;
+    }                                             
+    if (!isValidPort(PORT2)) {
+      alert("The second PORT number of the range "+Range+" is not valid.");
+      return false;
+    }
+    if (PORT1>=PORT2) {
+        alert("The second PORT number of the range must be greater than the first one");
+        return false;
+    }                           
+    return true;
+  }
+  alert("The Port number must be in the range 0-65535.");
+  return false;
+}
+
 function add() {
   X=document.data;
   X.RemoteIP.value=X.RemoteIP.value.replace(/[ ]+/g,"");
@@ -36,23 +60,25 @@ function add() {
      X.VirtualIP.focus();
      return false;
   }
-  if (!isValidPort(X.LocalPort.value)) {
-      alert("Local Port must be in the range 0-65535");
+
+  if (!isValidPortRange(X.LocalPort.value)) {
       X.LocalPort.select();
       X.LocalPort.focus();
       return false;
   }
+
   if (!isValidIPRange(X.RemoteIP.value)) {
       X.RemoteIP.select();
       X.RemoteIP.focus();
       return false;
   }
-  if (!isValidPort(X.RemotePort.value)) {
-      alert("Remote Port must be in the range 0-65535");

+  if (!isValidPortRange(X.RemotePort.value)) {
       X.RemotePort.select();
       X.RemotePort.focus();
       return false;
   }
+
   X.Action.value="PatAdd";
   X.submit();
 }
diff -urNp /root/kerbynet.cgi/scripts/router_patconfig /root/kerbynet.cgi/scripts/router_patconfig
--- /root/kerbynet.cgi/scripts/router_patconfig        2008-12-12 02:26:22.000000000 +0100
+++ /root/kerbynet.cgi/scripts/router_patconfig        2008-12-12 02:27:04.000000000 +0100
@@ -25,5 +25,11 @@ fi
 #if ! iptables -t nat -A SNATVS $DST -p $PROTOCOL --dport $REMOTEPORT -j MASQUERADE ; then
 #  exit 2
 #fi
+
+# - Fix Multiport by Massimiliano Cianelli - 12/12/2008
+if echo $LOCALPORT | grep -q "-"; then
+  LOCALPORT=`echo $LOCALPORT | sed -e 's#-#:#g'`
+fi
+
 iptables -t nat -A PREROUTING $INT $VIP -p $PROTOCOL --dport $LOCALPORT -j DNAT --to $REMOTEIP:$REMOTEPORT
Top
Profilo Invia messaggio privato
horace



Registrato: 11/04/08 09:50
Messaggi: 45

MessaggioInviato: Ven Dic 12, 2008 10:26 am    Oggetto: Rispondi citando

grande! visto che sembri conoscere la sintassi di iptables, saresti così gentile da controllarmi questo?

iptables -A PREROUTING -t nat -p udp -m udp -i ETH01 --sports 60000:65000 -j DNAT --to-destination 192.168.1.200:60000-65000

grazie mille!
Top
Profilo Invia messaggio privato
ufoonline



Registrato: 03/07/08 22:16
Messaggi: 261

MessaggioInviato: Ven Dic 12, 2008 3:15 pm    Oggetto: Rispondi citando

horace ha scritto:
grande! visto che sembri conoscere la sintassi di iptables, saresti così gentile da controllarmi questo?

iptables -A PREROUTING -t nat -p udp -m udp -i ETH01 --sports 60000:65000 -j DNAT --to-destination 192.168.1.200:60000-65000

grazie mille!


iptables -A PREROUTING -t nat -p udp -i ETH01 --dport 60000:65000 -j DNAT --to-destination 192.168.1.200:60000-65000

de nada Smile

---

In lavorazione lo script per il multiport con le ',' anche Wink
Ho trovato una buona soluzione, sto vedendo come gestirla!
Top
Profilo Invia messaggio privato
ufoonline



Registrato: 03/07/08 22:16
Messaggi: 261

MessaggioInviato: Ven Dic 12, 2008 3:48 pm    Oggetto: Rispondi citando

Ciao Fulvio,

Mi spieghi come ZS si accorge che c'è stato un errore?

Sto terminando l'implementazione del supporto del multiport con la ',' e
mi domadavo come uscirmene se trovo un errore... e far riconoscere a ZS che c'è stato un errore!

Fammi sapere.. che è parecchio importante!

Ciao
Top
Profilo Invia messaggio privato
horace



Registrato: 11/04/08 09:50
Messaggi: 45

MessaggioInviato: Ven Dic 12, 2008 5:08 pm    Oggetto: Rispondi citando

ufoonline ha scritto:


iptables -A PREROUTING -t nat -p udp -i ETH01 --dport 60000:65000 -j DNAT --to-destination 192.168.1.200:60000-65000

de nada Smile

---

In lavorazione lo script per il multiport con le ',' anche Wink
Ho trovato una buona soluzione, sto vedendo come gestirla!


appena provato, perfetto! grazie ancora.
Top
Profilo Invia messaggio privato
ufoonline



Registrato: 03/07/08 22:16
Messaggi: 261

MessaggioInviato: Ven Dic 12, 2008 11:12 pm    Oggetto: Rispondi citando

Ciao Fulvio,

Patch finita, completa di JS.. penso è solo da testare e se funziona come sembra che funzioni... da implementare, se vuoi, nella prossima versione di ZS.

Limitazioni:
Local & Remote port devono avere uguale "grandezza", ovvero.. se specifico 3 porte divise dalla "virgola", ne devo specificare sempre 3 divise dalla virgola sul Remote Port.

Utilizzo:
Port = A,B,C-F,G,.....

Es pratico:
Nat di 22,23,80-81,8080,8081 verso 192.168.1.2

Protocol = TCP
Local Port = 22,23,80-81,8080,8081
Remote Port = 22,23,80-81,8080,8081
Remote IP = 192.168.1.2

--------------------------------------------------------------------------

File diff:
Codice:
diff -urNp /root/kerbynet.cgi/scripts/router_delpat /root/kerbynet.cgi/scripts/router_delpat
--- /root/kerbynet.cgi/scripts/router_delpat   2008-10-11 14:26:38.000000000 +0200
+++ /root/kerbynet.cgi/scripts/router_delpat   2008-12-12 22:17:40.000000000 +0100
@@ -25,5 +25,33 @@ else
 fi
 cd ..
 #iptables -t nat -D SNATVS $DST -p $PROTOCOL --dport $REMOTEPORT -j MASQUERADE
-iptables -t nat -D PREROUTING $INT $VIP -p $PROTOCOL --dport $LOCALPORT -j DNAT --to $REMOTEIP:$REMOTEPORT
+###################################################################
+# Multiport Router PAT patch v0.2-r12.12.08 for ZeroShell v1.0b11 #
+# by Massimiliano Cianelli <ufoonline at ufoonline dot org>       #
+###################################################################
+if echo $LOCALPORT | grep -q "-"; then
+ LOCALPORT=`echo $LOCALPORT | sed -e 's#-#:#g'`
+fi
+
+if echo $LOCALPORT | grep -q ","; then
+ i=0
+ for f in `echo $LOCALPORT | sed -e 's#,#\n#g' `; do
+  LOCALPORT[$i]=$f
+  let i=$i+1
+ done
+ im=$i
+ i=0
+ for f in `echo $REMOTEPORT | sed -e 's#,#\n#g' `; do
+  REMOTEPORT[$i]=$f
+  let i=$i+1
+ done
+ i=0
+ while [ $i -lt $im ]; do
+  iptables -t nat -D PREROUTING $INT $VIP -p $PROTOCOL --dport ${LOCALPORT[$i]} -j DNAT --to $REMOTEIP:${REMOTEPORT[$i]}
+  let i=$i+1
+ done
+else
+ iptables -t nat -D PREROUTING $INT $VIP -p $PROTOCOL --dport $LOCALPORT -j DNAT --to $REMOTEIP:$REMOTEPORT
+fi
+###################################################################
 rm -rf "$CONFIG"
diff -urNp /root/kerbynet.cgi/template/router_pat /root/kerbynet.cgi/template/router_pat
--- /root/kerbynet.cgi/template/router_pat      2008-10-11 14:26:38.000000000 +0200
+++ /root/kerbynet.cgi/template/router_pat      2008-12-12 22:16:04.000000000 +0100
@@ -25,6 +25,46 @@ function isValidIPRange(Range) {
   alert("The remote IP address is not valid.");
   return false;
 }
+
+function isMultiPort(Range) {
+ MPORT=Range.split(",");
+  if (MPORT.length==1) { if (!isValidPortRange(Range)) return false; }
+  else { for (i=0; i<MPORT.length; i++) if (!isValidPortRange(MPORT[i])) return false; }
+
+  return true;
+}
+
+function CountNrPort(LOCAL,REMOTE) {
+ LOCAL=LOCAL.split(",");
+ REMOTE=REMOTE.split(",");
+ if (LOCAL.length < REMOTE.length) { alert("Local port are less then Remote port."); return false; }
+ if (LOCAL.length > REMOTE.length) { alert("Remote port are less then Local port."); return false; }
+ return true;
+}
+
+function isValidPortRange(Range) {
+  if (isValidPort(Range)) return true;
+  if ((p=Range.indexOf('-'))!=-1) {
+    PORT1=Range.substr(0,p);
+    PORT2=Range.substr(p+1);
+    if (!isValidPort(PORT1)) {
+      alert("The first PORT number of the range "+Range+" is not valid.");
+      return false;
+    }                                             
+    if (!isValidPort(PORT2)) {
+      alert("The second PORT number of the range "+Range+" is not valid.");
+      return false;
+    }
+    if (PORT1>=PORT2) {
+        alert("The second PORT number of the range must be greater than the first one");
+        return false;
+    }                           
+    return true;
+  }
+  alert("The Port number must be in the range 0-65535.");
+  return false;
+}
+
 function add() {
   X=document.data;
   X.RemoteIP.value=X.RemoteIP.value.replace(/[ ]+/g,"");
@@ -36,8 +76,7 @@ function add() {
      X.VirtualIP.focus();
      return false;
   }
-  if (!isValidPort(X.LocalPort.value)) {
-      alert("Local Port must be in the range 0-65535");
+  if (!isMultiPort(X.LocalPort.value)) {
       X.LocalPort.select();
       X.LocalPort.focus();
       return false;
@@ -47,12 +86,13 @@ function add() {
       X.RemoteIP.focus();
       return false;
   }
-  if (!isValidPort(X.RemotePort.value)) {
-      alert("Remote Port must be in the range 0-65535");
+  if (!isMultiPort(X.RemotePort.value)) {
       X.RemotePort.select();
       X.RemotePort.focus();
       return false;
   }
+  if (!CountNrPort(X.LocalPort.value,X.RemotePort.value)) return false;

   X.Action.value="PatAdd";
   X.submit();
 }
diff -urNp /root/kerbynet.cgi/scripts/router_patconfig /root/kerbynet.cgi/scripts/router_patconfig
--- /root/kerbynet.cgi/scripts/router_patconfig        2008-10-11 14:26:38.000000000 +0200
+++ /root/kerbynet.cgi/scripts/router_patconfig        2008-12-12 22:17:46.000000000 +0100
@@ -25,5 +25,32 @@ fi
 #if ! iptables -t nat -A SNATVS $DST -p $PROTOCOL --dport $REMOTEPORT -j MASQUERADE ; then
 #  exit 2
 #fi
-iptables -t nat -A PREROUTING $INT $VIP -p $PROTOCOL --dport $LOCALPORT -j DNAT --to $REMOTEIP:$REMOTEPORT
+###################################################################
+# Multiport Router PAT patch v0.2-r12.12.08 for ZeroShell v1.0b11 #
+# by Massimiliano Cianelli <ufoonline at ufoonline dot org>       #
+###################################################################
+if echo $LOCALPORT | grep -q "-"; then
+ LOCALPORT=`echo $LOCALPORT | sed -e 's#-#:#g'`
+fi
 
+if echo $LOCALPORT | grep -q ","; then
+ i=0
+ for f in `echo $LOCALPORT | sed -e 's#,#\n#g' `; do
+  LOCALPORT[$i]=$f
+  let i=$i+1
+ done
+ im=$i
+ i=0
+ for f in `echo $REMOTEPORT | sed -e 's#,#\n#g' `; do
+  REMOTEPORT[$i]=$f
+  let i=$i+1
+ done
+ i=0
+ while [ $i -lt $im ]; do
+  iptables -t nat -A PREROUTING $INT $VIP -p $PROTOCOL --dport ${LOCALPORT[$i]} -j DNAT --to $REMOTEIP:${REMOTEPORT[$i]}
+  let i=$i+1
+ done
+else
+ iptables -t nat -A PREROUTING $INT $VIP -p $PROTOCOL --dport $LOCALPORT -j DNAT --to $REMOTEIP:$REMOTEPORT
+fi
+###################################################################


* Edit: Mi ero dimenticato di togliere gli echo Smile


L'ultima modifica di ufoonline il Ven Dic 12, 2008 11:31 pm, modificato 2 volte
Top
Profilo Invia messaggio privato
fulvio
Site Admin


Registrato: 01/11/06 17:45
Messaggi: 1558

MessaggioInviato: Ven Dic 12, 2008 11:20 pm    Oggetto: Rispondi citando

Non l'ho testata, ma sono sicuro che hai fatto un buon lavoro. Ora prendo nota cosi' la inserisco nella prossima release.

Ciao
Fulvio
Top
Profilo Invia messaggio privato
ufoonline



Registrato: 03/07/08 22:16
Messaggi: 261

MessaggioInviato: Sab Dic 13, 2008 12:19 am    Oggetto: Rispondi citando

fulvio ha scritto:
Non l'ho testata, ma sono sicuro che hai fatto un buon lavoro. Ora prendo nota cosi' la inserisco nella prossima release.

Ciao
Fulvio

Lo spero anche io di aver fatto un buon lavoro Smile

Se sei daccordo.. darei le informazioni per installarla sul proprio ZSb11 e così testarla pure. (se non sei daccordo.. editami il post Razz, ma non penso!).

Così se esce fuori qualche bug, lo sistemo prima dell'uscita della b12.

----
Scaricare la patch con wget da quì in /Database.

Nello script "Pre Boot" inserire:
Codice:
patch -p0 < /Database/ZS-1.0b11-multiportv02.diff


Date un bel reboot .. etvoilà, ad ogni avvio, i file verranno patchati in automatico.
---
Se ci sono problemi, postate pure Smile

Ciao!
Top
Profilo Invia messaggio privato
Alberto-AlBlog



Registrato: 03/12/08 22:10
Messaggi: 12

MessaggioInviato: Sab Dic 13, 2008 9:33 pm    Oggetto: Rispondi citando

ufoonline ha scritto:
informazioni per installarla sul proprio ZSb11 e così testarla pure.


Ho capito bene che se installo questa pach poi posso inserire dei range invece che delle singole porte nei virtual server?

Una volta impostato un range lo vedrò sotto nell'elenco così come ora vedo le singole porte?

Quando poi Fulvio lo inserirà nella prossima release basterà toglierlo dallo startup pre boot?
Top
Profilo Invia messaggio privato Invia e-mail
ufoonline



Registrato: 03/07/08 22:16
Messaggi: 261

MessaggioInviato: Dom Dic 14, 2008 12:50 am    Oggetto: Rispondi citando

Ciao,

Sposto la discussione in un thread dedicato:
http://www.zeroshell.net/forum/viewtopic.php?p=4728#4728

Dove ho inserito in "Domande & Risposte" le domande che mi hai posto!
Top
Profilo Invia messaggio privato
Mostra prima i messaggi di:   
Nuovo argomento   Rispondi    Indice del forum -> ZeroShell Tutti i fusi orari sono GMT + 1 ora
Pagina 1 di 1

 
Vai a:  
Non puoi inserire nuovi argomenti
Non puoi rispondere a nessun argomento
Non puoi modificare i tuoi messaggi
Non puoi cancellare i tuoi messaggi
Non puoi votare nei sondaggi


Powered by phpBB © 2001, 2005 phpBB Group
phpbb.it