iptables ... immer wieder Fragen

Post Reply
Message
Author
neq

iptables ... immer wieder Fragen

#1 Post by neq »

hi ...

irgendwie will das trotz 100er Docus nicht klappen :(

ich hab folgende Regeln für meinen Router erstellt:

modprobe ip_tables
modprobe iptable_filter
modprobe iptable_nat
modprobe ipt_MASQUERADE
modprobe ipt_MIRROR
modprobe ipt_REJECT
modprobe ipt_TCPMSS
modprobe ipt_state
modprobe ipt_tcpmss
modprobe ip_conntrack
modprobe ip_conntrack_ftp
modprobe ip_nat_ftp
echo "Modules loaded"
echo "Activating Kernel IP-Forwarding"
echo 1 > /proc/sys/net/ipv4/ip_forward
echo "Enabling dynamic addressing measures"
echo "1" > /proc/sys/net/ipv4/ip_dynaddr

iptables -t nat -A POSTROUTING -o $DEVICE -j MASQUERADE

SO .. ich kann von internen Netz ins Internet ...
klappt wunderbar ... nun kommt die Firewall, mit der ich natürlich Standardgemäß alles ersteinmal verwerfe:



$IPTABLES -F INPUT
$IPTABLES -F OUTPUT
$IPTABLES -F FORWARD
$IPTABLES -F
$IPTABLES -t nat -F
$IPTABLES -X
$IPTABLES -t nat -X
$IPTABLES -Z


$IPTABLES -P INPUT DROP
$IPTABLES -P FORWARD DROP
$IPTABLES -P OUTPUT DROP
$IPTABLES -t nat -P PREROUTING DROP
$IPTABLES -t nat -P POSTROUTING DROP
$IPTABLES -t nat -P OUTPUT DROP

... so ab da hab ich nun ein Probleme ... wie gebe ich nun den Router für meine Rechner im internen Netz (192.168.0.0/24) frei ???? Das folgende Script macht das scheinbar nicht

folgenes Script habe ich im Internet gefunden und etwas modifiziert:

IPTABLES=/usr/local/sbin/iptables
INTERNALNET="192.168.1.0/24"
INTERNALBCAST="192.168.1.255"
INTERNALIF="eth1"
LOIF="lo"
EXTERNALIF="ppp0"
INTERNALIP="192.168.1.254/32"
LOIP="127.0.0.1/24"


##############################################################################
# Zuerst einige neue Chains, um den Ablauf besser zu kontrollieren #
##############################################################################

# Ein neues Target für Loggen und Droppen in einem Schritt

$IPTABLES -N LDROP 2>/dev/null

$IPTABLES -A LDROP -p tcp --dport 6670 -m limit -j LOG \
--log-prefix "Deepthroat scan"
$IPTABLES -A LDROP -p tcp --dport 6711 -m limit -j LOG \
--log-prefix "Subseven scan"
$IPTABLES -A LDROP -p tcp --dport 6712 -m limit -j LOG \
--log-prefix "Subseven scan"
$IPTABLES -A LDROP -p tcp --dport 6713 -m limit -j LOG \
--log-prefix "Subseven scan"
$IPTABLES -A LDROP -p tcp --dport 12345 -m limit -j LOG \
--log-prefix "Netbus scan"
$IPTABLES -A LDROP -p tcp --dport 12346 -m limit -j LOG \
--log-prefix "Netbus scan"
$IPTABLES -A LDROP -p tcp --dport 20034 -m limit -j LOG \
--log-prefix "Netbus scan"
$IPTABLES -A LDROP -p tcp --dport 31337 -m limit -j LOG \
--log-prefix "Back orifice scan"
$IPTABLES -A LDROP -p tcp --dport 6000 -m limit -j LOG \
--log-prefix "X-Windows Port"

$IPTABLES -A LDROP -p tcp ! --syn -m state --state NEW -j LOG \
--log-prefix "New not syn:"

$IPTABLES -A LDROP -p tcp -j LOG --log-level info \
--log-prefix "TCP Drop "
$IPTABLES -A LDROP -p udp -j LOG --log-level info \
--log-prefix "UDP Drop "
$IPTABLES -A LDROP -p icmp -j LOG --log-level info \
--log-prefix "ICMP Drop "
$IPTABLES -A LDROP -p gre -j LOG --log-level info \
--log-prefix "GRE Drop "

$IPTABLES -A LDROP -f -j LOG --log-level emerg \
--log-prefix "FRAGMENT Drop "

$IPTABLES -A LDROP -j DROP

#-----------------------------------------------------------------------------

# Ein neues Target, um einige akzeptierte Pakete loggen zu können

$IPTABLES -N WATCH 2>/dev/null
$IPTABLES -A WATCH -m limit -j LOG --log-level warn --log-prefix "ACCEPT "
$IPTABLES -A WATCH -j ACCEPT

#-----------------------------------------------------------------------------

# Eine neue Chain für TCP connections, wird später gebraucht

$IPTABLES -N TCP_CHECK
$IPTABLES -A TCP_CHECK -p TCP --syn -j ACCEPT
$IPTABLES -A TCP_CHECK -p TCP -m state --state ESTABLISHED,RELATED -j ACCEPT
$IPTABLES -A TCP_CHECK -p TCP -j LDROP

#-----------------------------------------------------------------------------

# Eigene Chains für ICMP, TCP und UDP. Das spart CPU-Load

$IPTABLES -N ICMP_PACKETS
$IPTABLES -A ICMP_PACKETS -p icmp --icmp-type echo-reply -j ACCEPT
$IPTABLES -A ICMP_PACKETS -p icmp --icmp-type destination-unreachable -j WATCH
$IPTABLES -A ICMP_PACKETS -p icmp --icmp-type network-unreachable -j WATCH
$IPTABLES -A ICMP_PACKETS -p icmp --icmp-type host-unreachable -j WATCH
$IPTABLES -A ICMP_PACKETS -p icmp --icmp-type protocol-unreachable -j WATCH
$IPTABLES -A ICMP_PACKETS -p icmp --icmp-type port-unreachable -j ACCEPT
$IPTABLES -A ICMP_PACKETS -p icmp --icmp-type fragmentation-needed -j LDROP
$IPTABLES -A ICMP_PACKETS -p icmp --icmp-type source-route-failed -j WATCH
$IPTABLES -A ICMP_PACKETS -p icmp --icmp-type network-unknown -j WATCH
$IPTABLES -A ICMP_PACKETS -p icmp --icmp-type host-unknown -j WATCH
$IPTABLES -A ICMP_PACKETS -p icmp --icmp-type network-prohibited -j WATCH
$IPTABLES -A ICMP_PACKETS -p icmp --icmp-type host-prohibited -j WATCH
$IPTABLES -A ICMP_PACKETS -p icmp --icmp-type TOS-network-unreachable -j WATCH
$IPTABLES -A ICMP_PACKETS -p icmp --icmp-type TOS-host-unreachable -j WATCH
$IPTABLES -A ICMP_PACKETS -p icmp --icmp-type communication-prohibited -j WATCH
$IPTABLES -A ICMP_PACKETS -p icmp --icmp-type host-precedence-violation -j LDROP
$IPTABLES -A ICMP_PACKETS -p icmp --icmp-type precedence-cutoff -j LDROP
$IPTABLES -A ICMP_PACKETS -p icmp --icmp-type source-quench -j LDROP
$IPTABLES -A ICMP_PACKETS -p icmp --icmp-type redirect -j LDROP
$IPTABLES -A ICMP_PACKETS -p icmp --icmp-type network-redirect -j LDROP
$IPTABLES -A ICMP_PACKETS -p icmp --icmp-type host-redirect -j LDROP
$IPTABLES -A ICMP_PACKETS -p icmp --icmp-type TOS-network-redirect -j LDROP
$IPTABLES -A ICMP_PACKETS -p icmp --icmp-type TOS-host-redirect -j LDROP
$IPTABLES -A ICMP_PACKETS -p icmp --icmp-type echo-request -j WATCH
$IPTABLES -A ICMP_PACKETS -p icmp --icmp-type router-advertisement -j LDROP
$IPTABLES -A ICMP_PACKETS -p icmp --icmp-type router-solicitation -j LDROP
$IPTABLES -A ICMP_PACKETS -p icmp --icmp-type time-exceeded -j WATCH
$IPTABLES -A ICMP_PACKETS -p icmp --icmp-type ttl-zero-during-transit -j WATCH
$IPTABLES -A ICMP_PACKETS -p icmp --icmp-type ttl-zero-during-reassembly -j WATCH
$IPTABLES -A ICMP_PACKETS -p icmp --icmp-type parameter-problem -j WATCH
$IPTABLES -A ICMP_PACKETS -p icmp --icmp-type ip-header-bad -j WATCH
$IPTABLES -A ICMP_PACKETS -p icmp --icmp-type required-option-missing -j WATCH
$IPTABLES -A ICMP_PACKETS -p icmp --icmp-type timestamp-request -j LDROP
$IPTABLES -A ICMP_PACKETS -p icmp --icmp-type timestamp-reply -j LDROP
$IPTABLES -A ICMP_PACKETS -p icmp --icmp-type address-mask-request -j LDROP
$IPTABLES -A ICMP_PACKETS -p icmp --icmp-type address-mask-reply -j LDROP
$IPTABLES -A ICMP_PACKETS -p icmp -j LDROP

$IPTABLES -N TCP_PACKETS
$IPTABLES -A TCP_PACKETS -p tcp --dport 21 -j TCP_CHECK
$IPTABLES -A TCP_PACKETS -p tcp --dport 22 -j TCP_CHECK
$IPTABLES -A TCP_PACKETS -p tcp --dport 80 -j TCP_CHECK
$IPTABLES -A TCP_PACKETS -p tcp --dport 113 -j TCP_CHECK
$IPTABLES -A TCP_PACKETS -p tcp -j LDROP

$IPTABLES -N UDP_PACKETS
$IPTABLES -A UDP_PACKETS --proto udp --dport 1024: -j ACCEPT
$IPTABLES -A UDP_PACKETS -p udp -s 0/0 --source-port 53 -j ACCEPT
$IPTABLES -A UDP_PACKETS -p udp -s 0/0 --source-port 123 -j ACCEPT
$IPTABLES -A UDP_PACKETS -p udp -s 0/0 --source-port 2074 -j ACCEPT
$IPTABLES -A UDP_PACKETS -p udp -s 0/0 --source-port 4000 -j ACCEPT
$IPTABLES -A UDP_PACKETS -p udp -s 0/0 --source-port 5000 -j ACCEPT


##############################################################################
# Jetzt kommt der Hauptteil, der die Filterarbeit macht #
##############################################################################

# Keine Beschränkungen auf dem Loopback-Device
$IPTABLES -A OUTPUT -o $LOIF -j ACCEPT
$IPTABLES -A INPUT -i $LOIF -j ACCEPT

# Alle Verbindungen zum Loopback killen. Muß noch getestet werden
# $IPTABLES -A INPUT -d 127.0.0.0/8 -j DROP

# Blödsinn sofort vernichten
$IPTABLES -t nat -A PREROUTING -i $EXTERNALIF -s 192.168.0.0/16 -j DROP
$IPTABLES -t nat -A PREROUTING -i $EXTERNALIF -s 10.0.0.0/8 -j DROP
$IPTABLES -t nat -A PREROUTING -i $EXTERNALIF -s 172.16.0.0/12 -j DROP
$IPTABLES -t nat -A PREROUTING -i $EXTERNALIF -s 127.0.0.0/8 -j DROP

# Neue Pakete dürfen nur syn sein
$IPTABLES -p tcp ! --syn -m state --state NEW -j LDROP

# Alles killen, was von draußen kommt und vorgibt, von drinnen zu sein
$IPTABLES -A INPUT -i $EXTERNALIF -s $INTERNALNET -j DROP

# Verbindungen aus dem LAN über das interne Interface erlauben
$IPTABLES -A INPUT -p ALL -i $INTERNALIF -s $INTERNALNET -j ACCEPT

# Bestehende Verbindungen immer zulassen
$IPTABLES -A INPUT -i $EXTERNALIF -m state \
--state ESTABLISHED,RELATED -j ACCEPT
$IPTABLES -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT

# Die match-Einstellung mit limit muß nochmal überarbeitet werden
# $IPTABLES -A INPUT -m limit --limit 3/minute --limit-burst 3 -j LOG \
# --log-level DEBUG --log-prefix "IPT INPUT packet died: "

# Pakete von innen nach außen zulassen
$IPTABLES -A FORWARD -i $INTERNALIF -j ACCEPT
$IPTABLES -A OUTPUT -s $LOIP -j ACCEPT
$IPTABLES -A OUTPUT -o $EXTERNALIF -j ACCEPT

# Masquerading aktivieren
iptables -t nat -A POSTROUTING -o $EXTERNALIF -j MASQUERADE

##############################################################################
# Jetzt werden die Pakete an die verschiedenen Sub-chains weitergeleitet #
##############################################################################

$IPTABLES -A INPUT -p ICMP -i $EXTERNALIF -j ICMP_PACKETS
$IPTABLES -A INPUT -p TCP -i $EXTERNALIF -j TCP_PACKETS
$IPTABLES -A INPUT -p UDP -i $EXTERNALIF -j UDP_PACKETS
$IPTABLES -A FORWARD -p ICMP -i $EXTERNALIF -j ICMP_PACKETS
$IPTABLES -A FORWARD -p TCP -i $EXTERNALIF -j TCP_PACKETS
$IPTABLES -A FORWARD -p UDP -i $EXTERNALIF -j UDP_PACKETS



Nur das Ding ist verdamt fehlerbehaftet ...
z.Bsp.:
$IPTABLES -A LDROP -p tcp -j LOG --log-level info \
--log-prefix "TCP Drop "

diese Zeilen bringen Fehler:
auch

$IPTABLES -A LDROP -p tcp -j LOG --log-level info --log-prefix "TCP Drop "

er kommt irgendwie mit dem info nicht klar .. hab es durch eine 6 ersetzt ... nun gehts.


folgenden Abschnitt kann ich auch nicht nachvollziehen:

# Neue Pakete dürfen nur syn sein (bringt Fehler)
$IPTABLES -p tcp ! --syn -m state --state NEW -j LDROP

hab ich löschen bzw. dokumentieren müssen (keine Lösung gefunden)

das Ende vom Lied ist, daß nach Start dieses Script GAR nichts mehr funktioniert ... ich kann keinen Ping vom internen Netz schicken, ich kann keine Internetseiten vom internen Netz aufrufen .. etc.

WICHTIG: mein internen Netz hängt bei mir an eth1 (nicht an eth0), da eth0 für den DSL-Anschluß ist
(also ppp0 zeigt auf eth0)
wer kann mir hier helfen ?

wäre Super .. und ich wäre verdammt dankbar

Gruß neq

Sascha

Re: iptables ... immer wieder Fragen

#2 Post by Sascha »

Suche mal unter sourceforge oder auch freshmeat.net nach fwbuilder, da kann man mit einer grafischen Oberflächer wunderbar solche Skripte einrichten...

Sascha

Sascha

Re: iptables ... immer wieder Fragen

#3 Post by Sascha »

Hier noch ein lustiges Skript, das von innen nach aussen alles erlaubt, jedoch von aussen nur SSH...


#!/bin/sh

#PATH="/usr/local/sbin:/usr/sbin:/sbin:/usr/local/bin:/usr/bin:/bin"

iptables -P OUTPUT DROP
iptables -P INPUT DROP
iptables -P FORWARD DROP




if [ -f /proc/net/ip_tables_names ]; then
set `cat /proc/net/ip_tables_names`
else
set nat filter
fi

while [ -n "$1" ]; do
table=$1
iptables -t $table -L -n |
awk '/Chain/ {print $2;}' |
while read chain; do
iptables -t $table -F $chain
done
iptables -t $table -X
shift
done





iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
#
# NAT Rule #0
#
iptables -t nat -A POSTROUTING -o ppp0 -s 192.168.1.253 -d 0/0 -j MASQUERADE
iptables -t nat -A POSTROUTING -o ppp0 -s 192.168.1.0/255.255.255.0 -d 0/0 -j MASQUERADE
#
# Interface Rule #0
#
iptables -N IRULE_0_ppp0
iptables -A INPUT -i ppp0 -m state --state NEW -s 192.168.1.253 -j IRULE_0_ppp0
iptables -A FORWARD -i ppp0 -m state --state NEW -s 192.168.1.253 -j IRULE_0_ppp0
iptables -A INPUT -i ppp0 -m state --state NEW -s 192.168.1.0/255.255.255.0 -j IRULE_0_ppp0
iptables -A FORWARD -i ppp0 -m state --state NEW -s 192.168.1.0/255.255.255.0 -j IRULE_0_ppp0
iptables -A IRULE_0_ppp0 -m state --state NEW -j LOG --log-level debug --log-prefix "RULE 0 -- Deny "
iptables -A IRULE_0_ppp0 -m state --state NEW -j DROP
#
# Rule #0
#
# 'masquerading' rule
#
iptables -N RULE_0
iptables -A INPUT -m state --state NEW -s 192.168.1.253 -j RULE_0
iptables -A OUTPUT -m state --state NEW -j RULE_0
iptables -A INPUT -m state --state NEW -s 192.168.1.0/255.255.255.0 -j RULE_0
iptables -A FORWARD -m state --state NEW -s 192.168.1.0/255.255.255.0 -j RULE_0
iptables -A RULE_0 -m state --state NEW -j ACCEPT
#
# Rule #1
#
iptables -N RULE_1
iptables -A FORWARD -m state --state NEW -s 127.0.0.1 -d 127.0.0.1 -j RULE_1
iptables -A RULE_1 -m state --state NEW -j ACCEPT
#
# Rule #2
#
iptables -N RULE_2
iptables -A INPUT -m state --state NEW -s 192.168.1.0/255.255.255.0 -j RULE_2
iptables -A RULE_2 -m state --state NEW -j ACCEPT
#
# Rule #3
#
iptables -N RULE_3
iptables -A OUTPUT -m state --state NEW -d 192.168.1.0/255.255.255.0 -j RULE_3
iptables -A RULE_3 -m state --state NEW -j ACCEPT
#
# Rule #4
#
iptables -N RULE_4
iptables -A OUTPUT -p tcp -m state --state NEW -d 192.168.1.253 --destination-port 22 -j RULE_4
iptables -A INPUT -p tcp -m state --state NEW --destination-port 22 -j RULE_4
iptables -A RULE_4 -m state --state NEW -j LOG --log-level debug --log-prefix "RULE 4 -- Accept "
iptables -A RULE_4 -m state --state NEW -j ACCEPT
#
# Rule #5
#
# 'catch all' rule
#
iptables -N RULE_5
iptables -A OUTPUT -j RULE_5
iptables -A INPUT -j RULE_5
iptables -A FORWARD -j RULE_5
iptables -A RULE_5 -j LOG --log-level debug --log-prefix "RULE 5 -- Deny"
iptables -A RULE_5 -j DROP
#
# Final rules
#
iptables -A INPUT -j DROP
iptables -A OUTPUT -j DROP
iptables -A FORWARD -j DROP

Viel Spass


Sascha

neq

Re: iptables ... immer wieder Fragen

#4 Post by neq »

Danke für den Script, aber kann denn niemand meine Fragen beantworten ?

neq

Post Reply