PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : IPTABLES mit benutzerdeefinierten chains



nikster77
04.09.2005, 13:23
Hi Leute.
Ich habe ein Problem mit diesem Script:

#!/bin/bash

#################################################
#

#################################################
#Variablendeklaration

IF_LOOPBACK="lo"
IF_INET="ppp0"
IF_LAN="eth1"
IF_LAN_NET="192.168.1.0/24"
PRIV="0:1023"
UNPRIV="1024:65535"

# (SMB) (NFS) (X11)
# BAD_TCP="135:139 1433 2049 5999:6063"
# BAD_UDP="135:139 1433 2049 5999:6063"

##################################################
#Laden der benoetigten Module

#/sbin/modprobe ip_tables
#/sbin/modprobe iptable_filter
#/sbin/modprobe ip_conntrack
#/sbin/modprobe ip_conntrack_ftp
#/sbin/modprobe ip_nat_ftp

case "$1" in
start)
##################################################
#Flushing Rules

echo "Cleaning up..."
echo 0 > /proc/sys/net/ipv4/ip_forward
iptables -F
iptables -t nat -F
iptables -t mangle -F
iptables --delete-chain
iptables -t nat --delete-chain
iptables -t mangle --delete-chain

##################################################
#Adresse der Internetverbindung bestimmen

echo -n "Determinating IP-Address of Internet Interface... "
IF_INET_IP="`ifconfig $IF_INET | grep 'inet addr' | awk '{print $2}' | sed -e 's/.*://'`"
echo $IF_INET_IP

##################################################
#Allgemeine Sicherheitsoptionen und Routing

echo "Setting sysctl options..."

#Enable forwarding in kernel
echo 1 > /proc/sys/net/ipv4/ip_forward
#Disabling IP Spoofing attacks.
echo 2 > /proc/sys/net/ipv4/conf/all/rp_filter

#Don't respond to broadcast pings (Smurf-Amplifier-Protection)
echo "1" > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts

#Block source routing
echo 0 > /proc/sys/net/ipv4/conf/all/accept_source_route

#Kill timestamps
echo 0 > /proc/sys/net/ipv4/tcp_timestamps

#Enable SYN Cookies
echo 1 > /proc/sys/net/ipv4/tcp_syncookies

#Kill redirects
echo 0 > /proc/sys/net/ipv4/conf/all/accept_redirects

#Enable bad error message protection
echo 1 > /proc/sys/net/ipv4/icmp_ignore_bogus_error_responses

#Log martians (packets with impossible addresses)
echo 1 > /proc/sys/net/ipv4/conf/all/log_martians

##################################################
#Erstellen selbstdefinierter Chains

for i in INT_INPUT_ACCEPT_TCP INT_INPUT_ACCEPT_UDP INT_OUTPUT_ACCEPT_UDP \
INT_OUTPUT_ACCEPT_TCP EXT_INPUT_ACCEPT_TCP EXT_INPUT_ACCEPT_UDP EXT_OUTPUT_ACCEPT_TCP \
EXT_OUTPUT_ACCEPT_UDP INT_FORWARD_ACCEPT_TCP INT_FORWARD_ACCEPT_UDP EXT_FORWARD_ACCEPT_TCP \
EXT_FORWARD_ACCEPT_UDP; do
iptables -N $i;
done

##################################################
#Loopback-Interface Connections erlauben

echo "Rules for Loopback Interface..."
iptables -A INPUT -i $IF_LOOPBACK -j ACCEPT
iptables -A OUTPUT -o $IF_LOOPBACK -j ACCEPT

##################################################
#Masquerading

echo "Creating IPTABLES rules:"
echo "Masquerading..."
iptables -t nat -A POSTROUTING -o $IF_INET -j MASQUERADE

##################################################
#Userdefined INPUT-Chains
# QA

echo "setting up userdefined-chains..."

iptables -A INT_INPUT_ACCEPT_TCP -s $IF_LAN_NET \
-p tcp -m multiport --destination-port 22,53,67,68,80,123,443,993,995,4662 -j ACCEPT

iptables -A INT_INPUT_ACCEPT_UDP -s $IF_LAN_NET \
-p udp -m multiport --destination-port 53,67,68,123 -j ACCEPT

iptables -A EXT_INPUT_ACCEPT_UDP \
-p udp -m multiport --source-port 53,67,68,123 -j ACCEPT

iptables -A EXT_INPUT_ACCEPT_TCP \
-p tcp -m multiport --source-port 22,53,67,68,123,110,995,993,4662 -j ACCEPT

#Admin



##################################################
#Userdefined OUTPUT-Chains
#QA

iptables -A INT_OUTPUT_ACCEPT_UDP -d $IF_LAN_NET \
-p udp -m multiport --source-port 53,67,68,80,123,443,993,995,4662 -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT

iptables -A INT_OUTPUT_ACCEPT_TCP -d $IF_LAN_NET \
-p tcp -m multiport --source-port 22,53,67,68,80,123,110,443,993,995,4662 -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT

iptables -A EXT_OUTPUT_ACCEPT_UDP \
-p udp -m multiport --destination-port 53,67,68,80,123,443,993,995,4662 -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT

iptables -A EXT_OUTPUT_ACCEPT_TCP \
-p tcp -m multiport --destination-port 22,53,67,68,80,110,123,443,993,995,4662 -m --state NEW,RELATED,ESTABLISHED -j ACCEPT

##################################################
#Userdefined FORWARD-Chains

iptables -A INT_FORWARD_ACCEPT_UDP -s $IF_LAN_NET \
-p udp -m multiport --destination-port 80,123,443,993,995,4662 -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT

iptables -A INT_FORWARD_ACCEPT_TCP -s $IF_LAN_NET \
-p tcp -m multiport --destination-port 22,53,67,68,80,110,123,443,993,995,4662 -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT

iptables -A EXT_FORWARD_ACCEPT_UDP \
-p udp -m multiport --source-port 80,123,443,993,995,4662 -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT

iptables -A EXT_FORWARD_ACCEPT_TCP \
-p tcp -m multiport --source-port 22,53,67,68,80,110,123,443,993,995,4662 -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT

#################################################
#IPTABLES-RULES
#PPP0

echo "setting up IPTABLES-Rules..."

iptables -A OUTPUT -p udp -o $IF_INET -j EXT_OUTPUT_ACCEPT_UDP
iptables -A OUTPUT -p tcp -o $IF_INET -j EXT_OUTPUT_ACCEPT_TCP

iptables -A INPUT -p udp -i $IF_INET -j EXT_INPUT_ACCEPT_UDP
iptables -A INPUT -p tcp -i $IF_INET -j EXT_INPUT_ACCEPT_TCP

iptables -A FORWARD -p udp -i $IF_INET -o eth0 -j EXT_FORWARD_ACCEPT_UDP
iptables -A FORWARD -p tcp -i $IF_INET -o eth0 -j EXT_FORWARD_ACCEPT_TCP

#eth0

iptables -A OUTPUT -p udp -o $IF_LAN -j INT_OUTPUT_ACCEPT_UDP
iptables -A OUTPUT -p tcp -o $IF_LAN -j INT_OUTPUT_ACCEPT_TCP

iptables -A INPUT -p udp -i $IF_LAN -j INT_INPUT_ACCEPT_UDP
iptables -A INPUT -p tcp -i $IF_LAN -j INT_INPUT_ACCEPT_TCP

iptables -A FORWARD -p udp -i $IF_LAN -o $IF_INET -j INT_FORWARD_ACCEPT_UDP
iptables -A FORWARD -p tcp -i $IF_LAN -o $IF_INET -j INT_FORWARD_ACCEPT_TCP

#################################################
#Default-Policies

echo "Setting default policy..."

iptables -P INPUT DROP
iptables -P OUTPUT ACCEPT
iptables -P FORWARD DROP
;;

stop)
echo "Shutting down routing..."
echo 0 > /proc/sys/net/ipv4/ip_forward
iptables -P INPUT ACCEPT
iptables -P OUTPUT ACCEPT
iptables -F
iptables -t nat -F
iptables -t mangle -F
;;
*)
echo "Usage: ./filter {start|stop}"
exit 1
;;
esac

exit 0

Wie Ihr seht habe ich ein Gateway zwischen meinem LAN und dem Internet und eigentlich auch ein FW-Script das gut funktioniert...
aber es benutzt keine benutzerdefinierten Ketten (ich habe alles direkt in die INPUT,OUTPUT und FORWARD-Chains geschrieben).
Ich habe mir die Doku auf netfilter.org schon x-mal durchgelesen kriege es aber nicht ans laufen.
Sobald er die default-Policies setzt sperre ich mich aus dem Rechner aus, es geht kein Forwarding, kein Input und kein Output mehr.

Wenn jemand den Fehler sehen wuerde oder mir evtl. mein grundsaetzliches Verstaendnisproblem auseinandersetzen koennte waere ich echt gluecklich...

Gruss

Niels

Niels

khs
04.09.2005, 14:58
aber es benutzt keine benutzerdefinierten Ketten (ich habe alles direkt in die INPUT,OUTPUT und FORWARD-Chains geschrieben).


Koenntest du eventuell den Output von iptables -vnL noch anhaengen? Beim Drueberlesen scheint mir dein Script auch logisch - aber irgendwas muss ja kaputt sein... ;)

-khs

nikster77
04.09.2005, 15:37
Koenntest du eventuell den Output von iptables -vnL noch anhaengen? Beim Drueberlesen scheint mir dein Script auch logisch - aber irgendwas muss ja kaputt sein...

Ja, das ist ein Problem, ich sperre mich ja aus dem Rechner aus und kann den Output nur lesen wenn ich einen Monitor daran anschliesse...
Da das allerdings eine Menge Output ist wuerde es mich Stunden kosten das alles abzutippen...

Danke schonmal das du alles durchgelesen hast :)

Niels