D-Link 5020L e ZoneMinder

 D-Link 5020L e ZoneMinder

D-Link 5020L e ZoneMinder. Guida su come configurare ZoneMinder con telecamere D.Link 5020L Nel wiki di ZoneMinder si trovano i riferimenti a tutte le telecamere supportate, comprese queste, ma in questa guida ci saranno immagini per tutti i passaggi. I parametri da inserire quando si aggiunge la telecamera sono i seguenti:

Source Type: Remote
Remote Protocol: HTTP
Remote Method: Simple
Remote Host Name: user:pass@IP-Camera
Remote Host Port: 80 (Default)
Remote Host Path: /video.cgi
Colors: 24 bit
Capture width: 640
Capture Height: 480

D-Link 5020L e ZoneMinderD-Link 5020L e ZoneMinder

 

PTZ Settings:

esiste uno script nel wiki che serve a far funzionare il tutto:

# =========================================================================r
#
# ZoneMinder D-Link DCS-5020L IP Control Protocol Module, $Date: $, $Revision: $
# Copyright (C) 2013 Art Scheel
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation; either version 2
# of the License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
#
# ==========================================================================
#
# This module contains the implementation of the D-Link DCS-5020L IP camera control
# protocol. 
#
package ZoneMinder::Control::DCS5020L;

use 5.006;
use strict;
use warnings;

require ZoneMinder::Base;
require ZoneMinder::Control;

our @ISA = qw(ZoneMinder::Control);

our $VERSION = $ZoneMinder::Base::VERSION;

# ==========================================================================
#
# D-Link DCS-5020L Control Protocol
#
# ==========================================================================

use ZoneMinder::Logger qw(:all);
use ZoneMinder::Config qw(:all);

use Time::HiRes qw( usleep );

sub new
{
    my $class = shift;
    my $id = shift;
    my $self = ZoneMinder::Control->new( $id );
    bless( $self, $class );
    srand( time() );
    return $self;
}

our $AUTOLOAD;

sub AUTOLOAD
{
    my $self = shift;
    my $class = ref($self) || croak( "$self not object" );
    my $name = $AUTOLOAD;
    $name =~ s/.*://;
    if ( exists($self->{$name}) )
    {
        return( $self->{$name} );
    }
    Fatal( "Can't access $name member of object of class $class" );
}

sub open
{
    my $self = shift;

    $self->loadMonitor();

    use LWP::UserAgent;
    $self->{ua} = LWP::UserAgent->new;
    $self->{ua}->agent( "ZoneMinder Control Agent/" . ZoneMinder::Base::ZM_VERSION );
    $self->{state} = 'open';
}

sub close
{
    my $self = shift;
    $self->{state} = 'closed';
}

sub printMsg
{
    my $self = shift;
    my $msg = shift;
    my $msg_len = length($msg);

    Debug( $msg."[".$msg_len."]" );
}

sub sendCmd
{
    my $self = shift;
    my $cmd = shift;

    my $result = undef;

    printMsg( $cmd, "Tx" );

    my $req = HTTP::Request->new( POST=>"http://".$self->{Monitor}->{ControlAddress}."/PANTILTCONTROL.CGI" );
    $req->content($cmd);
    my $res = $self->{ua}->request($req);

    if ( $res->is_success )
    {
        $result = !undef;
    }
    else
    {
        Error( "Error check failed: '".$res->status_line()."'" );
    }

    return( $result );
}

sub sendCmd2
{
    my $self = shift;
    my $cmd = shift;
    my $result = undef;
    printMsg( $cmd, "Tx" );

    my $req = HTTP::Request->new( GET=>"http://".$self->{Monitor}->{ControlAddress}."/$cmd".$self->{Monitor}->{ControlDevice} );

    my $res = $self->{ua}->request($req);

    if ($res->is_success )
    {
        $result = !undef;
    }
    else
    {
        Error( "Error check failed:'".$res->status_line()."'" );
    }

    return( $result );
}

sub move
{
    my $self = shift;
    my $dir = shift;
    my $panSteps = shift;
    my $tiltSteps = shift;

    my $cmd = "PanSingleMoveDegree=$panSteps&TiltSingleMoveDegree=$tiltSteps&PanTiltSingleMove=$dir";
    $self->sendCmd( $cmd );
}

sub moveRelUpLeft
{
    my $self = shift;
    Debug( "Move Up Left" );
    $self->move( 0, 1, 1 );
}

sub moveRelUp
{
    my $self = shift;
    Debug( "Move Up" );
    $self->move( 1, 1, 1 );
}

sub moveRelUpRight
{
    my $self = shift;
    Debug( "Move Up" );
    $self->move( 2, 1, 1 );
}

sub moveRelLeft
{
    my $self = shift;
    Debug( "Move Left" );
    $self->move( 3, 1, 1 );
}

sub moveRelRight
{
    my $self = shift;
    Debug( "Move Right" );
    $self->move( 5, 1, 1 );
}

sub moveRelDownLeft
{
    my $self = shift;
    Debug( "Move Down" );
    $self->move( 6, 1, 1 );
}

sub moveRelDown
{
    my $self = shift;
    Debug( "Move Down" );
    $self->move( 7, 1, 1 );
}

sub moveRelDownRight
{
    my $self = shift;
    Debug( "Move Down" );
    $self->move( 8, 1, 1 );
}

# moves the camera to center on the point that the user clicked on in the video image. 
# This isn't extremely accurate but good enough for most purposes 
sub moveMap
{
    # if the camera moves too much or too little, try increasing or decreasing this value
    my $f = 11;

    my $self = shift;
    my $params = shift;
    my $xcoord = $self->getParam( $params, 'xcoord' );
    my $ycoord = $self->getParam( $params, 'ycoord' );

    my $hor = $xcoord * 100 / $self->{Monitor}->{Width};
    my $ver = $ycoord * 100 / $self->{Monitor}->{Height};
   
    my $direction;
    my $horSteps;
    my $verSteps;
    if ($hor < 50 && $ver < 50) {
        # up left
        $horSteps = (50 - $hor) / $f;
        $verSteps = (50 - $ver) / $f;
        $direction = 0;
    } elsif ($hor >= 50 && $ver < 50) {
        # up right
        $horSteps = ($hor - 50) / $f;
        $verSteps = (50 - $ver) / $f;
        $direction = 2;
    } elsif ($hor < 50 && $ver >= 50) {
        # down left
        $horSteps = (50 - $hor) / $f;
        $verSteps = ($ver - 50) / $f;
        $direction = 6;
    } elsif ($hor >= 50 && $ver >= 50) {
        # down right
        $horSteps = ($hor - 50) / $f;
        $verSteps = ($ver - 50) / $f;
        $direction = 8;
    }
    my $v = int($verSteps + .5);
    my $h = int($horSteps + .5);
    Debug( "Move Map to $xcoord,$ycoord, hor=$h, ver=$v with direction $direction" );
    $self->move( $direction, $h, $v );
}

# this clear function works, but should probably be disabled because 
# it isn't possible to set presets yet. 
sub presetClear
{
    my $self = shift;
    my $params = shift;
    my $preset = $self->getParam( $params, 'preset' );
    Debug( "Clear Preset $preset" );
    my $cmd = "ClearPosition=$preset";
    $self->sendCmd( $cmd );
}

# not working yet
sub presetSet
{
    my $self = shift;
    my $params = shift;
    my $preset = $self->getParam( $params, 'preset' );
    Debug( "Set Preset $preset" );
    # TODO need to first get current position $horPos and $verPos
    #my $cmd = "PanTiltHorizontal=$horPos&PanTiltVertical=$verPos&SetName=$preset&SetPosition=$preset";
    #$self->sendCmd( $cmd );
}

sub presetGoto
{
    my $self = shift;
    my $params = shift;
    my $preset = $self->getParam( $params, 'preset' );
    Debug( "Goto Preset $preset" );
    my $cmd = "PanTiltPresetPositionMove=$preset";
    $self->sendCmd( $cmd );
}

sub presetHome
{
    my $self = shift;
    Debug( "Home Preset" );
    my $cmd = "PanTiltSingleMove=4";
    $self->sendCmd( $cmd );
}


#  IR Controls
#
#  wake = IR on
#  sleep = IR off
#  reset = IR auto


sub wake
{
    my $self = shift;
    Debug( "Wake - IR on" );
    my $cmd = "setDaynightMode?ReplySuccessPage=night.htm&ReplyErrorPage=errrnight.htm&DayNightMode=3&ConfigDayNightMode=Save";
    $self->sendCmd2( $cmd );
}

sub sleep
{
    my $self = shift;
    Debug( "Sleep - IR off" );
    my $cmd = "setDaynightMode?ReplySuccessPage=night.htm&ReplyErrorPage=errrnight.htm&DayNightMode=2&ConfigDayNightMode=Save";
    $self->sendCmd2( $cmd );
}

sub reset
{
    my $self = shift;
    Debug( "Reset - IR auto" );
    my $cmd = "setDaynightMode?ReplySuccessPage=night.htm&ReplyErrorPage=errrnight.htm&DayNightMode=0&ConfigDayNightMode=Save";
    $self->sendCmd2( $cmd );
}

1;
__END__
# Below is stub documentation for your module. You'd better edit it!

=head1 NAME

ZoneMinder::Database - Perl extension for DCS-5020L

=head1 SYNOPSIS

  use ZoneMinder::Database;
  DLINK DCS-5020L

=head1 DESCRIPTION

ZoneMinder driver for the D-Link consumer camera DCS-5020L.

=head2 EXPORT

None by default.



=head1 SEE ALSO

See if there are better instructions for the DCS-5020L at
http://www.zoneminder.com/wiki/index.php/Dlink

=head1 AUTHOR

Art Scheel <lt>ascheel (at) gmail<gt>

=head1 COPYRIGHT AND LICENSE

LGPLv3

=cut

e va copiato nel PATH: /usr/share/perl5/ZoneMinder/Control. Dopodichè andare nel menu Control-Edit-Add New Control:

DLink 5020L e ZoneMinder

ed inserire i parametri  seguenti:

Main: Type: Remote, Protocol: DCS5020L, Name: DCS5020L, Can Wake, Can Sleep, Can Reset
Move: Can Move, Can Move Diagonally, Can Move Mapped, Can Move Relative
Pan: Can Pan, Min Pan Step 1, Max Pan Step 30
Tilt: Can Tilt, Min Tilt Step 1, Max Pan Step 30
Presets: Has Presets, Number: 24, Has Home Preset

Nel Tab Control inserire:

Controllable, Control Type: DCS5020L, Control address: user:pass@ipaddress

D-Link 5020L e ZoneMinder

D-Link 5020L e ZoneMinder

adesso tutto è pronto per la video sorveglianza.

enjoy 😉

 

Analizzare routers e devices IoT con RouterSploit

Analizzare routers e devices IoT con RouterSploitAnalizzare routers e devices IoT con RouterSploit

RouterSploit è uno script in python che serve ad analizzare devices IoT e routers per scoprire eventualmente exploit noti, e quindi mettere il tutto in sicurezza. Può essere anche usato per analizzare dispositivi embedded, stampanti, telecamere. Per installarlo su Debian Stretch/Buster basta seguire questi semplici passi:

sudo apt install python3-pip git
git clone https://www.github.com/threat9/routersploit
cd routersploit/
sudo pip3 install -r requirements.txt

Avviare RouterSploit:

cd routersploit/
sudo python3 rsf.py
use scanners/autopwn
set target 192.168.1.1

i comandi sopra avvieranno RouterSploit che analizzerà l’ip del router, successivamente cambiare target per gli altri devices.

Analizzare routers e devices IoT con RouterSploit

enjoy 😉

Aggiornare Owncloud alla versione 10.0.10 su Debian

Aggiornare Owncloud alla versione 10.0.10 su Debian
Aggiornare Owncloud alla versione 10.0.10 su Debian

Guida su come aggiornare Owncloud dalla versione 10.0.9 alla 10.0.10. Il miglior modo per effettuare l’aggiornamento è quello manuale. Il metodo che userò io è un pò “sporco”, ma secondo me risulta semplice veloce ed efficace. Aggiornare Owncloud alla versione 10.0.10 su Debian

Enable Maintenance Mode

cd /var/www/owncloud/
sudo -u www-data php occ maintenance:mode --on

Stop dei servizi essenziali

sudo service apache2 stop
sudo service cron stop

Download nuova versione

cd /opt/
sudo wget https://download.owncloud.org/community/owncloud-10.0.10.tar.bz2

Nel mio caso tenendo i miei DATI al di fuori della cartella Owncloud, procedo direttamente all’aggiornamento, sostituendo la cartella:

sudo tar xjvf owncloud-10.0.10.tar.bz2  -C /var/www/

Nel caso i DATI si trovassero all’interno della cartella Owncloud, allora bisognerà copiare il vecchio file di configurazione:

cd /opt/
sudo tar xjvf owncloud-10.0.10.tar.bz2
sudo cp /var/www/owncloud/config/config.php owncloud/config/config.php
sudo cp -R owncloud/ /var/www/

Aggiornamento

sudo -u www-data php /var/www/owncloud/occ upgrade

Attivazione servizi

sudo service cron start
sudo service apache2 start

Disable Maintenance Mode

cd /var/www/owncloud/
sudo -u www-data php occ maintenance:mode --off

enjoy 😉

Zoneminder su Raspberry pi 3 B+ Raspbian Stretch

Zoneminder su Raspberry pi 3 B+ Raspbian Stretch

Zoneminder su Raspberry pi 3 B+ Raspbian Stretch

Con l’arrivo del nuovo Raspberry pi 3 B+ nella mia collezione, ho deciso di dedicarlo alla video sorveglianza installando Zoneminder. Per avere delle ottime performance, è necessrio avere una sd card performante, io ho optato per una SanDisk Extreme PRO 64GB, MicroSDXC Classe 10. Si può anche utilizzare un ssd esterno come capiente storage. Tutti i comandi sotto saranno eseguiti come root:

# apt update; apt upgrade -y
# apt install -y build-essential openssh-server apache2 mysql-server mysql-client bison flex php php7.0-curl php7.0-cli php7.0-mysql php-pear php7.0-gd curl sox libncurses5-dev libssl-dev mpg123 libxml2-dev libnewt-dev sqlite3 libsqlite3-dev libasound2-dev libogg-dev libapache2-mod-php7.0 sendmail ffmpeg vlc vlc-data zoneminder
# rm -rf /etc/mysql/my.cnf
# cp /etc/mysql/mariadb.conf.d/50-server.cnf /etc/mysql/my.cnf
# nano /etc/mysql/my.cnf

ed aggiungere:

sql_mode = NO_ENGINE_SUBSTITUTION

come sotto:

# * Basic Settings
#
user            = mysql
sql_mode = NO_ENGINE_SUBSTITUTION
pid-file        = /var/run/mysqld/mysqld.pid
socket          = /var/run/mysqld/mysqld.sock
port            = 3306
basedir         = /usr
datadir         = /var/lib/mysql
tmpdir          = /tmp
lc-messages-dir = /usr/share/mysql
skip-external-locking
# systemctl restart mysql

mettere in sicurezza mysql

# mysql_secure_installation
# service mariadb restart
# systemctl status mariadb.service

Creazione del database:

# mysql -uroot -p < /usr/share/zoneminder/db/zm_create.sql
# mysql -uroot -p -e "grant all on zm.* to 'zmuser'@localhost identified by 'zmpass';"
# mysqladmin -uroot -p reload
# chmod 740 /etc/zm/zm.conf
# chown root:www-data /etc/zm/zm.conf
# adduser www-data video
# a2enmod cgi
# a2enconf zoneminder
# a2enmod rewrite
# systemctl restart apache2
# chown -R www-data:www-data /usr/share/zoneminder/
# systemctl enable zoneminder
# service zoneminder start

per evitare errori modificare il file php.ini aggiungendo Europe/Rome nella sezione Module Settings:

# nano /etc/php/7.0/apache2/php.ini

date.timezone = Europe/Rome

# systemctl restart apache2

a questo punto zoneminder sarà raggiungibile all’indirizzo http://ip_seerver/zm

Per utilizzare un ssd esterno come storage, bisogna configurare /etc/fstab per il montaggio automatico:

# systemctl stop zoneminder
# mkdir -p /ssd/zoneminder/events/
# rm -rf /var/cache/zoneminder/events/
# nano /etc/fstab

ed aggiungere qualcosa del genere:

/dev/sdX1 /ssd ext4 defaults 0 2
/ssd/zoneminder/images /var/cache/zoneminder/images none defaults,bind  0 2
/ssd/zoneminder/events /var/cache/zoneminder/events none defaults,bind 0 2

per poter scrivere sul nuovo storage:

# chown -R www-data:www-data /ssd/zoneminder/
# reboot

Zoneminder su Raspberry pi 3 B+ Raspbian Stretch

al riavvio tutto dovrebbe funzionare, e si potrà procedere alla configurazione di Zoneminder

enjoy 😉

Configurazione Trunk PJSIP Messagenet Freepbx 14

 

Configurazione Trunk PJSIP Messagenet e Freepbx 14

Configurazione Trunk PJSIP Messagenet Freepbx 14

Ho deciso di aggiornare il mio centralino, passando da Raspbian Jessie a Raspbian Stretch, e quindi a Freepbx 14, e di passare da chan_sip a chan_pjsip, sia per quanto riguarda i Trunk che per l'estensioni. Per quanto riguarda la creazione del trunk pjsip con Messagenet, ho notato che è meno intuitivo rispetto al chan_sip di una mia vecchia guida, Ad ogni modo condividerò di seguito gli screenshots di una configurazione di un trunk Messagenet funzionante:

I parametri dell'esempio saranno:

Sip server: sip.messagenet.it
Porta: UDP 5061
Username Messagenet:5XXXXXXXXX
Password Messagenet: NXXXXXX
Numero geografico: 02XXXXXXXX

General:

Configurazione Trunk PJSIP Messagenet Freepbx 14

match pattern:

Configurazione Trunk PJSIP Messagenet  Freepbx 14

pjsip setting general:

Configurazione Trunk PJSIP Messagenet Freepbx 14

pgsip setting advanced:

Configurazione Trunk PJSIP Messagenet Freepbx 14

pjsip setting advanced 2:

Configurazione Trunk PJSIP Messagenet Freepbx 14

queste configurazioni vanno a modificare i files:

pjsip.registration.conf:

[Messagenet02]
type=registration
transport=0.0.0.0-udp
outbound_auth=Messagenet02
retry_interval=60
max_retries=10
expiration=3600
line=yes
endpoint=Messagenet02
auth_rejection_permanent=yes
contact_user=02XXXXXXX
server_uri=sip:sip.messagenet.it:5061
client_uri=sip:54XXXXXXXX@sip.messagenet.it:5061


pjsip.endpoint.conf:

[Messagenet02]
type=endpoint
transport=0.0.0.0-udp
context=from-pstn
disallow=all
allow=ulaw,alaw
aors=sip:sip.messagenet.it:5061
language=it
outbound_auth=Messagenet02
from_domain=sip.messagenet.it
from_user=54XXXXXXXX
t38_udptl=no
t38_udptl_ec=none
fax_detect=no
trust_id_inbound=no
t38_udptl_nat=no
direct_media=no
rewrite_contact=yes
rtp_symmetric=yes
message_context=incoming
dtmf_mode=auto


pjsip.auth.conf:

[Messagenet02]
type=auth
auth_type=userpass
password=NXXXXXXXXX
username=54XXXXXXXX

pjsip.aor.conf:

[Messagenet02]
type=aor
qualify_frequency=60
contact=sip:54XXXXXXXX@sip.messagenet.it:5061


pjsip.identify.conf:

[Messagenet02]
type=identify
endpoint=Messagenet02
match=sip.messagenet.it

Configurazione Trunk PJSIP Messagenet Freepbx 14

a questo punto con un Trunk PJSIP funzionante si potrà passare alla creazione delle Exstension, Inbound Route e Outbound Route.

enjoy 😉

 

 

Owncloud 10 su Raspberry Pi 3 e Raspbian Stretch

 

Owncloud 10 su Raspberry Pi 3 e Raspbian Stretch

Owncloud 10 su Raspberry Pi 3 e Raspbian Stretch

Guida su come installare owncloud 10 su Raspberry Pi 3 con già installato Raspbian Stretch. Io ho sempre usato uno dei miei Raspberry come server cloud, accessibile soprattutto da remoto. In questa guida non mi soffermerò sui problemi di sicurezza ed i modi per limitare i danni derivanti da una macchina esposta su internet, ma bensì mi limiterò ai soli step per avere un server cloud pronto all'uso. Io preferisco archiviare i dati direttamente su una chiavetta usb da 128G, piuttosto che direttamente sul raspberry. Quindi, dopo avere installato Raspbian Stretch ed aver collegato alla porta usb la pen drive, servendosi di una prolunga usb che servirà a dissipare il calore, siamo pronti ad iniziare.

$ sudo su
# apt update; apt upgrade
# apt install apache2 mariadb-server libapache2-mod-php7.0 php7.0-gd php7.0-json php7.0-mysql php7.0-curl php7.0-intl php7.0-mcrypt php-imagick php7.0-zip php7.0-xml php7.0-mbstring ntfs-3g fail2ban
# cd /tmp
# wget https://download.owncloud.org/community/owncloud-10.0.7.tar.bz2
# tar -xvf owncloud-10.0.7.tar.bz2
# chown -R www-data:www-data owncloud
# mv owncloud /var/www/html/
# nano /etc/apache2/sites-available/owncloud.conf

ed incollare dentro:

Alias /owncloud "/var/www/html/owncloud/"

<Directory /var/www/html/owncloud/>
 Options +FollowSymlinks
 AllowOverride All

<IfModule mod_dav.c>
 Dav off
 </IfModule>

SetEnv HOME /var/www/html/owncloud
SetEnv HTTP_HOME /var/www/html/owncloud

</Directory>
# ln -s /etc/apache2/sites-available/owncloud.conf /etc/apache2/sites-enabled/owncloud.conf
# systemctl start apache2
# systemctl enable apache2

Creazione database ed user mysql:

# mysql -u root -p

inserire password di root, e poi i 5 comandi sotto, e settare la password per l'utente owncloud:

1) create database owncloud;
2) create user owncloud@localhost identified by 'password';
3) grant all privileges on owncloud.* to owncloud@localhost identified by 'password';
4) flush privileges;
5) exit;

Web Server Apache2 con SSL

sotto ci saranno alcune voci da riempire, ma quella più importante è COMMON NAME, che io ho fatto puntare al mio hostname DynDNS per l'accesso da remoto:

Owncloud 10 su Raspberry Pi 3 e Raspbian Stretch

Owncloud 10 su Raspberry Pi 3 e Raspbian Stretch

# cd --
# openssl genrsa -out server.key 4096
# openssl req -new -key server.key -out server.csr
# openssl x509 -req -days 1825 -in server.csr -signkey server.key -out server.crt -sha256
# chmod 400 server.key
# a2ensite default-ssl.conf
# systemctl reload apache2
# a2enmod ssl
# systemctl restart apache2

configurazione apache2:

# nano /etc/apache2/sites-available/default-ssl.conf

che dovrà essere come sotto, aggiungendo ip del server cloud, modificando le voci DocumentRoot, SSLCertificateFile, SSLCertificateKeyFile , e commentando le altre voci che fanno riferimento a SSL.

        <VirtualHost _default_:443>
                ServerAdmin webmaster@localhost
                ServerName IP-SERVER:443
                DocumentRoot /var/www/html/owncloud
                SSLCertificateFile /root/server.crt
                SSLCertificateKeyFile /root/server.key
# nano /etc/apache2/sites-available/000-default.conf

la DocumentRoot dovrà essere come sotto:

DocumentRoot /var/www/html/owncloud
# nano /etc/php/7.0/apache2/php.ini

fare una modifica al file php.ini, nella sezione File Uploads, portando upload_max_filesize = 5000.

# sed -i 's/AllowOverride None/AllowOverride All/'  /etc/apache2/apache2.conf
# systemctl restart apache2

creazione della cartella di storage e relativi permessi:

# mkdir /media/owncloud-usb
# groupadd www-data
# usermod -a -G www-data www-data
# chown -R www-data:www-data /media/owncloud-usb
# chmod -R 775 /media/owncloud-usb

a questo punto abbiamo bisogno di conoscere UUID della chiavetta usb ed user e group di www-data, che serviranno per configurare /etc/fstab per il montaggio automatico:

# id -u www-data; id -g www-data
# blkid
# nano /etc/fstab

ed aggiungere in una sola riga qualcosa del genere in /etc/fstab:

UUID=32E49E5027A4F8A7 /media/owncloud-usb auto nofail,uid=33,gid=33,umask=0027$,dmask=0027,noatime 0 0

come ultimo ritocco, aumentare la capacità di upload, andando a modificare il file .user.ini

# nano /var/www/html/owncloud/.user.ini

portando: php_value upload_max_filesize, e php_value post_max_size a 5000M

# reboot

Se tutto è andato bene andare all'indirizzo https://ip_del_raspberry ed apparirà la pagina iniziale, dove si dovrà scegliere nome utente e password per l'accesso al server owncloud, ed inserire il nome del database, user e password dell'utente owncloud:

Username: owncloud
Password: password
Database: owncloud
Server: localhost

Molto probabilmente al momento di accedere via FQDN, owncloud presenterà al login un errore di untrusted domain

Owncloud 10 su Raspberry Pi 3 e Raspbian Stretch

Owncloud 10 su Raspberry Pi 3 e Raspbian Stretch

si risolve andando a modificare il file config.php, aggiungendo ip server ed il proprio DDNS

# nano /var/www/html/owncloud/config/config.php
$CONFIG = array (
  'instanceid' => 'oc8foxmontqb',
  'passwordsalt' => 'PBMACOGPeaL9S/Lfq+a80nhE9Bi6ke',
  'secret' => 'EtvIi0rDN2kmFUBdTL4xehQTRUBD1NDmvDipQ3qyVK1gj8SI',
  'trusted_domains' =>
  array (
    0 => '192.X.X.X','myddns'
  ),
  'datadirectory' => '/media/owncloud-usb',
  'overwrite.cli.url' => 'https://192.X.X.X',
  'dbtype' => 'mysql',
  'version' => '10.0.7.2',
  'dbname' => 'owncloud',
  'dbhost' => 'localhost',
  'dbtableprefix' => 'oc_',
  'dbuser' => 'owncloud',
  'dbpassword' => 'abcd2134retfd5678hjbnfh58gbf',
  'logtimezone' => 'UTC',
  'installed' => true,

enjoy 😉

 

Connessione WPA2 WIFI da terminale con Wpa_Supplicant

 

Connessione WPA2 WIFI da terminale con Wpa_Supplicant

Connessione WPA2 WIFI da terminale con Wpa_Supplicant

Guida su come connettersi ad una rete wifi da terminale, nell'eventualità che la scheda usb wifi non venga mostrata nel menu di NetworkManager (device not managed) oppure se si tratta di collegarsi da un server. La mia scheda usb viene vista come wlx74da38c7a99b, ma per semplicità nella guida utilizzerò wlan1, e come sempre utilizzo Debian.

Pacchetti da installare:

sudo apt install rfkill wpasupplicant

verifica interfacce:

sudo rfkill list

nel mio caso viene mostrato:

0: hci0: Bluetooth
    Soft blocked: no
    Hard blocked: no
1: phy0: Wireless LAN
    Soft blocked: no
    Hard blocked: no

Disabilitare NetworkManager:

sudo systemctl stop NetworkManager
sudo systemctl disable NetworkManager

abilitare interfaccia:

sudo iwconfig
sudo ifconfig wlan1 up

ricerca ESSID:

sudo iwlist wlan1 scan | grep ESSID

connessione:

sudo wpa_passphrase NOME_RETE PASSWORD | sudo tee /etc/wpa_supplicant.conf

output:

network={
        ssid="NOME_RETE_WIFI"
        #psk="PASSWORD"
        psk=ddb754fd4fe6b22935cbae31e34873wreg586gscdf578hf986354jdg56bb
}

avvio:

sudo wpa_supplicant -B -c /etc/wpa_supplicant.conf -i wlan1
sudo dhclient wlan1
sudo ifconfig wlan1

output:

Connessione WPA2 WIFI da terminale con Wpa_Supplicant

Connessione WPA2 WIFI da terminale con Wpa_Supplicant

Abilitare connessione al boot:

sudo cp /lib/systemd/system/wpa_supplicant.service /etc/systemd/system/wpa_supplicant.service
sudo nano /etc/systemd/system/wpa_supplicant.service

aggiungere nome interfaccia, quindi modificare il file da così:

ExecStart=/sbin/wpa_supplicant -u -s -O /run/wpa_supplicant

a così:

ExecStart=/sbin/wpa_supplicant -u -s -c /etc/wpa_supplicant.conf -i wlan1
sudo systemctl enable wpa_supplicant.service

Abilitare dhclient al boot:

sudo nano /etc/systemd/system/dhclient.service

ed incollare dentro:

[Unit]
Description= DHCP Client
Before=network.target

[Service]
Type=simple
ExecStart=/sbin/dhclient wlan1

[Install]
WantedBy=multi-user.target
sudo systemctl enable dhclient.service

 

enjoy 😉

 

Installare Fluxion su Debian Stretch

 

Installare Fluxion su Debian Stretch

Installare Fluxion su Debian Stretch

Fluxion al momento è uno dei migliori tools per il cracking wifi, con password WPA/WPA2 senza ricorrere ed  attacchi bruteforce o dizionario. Per installare Fluxion su Debian Stretch, bisogna risolvere alcune dipendenze, sopratutto quella di pyrit, non più presente nei repository Debian.

Installazione dipendenze:

$ sudo apt install -y aircrack-ng reaver rfkill macchanger isc-dhcp-server curl hostapd lighttpsd nmap mdk3 php-cgi python-scapy python-pip forensics-extra unzip xterm libpcap-dev libpcap0.8-dev
$ sudo pip install psycopg2
$ sudo pip install libsass
$ sudo pip install scapy

Installazione pyrit:

git clone https://github.com/JPaulMora/Pyrit.git
cd Pyrit/
python setup.py clean
python setup.py build
sudo python setup.py install

Installazione Fluxion:

git clone https://github.com/wi-fi-analyzer/fluxion
cd fluxion/
sudo ./fluxion.sh

Installare Fluxion su Debian Stretch

Installare Fluxion su Debian Stretch

per l'utilizzo nella prossima guida metterò gli screenshots di un attacco ad una rete wifi con password wpa2. La rete sotto attacco sarà la mia.

enjoy 😉

 

IP Statico su Raspberry pi e Raspbian Stretch

 

IP Statico su Raspberry pi e Raspbian Stretch

IP Statico su Raspberry pi e Raspbian Stretch

Guida su come settare un ip statico su Raspberry pi con OS Raspbian Stretch. I due files da modificare sono: /etc/dhcpcd.conf e /etc/network/interfaces.

sudo nano  /etc/network/interfaces

ed incollare:

auto lo
iface lo inet loopback
iface eth0 inet manual

sudo nano /etc/dhcpcd.conf

e modificare le voci sotto:

# Example static IP configuration:
interface eth0
static ip_address=192.168.1.84/24
static routers=192.168.1.1
static domain_name_servers=192.168.1.1 8.8.8.8

IP Statico su Raspberry pi e Raspbian Stretch

enjoy 😉

 

Configurazione HT 503 con Asterisk 14 e FreePBX 14

 

Configurazione HT 503 con Asterisk 14 e FreePBX 14

Configurazione HT 503 con Asterisk 14 e FreePBX 14

Configurazione HT 503 con Asterisk 14 e FreePBX 14 

Dopo avere installato Asterisk 14 e Freepbx 14 su Raspbian Stretch Lite, ho dovuto configurare il modulo Ata Grandstream HT 503, con qualche differenza rispetto alla guida principale che avevo fatto un po' di tempo fa, e che comunque attualmente funziona con Asterisk 13 e Freepbx 13, ma "stranamente" non funzionante con la versione 14. In Freepbx sia il Trunk che le estensioni sono in chan_sip, ed ho camabiato la porta di default in 5060 in SIP Settings/Chan SIP Settings. Di seguito condividerò alcuni screenshots per una configurazione funzionante su HT 503:

IP HT 503=192.168.1.80
IP SERVER= 192.168.1.84

Configurazione HT 503 con Asterisk 14 e FreePBX 14 Configurazione HT 503 con Asterisk 14 e FreePBX 14Configurazione HT 503 con Asterisk 14 e FreePBX 14 Configurazione HT 503 con Asterisk 14 e FreePBX 14 Configurazione HT 503 con Asterisk 14 e FreePBX 14 Configurazione HT 503 con Asterisk 14 e FreePBX 14

Configurazione HT 503 con Asterisk 14 e FreePBX 14

enjoy 😉