PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Eigenes Routing & Firewall Script, aber funktioniert irgendwie nix



-hanz-
07.10.05, 14:07
Hi Leute,

System ist Slackware 10.1 mit selbst kompiliertem Kernel 2.6.11.7, ohne Module (alles im Kernel)

Interfaces sind

eth0 --> wird im moment noch nicht benötigt (aber vermutlich bald)
eth1 --> is fürs lokale Netz, der Weg nach drausen also :)
eth2 --> hängt dsl dran, also nicht soo wichtig
ppp0 --> DSL halt

So nun zum Ziel, das Script soll für mich routen und Verbindungen zum Router/Server von ausen abblocken (soll ja auch sicher sein :)) Bisher hab ich narc benutzt (setzt auf iptables auf, und man kann seine Einstellungen in Config-files machen), aber das ist nicht mein Ding, weil man da ja nicht so richtig weiß was das so wirklich macht.
Problem ist an meinem Script nun, das es keinen Zugriff mehr aus dem Lan zulässt, vorhandene (z. B. die ssh-session mit der ich es starte) werden aber nicht getrennt. Routing tut auch noch nicht.

Hier dann mal das Script:


#-------------------------------------------------------------------------------------------------
# | Firewallscript |
# | |
# -------------------------------------------------------------------------------------------------

# ----------------------------------------------------------------------- Forwarding aktivieren ---
echo 1 >> /proc/sys/net/ipv4/ip_forward
echo 1 >> /proc/sys/net/ipv4/ip_dynaddr

# ------------------------------------------------------------------------- alte Regeln löschen ---
iptables -t filter -F
iptables -t nat -F

# --------------------------------------------------------------------- Masquerading aktivieren ---
iptables -t nat -A POSTROUTING -o ppp+ -s 192.168.0.0/24 -j MASQUERADE

# -------------------------------- MSS der Pakete ins I-Net an die MTU von DSL (=1492) anpassen ---
iptables -A FORWARD -o ppp+ -p TCP --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu

# ------------------------------------------------------------- Verbindung aus dem Lan erlauben ---
iptables -A INPUT -m state --state NEW -i ! ppp+ -j ACCEPT

# --------------------------------- Vorhandene oder Wiederhergestellte Verbindungen akzeptieren ---
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

# --------------------- Pakete aus I-Net mit privaten (gefaelschten) Absenderadressen verwerfen ---
# prerouting
iptables -t nat -A PREROUTING -i ppp+ -s 192.168.0.0/16 -j DROP
iptables -t nat -A PREROUTING -i ppp+ -s 10.0.0.0/8 -j DROP
iptables -t nat -A PREROUTING -i ppp+ -s 172.16.0.0/12 -j DROP
iptables -t nat -A PREROUTING -i ppp+ -s 127.0.0.0/8 -j DROP
# forwarding
iptables -A FORWARD -i ppp+ -s 192.168.0.0/16 -j DROP
iptables -A FORWARD -i ppp+ -s 10.0.0.0/8 -j DROP
iptables -A FORWARD -i ppp+ -s 172.16.0.0/12 -j DROP
iptables -A FORWARD -i ppp+ -s 127.0.0.0/8 -j DROP
# local input
iptables -A INPUT -i ppp+ -s 192.168.0.0/16 -j DROP
iptables -A INPUT -i ppp+ -s 10.0.0.0/8 -j DROP
iptables -A INPUT -i ppp+ -s 172.16.0.0/12 -j DROP
iptables -A INPUT -i ppp+ -s 127.0.0.0/8 -j DROP

# ----------------------------------------------------------------------- Default Policy setzen ---
iptables -t filter -P INPUT DROP
iptables -t filter -P FORWARD DROP
iptables -t filter -P OUTPUT DROP
iptables -t nat -P PREROUTING DROP
iptables -t nat -P POSTROUTING DROP


Output von iptables -L


Chain INPUT (policy DROP)
target prot opt source destination
ACCEPT all -- anywhere anywhere state NEW
ACCEPT all -- anywhere anywhere state RELATED,ESTABLISHED
DROP all -- localnet/16 anywhere
DROP all -- 10.0.0.0/8 anywhere
DROP all -- 172.16.0.0/12 anywhere
DROP all -- loopback/8 anywhere

Chain FORWARD (policy DROP)
target prot opt source destination
TCPMSS tcp -- anywhere anywhere tcp flags:SYN,RST/SYN TCPMSS clamp to PMTU
DROP all -- localnet/16 anywhere
DROP all -- 10.0.0.0/8 anywhere
DROP all -- 172.16.0.0/12 anywhere
DROP all -- loopback/8 anywhere

Chain OUTPUT (policy DROP)
target prot opt source destination
ACCEPT all -- anywhere anywhere state RELATED,ESTABLISHED


Vielen Dank schonmal im Vorraus

MfG

-hanz-

cane
07.10.05, 15:35
Lass dir hier unter "Iptables-Generator" ein Script erstellen:

http://harry.homelinux.org

Kannst Du dir ja bei Bedarf immer noch anpassen - ist aber eine funktionierende Grundlage :)

mfg
cane

mkahle
07.10.05, 21:09
# ------------------------------------------------------------- Verbindung aus dem Lan erlauben ---
iptables -A INPUT -m state --state NEW -i ! ppp+ -j ACCEPT
dies betrifft nur Pakete, die an die Maschine selbst adressiert sind. Ich denke, Du willst an der Stelle Pakete erlauben, die ins Internet sollen. Dann mußt Du jedoch die FORWARD und nicht die INPUT chain adressieren:


iptables -A FORWARD -m state --state NEW -i ! ppp+ -j ACCEPT

-hanz-
07.10.05, 21:42
dies betrifft nur Pakete, die an die Maschine selbst adressiert sind. Ich denke, Du willst an der Stelle Pakete erlauben, die ins Internet sollen. Dann mußt Du jedoch die FORWARD und nicht die INPUT chain adressieren:


iptables -A FORWARD -m state --state NEW -i ! ppp+ -j ACCEPT

jo stimmt auch so, aber selbst neue Verbindungen aus dem eigenen Netz hat er nicht genommen...naja ich hab inzwischen die Lösung von cane benutzt, und das geht soweit. Nur hab ich ein anders Problem. ich möchte mit ner mac-source arbeiten:


iptables -A INPUT --mac-source XX:XX:XX:XX:XX:XX -m state --state NEW -i eth+ -j ACCEPT
Aber da bekomme ich folgende Aussage...im Kernel isses aber drin


iptables v1.2.11: Unknown arg `--mac-source'
Try `iptables -h' or 'iptables --help' for more information.

...muss ich da dann ein iptables Packet aktuallisieren oder wie ?

cane
07.10.05, 21:47
Es muss so aussehen:


iptables -A INPUT -m mac --mac-source 00:00:00:00:00:01

mfg
cane

-hanz-
07.10.05, 22:34
Also leude, thx nun geht alles soweit wie es soll ! :)

-hanz-
08.10.05, 08:06
hmm...nun ist doch noch ein Problem aufgetreten...seid ich das neue benutzt wird meine Syslog mit:



Oct 8 02:11:06 SERVER inetd[29854]: execv /usr/sbin/in.identd: No such file or directory
Oct 8 02:11:06 SERVER inetd[1646]: /usr/sbin/in.identd: exit status 0x1


zugemüllt...

Hier das Script:



case "$1" in
start)
# ------------------------------------------------------------------ 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

# ---------------------------------------------------- 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 DROP
iptables -A FORWARD -p tcp --tcp-flags ALL NONE -j DROP

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

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

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

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

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

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

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

# ------------------- Maximum Segment Size (MSS) für das Forwarding an PMTU anpassen ---
iptables -A FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu

# --------------------------------------------------- Connection-Tracking aktivieren ---
iptables -A OUTPUT -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -i ! ppp+ -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

# ----------------------------------------------------------- LAN-Zugriff auf Server ---
# --------------------------------------------- Vollzugriff von einigen MAC-Adressen ---
iptables -A INPUT -m mac --mac-source XX:XX:XX:XX:XX:XX -m state --state NEW -i eth+ -j ACCEPT
iptables -A INPUT -m mac --mac-source XX:XX:XX:XX:XX:XX -m state --state NEW -i eth+ -j ACCEPT

# ----------------------------------------------------- mldonkey-Port für den Server ---
iptables -A INPUT -i ppp+ -m state --state NEW -P TCP --dport 6662 -j ACCEPT
iptables -A INPUT -i ppp+ -m state --state NEW -P TCP --dport 6882 -j ACCEPT

# -------------------------- Zugriff auf bind/named/dns-Server für den Rest ausm LAN ---
iptables -A INPUT -i eth+ -p TCP --dport 53 -j ACCEPT
iptables -A INPUT -i eth+ -p UDP --dport 53 -j ACCEPT

# Forwarding/Routing
echo "Aktiviere IP-Routing"
echo 1 > /proc/sys/net/ipv4/ip_forward 2> /dev/null

# Masquerading
iptables -t nat -A POSTROUTING -o ppp+ -j MASQUERADE

# Max. 500/Sekunde (5/Jiffie) senden
echo 5 > /proc/sys/net/ipv4/icmp_ratelimit

# Speicherallozierung und -timing für IP-De/-Fragmentierung
echo 262144 > /proc/sys/net/ipv4/ipfrag_high_thresh
echo 196608 > /proc/sys/net/ipv4/ipfrag_low_thresh
echo 30 > /proc/sys/net/ipv4/ipfrag_time

# TCP-FIN-Timeout zum Schutz vor DoS-Attacken setzen
echo 30 > /proc/sys/net/ipv4/tcp_fin_timeout

# Maximal 3 Antworten auf ein TCP-SYN
echo 3 > /proc/sys/net/ipv4/tcp_retries1

# TCP-Pakete maximal 15x wiederholen
echo 15 > /proc/sys/net/ipv4/tcp_retries2

;;

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

carnil
08.10.05, 09:03
Hallo

Habe zu der Fehlermeldung/Warnung in der Syslog folgendes gefunden (ist zwar etwas älter, lässt sich vielleicht doch noch übertragen): http://lists.suse.com/archive/suse-linux-e/2001-Apr/0456.html

-hanz-
08.10.05, 16:04
Nun is gut, thx