¿Qué es IRC?

¿Que es IRC?



El IRC es un protocolo de chat en tiempo real desarrollado en 1988 por Jarkko Oikarinen que permite entablar charlas entre usuarios que comparten una sala de determinada temática. Es el protocolo de comunicación de texto más antiguo que existe y aún hoy en día se sigue utilizando.

Seguir leyendo en NandOX.com

sábado, 29 de noviembre de 2014
Posted by xor

Globalchat ¿Plagiamos? ¡Bueno vale!

Globalchat, sí el sitio de chat, me ha hecho ver que han pasado casi 15 años y algunas malas costumbres no han sido erradicadas de la nube aún. Recuerdo por allá por el 2000 cuando se cansaron de plagiar el script para mIRC looksharp que tantas horas de trabajo dedicaba solamente para obtener como retribución el reconocimiento del mismo. Para muchos eso no importaba demasiado porque en unos minutos tomaban ese trabajo, le cambiaban los créditos y automáticamente obtenían "su" flamante script nuevo. Era lamentable la caradurez de algunos pero tan verídico como que la tierra da vueltas al sol.



Hoy parece que la historia no ha cambiado mucho y todavía hay gente con falta de creatividad para tomar algo de ventaja y ahorrarse la dedicación y tiempos que demandan la construcción de un sitio, un párrafo, una imagen, un programa o lo que fuera. Esta práctica existe en otros ambientes también y son de igual de despreciables.

Repasemos la definición de la palabra "plagiar" según la real academia española:

Plagiar.

1. tr. Copiar en lo sustancial obras ajenas, dándolas como propias.

(Fuente: Real academia Española)

Definición cortita y al pié.

Voy a hacer una aclaración primero que creo es sustancial cuando se habla de "copiar" y "atribuirlo como propio". Tanto yo como mis compañeros que hacemos NandOX no estamos en contra de tomar ideas de otros, sería ridículo, ya que sino nadie podría fabricar un automóvil porque otro ya lo hizo con anterioridad. Pero hay una diferencia importante entre tomar una idea, adaptarla y/o desarrollarla a tomar un trabajo ajeno y plagiarlo.

Nosotros admiramos la creatividad, razón por la cual no tomamos contenidos de otros sitios para incorporarlos al nuestro sin mensionar de donde fué tomado. No nos molesta en absoluto que alguien tome ideas del nuestro y las desarrollen ya que nosotros también tomamos ideas que ya fueron de otros, pero no robamos imágenes, ni hacemos copy/paste de los textos, ni alteramos códigos de programas ajenos para ofrecerlos como "propios".

No es la primera vez que encuentro textos e imágenes tomadas de nuestro sitio en otros lugares y si bien aún no les he dedicado unas líneas no significa que no lo haré si en algún momento se me antoja. Me parece lo más justo, si nadie me pide permiso para tomar, no tengo por qué pedir permiso para reclamar.

Expongamos algunas evidencias para sostener lo aquí expuesto.

Texto en el sitio Globalchat:


Texto en el sitio NandOX:


Para que perder el tiempo redactando algo si se puede hacer copy/paste de la competencia ¿no?

Veamos otro...

Texto en el sitio Globalchat:


Texto en el sitio NandOX:



Lo mismo que más arriba "tomémoslo de ahí, cambiale algunas cosas y sale con fritas" para que esforzarse.

Es indignante que por tan poco alguien se exponga de esa manera. Son un fraude.

Y como copiar los textos no fué suficiente, de paso tomémosle alguna que otra imágen también, total nadie lo notará:

Imágen en el sitio Globalchat:


Imágen en el sitio NandOX:



Esa imagen les gustó a muchos parece porque la he visto en varios sitios de chat ya, pero en el de ustedes desentona bastante, como que no encaja con el resto del diseño.

Muchos se preguntarán, o dirán: "Tanto lio por unos parráfos e imágenes"?

Para aquellos que no lo saben, existen sitios que catalogan sitios con textos copiados de otros (como por ejemplo copyscape.com), después esos sitios suministran los datos a otros sitios y buscadores (como por ejemplo Google) entonces esos sitios de búsquedas penalizan a aquellos sitios que contienen textos plagiados rebajándoles la reputación y hasta excluyéndolos de sus resultados, lo cual no siempre se aplica correctamente al verdadero plagiador y a veces le toca al inocente. Como ven, no es poca cosa invertir horas haciendo algo para que otro lo tome gratuitamente y después de regalo quedar tildado de hurto de contenido. Un simple párrafo puede resultar en algo bastante perjudicial.

Gracias por leer la nota.

Un saludo.



NandOX IRC Chat Network



viernes, 14 de noviembre de 2014
Posted by xor

Chat con Webcam para tu Sitio Web, Página Personal o Blog - Gratis

En el sitio de NandOX IRC Chat Network ofrecen la posibilidad de que puedas tener un webchat con audio y video (webcam) en tu sitio web, blog o página personal. El procedimiento es muy sencillo, solo hay que ir al siguiente enlace y seleccionar un nombre para el chat y las medidas que se quieran utilizar, luego pegar el código generado en el sitio.



Así es como se ve el webchat en funcionamiento:




¿Que características técnicas o requerimientos necesito?


Casi nada, el webchat funciona con Adobe Flash, es decir, requiere que el usuario cuente con el plugin instalado (actualmente todos los sistemas cuentan con el plugin pre-instalado). Si en algún caso puntual el webchat detecta la ausencia del plugin, automáticamente le indicará al usuario que debe instalarlo (proceso que demora solo unos segundos).

El webchat de looksharp NO requiere de Java para su funcionamiento. Adobe Flash cuenta con grandes ventajas para este tipo de aplicaciones ofreciendo una mayor performance, rapides, fluidez, portabilidad y escalabilidad.


Más información se ofrece en el sitio web:



lunes, 27 de octubre de 2014
Posted by xor

dot Emacs

GNU/Emacs es un procesador de textos potentísimo que fue creado por el mismísimo Richard Stallman en 1975 junto con sus colaboradores. Está disponible para prácticamente todas las plataformas: Windows, GNU/Linux, BSD, MacOSX, Solaris, etc.



Su potencia proviene a raiz de la capacidad de personalizarlo mediante Macros, de hecho de ahí proviene su nombre Editor MACroS. Principalmente fue un editor de modo texto (obviamente en ese año otra cosa no podía ser) pero actualmente existen "forks" del proyecto en donde lo han integrado con diferentes entornos gráficos como XEmacs.

Desde hace mucho tiempo es mi editor de preferencia, lo utilizo para simplemente configurar archivos como para desarrollar código de programación en diferentes lenguajes, me resulta de lo más cómodo y no lo cambiaría por ningún otro.

Existe una "rivalidad" entre GNU/Emacs vs Vi (o Vim), al igual que sucede con GNOME vs KDE. Mi opinión es que ambos son productos que se merecen respeto por la trayectoría que arrastran. En los últimos años he notado que GNU/Emacs ha dejado de ser el editor por defecto de muchas distribuciones en favor de Vim (algunas nano u otros editores más simples), supongo que tiene que ver con el tamaño de su paquete y la línea de aprendizaje entre ambos programas, quien adopta GNU/Emacs como su procesador de textos preferido tarda un poco más de tiempo en exprimirlo al máximo.

Si aún no le diste una oportunidad a GNU/Emacs y aún no has encontrado tu "editor ideal", te sugiero lo pruebes y les des una oportunidad, al principio por ahí es una patada en los ... pero te aseguro que cuando lo tenés bien afinado es de lo más productivo en cualquier ámbito.



Con GNU/Emacs "la magia" radica en un archivo llamado .emacs que está (o estará) en el directorio home de tu usuario que es un archivo de configuración (similar al .vim) que se autoejecutará en cada sesión que abrás (como un .bashrc). La sintáxis de este archivo puede no ser muy "familiar" dado que es una versión de lenguaje Lisp, pero existen varios sitios en internet en donde te ayudan a "entenderlo":


Yo por mi parte puedo colaborar adjuntando mi propio .emacs que es producto de varios años de modificaciones y ajustes que le fuí haciendo para ir cerrando necesidades que iban surgiendo. Mi .emacs siempre lo mantuve con comentarios (como se debe) pero en lenguaje Inglés. Espero aporte algo y que tu experiencia con GNU/Emacs sea positiva.

Nando's .emacs:


;; -------------------------------------------------------------------------
;; .emacs - Nando's dot emacs
;;
;; Hernando Furlan
;; http://www.nandox.com - http://about.nandox.com
;;
;; Must create these directories first:
;;
;; ~/.emacs.semanticdb
;; ~/.emacs.backups
;;
;; -------------------------------------------------------------------------

;; Uncomment to load installed dot emacs extensions ONLY if you're Gentoo user (I was a Gentoo user that's why)
;; (load "/usr/share/emacs/site-lisp/site-gentoo")

;; My full name
(setq user-full-name "Hernando Furlan")

;; My email
(setq user-mail-address "devnando at gmail dot com")

;; My website/s
(setq user-website "http://www.nandox.com - http://about.nandox.com")

;; Save place
(require 'saveplace)
(setq-default save-place t)

;; Indent should not insert tabs
(setq-default indent-tabs-mode nil)

;; Prevent semantic.cache into entire hard disk
(setq semanticdb-default-save-directory "~/.emacs.semanticdb")

;; Autosave
(setq auto-save-default t) ; Yes auto save good!
(setq auto-save-interval 100) ; Number of input chars between auto-saves
(setq auto-save-timeout 300) ; Number of seconds idle time before auto-save

;; Backups (This saved my life a bunch of times!)
(setq make-backup-files t)
(setq backup-by-copying t) ; Don't clobber symlinks
(setq backup-directory-alist '(("." . "~/.emacs.backups"))) ; Don't litter my fs tree
(setq delete-old-versions t) ; Clean up a little
(setq kept-new-versions 6) ; Keep 6 new
(setq kept-old-versions 2) ; Keep only 2 old
(setq version-control t) ; Use versioned backups

;; Filetypes & modes
(setq auto-mode-alist
(append '(("\\.C$" . c++-mode)
("\\.cc$" . c++-mode)
("\\.cpp$" . c++-mode)
("\\.cxx$" . c++-mode)
("\\.hxx$" . c++-mode)
("\\.hpp$" . c++-mode)
("\\.h$" . c++-mode)
("\\.hh$" . c++-mode)
("\\.idl$" . c++-mode)
("\\.ipp$" . c++-mode)
("\\.c$" . c-mode)
("\\.pl$" . perl-mode)
("\\.pm$" . perl-mode)
("\\.java$" . java-mode)
("\\.inc$" . php-mode)
("\\.php$" . php-mode)
("\\.txt$" . text-mode))
auto-mode-alist))

;; I like tabs to 4 chars :P
(setq default-tab-width 4)

;; Some edition values fine-tuning
(setq c-mode-common-hook
(function (lambda ()
(setq c-basic-offset 4)
(setq c-comment-only-line-offset 0)
(setq c-indent-level 4)
(setq c-brace-imaginary-offset 0)
(setq c-brace-offset 0)
(setq c-argdecl-indent 0)
(setq c-label-offset -2)
(setq c-continued-statement-offset 0)
(setq c-continued-brace-offset -4)
(setq c-tab-always-indent t)
(setq tab-width 4)
(line-number-mode 1)
(c-set-offset 'member-init-intro 2)
(c-set-offset 'substatement-open 0)
(c-set-offset 'case-label 2)
(c-set-offset 'access-label -2)
(c-set-offset 'label 2)
(c-set-offset 'statement-case-intro 2)
(c-set-offset 'brace-list-entry 0)
(c-set-offset 'knr-argdecl-intro 0)
))
)

;; Displays name of current function in modeline
(which-function-mode)

;; Make pgup/dn remember current line
(setq scroll-preserve-screen-position t)

;; Replace "yes or no" prompt with "y or n" prompt
(defun yes-or-no-p (arg)
"Allows letters 'y' or 'n' in response to prompts asking for either 'yes' or 'no'."
(y-or-n-p arg))

;; Don't wrap long lines
(set-default 'truncate-lines t)

;; Make searches case insensitive
(setq case-fold-search t)

;;(standard-display-european +1)
(set-input-mode (car (current-input-mode))
(nth 1 (current-input-mode))
0)

;; No sounds! visual beep for me please...
(setq visible-bell t)

;; Always end a file with a newline
(setq require-final-newline t)

;; No toolbar for X (if Xemacs of course!)
(tool-bar-mode . nil)

;; No scrollbar
;; (set-scroll-bar-mode nil)

; Hide menu bar
(menu-bar-mode -1)

;; Put column number into modeline
(column-number-mode 1)

;; Display clock on global modeline
(display-time)

;; Toggle some default configuration
(custom-set-variables
'(case-fold-search t)
'(current-language-environment "English")
'(global-font-lock-mode t nil (font-lock))
'(show-paren-mode t nil (paren))
'(transient-mark-mode t)
'(uniquify-buffer-name-style nil nil (uniquify))
)

;; Customize scheme
;(set-background-color "black") ; Uncomment to avoid transparent background and get a *nice* solid colour
(set-foreground-color "white")
(set-cursor-color "white")
(set-face-foreground 'region "black")
(set-face-background 'region "white")
(set-face-foreground 'modeline "white")
(set-face-background 'modeline "red")
(set-face-foreground 'isearch "white")
(set-face-background 'isearch "red")
(set-face-background 'isearch-lazy-highlight-face "white")
(set-face-background 'isearch-lazy-highlight-face "red")

(custom-set-faces
'(region ((t (:background "red"))))
'(font-lock-comment-face ((t (:foreground "red" :weight bold))))
'(font-lock-string-face ((t (:foreground "blue" :weight bold))))
'(font-lock-keyword-face ((t (:foreground "cyan" :weight bold))))
'(font-lock-variable-name-face ((t (:foreground "cyan"))))
'(font-lock-type-face ((t (:foreground "red" :weight bold))))
'(font-lock-function-name-face ((((class color)) (:foreground "blue" :weight bold))))
'(show-paren-match-face ((((class color)) (:foreground "white" :background "red"))))
'(font-lock-constant-face ((t (:foreground "blue" :inverse-video t))))
'(font-lock-reference-face ((t (:foreground "yellow"))))
'(font-lock-preprocessor-face ((t (:foreground "yellow"))))
'(font-lock-function-name-face ((((class color) (background light)) (:foreground "yellow"))))
'(font-lock-builtin-face ((((class color) (background light)) (:foreground "yellow"))))
)

;; Code macros
(global-unset-key "\C-z") ; Turn off this key (Go emacs to background by default)
(global-unset-key "\C-t") ; Remap this key (go-top by default)

;; Replac ordinary search keys by regexp search (if you don't known regexp no problem)
(global-set-key [(control s)] 'isearch-forward-regexp)
(global-set-key [(control meta s)] 'isearch-forward)
(global-set-key [(control r)] 'isearch-backward-regexp)
(global-set-key [(control meta r)] 'isearch-backward)

;; Insert date at this point
(global-set-key "\C-t\C-d" 'insert-date-at-this-point)
(defun insert-date-at-this-point () (interactive)
(insert (format-time-string "%a %b %e, %Y %l:%M %p")))

;; Define copyright/left C style comment
(defun insert-copyleft-cstyle () (interactive)
(insert " * " projectname " - \n")
(insert " * $Id: " (file-name-nondirectory (buffer-file-name)) ",v 1.0" (format-time-string " %Y/%m/%d %H:%M:%S ") "nando Exp $\n")
(insert " *\n")
(insert " * Copyright (C)" (format-time-string " %Y ") "by Hernando Furlan \n")
(insert " * http://www.nandox.com - http://about.nandox.com\n"))

;; Define copyright/left Bash style comment
(defun insert-copyleft-bashstyle () (interactive)
(insert "# " projectname " - \n")
(insert "# $Id: " (file-name-nondirectory (buffer-file-name)) ",v 1.0" (format-time-string " %Y/%m/%d %H:%M:%S ") "nando Exp $\n")
(insert "#\n")
(insert "# Copyright (C)" (format-time-string " %Y ") "by Hernando Furlan \n")
(insert "# http://www.nandox.com - http://about.nandox.com"))

;; Define GPL license for C style comment
(defun insert-license-gpl-multifile-cstyle () (interactive)
(insert " * This file is part of " projectname ".\n")
(insert " *\n")
(insert " * " projectname " is free software; you can redistribute it and/or modify\n")
(insert " * it under the terms of the GNU General Public License as published by\n")
(insert " * the Free Software Foundation; either version 2 of the License, or\n")
(insert " * (at your option) any later version.\n")
(insert " *\n")
(insert " * " projectname " is distributed in the hope that it will be useful,\n")
(insert " * but WITHOUT ANY WARRANTY; without even the implied warranty of\n")
(insert " * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n")
(insert " * GNU General Public License for more details.\n")
(insert " *\n")
(insert " * You should have received a copy of the GNU General Public License\n")
(insert " * along with " projectname "; if not, write to the Free Software\n")
(insert " * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA\n"))

;; Define GPL license for Bash style comment
(defun insert-license-gpl-multifile-bashstyle () (interactive)
(insert "# This file is part of " projectname ".\n")
(insert "#\n")
(insert "# " projectname " is free software; you can redistribute it and/or modify\n")
(insert "# it under the terms of the GNU General Public License as published by\n")
(insert "# the Free Software Foundation; either version 2 of the License, or\n")
(insert "# (at your option) any later version.\n")
(insert "#\n")
(insert "# " projectname " is distributed in the hope that it will be useful,\n")
(insert "# but WITHOUT ANY WARRANTY; without even the implied warranty of\n")
(insert "# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n")
(insert "# GNU General Public License for more details.\n")
(insert "#\n")
(insert "# You should have received a copy of the GNU General Public License\n")
(insert "# along with " projectname "; if not, write to the Free Software\n")
(insert "# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA\n"))

;; C/C++ file header
(global-set-key "\C-t\C-c\C-h" 'insert-c-file-header)
(defun insert-c-file-header () (interactive)
(defvar projectname (read-string "Project name? "))
(insert "/*\n")
(insert-copyleft-cstyle)
(insert " *\n")
(insert-license-gpl-multifile-cstyle)
(insert " */\n")
(insert "\n")
(insert "#include \n")
(insert "#include \n")
(insert "#include \n")
(insert "\n")
(insert "int main(int argc, char *argv[]) {\n")
(insert "\n")
(insert "}\n"))

;; C/C++ function header
(global-set-key "\C-t\C-c\C-f" 'insert-c-function-header)
(defun insert-c-function-header () (interactive)
(insert "/*\n")
(insert " * short desc\n")
(insert " *\n")
(insert " * long desc\n")
(insert " */\n")
(insert "int function(void) {\n")
(insert "\n")
(insert "\n")
(insert " return(1);\n")
(insert "}\n")
(insert "\n"))

;; PHP file header
(global-set-key "\C-t\C-p\C-h" 'insert-php-file-header)
(defun insert-php-file-header () (interactive)
(defvar projectname (read-string "Project name? "))
(insert " - http://www.nandox.com\n")
(insert " * @todo none\n")
(insert " **/\n")
(insert "\n")
(insert "\n")
(insert "?>\n"))

;; PHP function header
(global-set-key "\C-t\C-p\C-f" 'insert-php-function-header)
(defun insert-php-function-header () (interactive)
(insert "/**\n")
(insert " * short desc\n")
(insert " *\n")
(insert " * long desc\n")
(insert " * @param void\n")
(insert " * @return null\n")
(insert " * @author Hernando Furlan - http://www.nandox.com\n")
(insert " * @todo none\n")
(insert " **/\n")
(insert "function () {\n")
(insert "\n")
(insert "\n")
(insert " return(1);\n")
(insert "}\n")
(insert "\n"))

;; Perl file header
(global-set-key "\C-t\C-e\C-h" 'insert-perl-file-header)
(defun insert-perl-file-header () (interactive)
(defvar projectname (read-string "Project name? "))
(insert "#!/usr/bin/perl -w\n")
(insert "#!/usr/local/bin/perl -w\n")
(insert "\n")
(insert "# -------------------------------------------------------------------------\n")
(insert-copyleft-bashstyle)
(insert "#\n")
(insert-license-gpl-multifile-bashstyle)
(insert "# -------------------------------------------------------------------------\n")
(insert "\n")
(insert "require 5.004;\n")
(insert "use POSIX;\n")
(insert "use strict;\n")
(insert "\n"))

;; Perl function header
(global-set-key "\C-t\C-e\C-f" 'insert-c-function-header)
(defun insert-c-function-header () (interactive)
(insert "# -------------------------------------------------------------------------\n")
(insert "# short desc\n")
(insert "#\n")
(insert "# long desc\n")
(insert "# -------------------------------------------------------------------------\n")
(insert "sub function {\n")
(insert " my (@argv) = @_;\n")
(insert "\n")
(insert "\n")
(insert " return(1);\n")
(insert "}\n")
(insert "\n"))

;; SQL Text comment
(global-set-key "\C-t\C-s\C-h" 'insert-sql-file-header)
(defun insert-sql-file-header () (interactive)
(defvar projectname (read-string "Project name? "))
(insert "-- " projectname " - \n")
(insert "-- $Id: " (file-name-nondirectory (buffer-file-name)) ",v 1.0" (format-time-string " %Y/%m/%d %H:%M:%S ") "nando Exp $\n")
(insert "--\n")
(insert "-- Hernando Furlan \n")
(insert "-- http://www.nandox.com - http://about.nandox.com\n")
(insert "\n"))

;; Plain Text header
(global-set-key "\C-t\C-t\C-h" 'insert-plaintext-file-header)
(defun insert-plaintext-file-header () (interactive)
(insert "# -------------------------------------------------------------------------\n")
(insert "# " (file-name-nondirectory (buffer-file-name)) " - \n")
(insert "# Hernando Furlan \n")
(insert "# http://www.nandox.com - http://about.nandox.com\n")
(insert "# -------------------------------------------------------------------------\n")
(insert "\n"))

(message "Loading of Nando's dot emacs OK!")


domingo, 17 de mayo de 2009
Posted by xor

GNU/Linux vs BSD vs MacOSX

Fui (y soy) un ferviente usuario de GNU/Linux, BSD y software libre desde hace muchos años, utilizo ambas plataformas con fines domésticos y laborales, sin embargo la plataforma que llevo en mi laptop es un MacOSX y voy a contar un poco como fue el "switching". Si sos usuario de GNU/Linux o algún BSD, no seas prejuicioso y leé el resto que después de todo voy a hablar de una plataforma unix-like que aun a riesgo de que es comercial (muy) y es cerrada, es una plataforma estupenda y que ofrece más ventajas que desventajas cuando la adoptamos.




Lo que me llevó a una Mac fue simplemente curiosidad por algo nuevo, no hay que olvidar que MacOSX no es otra cosa que un "FreeBSD" pero cerrado, es decir que internamente es un auténtico UNIX, pero con un refinado acabado visual que hace que la experiencia del usuario sea incomparable con cualquier otra plataforma. Si sos usuario de GNU/Linux o BSD es porque seguramente te gusta que las cosas no sean del todo fácil, sobre todo si usás alguna distribución como Gentoo, Slackware o Archlinux que requieren bastante utlización de la consola Bash, a mi también me gustan los desafíos pero de repente necesite no perder más el tiempo con instalaciones, configuraciones, etc y la plataforma de Apple fue la solución. Sin embargo debo remarcar que tampoco todo es color de rosa con los productos de Steve Jobs, por eso voy a citar que hay de bueno y que hay de malo cuando nos pasamos de una plataforma GNU/Linux o BSD a MacOSX.

Lo mejor de la experiencia MacOSX:

  1. Equilibrio entre hardware y software. MacOSX esta diseñado específicamente para funcionar con el conjunto de hardware que ofrece Apple, con lo cual nos olvidamos de los problemas de compatibilidad y largas horas de configuración. Todo funciona "flawless" a 2 clicks. Su hardware viene equipado con prácticamente todo lo que vamos a necesitar, webcam, sonido, microfono, red, WIFI, USB, grabadora de DVD (Superdrive), firefire, control remoto, etc.
  2. El hardware de Apple es de primerísima calidad, todos sus componentes son lo último del mercado. Esto impacta en el precio obviamente, sin embargo armar una PC o adquirir una laptop de similares características, no nos cuesta más o menos lo mismo? Y encima debemos pagar la licencia de Windows que no vamos a utilizar y probablemente pasar largas horas configurando el hardware del que no tenemos garantía alguna de que vaya a funcionar. Es un buen punto si la productividad es un factor decisivo.
  3. Configuración de Samba, Impresoras (CUPS), etc. Digamos la verdad, Samba no es lo mas sólido que existe, no porque sea malo, sino porque su desarrollo se basa en técnicas de ingeniería inversa y demás dado que es un protocolo cerrado y guardado muy secretmente por Microsoft. Apple debe tener algún tipo de convenio con Microsoft para la correcta implementación de Samba ya que funciona de manera excelente como nunca había visto en ninguna otra plataforma, y sin editar ningun archivo, todo se hace desde el setup del sistema operativo. Agregar una impresora también suele ser un trabajo tedioso a veces, sobre todo para usuarios no avanzados. En MacOSX agregar cualquier impresora se hace con apenas un par de clicks siendo incluso que utiliza CUPS de motor al igual que los demás sistemas. Lo mismo con Apache, un servidor básico es posible tenerlo funcionando sin ni siquiera configurarlo.
  4. No hay necesidad de utilizar la consola de texto. Si bien yo personalemte no perdi la costumbre de utilizarla, en MacOSX no hay necesidad de ello, todo se puede hacer desde la interfaz. Para los usuarios un poco avanzados puede no significar nada, pero para los que no tienen mucha experiencia es un gran aporte que la mayoría de las distribuciones GNU/Linux carecen.
  5. La instalación de nuevos programas es tan simple como descargar un archivo .APP y arrastrarlo con el mouse hasta la carpeta de aplicaciones. En GNU/Linux depende de la distribución que utilicemos, puede ser también sencillo, como en el caso de SuSE o RedHat con los RPM... siempre y cuando demos con el RPM correcto para nuestra distribución y versión, y previamente se satisfagan las dependencias correspondientes. En ningún caso la instalacion de software nuevo en GNU/Linux es tan "plug & play" si nos salimos de los paquetes que proveé la distribución. Ni hablar de los BSD, aunque a mi me resulte sencillo ejecutar "pkg_add -v mozilla-firefox" para un usuario convencional no lo es.
  6. Posibilidad de utilizar software que mucha gente hecha de menos en GNU/Linux tales como los productos de Adobe (Photoshop, Illustrator, Dreamweaver, etc). Si bien es un excelente producto, muchos no se acostumbran a OpenOffice, en MacOSX es posible instalar MS Office. Flash... sí, sí ya que que existe para GNU/Linux, no se sí lo habran solucionado pero las últimas veces que habia utilizado Flash en GNU/Linux me crasheaba el Firefox cada 2 por 3, además Adobe da bastantes vueltas para sacar la versión de GNU/Linux. Muchos dirán que existe "Crossover" o "Wine", pero seamos honestos, las últimas versiones de los programas nunca estan soportadas, y el impacto en la performance es un hecho indiscutible.
  7. Posibilidad de usar software que anteriormente utilizaba en mis instalaciones de GNU/Linux o BSD. Todo el software que utilizabas antes podés seguir utilizándolo, hay un proyecto que se llama Macports que es un repositorio muy al estilo BSD en donde de manera automática podés instalar el mismo software que podías instalar con tu distribución, tan simple como ejecutar "port install nmap" y voilá!.
  8. Además de poder utilizar el software que usabas en Windows y el que usabas en GNU/Linux también existen algunos programas que son exclusivos para plataformas MacOSX, y de hecho de lo mejor en su género, como por ejemplo iLife, Aperture y Final Cut Pro.
  9. La interfaz es un placer utilizarla, lo tiene todo: Es simple, ágil, rápida, bonita. GNU/Linux cuenta con Compiz-Fusion que tiene cientos de efectos mas que MacOSX, pero digan la verdad, todos esos efectos no se tornan molestos en el transcurso de 15 minutos de usarlos? En MacOSX no se abusa de ellos, hay solo algunos muy cuidadosamente bien logrados y suaves para no convertirse en molestia a la hora de trabajar y en un estado mas que estable, "siempre imitados pero nunca igualados" es la frase correcta. Y si dejamos afuera los efectos visuales y nos enfocamos en la productividad, KDE tiende a parecerse a Windows y rara vez lo use asi que no voy a hablar de él, GNOME intenta adoptar mas bien el entorno simplista de Apple, que si bien mejoró mucho los últimos años aun muchos de sus componentes no son del todo estables y de vez en cuando algun crash nos encontramos, tampoco cuenta con todos los "chiches" que ofrece Apple sin impactar en la performance.
  10. Backups.. no existe herramienta en GNU/Linux, y ni siquiera en Windows que nos haga los backups de una manera tan sencilla como lo hace Time Machine. Es verdad que si queremos utilizarlo debemos desenbolzar unos cuantos dolares para la Time Capsule (un disco duro WIFI en donde va a parar la información via Wireless) pero ciertamente lo vale. Sin más palabras.
  11. La simple busqueda de archivos. Windows cuenta con "El buscador de archivos" (ese con el perrito) que es un chiste a la tecnología, GNOME cuenta con un buscador algo más serio que se parece mucho al de MacOSX: Spotlight que busca en todos nuestros archivos comprimidos o no (e incluso en el contenido de ellos), emails, contactos, calendar, iTunes, etc. a velocidades asombrosas, el buscador de MacOSX BUSCA Y ENCUENTRA como ningun otro.
  12. XCode. La suite de desarrollo de Apple, IDE integrado para realizar aplicaciones para MacOSX e iPhone con todas las herramientas y características que siempre quisiste tener para tus desarrollos en GNU/Linux o BSD en donde no existe producto que se le parezca ni un poquito. Solo es comparable con el software de desarrollo .NET de Microsoft. Ah pero vos sos geek y usás la consola de texto? Yo tambien uso GNU/Emacs, pero debo admitir que XCode ROCKS!
  13. Precio. Si bien son equipos "expensive" (y esto no es un punto a favor), el precio de tu Mac no va a disminuir tanto como el de tu PC con el transcurso del tiempo. Los equipos siguen valiendo muy bien incluso después de 2 o 3 años de uso.
  14. El tamaño. A algunos les parece muy pequeño, pero 13 pulgadas D-WIDE son el tamaño perfecto si andás con la notebook al hombro todo el día. Si te parece chica podés optar por la Macbook Pro de 15 o un mounstruo de 17 pulgadas que no quisiera tener que transportarla. Con respecto a las iMacs, como bien sabrán no tienen el CPU en un gabinete tower separado, esta todo integrado en lo que vendría a ser el monitor, menos espacio querés que ocupe?
  15. Batería, hubo una tanda hace algunos años de baterías que explotaban (una serie mal-manufacturada por Sony) en la cual no se vio afectada solo Apple, sino también Dell, IBM y otras marcas. El punto a favor es por la autonomia, la bateria de mi Macbook ya tine 1 año y medio y aun dura más de 5 horas haciendo trabajo "normal". Si, es cierto hay otras marcas como la Sony Vaio que cuentan con una autonomía similar, pero no son equipos baratos tampoco.

Lo peor de la experiencia MacOSX:

  1. La política que tiene Apple (muy similar a la que utiliza Microsoft) de monopolizar todo. Realiza las mismas maniobras que Microsoft (y que la mayoria de las empresas gigantes). Esto es lo que realmente me molesta de la plataforma (si bien no me afecta), me encataría que fuesen más "abiertos" y no me refiero al código del sistema operativo, sino a ser más compatibles y menos restrictivos. Por ejemplo de sus propios productos de software, algunos los han portado al sistema de Microsoft (Windows) pero ni de casualidad para otra plataforma como GNU/Linux o BSD siendo incluso que MacOSX que más UNIX que Windows, ni siquiera mensionan la palabra "Linux" por ningún lado. Otro ejemplo es en el iPhone, que no podés utilizar el dispositivo de módem, ni siquiera con otros productos de Apple! Alguien me puede explicar por que motivo?. También iTunes tiene algunas retricciones, si tus MP3s no son comprados vía Apple Store, no vas a poder ponerles portada por ejemplo (sí podes con un software de terceros "Gimme Some Tune", pero no con el propio iTunes). Como estas, hay muchas más...
  2. El hardware, si bien arriba comentaba que todos sus componentes son de primerísima calidad (y lo son), por fuera son demasiado delicadas, se rayan fácilmente y algunos modelos suelen "despintarse" (Como la Macbook blanca), también modelos anteriores han tenido problemas de rotura de bisagras (como la iBook). Lo bueno es que Apple va aprendiendo de sus errores y los contempla en nuevos productos, pero igualmente no dejan de ser delicadas.
  3. Precio. Más arriba comenté como punto positivo que su amortización es favorable, pero son equipos que no estan al alcance de cualquier bolsillo, si bien en los últimos años se abarataron mucho, uno con el mismo dinero puede comprar hasta 3 (o quizás más) laptops no-mac. Si el precio (y solamente el precio aun a riezgo de que lo valga) es un factor fundamental, entonces Apple no es para vos.
  4. Periféricos. Por ejemplo la Macbook cuenta con 2 puertos USB y la Macbook Pro con 3, A mi me alcanzan, pero a mucha gente le va a parecer poco. No cuenta con salida de TV y ni siquiera de monitor, se debe comprar un adaptador especial que no es muy económico que digamos si tenemos en cuenta lo que gastan en producirlos. Mouse podés utilizar el que te venga bien, pero si querés comprar uno marca Apple (para que haga juego) vas a tener que desenbolzar unos cuantos dólares por un mouse cheto. Todos los periféricos y accesorios son extremadamente caros. Y los repuestos ni te cuento.
  5. Juegos, si bien esto podría ser un punto de igualdad entre las plataformas, ya que ni GNU/Linux ni BSD tampoco tienen su potencial en los juegos, en Apple no hay muchos que puedas usar nativamente, no se si más o menos que en GNU/Linux porque no juego mucho, pero no hay tantos como en Windows. La parte buena, es que al igual que con GNU/Linux o BSD podés hacer una partición exclusiva para una instalación de Windows que esté dedicada a los juegos ya que es para lo único que sirve este sistema operativo de Microsoft en nuestras vidas si somos usuarios de cualquier plataforma unix-like no?

Espero haberte dado un buen pantallazo de como sería si optás por ser un "switcher" de Apple, no es mi intención convencer ni vender Apple a nadie ya que no soy empleado de Apple, pero sé que hay mucha gente pensando en el cambio, de repente muchos usuarios de GNU/Linux han migrado a Apple (conozco varios), incluso yo, y esta fue mi experiencia personal, espero te haya servido de referencia.

Fe de erratas:

  1. Es posible descargar las portadas de tus MP3 utilizando iTunes sin necesidad de comprar la música en Apple Store y sin necesidad de utilizar software de terceros. Sin embargo sigue siendo restrictivo en cuanto a que te están obligando a crear una cuenta Apple Store e introducir los datos de tu Tarjeta de Crédito para acceder a esta funcionalidad aunque no compres nada.

sábado, 16 de mayo de 2009
Posted by xor

Priorización de paquetes utilizando OpenBSD

Voy a explicar como configurar la priorización de paquetes (QoS: Quality Of Service) usando una instalación OpenBSD (Packet Filter ALTQ). Es importante que tengas algunas nociones previas de Packet Filter ya que voy a ir directamente al tema y no voy a detenerme en conceptos básicos. Tené la documentación que ofrece OpenBSD a mano: Packet Filter



Para los que no saben de que se trata esto del QoS, como su nombre en Inglés lo indica, es mantener "la calidad de los servicios" de nuestra red.

Y para que quiero mantener la "calidad de los servicios"? Un caso muy clásico es cuando hacemos un donwload (de alguna página o algún torrent) de tamaño grande que tarda varios minutos en terminar y mientras tanto nuestra conexión se torna inusable para hacer otras cosas, como por ejemplo navegar. Con la priorización de paquetes podemos solucionar este problema, siempre y cuando realicemos una correcta configuración. Otro caso de uso muy útil es si contamos con telefonía IP (VOIP) que para mantener la calidad de las comunicaciones es imprescindible contar con un buen flujo de datos que no se interrumpa, con la priorización de paquetes nos aseguramos que esos datos no sean interrumpidos por otros datos de otras conexiones dándoles prioridad.


Por que OpenBSD? OpenBSD es una plataforma de libre uso muy sólida y estable que su principal enfoque es la seguridad, razón por la cual posee un firewall similar a iptables de GNU/Linux llamado Packet Filter que es muy potente y sencillo de configurar, que además de proveer funciones de filtrado, ofrece entre otras cosas, priorización de paquetes que lo denomina ALTQ (Alternate Queueing). OpenBSD puede instalarse en un equipo i386 o superior, con lo cual podemos re-utilizar cualquier equipo que ya no usemos y armar el más potente firewall con priorización de paquetes. En mi experiencia personal, la primera vez que armé un firewall con priorización de paquetes sobre OpenBSD fue hace algunos años en un i486DX2 y lo tuve funcionando alrededor de 2 años hasta que reemplacé el equipo por uno más actual y jamás sufrió un solo cuelgue.

Puedo usar GNU/Linux? No hay Packet Filter para GNU/Linux. GNU/Linux con su iptables también pueden configurarse para hacer priorización de paquetes, pero es algo más rebuscado, con Packet Filter es mucho más simple.

Puedo usar FreeBSD, NetBSD o algún otro producto de la familia BSDs? Sí, se puede tanto FreeBSD como NetBSD cuentan con un port de Packet Filter (que es un proyecto que nació de OpenBSD) pero por defecto no cuentan con soporte ALTQ, lo que nos obliga a recompilar el kernel para poder utilizarlo.

Usando ALTQ podemos encolar (Queueing) paquetes utilizando 2 modelos diferentes:

  1. CBQ (Class Based Queueing): Este modelo permite segmentar el ancho de banda en varios fragmentos que podemos asignar a los diferentes servicios. Es muy interesante pero no lo vamos a usar acá.
  2. PRIQ (Priority Queueing): Este modelo permite definir a que servicios se les debe dar "prioridad de paso" y es el que vamos a utilizar más abajo.

Lo primero que debemos hacer es decidir es a que vamos a darle prioridad para posteriormente armar las reglas que correspondan.

Supongamos que tenemos una red doméstica con un ancho de banda de 2Mbits en donde principalmente: Naveguemos, usemos mensajería instantánea, hagamos llamadas de voz sobre IP, realicemos sesiones de SSH y bajemos algunos torrents, entre otras cosas.

Nuestro objetivo es: Bajar torrents todo el día (es ejemplificativo, nadie de ustedes baja torrents todo el día no? :) y que nuestras sesiones SSH, mensajería instantánea y navegación por la web no se tornen lentas ni sean interrumpidas (timeouts). A todo esto también hacemos muchas llamadas vía VOIP que no deseamos que se entre-corten ni tengan ruidos de fondo, sino que sigan manteniendo la misma claridad como si fuesen realizadas desde un teléfono convencional, incluso si estoy bajando mi serie favorita. Suena interesante no?

Vamos a empezar con un pf.conf básico como este:


# Definimos nuestras interfaces de red
ext_if = "rl0" # Interface de red externa
int_if = "rl1" # Interface de red interna.

# Definimos estas dos variables que vamos a utilizar más abajo
bw_upload = "160Kb" # Ancho de banda que usaremos para el upload (160Kbits = 20KB)
tcp_options = "flags S/SA keep state" # Guardar el estado de la conexión (TCP)

# Definimos los puertos que vamos a manipular
port_voip = "{ 5060 5061 }" # VOIP TCP (Por ejemplo Asterisk)
port_voip_udp = "{ 5060 4569 5061 5036 10000:20000 2727 }" # VOIP UDP
port_ssh = "{ 22 }" # SSH
port_http = "{ 80 443 }" # HTTP, HTTPS
port_im = "{ 25 110 993 995 6667 7000 1863 5190 5222 }" # Mail, MSN, IRC, etc
port_p2p = "{ 6881:6999 }" # P2P (Cambiar por los puertos que correspondan en tu caso)

# Bloquear utilizando drop en lugar de deny
set block-policy drop

# Normalizado de paquetes
scrub in on $ext_if all fragment reassemble
scrub in on $int_if all no-df

A continuación debemos armar las colas de prioridad sobre la interface externa. Es posible especificar colas en otras interfaces, pero normalmente contamos con 100MB en la interface interna (algunos con más suerte incluso con 1000MB), con lo cual nos sobra ancho de banda y no necesitamos priorizar paquetes aquí ya que desde Internet jamás vamos a recibir tanto tráfico simultáneo (a no ser que cuentes con una conexión con ese increible ancho de banda). A la cola debemos decirle cuanto ancho de banda vamos a asignarle, nosotros utilizamos $bw_upload que son 160Kbits o 20KB, lo normal (cuando nuestro ISP no nos roba demaciado) es que contemos con 25KB de upload para una conexión de 2Mbits de download (256MB), los 5K sobrantes los dejamos libres para el correcto tráfico de los paquetes ACK.

altq on $ext_if priq bandwidth $bw_upload queue \
{ p2p_queue, std_queue, http_queue, im_queue, ssh_bulk_queue, ssh_login_queue, dns_queue, voip_queue, ack_queue }

A cada cola hay que asignarle un número de prioridad que tendrán los paquetes que pertenezcan a la misma. Este es el punto más importante, si están mal las prioridades, no vamos a lograr nuestro objetivo de priorizar lo mas importante. Cuanto más alto el número más prioridad van a tener los paquetes correspondientes. OpenBSD permite hasta 16 colas (de 0 a 15).

queue p2p_queue priority 2
queue std_queue priority 4 priq(default)
queue http_queue priority 8
queue im_queue priority 9
queue ssh_bulk_queue priority 10
queue ssh_login_queue priority 11 priq(red)
queue dns_queue priority 12
queue voip_queue priority 14
queue ack_queue priority 15

En primer lugar hemos definido que los programas P2P tengan el mínimo de prioridad, incluso por debajo del umbral declarado por defecto. Es decir que cualquier conexión declarada o no en nuestro pf.conf va a tener más prioridad que las descargas P2P.

La segunda cola std_out es la cola por defecto, todas las conexiones que no hayan sido explicítamente mencionadas en nuestro pf.conf serán asignadas a esa cola (por ejemplo FTP, Juegos online, etc)

La navegación web tendrá más prioridad que los P2P y la cola por defecto.

La mensajería instantánea, mail e IRC tendrán más prioridad incluso que la navegación web.

Las sesiones SSH irán por encima de las ya mensionadas. Nótese que hay 2 colas para SSH, una para transferencia (scp) y otra para login con más prioridad aún. El scheduler "RED" (Random Early Detection) es para evitar congestiones haciendo que la cola nunca se llene.

El DNS siempre debe ser un servicio con la prioridad más alta para evitar demoras al resolver dominios.

Las llamadas de voz sobre IP tienen el nivel más alto, solamente por debajo de los paquetes ACK, ya que no queremos que nada interfiera cuando tenemos una llamada en curso.

Y por último los paquetes ACK deben ser SIEMPRE la mayor prioridad.

Seguimos con las reglas de NAT:

# Acceso a internet a cualquier maquina de nuestra LAN
nat on $ext_if from $int_if:network to any -> $ext_if

Las entradas de forwarding de puertos, en este caso vamos a forwardear los puertos del torrent:

# Forwardeo de puertos
rdr on $ext_if proto tcp from any to any port $port_voip -> 192.168.0.2 # Cambiar IP destino según corresponda
rdr on $ext_if proto udp from any to any port $port_voip_udp -> 192.168.0.2 # Cambiar IP destino según corresponda
rdr on $ext_if proto { tcp udp } from any to any port $port_p2p -> 192.168.0.2 # Cambiar IP destino según corresponda

Siguen las entradas de bloqueo/acceso. No vamos a bloquear nada, si bien pudieramos, ya que no es el punto establecer un firewall, sino priorizar paquetes. Que cada uno establezca las reglas de bloqueo a su preferencia.

Los paquetes a las colas se asignan utilizando la sentencia "pass" (sí, la misma) salvo que se agrega la cláusula "queue". Vamos a ir asignando una por una.

Primero las conexiones salientes:

# Todo es standard excepto los ACK que los enviamos a ack_queue
pass out on $ext_if proto tcp from any to any \
$tcp_options queue(std_queue, ack_queue)

# Telefonia IP TCP a voip_queue
pass out on $ext_if proto tcp from any to any port $port_voip \
$tcp_options queue voip_queue

# Telefonia IP UDP a voip_queue
pass out on $ext_if proto udp from any to any port $port_voip_udp \
keep state queue voip_queue

# Consultas DNS a dns_queue
pass out on $ext_if proto { tcp udp } from any to any port domain \
keep state queue dns_queue

# Transferencias SSH a ssh_bulk_queue y login a ssh_login_queue
pass out on $ext_if proto tcp from any to any port $port_ssh \
$tcp_options queue(ssh_bulk_queue, ssh_login_queue)

# Mail, Mensajería instantanea, IRC, etc a im_queue
pass out on $ext_if proto { tcp udp } from any to any port $port_im \
$tcp_options queue im_queue

# HTTP, HTTPS a http_queue
pass out on $ext_if inet proto tcp from any to any port $port_http \
$tcp_options queue http_queue

Luego las conexiones entrantes:

# Telefonia IP TCP entrante a voip_queue
pass in on $ext_if proto tcp from any to any port $port_voip \
$tcp_options queue voip_queue

# Telefonia IP UDP a voip_queue
pass in on $ext_if proto udp from any to any port $port_voip_udp \
keep state queue voip_queue

# Conexiones P2P entrantes a p2p_queue (Estas son las que menoes prioridad tienen de todas)
pass in on $ext_if proto { udp tcp } from any to any port $port_p2p \
$tcp_options queue p2p_queue

Eso es todo, ya contamos con nuestras reglas listas, ahora debemos cargarlas:

# pfctl -f /etc/pf.conf

Para monitorear su correcto funcionanamiento podemos utilizar la herramienta pftop que se encuentra disponible para instalar en el repositorio de OpenBSD. (Tecla 8 para acceder al panel de colas)

QUEUE BW SCH PRIO PKTS BYTES DROP_P DROP_B QLEN BORROW SUSPEN P/S B/S
p2p_out priq 2 827936 267887K 317844 43731134 0 0 0
std_out priq 4 8215688 8569649K 153130 97944K 0 9 13475
http_out priq 8 2809938 634870K 10757 2688711 0 0 0
im_out priq 9 344323 73140938 90 98819 0 0 0
ssh_bulk_out priq 10 33036 45973216 0 0 0 0 0
ssh_login_out priq 11 6873 1253422 1 146 0 0 0
dns_out priq 12 102845 8951957 0 0 0 0 0
voip_out priq 14 788399 189578K 123 67892 0 0 0
ack_out priq 15 7367822 453643K 517 34254 0 0.4 23

Aquí dejo el archivo de configuración que acabamos de armar completo:

# -------------------------------------------------------------------------
# Packet Filter ALTQ rules by Hernando Furlan - Written under OpenBSD 4.5
# $Id: pf.conf,v 1.0 2009/05/02 16:14:11 nando Exp $
#
# Hernando Furlan
# http://www.nandox.com - http://about.nandox.com - http://www.ifork.com.ar
# -------------------------------------------------------------------------

# Definimos nuestras interfaces de red
ext_if = "rl0" # Interface de red externa
int_if = "rl1" # Interface de red interna.

# Definimos estas dos variables que vamos a utilizar más abajo
bw_upload = "160Kb" # Ancho de banda que usaremos para el upload (160Kbits = 20KB)
tcp_options = "flags S/SA keep state" # Guardar el estado de la conexión (TCP)

# Definimos los puertos que vamos a manipular
port_voip = "{ 5060 5061 }" # VOIP TCP (Por ejemplo Asterisk)
port_voip_udp = "{ 5060 4569 5061 5036 10000:20000 2727 }" # VOIP UDP
port_ssh = "{ 22 }" # SSH
port_http = "{ 80 443 }" # HTTP, HTTPS
port_im = "{ 25 110 993 995 6667 7000 1863 5190 5222 }" # Mail, MSN, IRC, etc
port_p2p = "{ 6881:6999 }" # P2P (Cambiar por los puertos que correspondan en tu caso)

# Bloquear utilizando drop en lugar de deny
set block-policy drop

# Normalizado de paquetes
scrub in on $ext_if all fragment reassemble
scrub in on $int_if all no-df

altq on $ext_if priq bandwidth $bw_upload queue \
{ p2p_queue, std_queue, http_queue, im_queue, ssh_bulk_queue, ssh_login_queue, dns_queue, voip_queue, ack_queue }

queue p2p_queue priority 2
queue std_queue priority 4 priq(default)
queue http_queue priority 8
queue im_queue priority 9
queue ssh_bulk_queue priority 10
queue ssh_login_queue priority 11 priq(red)
queue dns_queue priority 12
queue voip_queue priority 14
queue ack_queue priority 15

# Acceso a internet a cualquier maquina de nuestra LAN
nat on $ext_if from $int_if:network to any -> $ext_if

# Forwardeo de puertos
rdr on $ext_if proto tcp from any to any port $port_voip -> 192.168.0.2 # Cambiar IP destino según corresponda
rdr on $ext_if proto udp from any to any port $port_voip_udp -> 192.168.0.2 # Cambiar IP destino según corresponda
rdr on $ext_if proto { tcp udp } from any to any port $port_p2p -> 192.168.0.2 # Cambiar IP destino según corresponda

# Todo es standard excepto los ACK que los enviamos a ack_queue
pass out on $ext_if proto tcp from any to any \
$tcp_options queue(std_queue, ack_queue)

# Telefonia IP TCP a voip_queue
pass out on $ext_if proto tcp from any to any port $port_voip \
$tcp_options queue voip_queue

# Telefonia IP UDP a voip_queue
pass out on $ext_if proto udp from any to any port $port_voip_udp \
keep state queue voip_queue

# Consultas DNS a dns_queue
pass out on $ext_if proto { tcp udp } from any to any port domain \
keep state queue dns_queue

# Transferencias SSH a ssh_bulk_queue y login a ssh_login_queue
pass out on $ext_if proto tcp from any to any port $port_ssh \
$tcp_options queue(ssh_bulk_queue, ssh_login_queue)

# Mail, Mensajería instantanea, IRC, etc a im_queue
pass out on $ext_if proto { tcp udp } from any to any port $port_im \
$tcp_options queue im_queue

# HTTP, HTTPS a http_queue
pass out on $ext_if inet proto tcp from any to any port $port_http \
$tcp_options queue http_queue

# Telefonia IP TCP entrante a voip_queue
pass in on $ext_if proto tcp from any to any port $port_voip \
$tcp_options queue voip_queue

# Telefonia IP UDP a voip_queue
pass in on $ext_if proto udp from any to any port $port_voip_udp \
keep state queue voip_queue

# Conexiones P2P entrantes a p2p_queue (Estas son las que menoes prioridad tienen de todas)
pass in on $ext_if proto { udp tcp } from any to any port $port_p2p \
$tcp_options queue p2p_queue
domingo, 3 de mayo de 2009
Posted by xor

Generar certificados SSL sin passphrase

Procedimiento para generar certificados de seguridad SSL sin passphrase que puedan ser utilizados en alguno de los servicios: Apache, Lighttpd, Postfix, etc.



Debo remarcar que los certificados que vamos a generar son apropiados solamente para hacer testing y de ninguna manera deben considerarse ser utilizados en entornos productivos ya que lo adecuado es generar certificados CON passphrase, algoritmos de encriptación más fuertes y ser firmados por alguna compañia certificadora como Verisign.


1. Generar una llave privada sin passphrase de 1024 bits:

# openssl genrsa -out server.key 1024

2. Generar el CSR (Certificate Sign Request):

# openssl req -new -key server.key -out server.csr

Contestar las siguientes preguntas:

You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) []: (Ej: AR para Argentina)
State or Province Name (full name) []: (Ej: Buenos Aires)
Locality Name (eg, city) []: (Ej: Microcentro)
Organization Name (eg, company) []: (Ej: NandoX)
Organizational Unit Name (eg, section) []: (Ej: Desarrollo)
Common Name (eg, fully qualified host name) []: (Ej: nandox.com)
Email Address []: (Ej: ejemplo@nandox.com)

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []: (No ingresar nada, pulsar )
An optional company name []: (No ingresar nada, pulsar )

3. Autofirmar nuestro certificado con un año de expiración (CRT):

# openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt

4. Por último generamos el archivo PEM:

# cat server.key server.crt > server.pem
jueves, 30 de abril de 2009
Posted by xor

Popular Post

Labels

Seguidores

- Copyright © NandOX Chat - Blog -Metrominimalist- Powered by Blogger - Designed by Johanes Djogan - Modified by NandOX