mercoledì 31 agosto 2016

simple port forwarding example

Immaginiamo di avere un firewall linux  e voler pubblicare un servizio di un server interno sulla rete, quindi vogliamo che ogni accesso al nostro indirizzo ip pubblico che riguarda la porta in oggetto sia rediretto sul nostro server interno.
in pratica esponiamo un servizio sulla rete pubblica recuperandolo da una rete privata.
Tutto questo si traduce in effetti in pochissime righe per iptables.

Dati di partenza : 
indirizzo ip del server interno esempio :     192.168.1.150

porta del servizio del server interno esempio : 8080

porta pubblica del servizio che vogliamo esporre : 80

creo un file in /root/forward.sh con la confgurazione di iptables

#!/bin/sh
echo 1 > /proc/sys/net/ipv4/ip_forward

/sbin/iptables -A PREROUTING -t nat -p tcp  --dport 80 -j DNAT --to 192.168.1.150:8080
/sbin/iptables -A FORWARD  -d 192.168.1.150 -p tcp --dport 80 -j ACCEPT

/sbin/iptables -t nat -A POSTROUTING -j MASQUERADE
volendo aggiungo al crontab @reboot /root/forward.sh

venerdì 13 novembre 2015

configurazione bridge e kvm su debian like / ubuntu

Configurazione scheda BRIDGE 

Per prima cosa diciamo che una scheda bridge è una scheda virtuale, che si appoggia ad una scheda fisica e permette di far collegare altre schede virtuali tramite la sua configurazione alla rete esterna.
Il mio caso d'uso è utilizzarla per permettere a delle macchine virtuali di uscire sulla rete come se fossero altri computer collegati alla stessa.
Le configurazioni di seguito sono riferite a sistemi debian based.

immaginiamo che la nostra rete principale sia : eth0 con ip 192.168.1.99/24
significa che questa configurazione la troviamo nel file /etc/network/interfaces
 iface eth0 inet static 
      address 192.168.1.99 
      broadcast 192.168.1.255 
      netmask 255.255.255.0 
      gateway 192.168.1.1 
diventa in versione bridge :
iface eth0 inet manual

 # Bridge setup
 iface br0 inet static
        bridge_ports eth0 
        address 192.168.1.99
        broadcast 192.168.1.255
        netmask 255.255.255.0
        gateway 192.168.1.1
dove la nuova interfaccia br0 è utilizzabile da kvm per le macchine virtuali.
se volete vedere quali interfacce sono fiinte sotto il bridge potete lanciare

brctl show 

Instalalzione KVM

Qemu / kvm è un ambiente di virtualizzazione fantastico. Per vederlo in azione, per prima cosa bisogna verificare che nel bios siano attive le configurazioni relative alla virtualizzazione hardware di intel o amd. Dopo di che si passa all'installazione :

apt-get install qemu-kvm libvirt-bin virt-manager
In fine aggiungiamo l'utente "nomeutente" ai gruppi :
adduser nomeutente kvm adduser nomeutente libvirt
Per installare una macchina virtuale adesso è possibile lanciare virt-manager e scegliere i componenti.

lunedì 18 maggio 2015

Installazione application server wildfly

Wildfly è l'erede dell'application server JBOSS.
poichi semplici passi da ricordare come guida minima di installazione...
prerequisiti: JAVA
è consigliato installare l'ambiente java di ORACLE

# da root o sudo

cd /opt

# scaricate il wildfly che vi interessa:

# http://wildfly.org/downloads/

# io farò riferimento alla versione wildfly-8.2.0.Final voi sostituitela con la vostra

wget http://download.jboss.org/wildfly/8.2.0.Final/wildfly-8.2.0.Final.tar.gz

tar xfvz wildfly-8.2.0.Final.tar.gz

ln -s /opt/wildfly-8.2.0.Final /opt/wildfly

# Copia ed edita il file init di configurazione

cp /opt/wildfly/bin/init.d/wildfly.conf /etc/default/wildfly.conf

nano /etc/default/wildfly.conf

# modifica alcune configurazioni secondo le tue necessità
## Location of WildFly
JBOSS_HOME="/opt/wildfly"
## The username who should own the process.
JBOSS_USER=wildfly
## The mode WildFly should start, standalone or domain
JBOSS_MODE=standalone
## Configuration for standalone mode
JBOSS_CONFIG=standalone.xml
## The amount of time to wait for startup
STARTUP_WAIT=60
## The amount of time to wait for shutdown
SHUTDOWN_WAIT=60
## Location to keep the console log
JBOSS_CONSOLE_LOG="/var/log/wildfly/console.log"



# Copia lo script di avvio

# red hat based
  cp /opt/wildfly/bin/init.d/wildfly-init-redhat.sh /etc/init.d/wildfly
# debian based
  cp /opt/wildfly/bin/init.d/wildfly-init-debian.sh /etc/init.d/wildfly

# Aggiungi WildFly come un servizio
# red hat based
chkconfig --add wildfly
chkconfig wildfly on
# debian based
update-rc.d wildfly defaults


# Crea una directory per i logs

mkdir -p /var/log/wildfly

# Aggiungi l'user per WildFly

adduser wildfly

# Cambia l'owner delle directories di wildfly

chown -R wildfly:wildfly /opt/wildfly-8.2.0.Final
chown wildfly:wildfly /opt/wildfly
chown wildfly:wildfly /var/log/wildfly

# cambia l'interfaccia dove wildfly ascolta sulla rete

nano -w /opt/wildfly/standalone/configuration/standalone.xml

<interface name="public">
            <inet-address value="${jboss.bind.address:INDIRIZZOIPDELSERVER}"/>
        </interface>




# Avvia WildFly

service wildfly start


# configurazione utente di amministrazione console :

/opt/wildfly/bin/add-user.sh

# aggiungere un management user

# navigare su

http://localhost:9990/console/

# per configurare altro.

# Avvia Wildfly al boot  :
#debian based

update-rc.d wildfly defaults

#redhat

chkconfig --add wildfly

sabato 21 marzo 2015

linux : software raid con mdadm

Software raid di linux.

Fake raid e le bizarrie del mondo moderno.

Ovvero la storia di come tenere i propri dati al sicuro usando più dischi.

Preambolo (potrebbe essere noioso...):

Il bios di un server allo startUp mi fa vedere un controller raid, ed io come uno sciocco ci credo, tanto da pensare di usarlo per mettere i dati al sicuro.
In effetti un raid di livello 1 permette di scrivere contemporaneamente su 2 dischi, quindi se uno cede, l'altro continua a funzionare, dandoti il tempo ed il modo di intervenire e permettendoti di non perdere i tuoi preziosi dati.
ci sono altri livelli di raid ma si possono approfondire ovunque.
Dicevamo, il server ha un controller raid ed io lo voglio usare, quindi accedo al controller con f8 configuro 2 drive logici, di cui il secondo è formato da 2 dischi, per un totale di 3 dischi fisici e 2 logici.
Parte linux e vedo sempre i 3 dischi ... sda, sdb ed sdc... e qui vado in crisi...  Per fortuna c'ho un amico che mi illumina, si tratta di fake raid ovvero raid quasi farlocchi.
Non voglio approfondire, vi dirò solo che i controller raid costano e quindi i raid fasulli permettono di impostare dei raid in modo da poter essere gestiti da più sistemi operativi, tipo dualboot, in maniera software, ma a questo punto possiamo far finta di nulla e procedere con il software.

Raid in maniera software e linux.

Se abbiamo bisogno di una piccola nas possiamo farla in casa con 2 dischi in mirror (raid 1):
se abbiamo bisogno di un disco sicuro possiamo farlo con il raid.

prima operazione :


sudo modprobe raid456  
sudo cat /proc/mdstat

dovrebbe dire che non ci sono raid configurati.
quindi installiamo multi disk admin, sotto debian like:

sudo apt-get install mdadm
 a questo punto se tutto è andato come dovrebbe possiamo procedere alla creazione del raid. Nel caso di esempio creeremo un raid su 2 dischi fisici (potrebbe essere fatto su 2 partizioni) sdb ed sdc, in cui i due dischi sono in mirror.
sudo mdadm --create --verbose /dev/md0 --level=1 --raid-devices=2 /dev/sdb /dev/sdc
ora il raid è creato, quindi andiamo a salvare la configurazione in questo modo.
sudo mdadm --detail --scan >> /etc/mdadm/mdadm.conf
Il gioco è fatto.
sudo cat /proc/mdstat
ci dirà come vanno le cose con il nostro raid.
sudo fdisk /dev/md0
mi permette di creare la partizione sul disco raid e
sudo mkfs.ext4 /dev/md0p1
me la fa formattare in ext4
sudo reboot
al riavvio mi ritrovo sotto dev

/dev/md127  ed /dev/md127p1


quindi aggiungo in fstab
sudo nano -w  /etc/fstab
la seguente riga :

/dev/md127p1                      /opt         ext4   acl 0 1

ed il mio disco in raid è montato su /opt al boot

mercoledì 4 febbraio 2015

Gnome cambia l'immagine di sfondo ogni tot minuti

Ci sono molti programmi wallpaper changer che promettono di cambiare lo sfondo di gnome o ubuntu, ma a me non funzionano.
Cambiare lo sfondo selezionandolo a caso in una cartella delle immagini, sembra una cosa semplice, ed in effetti lo è :).
Vediamo come svincolarci dal sistema operativo e dai tool grafici.
Utilizzeremo gconf tool ,  python e crontab.

nella nostra cartella home creiamo una cartella bin

$ mkdir bin

spostiamoci in bin e creiamo un file per cambiare lo sfondo

$ cd bin
$ gedit -w cambiaSfondo.sh

con questo contenuto :

PID=$(pgrep gnome-session)
export DBUS_SESSION_BUS_ADDRESS=$(grep -z DBUS_SESSION_BUS_ADDRESS /proc/$PID/environ|cut -d= -f2-)
set DISPLAY=:0
set GSETTINGS_BACKEND=dconf
/usr/bin/python /home/NOMEUTENTE/bin/randomWall.py


attenti a cambiare NOMEUTENTE con il vostro nome utente!!!

dopo di che creiamo il file python che sorteggia lo sfondo e lo applica

$ gedit randomWall.py

con il seguente contenuto :

#!/usr/bin/python
import os,random
cartellaWallpapers='/home/NOMEUTENTE/Immagini/sfondi/'
immagineCasuale=random.choice(os.listdir(cartellaWallpapers))
os.system ( "  /usr/bin/gsettings set org.gnome.desktop.background picture-uri  \"file://"+cartellaWallpapers+ immagineCasuale + "\"")



ricordate di cambiare NOMEUTENTE nel vostro nome account e volendo potete scegliere la cartella dove avete le immagini di sfondo.
l'esempio usa la cartella Immagini/sfiondi.

infine :

$ crontab -e

*/5 * * * * /home/NOMEUTENTE/bin/cambiaSfondo.sh

sostituendo NOMEUTENTE con il vostro account

cambierà lo sfondo ogni 5 minuti.

martedì 23 dicembre 2014

Centos 7 ed ntfs

Come aggiungere ntfs su centos 7...

il pacchetto ntfs-3g non è nel repository standard di centos, quindi basta aggiungere il repo epel.
da root o da sudo :

yum install epel-release

a questo punto dovrebbe essere possibile installare ntfs-3g

scrivendo

yum installntfs-3g

Tuttavia se come mi è accaduto vi esce un errore dopo un po di tempo :



One of the configured repositories failed....

potete risolvere come ho fatto io :

nano -w /etc/yum.repos.d/epel.repo

rimuovere il commento sulle baseurl
e mettere il commento alle mirrorlist
esempio:

baseurl=http://download.fedoraproject.org/pub/epel/7/SRPMS
#mirrorlist=https://mirrors.fedoraproject.org/metalink?repo=epel-source-7&arch=$basearch

quindi in fine ripetere l'operazione :

yum install ntfs-3g

domenica 14 dicembre 2014

Wildfly 9 configurare un pool verso postgresql

Configurare un pool di connessione al database sembra una operazione semplice, ma si può finire per sprecare un sacco di tempo prezioso...

Preparazione :

scaricare il driver jdbc del database:
nel mio caso : postgresql-9.3-1102.jdbc41.jar

per poter creare il pool dobbiamo creare prima un modulo per il driver:

Modulo :

sotto la cartella principale di wildfly creare il seguente percorso :
  cartellawildfly/modules/org/postgres/main/

in questa cartella copiamo il file postgresql-xxxxx.jdbc41.jar e creiamo un file di nome module.xml

il file module.xml avrà il seguente contenuto : 

<?xml version="1.0" ?>

<module xmlns="urn:jboss:module:1.1" name="org.postgres">

    <resources>
        <resource-root path="postgresql-9.3-1102.jdbc41.jar"/>
    </resources>

    <dependencies>
        <module name="javax.api"/>
        <module name="javax.transaction.api"/>
    </dependencies>

</module>

una volta fatto questo abbiamo dato a wildfly le informazioni necessarie sul driver.

Datasource :

a questo punto andiamo a modificare un altro file per aggiungere il pool:
cartellawildfly/standalone/configuration/standalone.xml
aprendo il file con un editor di testo andiamo a cercare il punto dove sono contenute le info sui datasource, per l'esattezza i tag <datasources></datasources> li delimitano.
quindi al loro interno potremmo incollare un descrittore simile a questo :

<datasource jta="true" jndi-name="java:jboss/PostgresDSPool" pool-name="PostgresDSPool" enabled="true" use-ccm="false">
                    <connection-url>jdbc:postgresql://localhost/postgresdb</connection-url>
                    <driver-class>org.postgresql.Driver</driver-class>
                    <driver>postgres</driver>
                    <transaction-isolation>TRANSACTION_READ_COMMITTED</transaction-isolation>
                    <pool>
                        <min-pool-size>5</min-pool-size>
                        <max-pool-size>20</max-pool-size>
                    </pool>
                    <security>
                        <user-name>postgresus</user-name>
                        <password>postgrespwd</password>
                    </security>
                    <validation>
                        <validate-on-match>false</validate-on-match>
                        <background-validation>false</background-validation>
                    </validation>
                    <statement>
                        <share-prepared-statements>false</share-prepared-statements>
                    </statement>
                </datasource>
              
                <drivers>
              
                  
                    <driver name="postgres" module="org.postgres">
                        <driver-class>org.postgresql.Driver</driver-class>
                    </driver>
              
                </drivers>


Cercare inoltre il default-bindings se si è rimosso il contenuto del datasource di default e modificarlo come segue :

    <default-bindings context-service="java:jboss/ee/concurrency/context/default" 
                   datasource="java:jboss/PostgresDSPool" 
                   managed-executor-service="java:jboss/ee/concurrency/executor/default" 
                   managed-scheduled-executor-service="java:jboss/ee/concurrency/scheduler/default" 
                   managed-thread-factory="java:jboss/ee/concurrency/factory/default"/>

dove i parametri da settare a proprio piacimento sono :
nome del datasource :    java:jboss/PostgresDSPool
nome dell'host del server o ip del db : localhost

nome del database : postgresdb
nome utente : postgresus
password utente  : postgrespwd


a questo punto possiamo riavviare wildfly ed andare a testare la connessione:
per accedere al pannello di amministrazione, ammesso che il server sia su localhost :
http://localhost:9990/console
se non accede esce un messaggio che vi indica le modalità di creazione di un utente.
sulla sinistra : connector -> datasources
selezionate la riga postgresdspool, in basso connection e quindi test.
se la connessione non riesce andate a leggere i log per capire se avete sbagliato l'utente (postgresus) la password ( nell'esempio è postgrespwd ) o il database ( postgresdb ) o altro.