MatthiasS
30.05.12, 12:57
Hallo zusammen,
ich habe folgendes Problem:
Auf unserem alten Gateway konnte man den internen Webserver z.B. auf Port 8080 von außen über Port 20200 erreichen.
Internet <-> Name.dyndns.org:20200 <-> Port Forwarding <-> 192.168.0.23:8080
Das ganze wurde mit rinted realisiert und klappte bis dato ganz gut.
Der neue Server läuft auch als Gateway, aber mit Iptables.
Internet <-> ppp0 <-> IPTables Firewall und Routing <-> eth1 <-> internes Netz 192.168.0.0/24
Wenn ich rinetd wieder in Betrieb nehme, tut sich nichts, da Iptables den Zugriff verhindert. All meine Versuche das Port Forwarding mit Iptables zu machen, sind bisher fehlgeschlagen.
Hat jemand ne Idee, wie ich das realisieren kann?
Habe folgendes zusätzlich zum unten angegebenen Skript versucht:
/sbin/iptables -t nat -A PREROUTING -p tcp -i ppp0 --dport <QUELLPORT> -j DNAT --to 192.168.202.23:<ZIELPORT>
/sbin/iptables -A FORWARD -p tcp -i ppp0 -d 192.168.202.23 --dport <ZIELPORT> -j ACCEPT
#!/bin/bash
echo "Starting firewall"
LOGLIMIT=20
IPTABLES=/sbin/iptables
LAN_IFACE="eth1"
INET_IFACE="ppp0"
case "$1" in
start)
# alle alten Regeln entfernen
echo "Loesche alte Regeln"
$IPTABLES -F
$IPTABLES -X
$IPTABLES -t nat -F
# Routing
echo 1 > /proc/sys/net/ipv4/ip_forward
$IPTABLES -A FORWARD -m state --state ESTABLISHED,RELATED,NEW -j ACCEPT
$IPTABLES -t nat -A POSTROUTING -o $INET_IFACE -j MASQUERADE
### ERSTELLE NEUE KETTEN ###
# Chain to log and reject a port by ICMP port unreachable
$IPTABLES -N LOGREJECT
$IPTABLES -A LOGREJECT -m limit --limit $LOGLIMIT/minute -j LOG \
--log-prefix "FIREWALL REJECT " --log-level notice --log-ip-options --log-tcp-options
$IPTABLES -A LOGREJECT -j REJECT --reject-with icmp-port-unreachable
### PROC MANIPULATION ###
# auf Broadcast-Pings nicht antworten
echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts
# halt die Klappe bei komischen ICMP Nachrichten
echo 0 > /proc/sys/net/ipv4/icmp_ignore_bogus_error_responses
# Kicke den ganzen IP Spoofing Shit
# (Source-Validierung anschalten)
echo 1 > /proc/sys/net/ipv4/conf/all/rp_filter
# Setze Default-TTL auf 61 (Default fuer Linux ist 64)
echo 61 > /proc/sys/net/ipv4/ip_default_ttl
# warte max. 30 secs auf ein FIN/ACK
echo 30 > /proc/sys/net/ipv4/tcp_fin_timeout
# unterbreche Verbindungsaufbau nach 3 SYN-Paketen
# Default ist 6
echo 3 > /proc/sys/net/ipv4/tcp_syn_retries
# unterbreche Verbindungsaufbau nach 3 SYN/ACK-Paketen
# Default ist 6
echo 3 > /proc/sys/net/ipv4/tcp_synack_retries
### MAIN PART ###
# SSH auf den Server erlauben
$IPTABLES -A INPUT -m state --state NEW -p tcp --dport 2121 -j ACCEPT
# OpenVPN durchlassen / erlauben
$IPTABLES -A INPUT -m state --state NEW -p udp --dport 15555 -j ACCEPT
$IPTABLES -P INPUT DROP
$IPTABLES -P FORWARD DROP
$IPTABLES -P OUTPUT ACCEPT
$IPTABLES -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
$IPTABLES -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
# im Loopback koennen wir jedem trauen
$IPTABLES -A INPUT -i lo -j ACCEPT
# ebenso im LAN
$IPTABLES -A INPUT -i $LAN_IFACE -j ACCEPT
# erlaube Pings
$IPTABLES -A INPUT -p icmp --icmp-type echo-request -j ACCEPT
# Alle TCP Packete, die bis hier hin kommen, werden
# geloggt und rejected
# Der Rest wird eh per Default Policy gedroppt...
$IPTABLES -A INPUT -p tcp -j LOGREJECT
$IPTABLES -A FORWARD -p tcp -j LOGREJECT
;;
*)
echo "Usage: `basename $0` {start}" >&2
exit 64
;;
esac
exit 0
Hoffentlich hat hier jemand ne Idee dazu.
Das Skript wurde übrigens von hier (http://www.hackerwiki.org/index.php/Einrichtung_eines_Routers_mit_Linux) entnommen.
Gruß
Matthias
ich habe folgendes Problem:
Auf unserem alten Gateway konnte man den internen Webserver z.B. auf Port 8080 von außen über Port 20200 erreichen.
Internet <-> Name.dyndns.org:20200 <-> Port Forwarding <-> 192.168.0.23:8080
Das ganze wurde mit rinted realisiert und klappte bis dato ganz gut.
Der neue Server läuft auch als Gateway, aber mit Iptables.
Internet <-> ppp0 <-> IPTables Firewall und Routing <-> eth1 <-> internes Netz 192.168.0.0/24
Wenn ich rinetd wieder in Betrieb nehme, tut sich nichts, da Iptables den Zugriff verhindert. All meine Versuche das Port Forwarding mit Iptables zu machen, sind bisher fehlgeschlagen.
Hat jemand ne Idee, wie ich das realisieren kann?
Habe folgendes zusätzlich zum unten angegebenen Skript versucht:
/sbin/iptables -t nat -A PREROUTING -p tcp -i ppp0 --dport <QUELLPORT> -j DNAT --to 192.168.202.23:<ZIELPORT>
/sbin/iptables -A FORWARD -p tcp -i ppp0 -d 192.168.202.23 --dport <ZIELPORT> -j ACCEPT
#!/bin/bash
echo "Starting firewall"
LOGLIMIT=20
IPTABLES=/sbin/iptables
LAN_IFACE="eth1"
INET_IFACE="ppp0"
case "$1" in
start)
# alle alten Regeln entfernen
echo "Loesche alte Regeln"
$IPTABLES -F
$IPTABLES -X
$IPTABLES -t nat -F
# Routing
echo 1 > /proc/sys/net/ipv4/ip_forward
$IPTABLES -A FORWARD -m state --state ESTABLISHED,RELATED,NEW -j ACCEPT
$IPTABLES -t nat -A POSTROUTING -o $INET_IFACE -j MASQUERADE
### ERSTELLE NEUE KETTEN ###
# Chain to log and reject a port by ICMP port unreachable
$IPTABLES -N LOGREJECT
$IPTABLES -A LOGREJECT -m limit --limit $LOGLIMIT/minute -j LOG \
--log-prefix "FIREWALL REJECT " --log-level notice --log-ip-options --log-tcp-options
$IPTABLES -A LOGREJECT -j REJECT --reject-with icmp-port-unreachable
### PROC MANIPULATION ###
# auf Broadcast-Pings nicht antworten
echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts
# halt die Klappe bei komischen ICMP Nachrichten
echo 0 > /proc/sys/net/ipv4/icmp_ignore_bogus_error_responses
# Kicke den ganzen IP Spoofing Shit
# (Source-Validierung anschalten)
echo 1 > /proc/sys/net/ipv4/conf/all/rp_filter
# Setze Default-TTL auf 61 (Default fuer Linux ist 64)
echo 61 > /proc/sys/net/ipv4/ip_default_ttl
# warte max. 30 secs auf ein FIN/ACK
echo 30 > /proc/sys/net/ipv4/tcp_fin_timeout
# unterbreche Verbindungsaufbau nach 3 SYN-Paketen
# Default ist 6
echo 3 > /proc/sys/net/ipv4/tcp_syn_retries
# unterbreche Verbindungsaufbau nach 3 SYN/ACK-Paketen
# Default ist 6
echo 3 > /proc/sys/net/ipv4/tcp_synack_retries
### MAIN PART ###
# SSH auf den Server erlauben
$IPTABLES -A INPUT -m state --state NEW -p tcp --dport 2121 -j ACCEPT
# OpenVPN durchlassen / erlauben
$IPTABLES -A INPUT -m state --state NEW -p udp --dport 15555 -j ACCEPT
$IPTABLES -P INPUT DROP
$IPTABLES -P FORWARD DROP
$IPTABLES -P OUTPUT ACCEPT
$IPTABLES -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
$IPTABLES -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
# im Loopback koennen wir jedem trauen
$IPTABLES -A INPUT -i lo -j ACCEPT
# ebenso im LAN
$IPTABLES -A INPUT -i $LAN_IFACE -j ACCEPT
# erlaube Pings
$IPTABLES -A INPUT -p icmp --icmp-type echo-request -j ACCEPT
# Alle TCP Packete, die bis hier hin kommen, werden
# geloggt und rejected
# Der Rest wird eh per Default Policy gedroppt...
$IPTABLES -A INPUT -p tcp -j LOGREJECT
$IPTABLES -A FORWARD -p tcp -j LOGREJECT
;;
*)
echo "Usage: `basename $0` {start}" >&2
exit 64
;;
esac
exit 0
Hoffentlich hat hier jemand ne Idee dazu.
Das Skript wurde übrigens von hier (http://www.hackerwiki.org/index.php/Einrichtung_eines_Routers_mit_Linux) entnommen.
Gruß
Matthias