Centos 7 – Configuración del Firewall

CentOS 7 trae un nuevo servicio llamado FirewallD que es el reemplazo de la ya conococida “iptables”. Si la máquina va  a ser usada como servidor es importante que tenga un cortafuego (firewall) para bloquear algunos servicios.

1. Activar/Habilitar el firewall

Para activar y habilitar el firewall digite el siguiente comando:

systemctl start firewalld
systemctl enable firewalld

2. Zonas

Para saber que zonas por defecto están habilitadas:

[root@localhost ~]# firewall-cmd –get-default-zone
public

Por defecto esta zona es “public” y se aplica sobre la tarjeta de red (enp0s3).

[root@localhost ~]# firewall-cmd –list-all
  public (default)
  interfaces: enp0s3
  sources:
  services: dhcpv6–client ssh
  ports:
  masquerade: no
  forward–ports:
  icmp–blocks:
  rich rules:

Los servicios activos son el dhcpv6-client y el ssh, este último por defecto usa la puerta 22.

Para ver todas las zonas, digite el siguiente comando:

[root@localhost ~]# firewall-cmd --list-all-zones
block
    interfaces:
    sources:
    services:
    ports:
    masquerade: no
    forward-ports:
    icmp-blocks:
    rich rules:

dmz
    interfaces:
    sources:
    services: ssh

Para listar una zona específica, por ejemplo “external”, digite el siguiente comando:

[root@localhost ~]# firewall-cmd --list-service --zone=external
ssh

Si queremos cambiar la zona, por ejemplo de “public” hacia “external”, digite el siguiente comando:

[root@localhost ~]# firewall-cmd --set-default-zone=external
success

3. Servicios

El firewall puede filtrar varios servicios, por ejemplo ssh (puerta 22), http (80), mysql (3306) entre otros. Para listar los servicios definidos por defecto:

[root@localhost ~]# firewall-cmd –get-services
RH–Satellite–6 amanda–client bacula bacula–client dhcp dhcpv6 dhcpv6–client dns ftp 
high–availability http https imaps ipp ipp–client ipsec kerberos kpasswd ldap ldaps 
libvirt libvirt–tls mdns mountd ms–wbt mysql nfs ntp openvpn pmcd pmproxy pmwebapi 
pmwebapis pop3s postgresql proxy–dhcp radius rpc–bind samba samba–client smtp ssh 
telnet tftp tftp–client transmission–client vnc–server wbem–https

Para poder adicionar mas servicios, se puede adicionar un nuevo archivo xml en la siguiente dirección: /usr/lib/firewalld/services

 

[root@localhost ~]# ls /usr/lib/firewalld/services
amanda-client.xml      ipp-client.xml   mysql.xml       RH-Satellite-6.xml
bacula-client.xml      ipp.xml          nfs.xml         rpc-bind.xml
bacula.xml             ipsec.xml        ntp.xml         samba-client.xml
dhcpv6-client.xml      kerberos.xml     openvpn.xml     samba.xml
dhcpv6.xml             kpasswd.xml      pmcd.xml        smtp.xml
dhcp.xml               ldaps.xml        pmproxy.xml     ssh.xml
dns.xml                ldap.xml         pmwebapis.xml   telnet.xml
ftp.xml                libvirt-tls.xml  pmwebapi.xml    tftp-client.xml
high-availability.xml  libvirt.xml      pop3s.xml       tftp.xml
https.xml              mdns.xml         postgresql.xml  transmission-client.xml
http.xml               mountd.xml       proxy-dhcp.xml  vnc-server.xml
imaps.xml              ms-wbt.xml       radius.xml      wbem-https.xml

Para adicionar o remover los servicios a nuestra zona (por ejemplo el servicio http):

[root@localhost ~]# firewall-cmd --add-service=http
success
[root@localhost ~]# firewall-cmd --list-service
http ssh
[root@localhost ~]# firewall-cmd --remove-service=http
success
[root@localhost ~]# firewall-cmd --list-service
ssh

Si reiniciamos la máquina,  el servicio que adicionamos desaparece. Por tanto para que quede permanente solo necesitamos adicionar a nuestro comando la palabra “–permanent” y lo siguiente es hacer un reload del servicio.

[root@localhost ~]# firewall-cmd --add-service=http --permanent
success
[root@localhost ~]# firewall-cmd --reload
success
[root@localhost ~]# firewall-cmd --list-service
http ssh

4. Puertas

Si queremos adicionar o remover una puerta (por ejemplo TCP 465), lo podemos hacer de la siguiente manera:

[root@localhost ~]# firewall-cmd --add-port=465/tcp
success
[root@localhost ~]# firewall-cmd --list-port
465/tcp
[root@localhost ~]# firewall-cmd --remove-port=465/tcp
success
[root@localhost ~]# firewall-cmd --list-port

Si queremos hacerla permanente:

[root@localhost ~]# firewall-cmd --add-port=465/tcp --permanent
success
[root@localhost ~]# firewall-cmd --reload
success
[root@localhost ~]# firewall-cmd --list-port
465/tcp

5. ICMP Types

De igual manera para para adicionar o remover “ICMP Types”:

[root@localhost ~]# firewall-cmd --add-icmp-block=echo-request
success
[root@localhost ~]# firewall-cmd --list-icmp-blocks
echo-request
[root@localhost ~]# firewall-cmd --remove-icmp-block=echo-request
success
[root@localhost ~]# firewall-cmd --list-icmp-blocks
[root@localhost ~]# firewall-cmd --get-icmptypes
destination-unreachable echo-reply echo-request parameter-problem redirect 
router-advertisement router-solicitation source-quench time-exceeded

Como instalar webmin en CentOS 7

Webmin es una interfaz basada en web para administración de sistemas para servidores basados ​​en Linux. Es uno de los paneles de control de hosting de código abierto más populares. En este tutorial, vamos a mostrarle cómo instalar Webmin en un VPS Linux que ejecuta CentOS 7 como un sistema operativo.

Actualizando el sistema

Ingresa por ssh para actualizar tu distruciones de CentOS

yum -y update

Descargando e instalando el webmin desde un RPM

Para saber que version esta actualizada podemos buscar en el mismo Webmin los RPM son distruciones para RedHat, Fedore y CentOS para ello usamos el wget tambien debemos tener en cuenta que para webmin se necesita alguans librerias.

yum -y install perl perl-Net-SSLeay openssl perl-IO-Tty perl-Encode-Detect wget
wget http://prdownloads.sourceforge.net/webadmin/webmin-1.840-1.noarch.rpm
rpm -U webmin-1.840-1.noarch.rpm

Para la instalacion se tiene que obtener el siguiente mensaje

[root@localhost ~]# rpm -U webmin-1.840-1.noarch.rpm
advertencia:webmin-1.840-1.noarch.rpm: EncabezadoV3 DSA/SHA1 Signature, ID de clave 11f63c51: NOKEY
Operating system is CentOS Linux
Webmin install complete. You can now login to https://fs01.insite.pe:10000/ as root with your root password.

Luego de esto debemos instalar la llave GPG firmada por los paquetes

wget http://www.webmin.com/jcameron-key.asc
rpm --import jcameron-key.asc

Y luego de esto se resuelven todas las dependencias.

Firewall

Ahora ejecutamos las reglas para que el firewall nos deje pasar

firewall-cmd --permanent --zone=public --add-port=10000/tcp
firewall-cmd --reload

Ingresando al WEBMIN

Para acceder al webmin solo debemos de acceder desde el navegador, nuestro caso esta configurado con el host 192.168.1.233 => webmail.clark.pe, para esto debes ingresar con el usuario root.

https://192.168.1.233:10000

Instalar Apache + PHP 7 en Centos 7.3

Aqui les dejo una pequeña guia para instalar Apache y PHP 7, esta version de PHP no esta en los repositorios oficiales, asi que para nuestro caso usaremos el repositorio de REMI.

Hay ejecutar con privilegios de root

rpm -qa |grep php
yum -y install httpd
systemctl start httpd.service
systemctl enable httpd.service
firewall-cmd --permanent --zone=public --add-service=http 
firewall-cmd --permanent --zone=public --add-service=https
firewall-cmd --reload

Antes de instalar la nueva version, primero debemos de desinstalar la version anterior, para esto usamos el siguiente comando:

[root@localhost ~]# rpm -qa |grep php
php-cli-5.4.16-42.el7.x86_64
php-mysql-5.4.16-42.el7.x86_64
php-soap-5.4.16-42.el7.x86_64
php-common-5.4.16-42.el7.x86_64
php-pdo-5.4.16-42.el7.x86_64
php-mbstring-5.4.16-42.el7.x86_64
php-xml-5.4.16-42.el7.x86_64
php-xmlrpc-5.4.16-42.el7.x86_64
php-5.4.16-42.el7.x86_64
php-gd-5.4.16-42.el7.x86_64

Luego de esto tenemos que deinstalar el paquetes:

yum -y remove php
yum -y remove php-common

Ahora instalamos PHP 7

rpm -Uvh http://rpms.remirepo.net/enterprise/remi-release-7.rpm
yum -y install yum-utils
yum -y update
yum-config-manager --enable remi-php70
yum -y install php php-opcache
systemctl restart httpd.service
yum search php
yum -y install php-mysql
yum -y install php-gd php-ldap php-odbc php-pear php-xml php-xmlrpc php-mbstring php-soap curl curl-devel
systemctl restart httpd.service

Ahora para verificar que version tenemos solo debemos ejecutar en la terminal

[root@localhost ~]# php -v
PHP 7.0.20 (cli) (built: Jun  7 2017 07:50:14) ( NTS )
Copyright (c) 1997-2017 The PHP Group
Zend Engine v3.0.0, Copyright (c) 1998-2017 Zend Technologies
with Zend OPcache v7.0.20, Copyright (c) 1999-2017, by Zend Technologies

VB6 – Ordenando una columna haciendo click al columnheader

Para este ejemplo tu ListView debe tener el nombre ListView1

Private Sub ListView1_ColumnClick(ByVal ColumnHeader As MSComctlLib.ColumnHeader)
    With ListView1
        If .SortKey <> ColumnHeader.Index - 1 Then
            .SortKey = ColumnHeader.Index - 1
            .SortOrder = lvwAscending
        Else
            If .SortOrder = lvwAscending Then
                .SortOrder = lvwDescending
             Else
                 .SortOrder = lvwAscending
            End If
        End If
        .Sorted = -1
    End With
End Sub

Enjaulando a usuarios en Linux

En la seguridad de linux no se puede otorgar permisos para subir en el arbol del servidor y te permite navegar sin restricciones dentro de la consola.

La opcion mas segura es enjaular aun usuario, esta es la forma mas segura y evitamos al mismo tiempo que pueda subir por arriba del arbol de diretorio configurado.

Una forma de Enjaular usuarios CHROOT y permitirle usar SSH, SFTP y SCP en forma efectiva es usar JAULKIT.

Con JAULKIT podemos es construirle al usuario enjaulado un entorno de comandos básicos (ls, cp, find, etc.).

Sigue leyendo «Enjaulando a usuarios en Linux»

PHP Hacer consultas con PDO y dblib MSSQL

Para hacer conexiones y consultas a servidores SQL Server, se puede usar dblib en servidores linux (en mi caso estoy usando Centos 7) la libreria es proporcionado por FreeTDS, el PDO_DBLIB DSN son librerias de extension para poder conectar a servidores Microsoft SQL Server y Sybase.

En el siguietne ejemplo es una muestra de como puedes realiar DSN con PDO_DBLIB:

mssql:host=localhost;dbname=testdb
sybase:host=localhost;dbname=testdb
dblib:host=localhost;dbname=testdb

Sigue leyendo «PHP Hacer consultas con PDO y dblib MSSQL»

PHP Convertir un Array en XML

En nuestro ejemplo anterior donde esta la conexion de SQL Server http://blog.insite.pe/windows/sql-server/conectar-php-con-sql-server-usando-dblib/, podemos hacer la conversion tranquilamente y luego pasarlo a XML con el siguiente procedimiento:

<?php

function array_to_xml($array, $table='table',$field='row') {
    $xml = '';
    if ($table != null) {
        $xml .= "<$table>\n";
    }
    foreach ($array as $key=>$value) {
        $xml .= "<$field>";
		foreach($value as $key2 => $value2){
        	foreach($value2 as $key3 => $value3){
        		$xml .= "<$key3>" . htmlspecialchars(trim($value3)) . "</$key3>";
        	}
        }
		$xml .= "</$field>\n";
    }
    if ($table != null) {
        $xml .= "\n</$table>\n";
    }
    return $xml;
}

La forma de llamar a la funcion seria asi:

$array = array(
           array('Campo1'=>'Valor1',
                 'Campo2'=>'Valor2',
                 ),
          array('CampB1'=>'ValoB1',
                 'CampB2'=>'ValoB2',
                 )
         );
echo array_to_xml($rr,'table','row');

El valor que obtendremos seria el siguiente:

<table>
    <row>
        <Campo1>Valor1</Campo1>
        <Campo2>Valor2</Campo2>
    </row>
    <row>
        <CampB1>ValoB1</CampB1>
        <CampB2>ValoB2</CampB2>
    </row>
</table>

Conectar PHP con SQL SERVER usando dblib

Esto ha sido probando en Centos 7 x64 se ha instalado dblib y sencillamente se ha consigando el siguiente para conectar al servidor SQL-Server

<?php
define('DB_HOST','192.168.1.2');
define('DB_PORT','1433');
define('DB_USER','usuario_db');
define('DB_PASS','contrasena_db');
define('DB_NAME','nombre_db');
define('SET_CHARSET','utf8');

function DBConecta(){
    $dsn = "dblib:host=".DB_HOST.":".DB_PORT.";dbname=".DB_NAME.";charset=UTF-8;";
    $conn = new PDO($dsn, DB_USER, DB_PASS);
    $conn->exec('SET CHARACTER SET utf8');
    $conn->query("SET NAMES utf8");
	$conn->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );
    return $conn;
}
?>

Ahora solo ejecutamos la consulta del SQL Server

<?php
function ExecuteArray($sql = ""){
    $conn = DBConecta();
    try
    {
        $stm = $conn->prepare($sql);
        $stm->execute();
        $result = $stm->fetchAll();
        foreach( $result as $row ) {
        	$r = array();
            foreach($row as $key => $val){
            	if(!is_numeric($key)) {
            		$r[] = array($key => $val);
            	}
            }
  			$rr[] = $r;
  	    }
        $result = $rr;
    }catch(PDOException $e){
        SayLog('sql',$e->getMessage()."\n $sql");
		$result=array();
    }
    return $result;
}

Hacemos esa regla de validcion porque cuando recorremos la tabla nos adiciona nos crea el indice del array, y eso me genera un campo adicional.

Copias de seguridad en Zimbra Open Source Edition

Cuando optamos por la versión open source de Zimbra somos conscientes de las carencias que esta versión tiene
respecto a la Network Edition. Una de ellas es la posibilidad de hacer copias de seguridad, copias que nos permitan
recuperar cosas como correos de un buzón cuyo usuario tiene los dedos muy largos aunque jurará y perjurará que el
nunca ha borrado nada, que es culpa del servidor o bien recuperar nuestro zimbra en caso de desastre. Para
hacer ambas cosas en la versión open source necesitaremos hacer dos copias de seguridad distintas, una destinada
solamente a buzones y la otra al sistema entero. Es una pega, si, necesitaremos mas o menos el doble de espacio en
disco para copiarlo todo.

Sigue leyendo «Copias de seguridad en Zimbra Open Source Edition»