Monthly Archives: novembre 2012

Protection around SSH tunnels

SSH tunnels are very convenients. However you do not want tunnel users to escape and use the SSH server to do anything.
sshd_config includes all the stuff to avoid that, config can be done per user, user group, host, port:

# Config tunnels SSH

AllowTcpForwarding no

Match User root,xxxx
AllowTcpForwarding yes

Match User yyy,zzz
AllowTcpForwarding yes
PermitOpen server1:8080 server2:3128 server3:3299

For any further config, have a look at sshd_config manual pages.

Exemple iptables: NATer une connexion

La machine 172.16.1.1 doit se connecter en SNMP à la machine 10.0.0.1 en passant par la gateway.
Le code ci-dessous sera exécuté sur la gateway.

iptables -A FORWARD -i eth0 -s 172.16.1.1 -p udp -d 10.0.0.1 --dport 161 -j ACCEPT
iptables -A FORWARD -o eth0 -s 10.0.0.1 -p udp -d 172.16.1.1 --sport 161 -j ACCEPT
iptables -t nat -A PREROUTING -i eth0 -s 172.16.1.1 -p udp --dport 161 -j DNAT --to 10.0.0.1:161

Loadbalancer deux connexions

Voici mon petit script à la con pour loadbalancer deux connexions réseaux:

#!/bin/bash

#
# Script permettant de beneficier de deux connexions internet lorsque le modem HTC est branche
#

DEBUG="1"
IPBIN="/sbin/ip"


# Connexion par defaut sur la machine
IF1=eth0
# IP1=10.132.226.68
IP1=`ifconfig $IF1 | grep "inet addr" | cut -d":" -f2 | cut -d" " -f1`
P1=10.132.224.88
# P1=`$IPBIN route show | grep $IF1 | grep default | cut -d" " -f3`
M1=`ifconfig $IF1 | grep Mask | cut -d ":" -f4`
RS1=`echo $IP1 | cut -d"." -f1-3`
R1=${RS1}.0
DNS1_1=10.132.225.224
DNS1_2=10.132.224.39

# Connexion modem
IF2=usb0
MODEMHTC=`/usr/bin/lsusb | grep "Desire HD (modem mode)"`
USBIF=`ifconfig | grep $IF2`

# Fonction
go() {
for elem in ${!TAB[*]} ; do
        if [ $DEBUG = "1" ]; then
                echo "Commande ${elem}: "${TAB[${elem}]} ;
        fi
        ${TAB[${elem}]}
done
}

info() {
if [ $DEBUG = "1" ]; then
    echo $MSG
fi
}

# Exec

if [ $DEBUG = "1" ]; then
    echo ""
    echo "Interface  standard:    $IF1"
    echo "Adresse IP standard:    $IP1"
    echo "Masque res standard:    $M1"
    echo "Adresse GW standard:    $P1"
    echo "Reseau standard    :    $R1"
    echo "DNS standard 1     :    $DNS1_1"
    echo "DNS standard 2     :    $DNS1_2"
    echo "*********************************************"
fi

if [ ! -z "$MODEMHTC" ] ; then
     MSG="Matos OK: $MODEMHTC"
     info
     MSG="*********************************************"
     info

        if  [ ! -z "$USBIF" ] ; then
            echo "Interface reseau USB ok: $USBIF"
            echo "*********************************************"

                ### if [ ! -z "$P1" ] ; then
                    ### echo "Paserelle standard ok: $P1"
                    ### echo "*********************************************"

                    # logger "***** Modem HTC present, interface $IF2 *****"

                    IP2=`ifconfig $IF2 | grep "inet addr" | cut -d":" -f2 | cut -d" " -f1`
                    P2=`$IPBIN route show | grep $IF2 | grep default | cut -d" " -f3`
                    M2=`ifconfig $IF2 | grep Mask | cut -d ":" -f4`
                    RS2=`echo $IP2 | cut -d"." -f1-3`
                    R2=${RS2}.0
                    DNS2_1=$P2

                    if [ -z "$P2" ]; then
                        if [ $DEBUG = "1" ]; then
                        # echo "Valeur vide GW free ($P2), activation dhcp sur $IF2"
                            echo ""
                        fi
                        # dhclient $IF2
                        # P2=`$IPBIN route show | grep $IF2 | grep default | cut -d" " -f3`
                        P2=192.168.42.129
                    fi

                    if [ ! -z "$(ping -c 1 $P2 | grep 0%)" ]; then
                        echo "Ping ok sur paserelle freemobile $P2"
                        echo "*********************************************"


                        if [ $DEBUG = "1" ]; then
                            echo ""
                            echo "Interface  freemobile:    $IF2"
                            echo "Adresse IP freemobile:    $IP2"
                            echo "Masque res freemobile:    $M2"
                            echo "Adresse GW freemobile:    $P2"
                            echo "Reseau freemobile    :    $R2"
                            echo "DNS freemobile       :    $P2"
                            echo "*********************************************"
                        fi


                        if [ -z "`ip rule show | grep T1`" ]; then
                            declare -A TAB
                            TAB["1"]="$IPBIN route add $P1 dev $IF1 src $IP1 table T1" ;
                            TAB["2"]="$IPBIN route add default via $P1 table T1"
                            TAB["3"]="$IPBIN rule add from $IP1 table T1"
                            TAB["4"]="$IPBIN route add 127.0.0.0/8 dev lo table T1"
                            # TAB["5"]="$IPBIN route add $R1 dev $IF1 table T1"
                            # TAB["6"]="$IPBIN route add $R2 dev $IF2 table T1"
                            TAB["7"]="$IPBIN route add $DNS1_1 via $P1 table T1"
                            TAB["8"]="$IPBIN route add $DNS1_2 via $P1 table T1"
                            go
                            unset TAB
                            echo "*********************************************"

                        else
                            if [ $DEBUG = "1" ]; then
                                echo "Rules déjà présentes pour T1"
                                echo "*********************************************"
                            fi
                        fi

                        if [ -z "`ip rule show | grep T2`" ]; then

                            declare -A TAB
                            TAB["11"]="$IPBIN route add $P2 dev $IF2 src $IP1 table T2" ;
                            TAB["12"]="$IPBIN route add default via $P2 table T2"
                            TAB["13"]="$IPBIN rule add from $IP2 table T2"
                            TAB["14"]="$IPBIN route add 127.0.0.0/8 dev lo table T2"
                            # TAB["15"]="$IPBIN route add $R1 dev $IF1 table T2"
                            # TAB["16"]="$IPBIN route add $R2 dev $IF2 table T2"
                            ## TAB["17"]="$IPBIN route add $P2 via $P2 table T2"
                            ## TAB["18"]="$IPBIN route add $DNS1_2 via $P1 table T1"
                            go
                            unset TAB
                            echo "*********************************************"

                        else
                            if [ $DEBUG = "1" ]; then
                                echo "Rules déjà présentes pour T2"
                                echo "*********************************************"
                            fi
                        fi


                        RTDEF=`ip route show | grep "default via"`
                        if [ ! -z "$RTDEF" ]; then
                            declare -A TAB
                            TAB["21"]="route del default" ;
                            go
                            unset TAB
                            echo "*********************************************"
                        fi
                        if [ -z "$(ip route | grep nexthop)" ]; then
                            declare -A TAB
                            TAB["31"]="$IPBIN route append default scope global nexthop via $P1 dev $IF1 weight 1 nexthop via $P2 dev $IF2 weight 1" ;
                            go
                            unset TAB
                            echo "*********************************************"
                        else
                             if [ $DEBUG = "1" ]; then
                                echo "Route double deja en place"
                                echo "*********************************************"
                            fi
                        fi

                        # Mise a jour DNS
                        echo "domain xxxxxxx.local" > /etc/resolv.conf
                        echo "search xxxxxxx.local" >> /etc/resolv.conf
                        echo "nameserver 10.132.224.39" >> /etc/resolv.conf
                        echo "nameserver 192.168.42.129" >> /etc/resolv.conf
                        echo "nameserver 10.132.225.224" >> /etc/resolv.conf

                    else
                        echo "Pas de ping sur $P2"
                        echo "*********************************************"
                    fi
                ### else
                        ### echo "Adresse GW standard non trouvée"
                        ### echo "*********************************************"
                ### fi


        else
               echo "Pas d'interface reseau USB"
               echo "*********************************************"
        fi


else

        # dhclient eth0

        echo "domain xxxxxxx.local" > /etc/resolv.conf
        echo "search xxxxxxx.local" >> /etc/resolv.conf
        echo "nameserver 10.132.224.39" >> /etc/resolv.conf
        echo "nameserver 10.132.225.224" >> /etc/resolv.conf

        echo "Modem HTC non present"
        echo "*********************************************"

fi