PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Port verbiegen



RichieX
21.04.05, 15:40
Hallo,

irgendwie steh ich mir auf der Leitung und weiß nicht weiter:
Ich möchte den von außen(ppp0) offenen/ankommenden Port 25422 auf den gleichen Rechner auf Port 22 mittels iptables "verbiegen". Hab jetzt schon alles mögliche probiert aber komme auf keinen grünen Zweig. Hat jemand einen Denkanstoß?

RichieX

Harry
21.04.05, 16:36
Hi,

was hast Du denn bisher versucht?

Harry

RichieX
21.04.05, 17:42
Hallo Harry,

als Grundlage benutze ich dein Script mit ein paar persönlichen Anpassungen.

Die PREROUTING -t nat Version hab ich probiert sowie zus. DNAT und auch FORWARD. Hier ein paar Bsp.:



/sbin/iptables -t nat -A PREROUTING -i ppp0 -p tcp --dport 25422 -j REDIRECT --to 22
#oder
/sbin/iptables -t nat -I PREROUTING -i ppp0 -p tcp --dport 25422 -j REDIRECT --to-ports 22

Wobei ich mit der letzteren Variante denke ich am nähesten war, oder?

RichieX

Edit: PS: Ich bekomme am Client keine Fehlermeldung, sondern ich fliege nach ein paar Minuten einfach wieder raus.

Harry
21.04.05, 17:51
Hi RichieX,

Deine letzte Variante schaut auf den ersten Blick doch recht gut aus. Und damit will das nicht gehen?

Harry

RichieX
21.04.05, 17:53
Hi RichieX,

Deine letzte Variante schaut auf den ersten Blick doch recht gut aus. Und damit will das nicht gehen?

Harry
Das meinte ich auch, aber trotzdem will es nicht. Siehe Edit.

Hilfts vielleicht das ganze Script mal zu posten?

RichieX

Harry
21.04.05, 18:00
Das "rausfliegen" nach ein paar Minuten hört sich fast so an, als würde der Connect-Versuch vom Paketfilter ge"DROP"t. Hast Du denn im Logfile entsprechende Meldungen?

Ja - poste halt mal das Script.

Harry

RichieX
21.04.05, 18:09
Das Logging habe ich abgeschalten, ich wüßte auch nicht wie ich es sinnvoll greppen könnte, da kommt so viel Mist.

Also hier mal das komplette Script:


#!/bin/bash
# ---------------------------------------------------------------------
# Linux-iptables-Firewallskript, Copyright (c) 2003 under the GPL
# Autogenerated by iptables Generator v1.16 (c) 2002 by Harald Bertram*
# Please visit http://www.harry.homelinux.org for new versions of
# the iptables Generator (c).
#
# This Script was generated by request from:
# on: 2003-6-26 20:21.29 MET.
#
# If you have questions about the iptables Generator or about
# your Firewall-Skript feel free to take a look at out website or
# send me an E-Mail to webmaster@harry.homelinux.org.
#
# My special thanks are going to Lutz Heinrich (trinitywork@hotmail.com) who
# made lots of Beta-Testing and gave me lots of well qualified
# Feedback that made me able to improve the iptables Generator.
# --------------------------------------------------------------------
#
### BEGIN INIT INFO
# Provides: IP-Paketfilter
# Required-Start: $network $local_fs
# Required-Stop: $local_fs
# Default-Start: 3 5
# Default-Stop: 0 1 2 4 6
# Short-Description: Harry's IP-Paketfilter
# Description: Harry's IP-Paketfilter provides reasonable
# IP-Security for Home-Computers and small networks
### END INIT INFO
#

case "$1" in
start)
echo "Starte IP-Paketfilter"

# iptables-Modul
/sbin/modprobe ip_tables
# Connection-Tracking-Module
/sbin/modprobe ip_conntrack
# Das Modul ip_conntrack_irc ist erst bei Kerneln >= 2.4.19 verfuegbar
/sbin/modprobe ip_conntrack_irc
/sbin/modprobe ip_conntrack_ftp
/sbin/modprobe ip_nat_ftp

# Tabelle flushen
/sbin/iptables -F
/sbin/iptables -t nat -F
/sbin/iptables -t mangle -F
/sbin/iptables -X
/sbin/iptables -t nat -X
/sbin/iptables -t mangle -X

# Default-Policies setzen
/sbin/iptables -P INPUT DROP
/sbin/iptables -P OUTPUT DROP
/sbin/iptables -P FORWARD DROP

# MY_REJECT-Chain
/sbin/iptables -N MY_REJECT

# MY_REJECT fuellen
# /sbin/iptables -A MY_REJECT -p tcp -m limit --limit 7200/h -j LOG --log-prefix "REJECT TCP "
# /sbin/iptables -A MY_REJECT -p tcp -j REJECT --reject-with tcp-reset
# /sbin/iptables -A MY_REJECT -p udp -m limit --limit 7200/h -j LOG --log-prefix "REJECT UDP "
# /sbin/iptables -A MY_REJECT -p udp -j REJECT --reject-with icmp-port-unreachable
# /sbin/iptables -A MY_REJECT -p icmp -m limit --limit 7200/h -j LOG --log-prefix "DROP ICMP "
# /sbin/iptables -A MY_REJECT -p icmp -j DROP
# /sbin/iptables -A MY_REJECT -m limit --limit 7200/h -j LOG --log-prefix "REJECT OTHER "
# /sbin/iptables -A MY_REJECT -j REJECT --reject-with icmp-proto-unreachable

# MY_DROP-Chain
/sbin/iptables -N MY_DROP
/sbin/iptables -A MY_DROP -j DROP

# Alle Pakete protokollieren
# /sbin/iptables -A INPUT -j LOG --log-prefix "INPUT LOG "
# /sbin/iptables -A OUTPUT -j LOG --log-prefix "OUTPUT LOG*"
# /sbin/iptables -A FORWARD -j LOG --log-prefix "FORWARD LOG "

# Korrupte Pakete zurueckweisen
/sbin/iptables -A INPUT -m state --state INVALID -j DROP
/sbin/iptables -A OUTPUT -m state --state INVALID -j DROP
/sbin/iptables -A FORWARD -m state --state INVALID -j DROP

# Stealth Scans etc. DROPpen
# Keine Flags gesetzt
/sbin/iptables -A INPUT -p tcp --tcp-flags ALL NONE -j MY_DROP
/sbin/iptables -A FORWARD -p tcp --tcp-flags ALL NONE -j MY_DROP

# SYN und FIN gesetzt
/sbin/iptables -A INPUT -p tcp --tcp-flags SYN,FIN SYN,FIN -j MY_DROP
/sbin/iptables -A FORWARD -p tcp --tcp-flags SYN,FIN SYN,FIN -j MY_DROP

# SYN und RST gleichzeitig gesetzt
/sbin/iptables -A INPUT -p tcp --tcp-flags SYN,RST SYN,RST -j MY_DROP
/sbin/iptables -A FORWARD -p tcp --tcp-flags SYN,RST SYN,RST -j MY_DROP

# FIN und RST gleichzeitig gesetzt
/sbin/iptables -A INPUT -p tcp --tcp-flags FIN,RST FIN,RST -j MY_DROP
/sbin/iptables -A FORWARD -p tcp --tcp-flags FIN,RST FIN,RST -j MY_DROP

# FIN ohne ACK
/sbin/iptables -A INPUT -p tcp --tcp-flags ACK,FIN FIN -j MY_DROP
/sbin/iptables -A FORWARD -p tcp --tcp-flags ACK,FIN FIN -j MY_DROP

# PSH ohne ACK
/sbin/iptables -A INPUT -p tcp --tcp-flags ACK,PSH PSH -j MY_DROP
/sbin/iptables -A FORWARD -p tcp --tcp-flags ACK,PSH PSH -j MY_DROP

# URG ohne ACK
/sbin/iptables -A INPUT -p tcp --tcp-flags ACK,URG URG -j MY_DROP
/sbin/iptables -A FORWARD -p tcp --tcp-flags ACK,URG URG -j MY_DROP

# Loopback-Netzwerk-Kommunikation zulassen
/sbin/iptables -A INPUT -i lo -j ACCEPT
/sbin/iptables -A OUTPUT -o lo -j ACCEPT

# Maximum Segment Size (MSS) für das Forwarding an PMTU anpassen
/sbin/iptables -A FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu

# Connection-Tracking aktivieren
/sbin/iptables -A OUTPUT -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
/sbin/iptables -A FORWARD -i ! ppp0 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
/sbin/iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
/sbin/iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

# SSH auf GATEWAY
#/sbin/iptables -A INPUT -i ppp0 -m state --state NEW -p tcp --dport 22 -j ACCEPT

#/sbin/iptables -A INPUT -i ppp0 -p tcp --dport 25422 -j ACCEPT
#/sbin/iptables -t nat -A PREROUTING -i ppp0 -p tcp --dport 25422 -j REDIRECT --to 22
/sbin/iptables -t nat -I PREROUTING -i ppp0 -p tcp --dport 25422 -j REDIRECT --to-ports 22


# WEBMIN auf GATEWAY
#/sbin/iptables -A INPUT -i ppp0 -m state --state NEW -p tcp --dport 10001 -j ACCEPT

# Forward Emule zu Thomas
# /sbin/iptables -t nat -A PREROUTING -i ppp0 -p tcp --dport 4661 -j DNAT --to-destination 192.168.28.101:4661
# /sbin/iptables -t nat -A PREROUTING -i ppp0 -p tcp --dport 4662 -j DNAT --to-destination 192.168.28.101:4662
# /sbin/iptables -t nat -A PREROUTING -i ppp0 -p udp --dport 4665 -j DNAT --to-destination 192.168.28.101:4665
# /sbin/iptables -A FORWARD -i ppp0 -o eth0 -d 192.168.28.101 -p tcp --dport 4661 -j ACCEPT
# /sbin/iptables -A FORWARD -i ppp0 -o eth0 -d 192.168.28.101 -p tcp --dport 4662 -j ACCEPT
# /sbin/iptables -A FORWARD -i ppp0 -o eth0 -d 192.168.28.101 -p udp --dport 4665 -j ACCEPT

# MLDONKEY forward zu 192.168.28.250
/sbin/iptables -t nat -A PREROUTING -i ppp0 -p tcp --dport 4661 -j DNAT --to-destination 192.168.28.250
/sbin/iptables -t nat -A PREROUTING -i ppp0 -p tcp --dport 4662 -j DNAT --to-destination 192.168.28.250
/sbin/iptables -t nat -A PREROUTING -i ppp0 -p tcp --dport 4663 -j DNAT --to-destination 192.168.28.250
/sbin/iptables -t nat -A PREROUTING -i ppp0 -p udp --dport 4665 -j DNAT --to-destination 192.168.28.250
/sbin/iptables -A FORWARD -i ppp0 -o eth0 -d 192.168.28.250 -p tcp --dport 4661 -j ACCEPT
/sbin/iptables -A FORWARD -i ppp0 -o eth0 -d 192.168.28.250 -p tcp --dport 4662 -j ACCEPT
/sbin/iptables -A FORWARD -i ppp0 -o eth0 -d 192.168.28.250 -p tcp --dport 4663 -j ACCEPT
/sbin/iptables -A FORWARD -i ppp0 -o eth0 -d 192.168.28.250 -p udp --dport 4665 -j ACCEPT

# Bittorrent
# /sbin/iptables -t nat -A PREROUTING -i ppp0 -p tcp --dport 6881:6999 -j DNAT --to-destination 192.168.28.250
# /sbin/iptables -A FORWARD -i ppp0 -o eth0 -d 192.168.28.250 -p tcp --dport 6881:6999 -j ACCEPT

# IP-Adresse des LAN-Interfaces ermitteln
LAN_IP=$(/sbin/ifconfig eth0 | head -n 2 | tail -n 1 | cut -d: -f2 | cut -d" " -f 1)

# NAT fuer HTTP
/sbin/iptables -t nat -A PREROUTING -i ppp0 -p tcp --dport 80 -j DNAT --to-destination 192.168.28.110:80
# /sbin/iptables -t nat -A POSTROUTING -o eth0 -p tcp --dport 80 -j SNAT --to-source $LAN_IP
/sbin/iptables -A FORWARD -i ppp0 -m state --state NEW -p tcp -d 192.168.28.110 --dport 80 -j ACCEPT

# NAT fuer NNTP
/sbin/iptables -t nat -A PREROUTING -i ppp0 -p tcp --dport 119 -j DNAT --to-destination 192.168.28.110:119
/sbin/iptables -t nat -A POSTROUTING -o eth0 -p tcp --dport 119 -j SNAT --to-source $LAN_IP
/sbin/iptables -A FORWARD -i ppp0 -m state --state NEW -p tcp -d 192.168.28.110 --dport 119 -j ACCEPT

# NAT fuer SMTP
/sbin/iptables -t nat -A PREROUTING -i ppp0 -p tcp --dport 25 -j DNAT --to-destination 192.168.28.110:25
# /sbin/iptables -t nat -A POSTROUTING -o eth0 -p tcp --dport 25 -j SNAT --to-source $LAN_IP
/sbin/iptables -A FORWARD -i ppp0 -m state --state NEW -p tcp -d 192.168.28.110 --dport 25 -j ACCEPT

# NAT fuer FTP
/sbin/iptables -t nat -A PREROUTING -i ppp0 -p tcp --dport 21 -j DNAT --to-destination 192.168.28.110:21
/sbin/iptables -t nat -A POSTROUTING -o eth0 -p tcp --dport 21 -j SNAT --to-source $LAN_IP
/sbin/iptables -A FORWARD -i ppp0 -m state --state NEW -p tcp -d 192.168.28.110 --dport 21 -j ACCEPT

# NAT fuer WEBMIN
/sbin/iptables -t nat -A PREROUTING -i ppp0 -p tcp --dport 10000 -j DNAT --to-destination 192.168.28.110:10000
/sbin/iptables -t nat -A POSTROUTING -o eth0 -p tcp --dport 10000 -j SNAT --to-source $LAN_IP
/sbin/iptables -A FORWARD -i ppp0 -m state --state NEW -p tcp -d 192.168.28.110 --dport 10000 -j ACCEPT

# NAT fuer IMAP
/sbin/iptables -t nat -A PREROUTING -i ppp0 -p tcp --dport 143 -j DNAT --to-destination 192.168.28.110:143
/sbin/iptables -t nat -A POSTROUTING -o eth0 -p tcp --dport 143 -j SNAT --to-source $LAN_IP
/sbin/iptables -A FORWARD -i ppp0 -m state --state NEW -p tcp -d 192.168.28.110 --dport 143 -j ACCEPT

# NAT fuer RSYNC
# /sbin/iptables -t nat -A PREROUTING -i ppp0 -p tcp --dport 873 -j DNAT --to-destination 192.168.28.110:873
# /sbin/iptables -t nat -A POSTROUTING -o eth0 -p tcp --dport 873 -j SNAT --to-source $LAN_IP
# /sbin/iptables -A FORWARD -i ppp0 -m state --state NEW -p tcp -d 192.168.28.110 --dport 873 -j ACCEPT

# NAT fuer SSH auf KOMSERV
/sbin/iptables -t nat -A PREROUTING -i ppp0 -p tcp --dport 11022 -j DNAT --to-destination 192.168.28.110:22
/sbin/iptables -t nat -A POSTROUTING -o eth0 -p tcp --dport 22 -j SNAT --to-source $LAN_IP
/sbin/iptables -A FORWARD -i ppp0 -m state --state NEW -p tcp -d 192.168.28.110 --dport 22 -j ACCEPT

# Transparenter Proxy
# /sbin/iptables -t nat -A PREROUTING -s ! 192.168.28.110 -p tcp --dport 80 -j REDIRECT --to 192.168.28.110:3128
# /sbin/iptables -t nat -A PREROUTING -p tcp -s 192.168.28.0/24 -d ! 192.168.28.0/24 --dport 80 -j REDIRECT --to 3128

/sbin/iptables -t nat -A PREROUTING -i eth0 -s ! 192.168.28.110 -p tcp --dport 80 -j DNAT --to 192.168.28.110:3128
/sbin/iptables -t nat -A POSTROUTING -o eth0 -s 192.168.28.0/24 -d 192.168.28.110 -j SNAT --to 192.168.28.254
/sbin/iptables -A FORWARD -s 192.168.28.0/24 -d 192.168.28.110 -i eth0 -o eth0 -p tcp --dport 3128 -j ACCEPT

# OpenVPN
/sbin/iptables -A INPUT -p udp --dport 5000 -j ACCEPT
/sbin/iptables -A INPUT -p udp --dport 5001 -j ACCEPT
/sbin/iptables -A INPUT -i tun+ -j ACCEPT
/sbin/iptables -A FORWARD -i tun+ -j ACCEPT
/sbin/iptables -A INPUT -i tap+ -j ACCEPT
/sbin/iptables -A FORWARD -i tap+ -j ACCEPT

# LAN-Zugriff auf eth0
/sbin/iptables -A INPUT -m state --state NEW -i eth0 -j ACCEPT

# Default-Policies mit REJECT
/sbin/iptables -A INPUT -j MY_REJECT
/sbin/iptables -A OUTPUT -j MY_REJECT
/sbin/iptables -A FORWARD -j MY_REJECT

# Routing
echo 1 > /proc/sys/net/ipv4/ip_forward 2> /dev/null

# Masquerading
/sbin/iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE

# SYN-Cookies
echo 1 > /proc/sys/net/ipv4/tcp_syncookies 2> /dev/null

# Stop Source-Routing
for i in /proc/sys/net/ipv4/conf/*; do echo 0 > $i/accept_source_route 2> /dev/null; done

# Stop Redirecting
for i in /proc/sys/net/ipv4/conf/*; do echo 0 > $i/accept_redirects 2> /dev/null; done

# Reverse-Path-Filter
for i in /proc/sys/net/ipv4/conf/*; do echo 2 > $i/rp_filter 2> /dev/null; done

# Log Martians
for i in /proc/sys/net/ipv4/conf/*; do echo 1 > $i/log_martians 2> /dev/null; done

# BOOTP-Relaying ausschalten
for i in /proc/sys/net/ipv4/conf/*; do echo 0 > $i/bootp_relay 2> /dev/null; done

# Proxy-ARP ausschalten
for i in /proc/sys/net/ipv4/conf/*; do echo 0 > $i/proxy_arp 2> /dev/null; done

# Ungültige ICMP-Antworten ignorieren
echo 1 > /proc/sys/net/ipv4/icmp_ignore_bogus_error_responses 2> /dev/null

# ICMP Echo-Broadcasts ignorieren
echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts 2> /dev/null

# Max. 500/Sekunde (5/Jiffie) senden
echo 5 > /proc/sys/net/ipv4/icmp_ratelimit

# Speicherallozierung und -timing für IP-De/-Fragmentierung
echo 262144 > /proc/sys/net/ipv4/ipfrag_high_thresh
echo 196608 > /proc/sys/net/ipv4/ipfrag_low_thresh
echo 30 > /proc/sys/net/ipv4/ipfrag_time

# TCP-FIN-Timeout zum Schutz vor DoS-Attacken setzen
echo 30 > /proc/sys/net/ipv4/tcp_fin_timeout

# Maximal 3 Antworten auf ein TCP-SYN
echo 3 > /proc/sys/net/ipv4/tcp_retries1

# TCP-Pakete maximal 15x wiederholen
echo 15 > /proc/sys/net/ipv4/tcp_retries2

;;

stop)
echo "Stoppe IP-Paketfilter"
# Tabelle flushen
/sbin/iptables -F
/sbin/iptables -t nat -F
/sbin/iptables -t mangle -F
/sbin/iptables -X
/sbin/iptables -t nat -X
/sbin/iptables -t mangle -X
echo "Deaktiviere IP-Routing"
echo 0 > /proc/sys/net/ipv4/ip_forward

# Default-Policies setzen
/sbin/iptables -P INPUT ACCEPT
/sbin/iptables -P OUTPUT ACCEPT
/sbin/iptables -P FORWARD ACCEPT
;;

status)
echo "Tabelle filter"
/sbin/iptables -L -vn
echo "Tabelle nat"
/sbin/iptables -t nat -L -vn
echo "Tabelle mangle"
/sbin/iptables -t mangle -L -vn
;;

*)
echo "Fehlerhafter Aufruf"
echo "Syntax: $0 {start|stop|status}"
exit 1
;;

esac

Übrigens, der 2. fette Bereich funktioniert.

RichieX

Harry
21.04.05, 18:31
Hi RichieX,

hmmm ... Du hast MY_REJECT komplett auskommentiert. Aus dem Grunde mach der Filter bei Deiner eingehenden SSH-Verbindung auch ein DROP und Du wartest ewig auf ein Timeout.
Per Default hätte er sonst sofort ein REJECT gemacht und der ssh-Client hätte sich auch direkt verabschiedet - so sollte es sein.

Die folgenden Regeln sind der Kern für Deine aktuelle Problematik:

#/sbin/iptables -A INPUT -i ppp0 -m state --state NEW -p tcp --dport 22 -j ACCEPT
#/sbin/iptables -A INPUT -i ppp0 -p tcp --dport 25422 -j ACCEPT
#/sbin/iptables -t nat -A PREROUTING -i ppp0 -p tcp --dport 25422 -j REDIRECT --to 22
/sbin/iptables -t nat -I PREROUTING -i ppp0 -p tcp --dport 25422 -j REDIRECT --to-ports 22
Wenn Du vor der ersten dieser vier Zeilen das "#" entfernst, dann sollte es gehen.

Harry

RichieX
21.04.05, 19:08
Aber dann mach ich doch den Port 22 wieder auf und den wollte ich eigentlich dicht haben. Auch mit Port --dport 25422 gehts nicht.

RichieX

Harry
21.04.05, 19:19
Hi,

klar musst Du dafür den Port 22/tcp öffnen. Aus Sicht des Hosts geht der Traffic ja erst in die INPUT-Chain, wenn die Portumschreibung über DNAT/Redirecting erfolgt ist.

Hmm - ich glaube, ich habe das Input-Interface in der Regel übersehen. Das müsste dann auf "lo" umgeschrieben werden, oder aber die --to-destination-Adresse auf 127.0.0.1.
Damit bleibt dann der Port 22/tcp von aussen dennoch dicht. Teste das einfach mal.

Anm.: Bei mir ergab sich bisher noch nicht die Notwendigkeit, Redirecting einzusetzen. Der meiste eingehende initiierende Traffic wird in meinen Netzen halt meist über DNAT an einen remote-Host umgeschrieben.

Harry

RichieX
22.04.05, 07:49
So hab ichs jetzt und es funktioniert auch nicht:



/sbin/iptables -A INPUT -i lo -m state --state NEW -p tcp --dport 22 -j ACCEPT
/sbin/iptables -t nat -A PREROUTING -i ppp0 -p tcp --dport 25422 -j DNAT --to-destination 127.0.0.1:22


RichieX
Edit: Folgende Meldung konnte ich aus der syslog entnehmen:


martian destination 127.0.0.1 from 217.225.xxx.xxx, dev ppp0

Harry
22.04.05, 08:19
Folgende Meldung konnte ich aus der syslog entnehmen:


martian destination 127.0.0.1 from 217.225.xxx.xxx, dev ppp0

Das ist ja lediglich das Logging über das fremde Paket (log_martians). Überprüfe mal mit einem Sniffer an lo ob die Pakete eingehen.

Harry

RichieX
22.04.05, 08:35
Hab mit tcpdump -i lo getestet, es kommt nichts an.

RichieX