Hallo Leute ich habe es immer noch nicht geschafft.
Mit IP-tables wollte ich von aussen einen internen Webserver
erreichen. Bischen SSH freischalten sonst eigentlich nix.
Ich habe eine Regel die eine Verbindung von aussen zum Webserver weiterleiten soll.
iptables -t nat -A PREROUTING -i $IFACE_EXT -p tcp --sport $UNPRIVPORTS -d $IPADDR --dport 80 -j DNAT --to-destination $WEB
Bei dieser Regel wird immer --to-destination angemeckert. Warum?
IP-Tablesproblem
Ich habe hier mal das komplette Skript drinnen.
Wenn einer einen Fehler findet sagt bescheid.
Mir fallen schon die Haare aus. Es ist schon einiges
auskommentiert die Optionen sollen später wieder rein.
#!/bin/sh
# Schnittstelle zum lokalen Netzwerk
IFACE_INT="eth1"
# Internetschnittstelle
IFACE_EXT="eth0"
# Loopback device
IFACE_LO="lo"
# Interne IP-Adresse
IPADDR_INT="172.16.163.1"
# Externe IP-Adresse
IPADDR="192.168.10.6"
# Webserver
WEBSERVER="172.16.163.147"
# Loopback-Addresse
LOOPBACK="127.0.0.0/8"
# KLASSE A: private Netze
CLASS_A="10.0.0.0/8"
# KLASSE B: private Netze
CLASS_B="172.16.0.0/12"
# KLASSE C: private Netze
CLASS_C="192.168.0.0/16"
# Broadcast-Absender
BROADCAST_SRC="0.0.0.0"
# Broadcast-Empfaenger
BROADCAST_DEST="255.255.255.255"
# privilegierte Prots
PRIVPORTS="0:1023"
# unpriviligierte Ports
UNPRIVPORTS="1024:65535"
# (TCP) X-WindowS
XWINDOW_PORTS="6000:6063"
# SSH_Ports
SSH_Ports="1024:65535"
# SSH_SERVER on
SSH_SERVER="1"
# ConnectionTracking on
CONNECTION_TRACKING="1"
# Nameserver
NAMESERVER="192.54.46.105"
# Broadcastadresse des Subnetzes
SUBNET_BROADCAST="192.168.10.255"
# Netzwerkadresse
SUBNET_BASE="192.168.10.0"
function StartFirewall() {
# ***************************
# ***************************
# * *
# * 3. Starten der Firewall *
# * *
# ***************************
# ***************************
# Einschalten des Routings
echo "1" > /proc/sys/net/ipv4/ip_forward
#*****************************************************************************
# ************
# * Policies *
# ************
# Vorbestehende Regeln loeschen
iptables --flush
iptables -t nat --flush
iptables -t mangle --flush
# Keine Einschraenkungen fuer das Loopback
iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT
# Voreinstellung: Alle Pakete verwerfen
iptables --policy INPUT DROP
iptables --policy OUTPUT DROP
iptables --policy FORWARD DROP
iptables -t nat --policy PREROUTING DROP
iptables -t nat --policy OUTPUT DROP
iptables -t nat --policy POSTROUTING DROP
iptables -t mangle --policy PREROUTING DROP
iptables -t mangle --policy OUTPUT DROP
# *****************************************************************************
# *********
# * INPUT *
# *********
# Ankommende Pakete ablehnen, die vorgeblich von der IP-Adresse unseres
# externen Interfaces kommen.
iptables -A INPUT -i $IFACE_EXT -s $IPADDR -j DROP
# Pakete abweisen, wenn Absender im privaten Klasse-A-Bereich ist
iptables -A INPUT -i $IFACE_EXT -s $CLASS_A -j DROP
# Pakete abweisen, wenn Absender im privaten Klasse-B-Bereich ist
iptables -A INPUT -i $IFACE_EXT -s $CLASS_B -j DROP
# Pakete abweisen, wenn Absender im privaten Klasse-C-Bereich ist
iptables -A INPUT -i $IFACE_EXT -s $CLASS_C -j DROP
# Pakete vom Loopback verwerfen
iptables -A INPUT -i $IFACE_LO -s $LOOPBACK -j DROP
# Fehlerhafte Broadcast-Pakete verwerfen und aufzeichnen
iptables -A INPUT -i $IFACE_EXT -s $BROADCAST_DEST -j LOG
iptables -A INPUT -i $IFACE_EXT -s $BROADCAST_DEST -j DROP
iptables -A INPUT -i $IFACE_EXT -d $BROADCAST_SRC -j LOG
iptables -A INPUT -i $IFACE_EXT -d $BROADCAST_SRC -j DROP
# Gerichtete Broadcasts sperren
# (Kartierung von Netzwerken, Denial-of-Service-Angriffe)
iptables -A INPUT -i $IFACE_EXT -d $SUBNET_BASE -j DROP
iptables -A INPUT -i $IFACE_EXT -d $SUBNET_BROADCAST -j DROP
# X-Window: Aufbau einer Verbindung zu einem fremden Server sperren
iptables -A INPUT -i $IFACE_EXT -p tcp --syn --destination-port $XWINDOW_PORTS -j DROP
# ************
# * INCOMING *
# ************
# Auf den SSH-Server kann zugegriffen werden
# ******************************************
if [ "$SSH_SERVER" = "1" ]; then
if [ "CONNECTION_TRACKING" = "1" ]; then
iptables -A INPUT -i $IFACE_EXT -p tcp --sport $SSH_PORTS -d $IPADDR --dport 22 -m state --state NEW -j ACCEPT
fi
iptables -A INPUT -i $IFACE_EXT -p tcp --sport $SSH_PORTS -d $IPADDR --dport 22 -j ACCEPT
iptables -A OUTPUT -o $IFACE_EXT -p tcp ! --syn -s $IPADDR --sport 22 --dport $SSH_PORT -j ACCEPT
fi
# **************
# * FORWARDING *
# **************
# Adressumsetzung einer Anfrage zum internen Webserver
iptables -t nat -A PREROUTING -i $IFACE_EXT -p tcp --sport $UNPRIVPORTS -d $IPADDR --dport 80 -j DNAT --to-destination $WEB
# ******************************************
# * Forwarding zum internen Webserver *
# ******************************************
iptables -A FORWARD -i $IFACE_EXT -o $IFACE_INT -p tcp --sport $UNPRIVPORTS -d $WEBSERVER --dport 80 -m state --state NEW -j ACCEPT
iptables -A FORWARD -i $IFACE_INT -o $IFACE_EXT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -i $IFACE_EXT -o $IFACE_INT -m state --state ESTABLISHED,RELATED -j ACCEPT
# ******************
# * Ausgangsregeln *
# ******************
# Ins lokale Netzwerk: Alles erlauben
iptables -A OUTPUT -s $IPADDR_INT -d $WEBSERVER -j ACCEPT
# Ans Loopback: Alles erlauben
iptables -A OUTPUT -o $IFACE_LO -j ACCEPT
# Ins Internet: Alles erlauben
iptables -A OUTPUT -o $IFACE_EXT -j ACCEPT
function StopFirewall() {
# **********************************
# **********************************
# * *
# * 2. HERUNTERFAHREN DER FIREWALL *
# * *
# **********************************
# **********************************
# Ausschalten des Routing
echo "0" > /proc/sys/net/ipv4/ip_forward
# Default-Policies: Alles rein und raus, kein Forwarding mehr
iptables -P INPUT ACCEPT
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT
# Loeschen aller Regeln
iptables -F
# Loeschen aller zusaezlichen Ketten
iptables -X
}
# **********************
# **********************
# * *
# * START-STOP-SKRIPT *
# * *
# **********************
# **********************
case "$1" in
start)
echo -n "Starting firewall: iptables"
StartFirewall
;;
stop)
echo -n "Stopping firewall: iptables"
StopFirewall
;;
force-reload|restart)
$0 stop
$0 start
;;
*)
echo "Usage: /etc/init.d/fwneu1 {start|stop|restart|force-reload}"
exit 1
;;
esac
Wenn einer einen Fehler findet sagt bescheid.
Mir fallen schon die Haare aus. Es ist schon einiges
auskommentiert die Optionen sollen später wieder rein.
#!/bin/sh
# Schnittstelle zum lokalen Netzwerk
IFACE_INT="eth1"
# Internetschnittstelle
IFACE_EXT="eth0"
# Loopback device
IFACE_LO="lo"
# Interne IP-Adresse
IPADDR_INT="172.16.163.1"
# Externe IP-Adresse
IPADDR="192.168.10.6"
# Webserver
WEBSERVER="172.16.163.147"
# Loopback-Addresse
LOOPBACK="127.0.0.0/8"
# KLASSE A: private Netze
CLASS_A="10.0.0.0/8"
# KLASSE B: private Netze
CLASS_B="172.16.0.0/12"
# KLASSE C: private Netze
CLASS_C="192.168.0.0/16"
# Broadcast-Absender
BROADCAST_SRC="0.0.0.0"
# Broadcast-Empfaenger
BROADCAST_DEST="255.255.255.255"
# privilegierte Prots
PRIVPORTS="0:1023"
# unpriviligierte Ports
UNPRIVPORTS="1024:65535"
# (TCP) X-WindowS
XWINDOW_PORTS="6000:6063"
# SSH_Ports
SSH_Ports="1024:65535"
# SSH_SERVER on
SSH_SERVER="1"
# ConnectionTracking on
CONNECTION_TRACKING="1"
# Nameserver
NAMESERVER="192.54.46.105"
# Broadcastadresse des Subnetzes
SUBNET_BROADCAST="192.168.10.255"
# Netzwerkadresse
SUBNET_BASE="192.168.10.0"
function StartFirewall() {
# ***************************
# ***************************
# * *
# * 3. Starten der Firewall *
# * *
# ***************************
# ***************************
# Einschalten des Routings
echo "1" > /proc/sys/net/ipv4/ip_forward
#*****************************************************************************
# ************
# * Policies *
# ************
# Vorbestehende Regeln loeschen
iptables --flush
iptables -t nat --flush
iptables -t mangle --flush
# Keine Einschraenkungen fuer das Loopback
iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT
# Voreinstellung: Alle Pakete verwerfen
iptables --policy INPUT DROP
iptables --policy OUTPUT DROP
iptables --policy FORWARD DROP
iptables -t nat --policy PREROUTING DROP
iptables -t nat --policy OUTPUT DROP
iptables -t nat --policy POSTROUTING DROP
iptables -t mangle --policy PREROUTING DROP
iptables -t mangle --policy OUTPUT DROP
# *****************************************************************************
# *********
# * INPUT *
# *********
# Ankommende Pakete ablehnen, die vorgeblich von der IP-Adresse unseres
# externen Interfaces kommen.
iptables -A INPUT -i $IFACE_EXT -s $IPADDR -j DROP
# Pakete abweisen, wenn Absender im privaten Klasse-A-Bereich ist
iptables -A INPUT -i $IFACE_EXT -s $CLASS_A -j DROP
# Pakete abweisen, wenn Absender im privaten Klasse-B-Bereich ist
iptables -A INPUT -i $IFACE_EXT -s $CLASS_B -j DROP
# Pakete abweisen, wenn Absender im privaten Klasse-C-Bereich ist
iptables -A INPUT -i $IFACE_EXT -s $CLASS_C -j DROP
# Pakete vom Loopback verwerfen
iptables -A INPUT -i $IFACE_LO -s $LOOPBACK -j DROP
# Fehlerhafte Broadcast-Pakete verwerfen und aufzeichnen
iptables -A INPUT -i $IFACE_EXT -s $BROADCAST_DEST -j LOG
iptables -A INPUT -i $IFACE_EXT -s $BROADCAST_DEST -j DROP
iptables -A INPUT -i $IFACE_EXT -d $BROADCAST_SRC -j LOG
iptables -A INPUT -i $IFACE_EXT -d $BROADCAST_SRC -j DROP
# Gerichtete Broadcasts sperren
# (Kartierung von Netzwerken, Denial-of-Service-Angriffe)
iptables -A INPUT -i $IFACE_EXT -d $SUBNET_BASE -j DROP
iptables -A INPUT -i $IFACE_EXT -d $SUBNET_BROADCAST -j DROP
# X-Window: Aufbau einer Verbindung zu einem fremden Server sperren
iptables -A INPUT -i $IFACE_EXT -p tcp --syn --destination-port $XWINDOW_PORTS -j DROP
# ************
# * INCOMING *
# ************
# Auf den SSH-Server kann zugegriffen werden
# ******************************************
if [ "$SSH_SERVER" = "1" ]; then
if [ "CONNECTION_TRACKING" = "1" ]; then
iptables -A INPUT -i $IFACE_EXT -p tcp --sport $SSH_PORTS -d $IPADDR --dport 22 -m state --state NEW -j ACCEPT
fi
iptables -A INPUT -i $IFACE_EXT -p tcp --sport $SSH_PORTS -d $IPADDR --dport 22 -j ACCEPT
iptables -A OUTPUT -o $IFACE_EXT -p tcp ! --syn -s $IPADDR --sport 22 --dport $SSH_PORT -j ACCEPT
fi
# **************
# * FORWARDING *
# **************
# Adressumsetzung einer Anfrage zum internen Webserver
iptables -t nat -A PREROUTING -i $IFACE_EXT -p tcp --sport $UNPRIVPORTS -d $IPADDR --dport 80 -j DNAT --to-destination $WEB
# ******************************************
# * Forwarding zum internen Webserver *
# ******************************************
iptables -A FORWARD -i $IFACE_EXT -o $IFACE_INT -p tcp --sport $UNPRIVPORTS -d $WEBSERVER --dport 80 -m state --state NEW -j ACCEPT
iptables -A FORWARD -i $IFACE_INT -o $IFACE_EXT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -i $IFACE_EXT -o $IFACE_INT -m state --state ESTABLISHED,RELATED -j ACCEPT
# ******************
# * Ausgangsregeln *
# ******************
# Ins lokale Netzwerk: Alles erlauben
iptables -A OUTPUT -s $IPADDR_INT -d $WEBSERVER -j ACCEPT
# Ans Loopback: Alles erlauben
iptables -A OUTPUT -o $IFACE_LO -j ACCEPT
# Ins Internet: Alles erlauben
iptables -A OUTPUT -o $IFACE_EXT -j ACCEPT
function StopFirewall() {
# **********************************
# **********************************
# * *
# * 2. HERUNTERFAHREN DER FIREWALL *
# * *
# **********************************
# **********************************
# Ausschalten des Routing
echo "0" > /proc/sys/net/ipv4/ip_forward
# Default-Policies: Alles rein und raus, kein Forwarding mehr
iptables -P INPUT ACCEPT
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT
# Loeschen aller Regeln
iptables -F
# Loeschen aller zusaezlichen Ketten
iptables -X
}
# **********************
# **********************
# * *
# * START-STOP-SKRIPT *
# * *
# **********************
# **********************
case "$1" in
start)
echo -n "Starting firewall: iptables"
StartFirewall
;;
stop)
echo -n "Stopping firewall: iptables"
StopFirewall
;;
force-reload|restart)
$0 stop
$0 start
;;
*)
echo "Usage: /etc/init.d/fwneu1 {start|stop|restart|force-reload}"
exit 1
;;
esac