Howto compile cdr_pg_csv freeswitch module on debian / ubuntu

With the standard Makefile configuration delivered form git, you can’t compile cdr_pg_csv. You need top edit theMakefile file of cdr_pg_csv module. The file si located here : src/mod/event_handlers/mod_cdr_pg_csv/Makefile . Copy and past the following code :

UNAME := $(shell uname -s)
ifeq ($(UNAME),SunOS)
ISA64 := $(shell isainfo -n)
LOCAL_CFLAGS=-I/usr/include/postgresql
ifneq (,$(findstring m64,$(CFLAGS)))
LOCAL_LDFLAGS=-L/usr/pgsql-9.1/lib/$(ISA64) -R/usr/pgsql-9.1/lib/$(ISA64) -lpq -static
else
LOCAL_LDFLAGS=-L/usr/pgsql-9.1/lib -R/usr/pgsql-9.1/lib -lpq -static
endif
else
LOCAL_CFLAGS=-I/usr/include/postgresql
LOCAL_LDFLAGS=-L/usr/pgsql-9.1/lib -lpq -static
endif
include ../../../../build/modmake.rules

Now, we are ready for make, so do :

make & make install

It’s done.

Install freeswitch compiled with odbc PostgreSQL on debian wheezy

This is my first howto in english.

As I will release in some days, my project name pyfreebilling (wholesale voip platefom based on Freeswitch, PostgeSQL and Django), i write the first installation step : howto compile and install freeswitch / odbc and postgresql on debian wheezy.

Prerequisites

You need to install these packages :

apt-get install git-core build-essential autoconf automake libtool libncurses5 libncurses5-dev gawk libjpeg-dev zlib1g-dev pkg-config libssl-dev libpq-dev unixodbc-dev odbc-postgresql postgresql postgresql-client

Configuration

You download freeswitch using git :

git clone git://git.freeswitch.org/freeswitch.git

go to the new freeswitch directory and start bootstrap :

./bootstrap.sh

and configure :

./configure

After, you need to edit modules.conf to selected required modules. For pyfreebilling, you need these modules :

applications/mod_commands
applications/mod_db
applications/mod_dptools
applications/mod_esf
applications/mod_esl
applications/mod_expr
applications/mod_fifo
applications/mod_fsv
applications/mod_hash
applications/mod_memcache
applications/mod_nibblebill
applications/mod_spandsp
codecs/mod_amr
codecs/mod_bv
codecs/mod_b64
codecs/mod_g723_1
codecs/mod_g729
codecs/mod_h26x
codecs/mod_vp8
codecs/mod_ilbc
codecs/mod_speex
dialplans/mod_dialplan_xml
endpoints/mod_loopback
endpoints/mod_sofia
event_handlers/mod_cdr_pg_csv
event_handlers/mod_event_socket
formats/mod_local_stream
formats/mod_native_file
formats/mod_sndfile
formats/mod_tone_stream
languages/mod_lua
languages/mod_spidermonkey
#languages/mod_yaml
loggers/mod_console
loggers/mod_logfile
loggers/mod_syslog
xml_int/mod_xml_rpc
xml_int/mod_xml_scgi

you also need to edit the Makefile of cdr_pg_csv module. The file si located here : src/mod/event_handlers/mod_cdr_pg_csv/Makefile . Copy and past the following code :

UNAME := $(shell uname -s)
ifeq ($(UNAME),SunOS)
ISA64 := $(shell isainfo -n)
LOCAL_CFLAGS=-I/usr/include/postgresql
ifneq (,$(findstring m64,$(CFLAGS)))
LOCAL_LDFLAGS=-L/usr/pgsql-9.1/lib/$(ISA64) -R/usr/pgsql-9.1/lib/$(ISA64) -lpq -static
else
LOCAL_LDFLAGS=-L/usr/pgsql-9.1/lib -R/usr/pgsql-9.1/lib -lpq -static
endif
else
LOCAL_CFLAGS=-I/usr/include/postgresql
LOCAL_LDFLAGS=-L/usr/pgsql-9.1/lib -lpq -static
endif
include ../../../../build/modmake.rules

Compilation & installation

Now, we are ready for make, so do :

make & make install

Now we need to create a freeswitch user :

adduser --disabled-password  --quiet --system --home /usr/local/freeswitch --gecos "FreeSWITCH Voice Platform" --ingroup daemon freeswitch
and to apply the rule to freeswitch user :
chown -R freeswitch:daemon /usr/local/freeswitch/ 
chmod -R o-rwx /usr/local/freeswitch/

Init script

and now, we need to create the init script to start and stop freeswitch :

nano /etc/init.d/freeswitch
#!/bin/bash
### BEGIN INIT INFO
# Provides:          freeswitch
# Required-Start:    $local_fs $remote_fs
# Required-Stop:     $local_fs $remote_fs
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Description:       Freeswitch debian init script.
# Author:            Matthew Williams
#
### END INIT INFO
# Do NOT "set -e"

# PATH should only include /usr/* if it runs after the mountnfs.sh script
PATH=/sbin:/usr/sbin:/bin:/usr/bin:/usr/local/bin
DESC="Freeswitch"
NAME=freeswitch
DAEMON=/usr/local/freeswitch/bin/$NAME
DAEMON_ARGS="-nc"
PIDFILE=/usr/local/freeswitch/run/$NAME.pid
SCRIPTNAME=/etc/init.d/$NAME

FS_USER=freeswitch
FS_GROUP=freeswitch

# Exit if the package is not installed
[ -x "$DAEMON" ] || exit 0

# Read configuration variable file if it is present
[ -r /etc/default/$NAME ] && . /etc/default/$NAME

# Load the VERBOSE setting and other rcS variables
. /lib/init/vars.sh

# Define LSB log_* functions.
# Depend on lsb-base (>= 3.0-6) to ensure that this file is present.
. /lib/lsb/init-functions

#
# Function that sets ulimit values for the daemon
#
do_setlimits() {
        ulimit -c unlimited
        ulimit -d unlimited
        ulimit -f unlimited
        ulimit -i unlimited
        ulimit -n 999999
        ulimit -q unlimited
        ulimit -u unlimited
        ulimit -v unlimited
        ulimit -x unlimited
        ulimit -s 240
        ulimit -l unlimited
        return 0
}

#
# Function that starts the daemon/service
#
do_start()
{
    # Set user to run as
        if [ $FS_USER ] ; then
      DAEMON_ARGS="`echo $DAEMON_ARGS` -u $FS_USER"
        fi
    # Set group to run as
        if [ $FS_GROUP ] ; then
          DAEMON_ARGS="`echo $DAEMON_ARGS` -g $FS_GROUP"
        fi

        # Return
        #   0 if daemon has been started
        #   1 if daemon was already running
        #   2 if daemon could not be started
        start-stop-daemon --start --quiet --pidfile $PIDFILE --exec $DAEMON --test > /dev/null -- 
                || return 1
        do_setlimits
        start-stop-daemon --start --quiet --pidfile $PIDFILE --exec $DAEMON --background -- 
                $DAEMON_ARGS 
                || return 2
        # Add code here, if necessary, that waits for the process to be ready
        # to handle requests from services started subsequently which depend
        # on this one.  As a last resort, sleep for some time.
}

#
# Function that stops the daemon/service
#
do_stop()
{
        # Return
        #   0 if daemon has been stopped
        #   1 if daemon was already stopped
        #   2 if daemon could not be stopped
        #   other if a failure occurred
        start-stop-daemon --stop --quiet --retry=TERM/30/KILL/5 --pidfile $PIDFILE --name $NAME
        RETVAL="$?"
        [ "$RETVAL" = 2 ] && return 2
        # Wait for children to finish too if this is a daemon that forks
        # and if the daemon is only ever run from this initscript.
        # If the above conditions are not satisfied then add some other code
        # that waits for the process to drop all resources that could be
        # needed by services started subsequently.  A last resort is to
        # sleep for some time.
        start-stop-daemon --stop --quiet --oknodo --retry=0/30/KILL/5 --exec $DAEMON
        [ "$?" = 2 ] && return 2
        # Many daemons don't delete their pidfiles when they exit.
        rm -f $PIDFILE
        return "$RETVAL"
}

#
# Function that sends a SIGHUP to the daemon/service
#
do_reload() {
        #
        # If the daemon can reload its configuration without
        # restarting (for example, when it is sent a SIGHUP),
        # then implement that here.
        #
        start-stop-daemon --stop --signal 1 --quiet --pidfile $PIDFILE --name $NAME
        return 0
}

case "$1" in
  start)
        [ "$VERBOSE" != no ] && log_daemon_msg "Starting $DESC" "$NAME"
        do_start
        case "$?" in
                0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;;
                2) [ "$VERBOSE" != no ] && log_end_msg 1 ;;
        esac
        ;;
  stop)
        [ "$VERBOSE" != no ] && log_daemon_msg "Stopping $DESC" "$NAME"
        do_stop
        case "$?" in
                0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;;
                2) [ "$VERBOSE" != no ] && log_end_msg 1 ;;
        esac
        ;;
  status)
       status_of_proc -p $PIDFILE $DAEMON $NAME && exit 0 || exit $?
       ;;
  #reload|force-reload)
        #
        # If do_reload() is not implemented then leave this commented out
        # and leave 'force-reload' as an alias for 'restart'.
        #
        #log_daemon_msg "Reloading $DESC" "$NAME"
        #do_reload
        #log_end_msg $?
        #;;
  restart|force-reload)
        #
        # If the "reload" option is implemented then remove the
        # 'force-reload' alias
        #
        log_daemon_msg "Restarting $DESC" "$NAME"
        do_stop
        case "$?" in
          0|1)
                do_start
                case "$?" in
                        0) log_end_msg 0 ;;
                        1) log_end_msg 1 ;; # Old process is still running
                        *) log_end_msg 1 ;; # Failed to start
                esac
                ;;
          *)
                # Failed to stop
                log_end_msg 1
                ;;
        esac
        ;;
  *)
        #echo "Usage: $SCRIPTNAME {start|stop|restart|reload|force-reload}" >&2
        echo "Usage: $SCRIPTNAME {start|stop|restart|force-reload}" >&2
        exit 3
        ;;
esac

exit 0

mate this script executable :

chmod +x /etc/init.d/freeswitch
update-rc.d freeswitch defaults

And now ?

Enjoy !

But, don’t forget, you need to configure freeswitch and PostgreSQL (i will write an article explaining how to do)

Comment installer KeePassX sur OpenSuse

KeePassX est une application permettant de gérer de manière sécurisée ses différents mots de passe. Je rappelle qu’il est essentiel de ne pas utiliser le même mot de passe pour tous les services. En effet, si un site est compromis, l’assaillant aura l’accès à tous vos comptes !

De plus, KeePassX est multiplateforme et intègre un générateur de mots de passe.

Malheureusement, KeePassX n’est pas inclu dans les dépôts de base configurés lors de l’installation d’OpenSuse 12.3.

Pour cela, il faut ajouter vous même le dépôt. Pour cela, lancez Yast, ouvrez le menu « Configuration » et cliquez sur « dépôts ». Cliquez maintenant sur le bouton en bas à droite « ajouter », puis sur le bouton « suivant » de la nouvelle fenêtre et ajouter les éléments suivants :

Nom du dépôts : Password Management tools

URL : http://download.opensuse.org/repositories/security:/passwordmanagement/openSUSE_12.3/

et puis vous validez.

Maintenant, vous pouver installer KeePassX via Yast.

Edito sécurité : attaques des systèmes téléphoniques (voip ou traditionnel)

Introduction

Les attaques informatiques se multiplient chaque jour. Mais certaines attaques ne font pas les gros titres des journaux, mais par contre coûtent cher. Ces attaques ont pour but de détourner le système téléphonique (PABX ou IPBX) de l’entreprise afin d’émettre des appels frauduleux vers des pays où les communications sont onéreuses. Cette activité est très lucrative. Certains opérateurs ont eux même eu la désagréable surprise un matin, de découvrir un volume d’appels très important anormal vers des destinations exotiques.

Il faut avoir en tête qu’une grande partie de ces attaques sont basées sur des failles connues. Ces mêmes attaques ne sont pas très complexes à mettre en oeuvre et ne prennent que peu de temps. Une autre partie des attaques se base sur la négligence des administrateurs des systèmes téléphoniques.

Donc oui, les attaques sur les systèmes de téléphonie sont en effet de plus en plus courant. 01net y a consacré un article le 15 mars dernier, que vous pouvez relire ICI .

Pourquoi ces attaques ?

Il est d’autant plus facile d’attaquer une grande partie des systèmes installés et ceci en grande partie à cause de la légèreté des décideurs et des intégrateurs. En effet, le premier est responsable du choix du système et de son prestataire. Il se doit aussi de vérifier quelles sont les prestations inclues dans son contrat de maintenance. En effet, les mises à jour sont des opérations qui prennent du temps et qui sont très souvent liées à l’achat de licences logicielles et hors contrat de maintenance. On parle sinon de contrat d’infogérance.
Le deuxième pêche souvent par le manque de compétences de base liées à la sécurité et le manque d’informations diffusées à son client (combien d’intégrateurs ont averti leurs clients de la nécessité de faire une mise à jour de leur système Alcatel suite à la découverte d’une faille de sécurité liée à la messagerie vocale ?).

Ces attaques sont-elles évitables ?

Ces attaques simples (et il y en a plusieurs) révèlent aussi un autre point inquiétant : le manque ou la baisse de compétences en général. Notre monde se tourne vers le lowcost, et seul le prix devient un élément de décision. Quand un stagiaire est responsable d’un déploiement ou d’une prestation, on est en droit de se poser des questions (un stagiaire n’est-il pas là pour apprendre ?).
Lors des déploiements, le volet sécurité n’est que très rarement pris en compte voir complètement occulté. Les mots de passe des systèmes ne sont pas modifiés, les utilisateurs ont le même mot de passe trivial d’accès à leurs ressources téléphoniques et on laisse aux VIP tous les droits

Resources complémentaires

J’ai écrit une liste d’articles sur ce sujet qui est en effet de plus en plus d’actualités. Les attaques sont maintenant organisées et automatisées. L’erreur serait de croire que vous êtes à l’abri (même de gros opérateurs se sont fait hacker).
http://www.blog-des-telecoms.com/votre-systeme-telephonique-est-il-bien-protege
http://www.blog-des-telecoms.com/securiser-votre-systeme-de-telephonie-pabx-ipbx
http://www.blog-des-telecoms.com/vulnerabilite-de-la-voip
http://www.blog-des-telecoms.com/comment-securiser-le-sip-d-un-serveur-asterisk
Je vous souhaite une bonne lecture, en espèrant que cette édito en ce jeudi matin puisse éviter à certaines entreprises des réveils douloureux en ces temps difficiles.