Raspberry - hotspot wifi - senza proxy nella LAN

Jim Warren

Bisogna prima di tutto installare

apt-get install dnsmasq hostapd

a questo punto si va:

nano /etc/dhcpcd.conf

aggiungere la seguente riga alla base del file:

denyinterfaces wlan0

Ora dobbiamo configurare l’ IP statico.

nano /etc/network/interfaces

allow-hotplug wlan0
iface wlan0 inet static
address 172.24.1.1
netmask 255.255.255.0
network 172.24.1.0
broadcast 172.24.1.255
# wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf

auto eth0
allow-hotplug eth0
iface eth0 inet dhcp
wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf
iface default inet dhcp

per far ripartire l'interfaccia bisogna digitare

service networking restart

HOSTPAD

Ora dobbiamo configurare hostapd.
Dobbiamo creare un nuovo file di configurazione con il comando

nano vi /etc/hostapd/hostapd.conf

# This is the name of the WiFi interface we configured above
interface=wlan0

# Use the nl80211 driver with the brcmfmac driver
driver=nl80211

# This is the name of the network
ssid=VoxPopuli-Hub

# Use the 2.4GHz band
hw_mode=g

# Use channel 6
channel=6

# Enable 802.11n
ieee80211n=1

# Enable WMM
wmm_enabled=1

# Enable 40MHz channels with 20ns guard interval
ht_capab=[HT40][SHORT-GI-20][DSSS_CCK-40]

# Accept all MAC addresses
macaddr_acl=0

# Use WPA authentication
auth_algs=1

# Require clients to know the network name
ignore_broadcast_ssid=0

# Use WPA2
wpa=2

# Use a pre-shared key
wpa_key_mgmt=WPA-PSK

# The network passphrase
wpa_passphrase=raspberry

# Use AES, instead of TKIP
rsn_pairwise=CCMP

quindi dare il comando

/usr/sbin/hostapd /etc/hostapd/hostapd.conf

Apri il file di configurazione di hostapd con

nano /etc/default/hostapd

e cerca la riga #DAEMON_CONF="".

Deve essere sostituita con DAEMON_CONF="/etc/hostapd/hostapd.conf".

mv /etc/dnsmasq.conf /etc/dnsmasq.conf.orig
vi /etc/dnsmasq.conf

interface=wlan0 # Use interface wlan0
listen-address=172.24.1.1 # Explicitly specify the address to listen on
bind-interfaces # Bind to the interface to make sure we aren't sending things elsewhere
server=8.8.8.8 # Forward DNS requests to Google DNS
domain-needed # Don't forward short names
bogus-priv # Never forward addresses in the non-routed address spaces.
dhcp-range=172.24.1.50,172.24.1.150,12h # Assign IP addresses between 172.24.1.50 and 172.24.1.150 with a 12 hour lease time

Una delle ultime cose che dobbiamo fare è di abilitare l’inoltro dei pacchetti.

Per fare questo apriamo il file sysctl.conf con sudo vi /etc/sysctl.con e togliamo il commento dall’inizio della riga che contiene net.ipv4.ip_forward=1.

L’operazione appena fatta diventa effettiva al prossimo riavvio della raspberry, ma è possibile attivare subito la modifica con:

sh -c "echo 1 > /proc/sys/net/ipv4/ip_forward"

A questo punto facciamo un ultima operazione che ci consentirà di condividere la connessione internet della Raspberry Pi (attraverso la scheda di rete) con i dispositivi collegati tramite WiFi. Per farlo bisogna configurare un NAT tra l’interfaccia wlan0 e l’interfaccia eth0. Possiamo farlo utilizzando i seguenti comandi:

iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
iptables -A FORWARD -i eth0 -o wlan0 -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A FORWARD -i wlan0 -o eth0 -j ACCEPT

Questa ultima configurazione deve essere applicata tutte le volte che la Raspberry viene riavviata, quindi procediamo in questo modo. Prima di tutto ci salviamo le regole in un file:

sh -c "iptables-save > /etc/iptables.ipv4.nat

poi, per fare in modo che vengano applicate ad ogni reboot della Raspberry, ne aggiungiamo l’esecuzione nel file rc.local. Tale file, situato sotto /etc, viene eseguito ogni volta che la Rasp parte. Quindi, riassumento:

vi /etc/rc.local
al cui interno metteremo:

iptables-restore < /etc/iptables.ipv4.nat
IMPORTANTE: Se non vuoi che la Rasp si blocchi in fase di boot, ricorda di controllare che alla fine del file /etc/rc.local ci sia sempre l’istruzione exit 0 alla fine.

Reboot del rapberry

Pubblicato in Senza categoria | Lascia un commento

TPSIT - CIDR - Classless Inter-Domain Routing

Jim Warren

Il CIDR (Classless Inter-Domain Routing) è un nuovo schema di indirizzamento introdotto nel 1993 per sostituire lo schema classful secondo il quale tutti gli indirizzi IP appartengono ad una specifica classe (classe A, B e C).

La notazione usata per esprimere indirizzi CIDR è la seguente: a.b.c.d/x, dove x è il numero di bit (contati partendo dal più significativo a sinistra) che compongono la parte di indirizzo della rete. I rimanenti y = ( 32 − x ) bit consentono di calcolare il numero di host della sottorete pari a 2^{y}-2  ( − 2 ) è dovuto al fatto che il primo e l'ultimo indirizzo di ogni rete non sono assegnabili ad alcun host, in quanto riservati rispettivamente come indirizzo della rete in generale (usato ad esempio nelle tabelle dei router) e come indirizzo di broadcast (ovvero un indirizzo che comprende indistintamente ogni altro indirizzo all'interno di quella rete: viene usato ad esempio in alcuni protocolli di routing).

Utilizzando il CIDR, possiamo scegliere che struttura dare all’indirizzamento specificando semplicemente che parte assegnare alla rete e quale assegnare all’host.

Prendiamo due reti e assumiamo che gli host appartengano allo stesso dominio di collisione (uno switch o un hub):

  • 192.168.0.0/24 – netmask: 11111111.11111111.11111111.00000000 (255.255.255.0)
  • 192.168.1.0/24 – netmask: 11111111.11111111.11111111.00000000 (255.255.255.0)

Alle due reti sono assegnati 256 IP (28 bit) ciascuna, tra cui 254 usabili per gli host (difatti il .0 è riservato per la rete ed il .255 per il broadcast). Tuttavia, gli host di una rete non saranno in grado di raggiungere gli host dell’altra rete, pur essendo connessi allo stesso dominio di collisione. Ciò è dovuto al fatto che, avendo scelto come prefisso di routing i primi tre ottetti, le due reti risultano totalmente indipendenti e disconnesse l’un l’altra. Dunque, affinché gli host delle due reti possano vedersi, è necessario collegarle ad un router in grado di instradare i pacchetti.

Una seconda soluzione consiste nel diminuire di un bit il prefisso di routing, assegnando così a tale porzione 23 bit anziché 24, al fine di formare due sotto-reti:

  • 192.168.0.0/23 – netmask: 11111111.11111111.11111110.00000000 (255.255.254.0)
  • 192.168.1.0/23 – netmask: 11111111.11111111.11111110.00000000 (255.255.254.0)

In questo caso abbiamo i primi 23 bit assegnati al prefisso di routing, mentre i successivi 9 bit per gli host (512 IP). Poiché per ogni ottetto è possibile utilizzare fino a 256 bit, avremo due sotto-reti (192.168.0.0 e 192.168.1.0) in grado di comunicare senza necessità di instradare pacchetti tramite un router.

Voglio inserire i l link al seguente sito che calcola automaticamente la netmask ed il numero di host che possono essere presenti nella rete:

https://ipaddressguide.com/cidr

se adesso mettessimo come notazione della nostra rete:

172.16.0.1/12 avremo nella sottorete 255.240.0.0 e quindi

2^{14}=1048576 host a disposizione.

NOTA

Nella vecchia struttura a classi la notazione delle reti non permetteva un'efficiente suddivisione degli indirizzi in quanto le sottomaschere erano rigide:

classe A/8

classe B/16

classe C/24

in questo nuovo tipo invece si ha un'ottimizzazione degli indirizzi e dell'hardware.

Pubblicato in Senza categoria | Lascia un commento

Raspberry - impostare Chromium con proxy

Se si lavora con un proxy per poter navigare è necessario impostare il proxy.

Attenzione

il comando successivo non deve essre dato come root ma come utente non root:

chromium-browser --proxy-server="ipproxy:portaproxy"

se vine dato come root comparirà il seguent messaggio:

[1116/083633.698451:FATAL:chrome_main_delegate.cc(477)] Check failed: process_type.empty(). Unable to get the user data directory for process type: zygote
#0 0x0000020c0eb0 <unknown>
#1 0x0000020d8210 <unknown>
#2 0x00000086f530 <unknown>
#3 0x000001d2abcc <unknown>
#4 0x000001d31640 <unknown>
#5 0x000001d29c88 <unknown>
#6 0x00000086ed0c <unknown>
#7 0x000075501678 __libc_start_main

Received signal 6
#0 0x0000020c0eb0 <unknown>
#1 0x0000020c0e20 <unknown>
#2 0x0000755176c0 <unknown>
#3 0x00007551645c gsignal
[end of stack trace]
Calling _exit(1). Core file will not be generated.
[1708:1708:1116/083633.704762:FATAL:zygote_host_impl_linux.cc(182)] Check failed: ReceiveFixedMessage(fds[0], kZygoteBootMessage, sizeof(kZygoteBootMessage), &boot_pid).
#0 0x0000020a6eb0 <unknown>
#1 0x0000020be210 <unknown>
#2 0x00000105e388 <unknown>
#3 0x00000105d2d8 <unknown>
#4 0x00000105d908 <unknown>
#5 0x000000ceacb8 <unknown>
#6 0x000000cf20c8 <unknown>
#7 0x000000cea358 <unknown>
#8 0x000001d110cc <unknown>
#9 0x000001d179cc <unknown>
#10 0x000001d0fc88 <unknown>
#11 0x000000854d0c <unknown>
#12 0x00007557c678 __libc_start_main

Received signal 6
#0 0x0000020a6eb0 <unknown>
#1 0x0000020a6e20 <unknown>
#2 0x0000755926c0 <unknown>
#3 0x00007559145c gsignal
[end of stack trace]
Calling _exit(1). Core file will not be generated.

 

Pubblicato in Senza categoria | Lascia un commento

Raspberry - apt-get con proxy

Jim Warren

Tale esigenza nasce quando si debba aggiornare o installare un pacchetto e si è in una LAN con un proxy attivo.

Io ho adottato questo metodo:

cd /etc/apt/apt.conf.d

poi:

sudo nano 10proxy

e poi ho scritto:

Acquire::http::Proxy "http://username:password@yourproxyaddress:proxyport/";

dove con username e password esattamente la password e username per accedere al proxy.

Altro comando:

export http_proxy="http://username:password@host:port/"

più compatto ma a volta potrebbe non funzionare.

Pubblicato in Senza categoria | Lascia un commento

Raspberry - bridge wifi - ethernet

Raspberry può diventare un bridge tra il wifi (dato da un cellulare che fa da hotspot mobile o un qualsiasi altro segnale wifi) e un altro host che ha la necessità di avere un collegamento alla rete ma è privo di wifi.

Il raspberry diventa un server dhcp ossia fornisce un indirizzo ip a tutti gli host che siu collegano ad esso.

Nella mia configurazione ho collegato all'uscita ethernet raspberry uno switch a cui si collegava un host con windows 10, un host debian sempre collegato allo switch ed un host Ubuntu sempre collegato allo switch.

Per comprendere tutti i passaggi è necessario conoscere:

  • impostazione porta wlan
  • dhcp
  • ip statico
  • modifica parametri di sistema
  • firewall

Per eseguire i comandi che seguono bisogna essere root

Impostazione wlan0

nano /etc/wpa_supplicant/wpa_supplicant.conf
network=

{

      ssid="ReteETE"

      psk="PASSWORD"

}

con

  • ssid il nome della rete wifi
  • psk la password del wifi

si può verificare la corretta impostazione della rete con il comando:

wpa_passphrase "NOME-RETE" "password"

Impostazione IP statico

nano /etc/network/interfaces

e lo modifico come segue:

allow-hotplug eth0
iface eth0 inet static
address 10.0.0.1    
netmask 255.255.255.0
network 10.0.0.0
broadcast 10.0.0.255

auto wlan0
allow-hotplug wlan0
iface wlan0 inet dhcp
wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf
iface default inet dhcp


 

da notare come gestisco entrambe le porte la eth0 e la wlan0 in maniera tale che quando ricarico la configurazione entrambe le porte siano correttamente configurate.

Per caricare la corretta configurazione digitare il comando:

service networking restart

Per verificare lo stato del servizio digitare:

service networking status

Installazione dhcp

per installare il dhcp bisogna prima installarlo con il comando:

apt-get install dnsmasq

è buona regola copiare il vecchio file di configurazione prima di modificarlo:

mv /etc/dnsmasq.conf /etc/dnsmasq.conf.orig

adesso vado a digitarlo:

nano /etc/dnsmasq.conf

ed inserisco le seguenti righe:

interface=eth0 # Use interface eth0
listen-address=10.0.0.1 # Specify the address to listen on
bind-interfaces      # Bind to the interface
server=208.67.222.222 # Use OpenDNS
domain-needed        # Don't forward short names
bogus-priv           # Drop the non-routed address spaces.
dhcp-range=10.0.0.10,10.0.0.50,12h # IP range and lease time

è necessario anche abilitare il forward nel file sdi configurazione sysctl.conf per abilitire l'invio IP IPv4p

Modifica variabili di configurazione di sistema

Bisogan editare il file:

nano /etc/sysctl.conf

e togliere il cancelletto alla riga

#net.ipv4.ip_forward=1

per attivare il nuovo parametro digitare:

sysctl --system

per verificare i parametri attivi nel sistema digitare il comando:

sysctl -a

Configurazione firewall

S modifica il firewall per consentire a tutto il traffico dalla nostra interfaccia eth0  di convogliarsi nella wlan0.

iptables -t nat -A POSTROUTING -o wlan0 -j MASQUERADE
iptables -A FORWARD -i wlan -o eth0 -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A FORWARD -i eth0 -o wlan0 -j ACCEPT

per consentire a tutte le modifiche di diventare definitive e non di cancellarsi ogni qualvolta che si fa il reboot del sistema si deve:

sh -c "iptables-save > /etc/iptables.ipv4.nat"
nano /etc/rc.local

inserire prima della riga exit 0 la riga:

iptables-restore < /etc/iptables.ipv4.nat

A questo punto si può far partire il dhcp:

service dnsmasq start

ma considerando tutte le notevoli modifiche effettuate, meglio è far ripartire il sistema.

 

Pubblicato in Senza categoria | Contrassegnato , , | 2 commenti

TPSIT - Linux - Installazione wordpress

WordPress è lo strumento più conosciuto per la creazione di blog.

Prerequisito aver funzionante un server LAMP.

mysql -u root -p

ossia entro nel database come amministratore

CREATE USER 'wpuser'@'localhost' IDENTIFIED BY 'userpassword';

ossia creo un utente wpuser con un'opportuna password, si può verificare entrando in phpmyadmin il corretto funzionamento di tale utente.

CREATE DATABASE wp_database;
GRANT ALL ON `wp_database`.* TO `wpuser`@`localhost`;
FLUSH PRIVILEGES;
exit;
wget https://wordpress.org/latest.tar.gz

ossia mi scarico l'ultima versione di wordpress

tar xpf latest.tar.gz

scompatto il file compresso

copio tutta la mia directory nella directory in cui salvo i miei file html

cp -r wordpress /var/www/html

poi apro il mio web ed ho:

http://localhost/wordpress/index.php

mi chiederà varie impostazioni per il suo funzionamento, dare i comandi opportuni a seconda dell'impostazione data precedentemente.

Si chiederà di creare un file wp-config.php, basta usare nano e si creerà.

Alla fine per accedere al proprio wordpress locale si digita sul proprio browser:

localhost/wordpress e dando l'invio si avrà la schermata iniziale di wordpress.

Pubblicato in Senza categoria | Lascia un commento

TPSIT - Backup completo del sistema con tar

Renè Magritte

Quando si sta installando del software nuovo è buona norma effettuare un backup completo del sistema in quanto tutto ciò che è stato installato deve essere ripristinato esattamente in quella maniera.

Ci si pone come utente root in /

 

 

Con il seguente comando:

tar -cvpzf /backup.tgz --exclude=/proc/* --exclude=/sys/* --exclude=/lost+found/* --exclude=/mnt/* --exclude=/media/* --exclude=/backup.tgz /

ossia utilizzo le opzioni del comando tar:

-c: indica che noi dobbiamo creare un nuovo archivio

-v: esegue l’operazione in modalità verbose, ossia ci mostra nel terminale tutto quello che il computer sta facendo

-p: dice a tar di mantenere inalterati tutti i permessi dei file

-z: comprime il file con gzip

-f /backup.tgz: f indica il nome del file compresso, in questo caso /backup.tgz, quindi verrà creato nella cartella /

–exclude=: non è necessario fare il backup dei contenuti delle cartelle /proc, /sys e /lost+found, sono stati eliminati anche /media e /mnt per evitare che venisse fatto un backup anche di eventuali partizioni o penne usb montate e infine è stato eliminato dal backup il file /backup.tgz, che dal momento in cui viene creato fa a tutti gli effetti parte del contenuto del disco e quindi è meglio eliminarlo dal backup

/: per ultimo bisogna indicare di quale cartella si vuole fare il backup, quindi in questo caso scriviamo / per fare un backup dell’intero disco

 

RIPRISTINO

tar -xvpzf /backup.tgz -C /

-x: indica che si vuole estrarre l’archivio

-C /: si sposta nella directory specificata, in questo caso /

Pubblicato in Senza categoria | Lascia un commento

PHP - Approccio MySqli - connessione e creazione database, tabelle

Renè Magritte

Con Php ci si può interfacciare con il mariaDB.

MySQLi (MySQL improved), che può essere programmata tramite un approccio Object Oriented sebbene mantenga la possibilità di poter essere utilizzata anche con un approccio procedurale è un modo di poter scrivere sql.

Comprende le API (Application Programming Interface) per le prepared statements e le stored procedures, ma anche per query multiple e transazioni.

Per iniziare a lavorare con la libreria è necessario innanzitutto istanziare la relativa classe: il costruttore di MySQLi utilizzerà i parametri forniti, o quelli di default se non ne vengono specificati altri, per aprire la connessione con il DBMS, essa sarà il nostro tramite per comunicare di volta in volta le operazioni da svolgere sul database.

I metodi connect_error() e connect_errno() sono molto utili per controllare l’avvenuta connessione e consiglio sempre di usarli.

NB. intendere [dollaro] con il relativo simbolo

Eccone un esempio:

[dollaro]mysqli = new mysqli('localhost', 'nomeutente', 'Password');
   if ([dollaro]mysqli->connect_error) {
     die('Errore di connessione (' . [dollaro]mysqli->connect_errno . ') '
                        . [dollaro]mysqli->connect_error);
     } else {
        echo 'Connesso. ' . [dollaro]mysqli->host_info . "\n";
                }

il passo successivo è  quello di creare il database

if (![dollaro]mysqli->query("CREATE DATABASE biblioteca")) {
   die('Errore di creazione (' . [dollaro]mysqli->connect_errno . ') '
                        . [dollaro]mysqli->connect_error);
     } else {
        echo 'Ho creato il database. ' . [dollaro]mysqli->host_info . "\n";
                }

Per avere i dettagli si può andare sulla seguente pagina in cui vi sono i comandi musqli.

Adesso creo una tabella:

[dollaro]mysqli->query("CREATE TABLE login
( id INT ( 5 ) NOT NULL AUTO_INCREMENT,
user VARCHAR(40) NOT NULL,
password VARCHAR(64) NOT NULL,
PRIMARY KEY (id))");

stare sempre molto attenti alla sintassi SQL eventualmente prima provarla sul phpmyadmin.

si può anche scrivere in questa maniera:

[dollaro]query="CREATE TABLE libri ( id INT(5) NOT NULL AUTO_INCREMENT,autore VARCHAR(40) NOT NULL,titolo TEXT NOT NULL,editore VARCHAR(40) NOT NULL,anno SMALLINT(2) NOT NULL,PRIMARY KEY (id))";

if (![dollaro]mysqli->query([dollaro]query)) {
die([dollaro]mysqli->error);}

ossia aver definito la variabile [dollaro]query e gestire l'errore nella creazione.

[dollaro]query = " CREATE TABLE utenti ( id INT(5) NOT NULL AUTO_INCREMENT ,nome VARCHAR(30) NOT NULL ,cognome VARCHAR(30) NOT NULL ,indirizzo TEXT NOT NULL ,nascita DATE NOT NULL ,PRIMARY KEY (id))";

if (![dollaro]mysqli->query([dollaro]query)) {
die([dollaro]mysqli->error);}

e defnisco infine la tabella

[dollaro]mysqli->query("CREATE TABLE prestiti
( id INT NOT NULL AUTO_INCREMENT ,
id_utente INT NOT NULL ,
id_libro INT NOT NULL ,
data DATE NOT NULL ,
restituito ENUM('0','1') NOT NULL ,
PRIMARY KEY (id))");

naturalmente tutto ciò all'interno di

<?php

?>

 

Pubblicato in Senza categoria | Lascia un commento

Linux - elenco pacchetti installati - installazione nuovo software da tar.gz o .deb

Janek Yerka

PACCHETTI INSTALLATI

Per verificare i pacchetti installati dare il seguente comando

dpkg -l

se si vogliono ulteriori informazioni si deve dare il comando:

ls /var/log/ | grep dpkg

a questo punto si può andare a vedere che cosa si è installato nei dettagli.

INSTALLARE DA TAR.GZ

Per installare un pacchetto che si è appena scaricato con estensione tar.gz

dare il seguente comando:

tar -xvzf nome_file.tar.gz

per i dettagli andare a vedere il post tar

./configure

make

make install

make clean

 

INSTALLARE da .deb

dare il comando

dpkg -i nome_file.deb

Estrarre da .zip

dare il comando:

unzip nomefile.zip

Pubblicato in Senza categoria | Lascia un commento

PHP - Introduzione generale

PHP è un linguaggio per lo scripting server-side, ossia un linguaggio che risiede in un server in remoto e che, in fase di esecuzione, interpreta le informazioni ricevute da un client grazie al Web server, le elabora e restituisce un risultato al client che ha formulato la richiesta.

PHP si differenzia poi dai linguaggi di scripting client side, come per esempio JavaScript, per via del fatto che il sorgente viene eseguito nel server, generando markup HTML da inviare al client; quest’ultimo riceverà i risultati dell’esecuzione di un’applicazione ma il codice eseguito non sarà mai visibile.

PHP nasce nel 1994 dalla tastiera di Rasmus Lerdorf; inizialmente esso veniva presentato come una serie di Common Gateway Interface (CGI) binari scritti in C per tracciare il numero di visite all’interno della suo homepage personale. Da qui il primo nome del PHP: Personal Home Page. In seguito però verrà rinominato in Hypertext Preprocessor.

Per sviluppare in PHP non sono necessari di molti strumenti, il set up della macchina è piuttosto veloce e si è operativi in breve tempo. Vediamo di quali soluzioni abbiamo bisogno:

  • un server Web;
  • PHP;
  • un editor di testo;
  • un browser per la navigazione Internet;
  • un gestore di database per l’eventuale interazione con i dati.

Per poter scrivere del codice è consigliabile usare un IDE (Integrated Development Environment)attraverso il quale si possa poi digiatare del software.

Nel caso specifico si userà Eclipse.

Ambiente LAMP

Pubblicato in Senza categoria | Lascia un commento