Windows

pfSense – Forzar servidor dns en la LAN

Captura de pantalla 2

Para ciertos procedimientos, como el ForceSafeSearchGoogle , se necesita que el servidor dns
de la LAN sea unicamente el propio pfSense.

Normalmente vía dhcp server se distribuye el servidor dns a los clientes de la LAN.
Pero siempre cabe la posibilidad de que algun cliente tenga una configuración tcp/ip
estática y se asigne otro servidor dns (como por ejemplo, el de google: 8.8.8.8, etc)

Una forma de evitar que nadie en la LAN use otro servidor dns excepto el propio pfSense,es crear una regla NAT port forward, tal que:

Toda petición dns (al puerto 53, ya sea con protocolo tcp o udp) desde la LAN a cualquier dirección, redirigirla a la ip LAN del pfSense al puerto dns (53)

Esto en la sintaxis del cortafuegos pf en FreeBSD, para una ip lan del pfSense: 10.168.0.254

#…. /tmp/rules.debug

# NAT Inbound Redirects
rdr on em1 proto { tcp udp } from 10.168.0.0/24 to any port 53 -> 10.168.0.254
no nat on em1 proto tcp from (em1) to 10.168.0.0/24
nat on em1 proto tcp from 10.168.0.0/24 to 10.168.0.254 port 53 -> (em1)

#….

# User-defined rules follow

anchor “userrules/*”

#….

pass  in  quick  on $LAN  proto { tcp udp }  from 10.168.0.0/24 to 10.168.0.254 port 53 tracker 1470673362 keep state  label “USER_RULE: NAT rdr-to dns”

Pero como pfSense es orientado a GUI, nada mejor que hacerlo vía GUI. Desde el menú :

Firewall > NAT >  Port Forward. Y creamos la regla:

Captura de pantalla 2

.

Captura de pantalla 1

Nota: como curiosidad, con esta regla nat port forward ya implementada, si se navega desde un firefox en un windows con  servidor dns 8.8.8.8, se navega ok, pero el IE no (al menos en el XPSP3).
Y si se hace un ping a un dominio, este resuelve el dominio vía la ip lan del pfsense,
pero si se usa la utilidad nslookup no resuelve, ya que intentará usar el servidor dns 8.8.8.8

Captura de pantalla 3

Y voila 🙂

(Visited 851 times, 3 visits today)

PowerShell Script – Envio de mensajes vía icmp y recepción en pfSense

referencia: http://www.javcasta.com/blog/powershell-script-envio-de-mensajes-via-ping/

Rescato de un viejo post mio, donde me encantó descubrir como: Enviar mensajes desde un Win con script powershell, en el buffer del ping (icmp echo request) a otra máquina, un pfSense en este caso.

send-icmp-msg-1

Y para leerlo la maquina receptora, el pfSense tendrá que tener un sniffer escuchando.:

tcpdump -A -v icmp

El código del script icmp-send-msg.ps1

######################################################
#  Envio de mensajes via icmp echo request (ping)    #
######################################################
# By Javier Castañon  https://jasvcasta.com/ - 2.013 #
######################################################
 
# ref http://msdn.microsoft.com/es-es/library/system.net.networkinformation.pingreply.aspx
[void] [System.Reflection.Assembly]::LoadWithPartialName("System.Net.NetworkInformation")
$ping = New-Object System.Net.NetworkInformation.Ping
 
$datos = "Hola Mundo.
 En un lugar de la Mancha de cuyo
 nombre no quiero acordarme. Vivia
 un tal hidalgo ..."
 
$buffer = [System.Text.Encoding]::ASCII.GetBytes($datos)
 
$destino = "10.10.1.254"
 
$pingreply = $ping.send($destino, 1000, $buffer)
 
if ($pingreply.Status -eq "Success") {
    Write-Host "resultado: OK"
} else { Write-Host "resultado: NO OK - " $pingreply.Status }
 
Write-Host "Direccion: " $pingreply.Address
Write-Host "Buffer: " $pingreply.Buffer
Write-Host "Buffer length: " $pingreply.Buffer.Length
Write-Host "ttl: "$pingreply.RoundtripTime
 
# para escuchar en pfSense: tcpdump -A -v icmp
pause

Y voila 🙂

 

(Visited 246 times, 1 visits today)

App distribuida – SSH – Tunel VPN – Web Server – Firewall pfSense.

app-distribuida-1

He implementado una manera de tener una App distribuida. Me explico.

El usuario u operador desde un pc o host bajo win, con una app que abre una consola o shell con cliente ssh vía tunel vpn a un firewall pfSense.

Y la app ejecuta un curl (con autenticación en el servidor web) para que el firewall pueda bajarse un script php del servidor web y redirigirlo a una carpeta del firewall.

curl –silent ‘http://www.javcasta.com/pfsentinel/getPlatform.php?user=operador&pass=***********’ > /tmp/getPlatform.php && cat /tmp/getPlatform.php

Y el firewall se baja el script php a /tmp/

Luego la app, ejecuta el script cli php

php -q /tmp/getPlatform.php

Y la app del operadopr obtiene la salida de ese script.

Lo del tunel VPN no es una condición necesaria, es más una recomendación de seguridad (no administrar un pfSense dede fuera de la LAN o DMZ, es decir desde la WAN o Inet sin tunel VPN).

Y voila 🙂


De lado del servidor web:

getPlatform.php

codigo p h p
/*

getPlatform.php

by Javier Castañón - PIyMenta - 2016
https://javcasta.com/

*/

require("/uncamino/unfichero.inc");

$user = $_GET['user'];
$pass = $_GET['pass'];

$validated = (in_array($user, $valid_users)) && ($pass == $valid_passwords[$user]);
 
if (!$validated) {
  header('HTTP/1.0 401 Unauthorized');
  die ("Not authorized");
} else {
 
// If arrives here, is a valid user.
$arquitectura = '$arquitectura';
$plataforma = '$plataforma';
$laplataforma = '$laplataforma';
$salida = '$salida';

$output = signo menor signo menor signo menor E O F
codigo php
$plataforma = fgetPlatform();
echo $plataforma;
function fgetPlatform() {
  $arquitectura = '';
  $plataforma = shell_exec("uname -a");
  if (strpos($plataforma, "RELENG_2_3") !== false) {
    $laplataforma = "pfSense 2.3";
  } else {
    $laplataforma = "pfSense 2.x.x";
    //falta implementar, un CASE con todas las opciones
  }
  if (strpos($plataforma, "amd64") !== false) {
    $arquitectura = "amd64";
  } else {
    $arquitectura = "x86";
  }
  $salida = $laplataforma." ".$arquitectura;
  return $salida;
  
}
fin codigo php
E O F ;
echo $output;
}

La orden o comando con el curl:

curl --silent 'http://www.javcasta.com/pfsentinel/getPlatform.php ? user=operador&pass=***********' > /tmp/getPlatform.php && cat /tmp/getPlatform.php

El script php que obtiene:

<?php

$plataforma = fgetPlatform();
echo $plataforma;
function fgetPlatform() {
$arquitectura = ”;
$plataforma = shell_exec(“uname -a”);
if (strpos($plataforma, “RELENG_2_3”) !== false) {
$laplataforma = “pfSense 2.3”;
} else {
$laplataforma = “pfSense 2.x.x”;
//falta implementar, un CASE con todas las opciones
}
if (strpos($plataforma, “amd64”) !== false) {
$arquitectura = “amd64”;
} else {
$arquitectura = “x86″;
}
$salida = $laplataforma.” “.$arquitectura;
return $salida;

}

?>

Nota: sustituir codigo p h p por < ?php y ? > y signo menor por <  y E O F por EOF, etc… cosas del wordpress y sus plugings que no me parsean ok…  😉

.

(Visited 146 times, 1 visits today)

C# .Net – ConsoleGUI VorumServer

consoleGUI

Como estoy desarrollando una app para pfSense 2.3 donde se necesitan correr scripts php vía cli. Me he creado mi propia consola con C# (.Net) para depurar errores de los scripts cli php.

Como cliente ssh win, uso plink de los chic@s de putty. Y he desarrollado la consola con el IDE para .Net SharpDevelop.

consoleGUI2

Para quien le interese el código en C#.

 /*
  * Created by SharpDevelop.
  * User: Javcasta
  * Date: 28/04/2016
  * Time: 08:07
  * 
  * https://javcasta.com/ - PIyMenta
  */
 using System;
 using System.Diagnostics;
 using System.Windows.Forms;
 
 namespace getMTU
 {
     /// <summary>
     /// Description of MainForm.
     /// </summary>
     public partial class MainForm : Form
     {
         public MainForm()
         {
             //
             // The InitializeComponent() call is required for Windows Forms designer support.
             //
             InitializeComponent();
             
             //
             // TODO: Add constructor code after the InitializeComponent() call.
             //
         
         }
         
             
         void Button1Click(object sender, EventArgs e)
         {
             //...
             richTextBox1.Text = "console>";
             string comando = textBox4.Text;
             Cursor.Current = Cursors.WaitCursor;
             String feedback = clienteSSH(comando);
             
             richTextBox1.Text += comando + "\r\n" + feedback;
             //...
             
         }
         
         //clienteSSH
         public string clienteSSH(string vcomando) {
         string cadena = " -pw " + textBox3.Text + " " + textBox1.Text + @"@" + textBox2.Text + " " + '"' + vcomando +'"';
         ProcessStartInfo psi = new ProcessStartInfo()
         {
             
             FileName = "plink.exe",
             Arguments = cadena,
             RedirectStandardError = true,
             RedirectStandardOutput = true,
             RedirectStandardInput = true,
             UseShellExecute = false,
             //CreateNoWindow = false
             CreateNoWindow = true
         };
 
         Process p = Process.Start(psi);        
         System.IO.StreamReader output = p.StandardOutput;
         p.WaitForExit(5000);
         String strw = output.ReadToEnd();
         Cursor.Current = Cursors.Default;
         return strw.ToString();
     }
 
         //end clienteSSH
         
         //copy,cut, paste richtextbox1
         //ref http://stackoverflow.com/questions/18966407/enable-copy-cut-past-window-in-a-rich-text-box
         private void richTextBox1_MouseUp(object sender, MouseEventArgs e)
         {
             if (e.Button == System.Windows.Forms.MouseButtons.Right)
             {   //click event
                 //MessageBox.Show("you got it!");
                 ContextMenu contextMenu = new System.Windows.Forms.ContextMenu();
                 MenuItem menuItem = new MenuItem("Cut");
                 menuItem.Click += new EventHandler(CutAction);
                 contextMenu.MenuItems.Add(menuItem);
                 menuItem = new MenuItem("Copy");
                 menuItem.Click += new EventHandler(CopyAction);
                 contextMenu.MenuItems.Add(menuItem);
                 menuItem = new MenuItem("Paste");
                 menuItem.Click += new EventHandler(PasteAction);
                 contextMenu.MenuItems.Add(menuItem);
 
                 richTextBox1.ContextMenu = contextMenu;
             }
         }
         void CutAction(object sender, EventArgs e)
         {
             richTextBox1.Cut();
         }
 
         void CopyAction(object sender, EventArgs e)
         {
             Clipboard.SetText(richTextBox1.SelectedText);
         }
 
         void PasteAction(object sender, EventArgs e)
         {
             if (Clipboard.ContainsText())
             {
                 richTextBox1.Text
                     += Clipboard.GetText(TextDataFormat.Text).ToString();
             }
         }
         void Button2Click(object sender, EventArgs e)
         {
             //
             textBox4.Text = "php -q /usr/local/www/vorumserver/getMTUv2.php operador vorumserver2";
             Button1Click(null,null);
         }  
         //end coppy, cut, paste
     }
 }

Y voila 🙂

(Visited 113 times, 1 visits today)

pfSense develop – Clonar repositorio pfSense-ports de Git.

referencia:

git-cloning-pfsense

Si vas a desarrollar con pfSense, tendrás que clonar su repositorio de Github.com

Desde una shell con git instalado:

 git clone usuario-de-github@github.com:pfsense/FreeBSD-ports.git pfSense-ports

Debes tener creada una ssh key en tu usuario de github para conectar sin problemás vía ssh (tcp22)

 git status
# ...
 git checkout -f HEAD

Tarda un rato, se baja casi 1… GiB y luego procesa datos…

Vamos al repositorio

 cd pfSense-ports/

Y observamos su estructura

ls -l

ls dns/unbound

git-cloning-pfsense2

Y voila 🙂

(Visited 277 times, 1 visits today)

Como contribuir al desarrollo de pfSense 2.3

Referencia:

Si eres Gold member de pfSense, puedes contribuir a su desarrollo.
Pero debes 1º aceptar la “Contributor License Agreement for Developers” (ICLA)

  1. Aceptación de licencia de contribuidor para desarrolladores
    Contributor License Agreement for Developers
  2. Como simple desarrollador individual:
    If signing as an individual: https://portal.pfsense.org/members/signup/ICLA

 

ICLA-1

Your subscription has been successfully processed.
Order reference: XXXX

* (Como desarrollador corporativo
If signing on behalf of a corporation: https://portal.pfsense.org/members/signup/CCLA )

Luego navegar a https://portal.pfsense.org/members/signup/LA

ICLA-2

y ejecutar la aceptación de licencia

Your subscription has been successfully processed.
Order reference: YYYY


Aceptación de licencia ESF  v1.2: Continue Reading

(Visited 111 times, 1 visits today)

pfSense 2.3 – Monitorizar WPAD con ngnix

wpad-mon-1

wpad-mon-0

 

Si has seguido el procedimiento:

Una forma de habilitar los logs de la instancia de ngnix que sirve el wpad.dat/proxy.pac/wpad.da para Monitorizar WPAD o accesos a wpad.dat/wpad.da/proxy.pac
Es:

  • Crear una carpeta llamada ngnix en /var/log/

Y en ese directorio crear un fichero llamado access.log

  • desde shell como root:
    • mkdir /var/log/ngnix
    • echo > /var/log/ngnix/access.log
  • Paramos ngnix
    • /usr/local/etc/rc.d/nginx onestop
  • Editar
    /usr/local/etc/ngnix.conf

Y en su sección http, habilitar log_format main
Y en su sección server, indicar donde tiene el log

<blockquote>#...
<strong>http</strong> {
include       mime.types;
default_type  application/octet-stream;

<span style="color: #ff0000;"><strong>log_format  main</strong></span>  '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';

#access_log  logs/access.log  main;

sendfile        on;
#tcp_nopush     on;

#keepalive_timeout  0;
keepalive_timeout  65;

#gzip  on;

#listen 80;
#listen 443 default_server ssl;

server {
<span style="color: #ff0000;">listen      10.168.0.254:80;</span>
<span style="color: #ff0000;">server_name  wpad.localdomain.local;</span>

#charset koi8-r;
<span style="color: #ff0000;"><strong>access_log  /var/log/ngnix/access.log  main;</strong></span>
#access_log  logs/host.access.log  main;
#....</blockquote>
  • Salvamos fichero
  • Lanzamos ngninx:
    • /usr/local/etc/rc.d/nginx onestart

Desde shell podemos monitorizar los accesos a wpad.dat/proxy.pac/wpa.da

tail -f "/var/log/ngnix/access.log" | grep -E "wpad.dat|proxy.pac|wpad.da"
[2.3-RELEASE][root@pfSense3.localdomain.local]/root: tail -f "/var/log/ngnix/access.log" | grep -E "wpad.dat|proxy.pac|wpad.da"
10.168.0.10 - - [20/Apr/2016:11:23:33 +0000] "GET /wpad.dat HTTP/1.1" 200 1215 "-" "Mozilla/4.0 (Windows NT 6.1; Win64; x64; rv:44.0) Gecko/2000000 Firefox/44.0" "-"
10.168.0.12 - - [20/Apr/2016:11:29:00 +0000] "GET /wpad.dat HTTP/1.1" 200 1215 "-" "Dalvik/2.0.0 (Linux; U; Android 4.1.1; SM-T220 Build/NOY37X)" "-"
10.168.0.12 - - [20/Apr/2016:11:29:01 +0000] "GET /wpad.dat HTTP/1.1" 200 1215 "-" "Dalvik/2.0.0 (Linux; U; Android 4.1.1; SM-T2200 Build/NOY37X)" "-"
10.168.0.12 - - [20/Apr/2016:11:29:41 +0000] "GET /wpad.dat HTTP/1.1" 200 1215 "-" "Dalvik/2.0.0 (Linux; U; Android 4.1.1; SM-T2200 Build/NOY37X)" "-"
10.168.0.11 - - [20/Apr/2016:11:31:54 +0000] "GET /wpad.dat HTTP/1.1" 200 1215 "-" "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:44.0) Gecko/2000000 Firefox/44.0" "-"
10.168.0.11 - - [20/Apr/2016:11:37:51 +0000] "GET /proxy.pac HTTP/1.1" 304 0 "-" "WinHttp-Autoproxy-Service/5.1" "-"

Si deseas verlo desde navegador. Crea un fichero wpad-mon.php en “/usr/local/www/wpad-mon.php”

tal que contenga:

<?php
/*
wpad-mon.php
by Javier Castañón - https://javcasta.com/ - PIyMenta 2016
VorumServer 2.0 SecureLAN

*/
echo "<h2>Monitor WPAD</h2><br />";
$ejecutar = "tail -50 /var/log/ngnix/access.log | grep -E 'wpad.dat|wpad.da|proxy.pac'";
$salida2 = shell_exec($ejecutar);
"<hr />";
echo "Ultimos 50 accesos a wpad.dat / wpad.da / proxy.pac"."<br>";
echo "==================================================="."<br>";
echo "<pre>$salida2</pre>";
echo "<hr /><br>";
echo "<a href='https://javcasta.com/' target='_blank'>By Javier Casta&ntilde;on - javcasta - PIyMenta 2016</a>";
?>

Y lo abres desde navegador: https://wpad.localdomain.local/wpad-mon.php

wpad-mon-0

O si tienes un widget personal (como estoy implementandolo en VorumServer 2 SecureLAN, aprovecho para incluirlo)
puedes incluir un link a https://wpad.localdomain.local/wpad-mon.php y desde el dashboard lo tienes disponible

wpad-mon-1

ref Como crear widgets >> https://doc.pfsense.org/index.php/Creating_widgets

Y voila 🙂

(Visited 401 times, 1 visits today)

Bash Script – getMTUv2.sh – Calcular MTU en pfSense – Versión 2

diag-mtu3

getMTUv2.sh

getMTUv2.sh bashscript for get max MTU in wan interfaz for pfSense

Como he visto que la gente tiene dudas de concepto sobre el MTU, he revisado el script getMTU.sh a su versión 2, para que se haga el cálculo correcto.

El MTU trabaja en la capa 2 del modelo OSI (capa de acceso al medio), y depende del medio (Ethernet, Frame relay, rdsi, etc) puede coincidir o no un MTU para un medio u otro, resumiendo, el MTU se restringe al dominio de broadcast, es decir para el medio de transmisión que queda definido entre 2 dispositivos de capa 3 (2 routers y/o firewalls).

Si la interfaz WAN del pfSense está detras de un router que nos da salida a Inet, con un medio ethernet, la IPv4 de esa interfaz al 99% va a ser una IPv4 de una red privada, y el MTU se deberá calcular contra su GW (la IP del router que nos da salida Inet)

Si la Interfaz WAN del pfSense  tiene una IPv4 pública (ya sea por que hemos puesto en modo bridge al router de salida a Inet, siendo este una interfaz más del pfSense, o que la interfaz WAN del pfSense se conecta directamente a Inet vía PPPoE u otro protocolo/medio), la MTU se debe calcular contra un host de Inet, p.e www.google.com.

Y tras la teoria al grano:

getMTUv2.sh

 

#!/bin/bash
############################################################################
# ref https://idyllictux.wordpress.com/2009/06/19/script-find-maximum-mtu/ #
#                                GET MTU v2                                #
#                       BASH SCRIPT FOR PFSENSE 2.3                        #
#             BY JAVIER CASTAÑÓN - 2016 - HTTPS://JAVCASTA.COM             #
############################################################################
# uso: alojar getMTUv2.sh en una carpeta, por ejemplo /tmp o /scripts      #
# ejecutarlo desde shell:# sh /tmp/getMTUv2.sh o sh /scripts/getMTUv2.sh   #
# Script válido para una sola interfaz wan,denominada wan,con una sola ipv4#
############################################################################
PKT_SIZE=1476
HOSTNAME="www.google.com"
# Averiguamos la interfaz WAN
#ref http://unix.stackexchange.com/questions/83385/parse-xml-to-get-node-value-in-bash-script
#WANINTERFACE=em1
WANINTERFACE="$(echo "cat /pfsense/interfaces/wan/if" | xmllint --nocdata --shell /cf/conf/config.xml | sed '1d;$d' | sed 's/<if>//' | sed 's/<\/if>//')"
# Averiguamos la ipv4 de la interfaz WAN
#WANIP=192.168.1.254
#WANIP="$(ifconfig em1 | grep "inet " | cut -d " " -f 2)"
WANIP="$(ifconfig $WANINTERFACE | grep "inet " | cut -d " " -f 2)"
# IF WANIP ES PRIVADA EL MTU SE CALCULA CONTRA EL GW
# IF WANIP NO ES PRIVADA, ES PUBLICA, EL MTU SE CALCULA CONTRA $HOSTNAME (WWW.GOOGLE.COM)
# grep -E '^(192\.168|10\.|172\.1[6789]\.|172\.2[0-9]\.|172\.3[01]\.)'
PRIVADA=$(echo "$WANIP" | grep -c -E '^(192\.168|10\.|172\.1[6789]\.|172\.2[0-9]\.|172\.3[01]\.)')
if [ $PRIVADA -eq 1 ]; then
# Averiguamos el GW de la Interfaz WAN vía traceroute con el 1er salto
printf "Averiguando gateway de interface wan...:"
traceroute -m 1 $HOSTNAME | grep -v "$HOSTNAME" | awk '{print $2}' > /tmp/gw.tmp
#ELGW=192.168.1.1
ELGW=$(cat /tmp/gw.tmp)
printf "Parametros: \n"
printf "interface wan: $WANINTERFACE \n"
printf "wan ipv4: $WANIP \n"
printf "wan gateway: $ELGW \n"
####
#HACEMOS ICMP ECHO REQUEST SOBRE EL GW WAN > Message too long"
#ping -S 192.168.1.254 -c 1 -D -s 1474 192.168.1.1 > /tmp/getmtu.tmp 
ping -S $WANIP -c 1 -D -s $PKT_SIZE $ELGW > /tmp/getmtu.tmp
CONTINUAR=$(cat /tmp/getmtu.tmp | grep -c "100.0% packet loss") 
printf "Intentando con MTU $((PKT_SIZE + 28)) ICMP ECHO REQUEST SIN FRAGMENTAR a $ELGW \n"
while [ $CONTINUAR -eq 1 ]; do
 PKT_SIZE=$((PKT_SIZE - 2))
 ping -S $WANIP -c 1 -D -s $PKT_SIZE $ELGW > /tmp/getmtu.tmp
 printf "Intentando con MTU $((PKT_SIZE + 28)) ICMP ECHO REQUEST SIN FRAGMENTAR a $ELGW \n"
 CONTINUAR=$(cat /tmp/getmtu.tmp | grep -c "100.0% packet loss")
 #count=$((`ping -S $WANIP -c 1 -D -s $PKT_SIZE $ELGW | grep -c "frag needed"`))
done
printf "MTU MAXIMO ES: [ $((PKT_SIZE + 28)) ] \n"
fi
if [ $PRIVADA -eq 0 ]; then
printf "Parametros: \n"
printf "interface wan: $WANINTERFACE \n"
printf "wan ipv4: $WANIP \n"
count=`ping -S $WANIP -c 1 -D -s $PKT_SIZE $HOSTNAME | grep -c "frag needed"`
printf "Intentando con MTU $((PKT_SIZE + 28)) ICMP ECHO REQUEST SIN FRAGMENTAR a $HOSTNAME \n"
while [ $count -eq 1 ]; do
 PKT_SIZE=$((PKT_SIZE - 2))
 printf "Intentando con MTU $((PKT_SIZE + 28)) ICMP ECHO REQUEST SIN FRAGMENTAR a $HOSTNAME \n"
 count=$((`ping -S $WANIP -c 1 -D -s $PKT_SIZE $HOSTNAME | grep -c "frag needed"`))
done
printf "MTU MAXIMO ES: [ $((PKT_SIZE + 28)) ] \n"
fi

 

Outputs para una wan con ip privada o con una ip pública

Con WANIP privada:

[2.3-RELEASE][root@pfSense3.localdomain.local]/: sh /scripts/getMTUv2.sh
Averiguando gateway de interface wan...:traceroute to www.google.com (216.58.210.228), 1 hops max, 40 byte packets
Parametros:
interface wan: em1
wan ipv4: 192.168.1.254
wan gateway: 192.168.1.1
ping: sendto: Message too long
Intentando con MTU 1504 ICMP ECHO REQUEST SIN FRAGMENTAR a 192.168.1.1
ping: sendto: Message too long
Intentando con MTU 1502 ICMP ECHO REQUEST SIN FRAGMENTAR a 192.168.1.1
Intentando con MTU 1500 ICMP ECHO REQUEST SIN FRAGMENTAR a 192.168.1.1
MTU MAXIMO ES: [ 1500 ]

Con WANIP Pública:

[2.3-RELEASE][root@pfSense3.localdomain.local]/: sh /scripts/getMTUv2.sh
Parametros:
interface wan: em1
wan ipv4: 80.59.xxx.xxx
Intentando con MTU 1504 ICMP ECHO REQUEST SIN FRAGMENTAR a www.google.com
Intentando con MTU 1502 ICMP ECHO REQUEST SIN FRAGMENTAR a www.google.com
Intentando con MTU 1500 ICMP ECHO REQUEST SIN FRAGMENTAR a www.google.com
Intentando con MTU 1498 ICMP ECHO REQUEST SIN FRAGMENTAR a www.google.com
Intentando con MTU 1496 ICMP ECHO REQUEST SIN FRAGMENTAR a www.google.com
Intentando con MTU 1494 ICMP ECHO REQUEST SIN FRAGMENTAR a www.google.com
Intentando con MTU 1492 ICMP ECHO REQUEST SIN FRAGMENTAR a www.google.com
MTU MAXIMO ES: [ 1492 ]

 

 

Y voila 🙂

(Visited 121 times, 1 visits today)

pfSense 2.3 – Autenticación local con proxy Squid.

squid-autenticar-1

Para mi versión VorumSense 2 SecureLAN, estaba dudando si configurar un “captive portal”. He descartado la idea ya que si tengo instalado Squid como proxy y la navegación web pasa por el, es redundante tener un portal cautivo solo con el objeto de validar usuario:clave.

Si se desea un captive portal para proporcionar Vouchers (limitar tiempos de navegación al usuario y poder “facturarlos”), lo mejor es seguir esta estupenda y amigable de simples pasos, guía “friendly single step“:

Squid, en pfSense 2.3, admite autenticación:

  • local
  • ldap (contra un directorio activo)
  • radius
  • captive portal

Si no se dispone de un AD/DC en la red o un servidor free-radius, lo mejor y más simple es la autenticación local.

Vamos a Proxy Server: Local Users > Users.

Y definimos un,o unos usuarios . Con su nombre y su clave

squid-autenticar-3

 

Y en Proxy Server: Authentication > Authentication

squid-autenticar-2

Definimos el servidor, puerto , etc… y las subredes y/o hosts (por ejemplo, para un host 10.168.0.10/32) que no queramos que necesiten autenticación. Salvamos, aplicamos cambios. Y ya tenemos otro grado más de seguridad para navegar desde nuestra red a Inet

(Nota: Para los clientes dispositivos Android, según su versión, hay aplicaciones que no funcionarán con autenticación de proxy, como twitter, solo dispondrán de poder navegar vía browser: chrome, firefox, etc)

Y voila 🙂

(Visited 1.376 times, 3 visits today)