Simpleproxy másként

Simpleproxy másként

A korábban bemutatott megoldáson kívül egy másik lehetőséget mutatok be, amivel egy helyi portot egy távoli kiszolgáló más portjára továbbíthatunk (Port Forward). Ez a megoldás a működését tekintve tartalmazza az iptables DNAT és SNAT funkcióit.

A megoldás működéséhez telepíteni kell a simpleproxy csomagot.

# apt-get install simpleproxy

Ezzel a /usr/bin/simpleproxy binárist telepítjük, ami az alábbiak szerint működik:

/usr/bin/simpleproxy -L LOCAL_PORT -R REMOTE_IP:REMOTE_PORT

A fenti parancsot kiadva máris működik a megoldás.

Ha egy kicsit szeretnénk javítani rajta, akkor az alábbiakat végezzük el:

Készítsük el a konfigurációt tartalmazó könyvtárat és csak a root számára tegyük hozzáférhetővé:
# mkdir /etc/simpleproxy
# chmod 700 /etc/simpleproxy

Ide kerülnek a konfigurációs fájlok. Pl:
# cat /etc/simpleproxy/sempi_ssh
DESC="sempi ssh"
LOCAL=65012
REMOTE=10.10.10.12:22

A fájl jogosultságait állítsuk be:

# chmod 750 /etc/simpleproxy/sempi_ssh

A fentihez hasonló módon hozzuk létre a konfigurációs fájlokat minden továbbítani kívánt port számára.

Annak érdekében, hogy a simpleproxy-k automatikusan induljanak, a következőt tegyük a /etc/init.d/simpleproxy fájlba:


#!/bin/sh
#
# simpleproxy based TCP proxying

PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
CFDIR=/etc/simpleproxy
PIDBASE=/var/run/simpleproxy/pid-
PROXY=/usr/bin/simpleproxy
if [ ! -d /var/run/simpleproxy/ ]
then
    mkdir -p /var/run/simpleproxy/
fi

start() {
    if [ ! -r $CFDIR/$1 ]
    then
        echo "starting $1 failed: config file not found or not readable"
        return 1
    fi
    . $CFDIR/$1
    echo "starting $1: $DESC.."
    start-stop-daemon --start --quiet \
        --make-pidfile --pidfile ${PIDBASE}$1 --background \
        --exec $PROXY -- -L $LOCAL -R $REMOTE
}

stop() {
    if [ ! -r $CFDIR/$1 ]
    then
        echo "stopping $1 failed: config file not found"
        return 1
    fi
    . $CFDIR/$1
    echo "stopping $1: $DESC.."
    start-stop-daemon --stop --quiet --oknodo \
        --pidfile ${PIDBASE}$1 \
        --exec $PROXY
    rm -f ${PIDBASE}$1
}

#set -e
case "$1" in
  start)
    if [ -z $2 ]
    then
        cd $CFDIR
        for f in [a-z]*[a-z0-9]
        do
            start $f
        done
    else
        while shift
        do
            [ -z $1 ] && break
            start $1
        done
    fi
    ;;
  stop)
    if [ -z $2 ]
    then
        cd $CFDIR
        for f in [a-z]*[a-z0-9]
        do
            stop $f
        done
    else
        while shift
        do
            [ -z $1 ] && break
            stop $1
        done
    fi
    ;;
  restart|reload|force-reload)
    $0 stop;
    $0 start;
    ;;
  *)
    echo "Usage: $0 {start|stop|restart}" >&2
    exit 1
    ;;
esac

exit 0

Ez a szokványos init.d-ben alkalmazott indítást, leállítást szolgáló megoldás átgyúrt változata.
Látható, hogy a start utasítást kiadva a konfigurációs könyvárban lévő fájlokon végighaladva beállítja a simpleproxy-kat.

A /etc/init.d/simpleproxy-t is tegyük futtathatóvá, majd állítsuk be az automatikus elindulást:
# chmod 754 /etc/init.d/simpleproxy

# update-rc.d simpleproxy defaults 99

Kézzel indítsuk el és győződjünk meg róla, hogy minden működik:
# /etc/init.d/simpleproxy start
starting sempi_ssh: sempi ssh..
# netstat -natp | grep :65012
tcp        0      0 0.0.0.0:65012           0.0.0.0:*               LISTEN      3490/simpleproxy
# ps fax | grep simpleproxy

 3490 ?        S      0:00 /usr/bin/simpleproxy -L 65012 -R 10.10.10.12:22

A túloldal válaszol:
# telnet localhost 65012
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
SSH-2.0-OpenSSH_5.1p1 Debian-5




Kulcsszavak: Linux, iptables, simpleproxy, proxy, TCP, Forward, DNAT, SNAT

Új hozzászólás: