PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Portforwarding ins Interne Netz (iptables)



Tommy_20
02.12.02, 13:47
Hab zwar hier ein paar beiträge zu dem thema gefunden, jedoch hat bisher nichts funktioniert davon :-(

Im lokalen netz läuft ein Mail-Server mit Web-Mail (kann aus bestimmten gründen nur auf dem internen server laufen). Apache läuft intern auf Port 81 und am Server, der direkt am I-Net hängt auf Port 80.

Am Internet-Server läuft apache (und alles andere) problemlos, nur die weiterleitung von port 81 (und bald auch 25 und 110) funktioniert einfach nicht.



$IPTABLES -t nat -A PREROUTING -i $EXT -p tcp --dport 81 -j DNAT --to 192.168.1.10
$IPTABLES -A FORWARD -i $EXT -o $INT -d 192.168.1.10 -m state --state NEW,ESTABLISHED,RELATED -p tcp --sport $highports --dport 81 -j ACCEPT
$IPTABLES -t nat -A POSTROUTING -p tcp -s 192.168.1.10 --sport 81 -d ! 192.168.1.0/24 -j SNAT --to $EXT_IP


komm irgendwie nicht mehr weiter und es wäre sehr dringend!

achja, port 81 ist offen, also sollte der problemlos weitergeleitet werden können.

Tommy_20
02.12.02, 14:52
hab jetzt den iptables generator von harry's seite probiert, aber die weiterleitung geht noch immer nicht:

aktuelles fw-script:



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

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

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

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

# MY_REJECT-Chain
iptables -N MY_REJECT

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

# MY_DROP-Chain
iptables -N MY_DROP
iptables -A MY_DROP -m limit --limit 7200/h -j LOG --log-prefix "PORTSCAN DROP "
iptables -A MY_DROP -j DROP

# Alle verworfenen Pakete protokollieren
iptables -A INPUT -m state --state INVALID -j LOG --log-prefix "INPUT INVALID "
iptables -A OUTPUT -m state --state INVALID -j LOG --log-prefix "OUTPUT INVALID "
iptables -A FORWARD -m state --state INVALID -j LOG --log-prefix "FORWARD INVALID "

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

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

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

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

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

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

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

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

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

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

# HTTPS
iptables -A INPUT -i eth0 -m state --state NEW -p tcp --dport 443 -j ACCEPT

# SMTP
iptables -A INPUT -i eth0 -m state --state NEW -p tcp --dport 25 -j ACCEPT

# POP3
iptables -A INPUT -i eth0 -m state --state NEW -p tcp --dport 110 -j ACCEPT

# POP3S
iptables -A INPUT -i eth0 -m state --state NEW -p tcp --dport 995 -j ACCEPT

# IMAPS
iptables -A INPUT -i eth0 -m state --state NEW -p tcp --dport 993 -j ACCEPT

# FTP
iptables -A INPUT -i eth0 -m state --state NEW -p tcp --dport 21 -j ACCEPT

# HTTP
iptables -A INPUT -i eth0 -m state --state NEW -p tcp --dport 80 -j ACCEPT

# SSH
iptables -A INPUT -i eth0 -m state --state NEW -p tcp --dport 22 -j ACCEPT

# EDONKEY
iptables -A INPUT -i eth0 -m state --state NEW -p tcp --dport 4661 -j ACCEPT
iptables -A INPUT -i eth0 -m state --state NEW -p tcp --dport 4662 -j ACCEPT
iptables -A INPUT -i eth0 -m state --state NEW -p tcp --dport 4663 -j ACCEPT
iptables -A INPUT -i eth0 -m state --state NEW -p udp --dport 4665 -j ACCEPT

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

# NAT fuer HTTP
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 81 -j DNAT --to 192.168.1.10:81
iptables -t nat -A POSTROUTING -o eth1 -p tcp --dport 81 -j SNAT --to xxx.xxx.xxx.xxx
iptables -A FORWARD -i eth0 -m state --state NEW -p tcp -d 192.168.1.10 --dport 81 -j ACCEPT

# LAN-Zugriff auf eth1
iptables -A INPUT -m state --state NEW -i eth1 -j ACCEPT

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

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

# Masquerading
iptables -t nat -A POSTROUTING -o eth0 -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

;;

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

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

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

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

esac

Berufspenner
02.12.02, 17:55
Hi

Portforwarding geht immer nur in eine Richtung. Diese Aussage sollte eigentlich auch schon ein paar mal gefallen sein.

Cu

Jinto
02.12.02, 18:18
@Tommy_20
Kennt dein interner Apache auch die "rückroute"?
Läuft auf dem internen Apache auch eine FW?
Funktioneirt der Zugriff über Port 81 auch?

@Berufspenner
Ich versteh nicht, was du samit sagen willst.

Berufspenner
02.12.02, 18:34
@Jinto

Ich wollte damit sagen, dass Portforwarding nur in eine Richtung geht. Hier also von Außen nach Innen. Andersherrum nicht. Ich habe diese Erfahrung auch schon machen dürfen. Alles war richtig eingestellt nur konnte ich von Innen den Server nicht erreichen. Da musste schon jemand ausserhalb meines Netzes testen und dann ging das auch. Halt aber nur von Außen.

Cu

Jinto
02.12.02, 18:43
@Berufspenner
So meintest du das, ich dachte du meintest den Rückweg vom Apache zum Client.

cu

Tommy_20
03.12.02, 10:17
von aussen funktionierts :-)

hat nur nie funktioniert, weil ich es immer vom internen netz probiert hab *g*