Firewallscripts

Gemeinsam ins Internet mit Firewall und Proxy.
Antworten
k-pl
Beiträge: 587
Registriert: 11.01.2002 11:26:44
Wohnort: München
Kontaktdaten:

Firewallscripts

Beitrag von k-pl » 30.10.2002 09:08:57

Da immer wieder die Frage kommt, wo die iptables-Befehle eingetragen werden sollen, hier nochmal das Script von glatzor aus http://www.debianforum.de/forum/viewtopic.php?t=151 . Dieses Script lege man in /etc/init.d ab und erstelle Symlinks im Verzeichnis des benutzren Runlevels.

Achtung: Das Script ist ein Beispiel. Umbedingt die iptables-Eintrage anpassen.

Eine ausführlichere Anleitung befindet sich in der Tipp-Sektion.

Code: Alles auswählen

#!/bin/sh

  # Schnittstelle zum lokalen Netzwerk
  IFACE_INT=eth0

  # Internetschnittstelle - "ippp+" für ISDN
  IFACE_EXT=ppp+

  # Loopback device - bedraf keiner Anpassung
  IFACE_LO=lo


# ************
# * POLICIES *
# ************

  # Zurücksetzen der Konfiguration
  iptables -F
  iptables -t nat -F

  iptables -X
  iptables -t nat -X 

  # Default-Policies setzen - alles fliegt raus
  iptables -P INPUT DROP
  iptables -P FORWARD DROP
  iptables -P OUTPUT DROP

  # Einschalten von ip-Forwarding
  echo "1" > /proc/sys/net/ipv4/ip_forward


# *********
# * INPUT *
# *********

  # Soll nicht sein
  iptables -A INPUT -p TCP ! --syn -m state --state NEW -j DROP

  # Vom internen Netz alles erlauben
  iptables -A INPUT -i $IFACE_INT -j ACCEPT

  # Vom Loopback Alles erlauben
  iptables -A INPUT -i $IFACE_LO -j ACCEPT

  # Vom Internet: Darf nicht sein
  iptables -A INPUT -i $IFACE_EXT  -s 10.0.0.0/8 -j DROP
  iptables -A INPUT -i $IFACE_EXT  -s 172.16.0.0/12 -j DROP
  iptables -A INPUT -i $IFACE_EXT  -s 192.168.0.0/24 -j DROP

  # Vom Internet Erlauben von bereits initialisierten Verbindungen
  iptables -A INPUT -i $IFACE_EXT -m state \
--state ESTABLISHED,RELATED -j ACCEPT


# ***********
# * FORWARD *
# ***********
  
  # Wegen der Telekom
  iptables -I FORWARD -p TCP --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu
  
  # Lokal -> Internet: Alles erlauben
  iptables -A FORWARD -i $IFACE_INT -o $IFACE_EXT -j ACCEPT


  # Internet -> Lokales: Nur Verkehr über bereits bestehende Verbindungen erlauben
  iptables -A FORWARD -i $IFACE_EXT -o $IFACE_INT -m state \
--state ESTABLISHED,RELATED -j ACCEPT


# **********
# * OUTPUT *
# **********

  # Ins lokale Netzwerk: Alles erlauben
  iptables -A OUTPUT -o $IFACE_INT -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



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


  # Den Rest mitprotokollieren
  iptables -A OUTPUT -j LOG --log-prefix "Nicht raus: "
  iptables -A FORWARD -j LOG --log-prefix "Nicht durch: "
  iptables -A INPUT -j LOG --log-prefix "Nicht rein: " 

Changelog:
21.April 2003 - glatzor: Ich habe das Skript leicht modifiziert und einen Verweis auf eine HOWTO hinzugefügt

Benutzeravatar
suntsu
Beiträge: 2947
Registriert: 03.05.2002 10:45:12
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: schweiz
Kontaktdaten:

Beitrag von suntsu » 30.10.2002 09:55:17

Das würde sich auch noch gut in "Tipps" machen.

gruss

Benutzeravatar
acron
Beiträge: 147
Registriert: 03.05.2002 13:31:40
Wohnort: Aachen

Beitrag von acron » 31.10.2002 13:01:54

k-pl hat geschrieben: Dieses Script lege man in /etc/init.d ab und erstelle Symlinks im Verzeichnis des benutzren Runlevels.
oder in /etc/ppp/ip-up.d/ zum start beim aufbau der verbindung

k-pl
Beiträge: 587
Registriert: 11.01.2002 11:26:44
Wohnort: München
Kontaktdaten:

Beitrag von k-pl » 07.11.2002 08:58:24

Und hier noch ein Beispielscript, wenn man keinen Router betriebt, sondern nur seine Workstation absichern will.

Code: Alles auswählen

#!/bin/sh

#-----------------------------------------------
# config
#-----------------------------------------------

IF_INT=eth0
IF_LO=lo

#-----------------------------------------------
# stopFirewall
#-----------------------------------------------

function stopFirewall() {

  # enable all package, but do not forward
  iptables -P INPUT ACCEPT
  iptables -P FORWARD DROP
  iptables -P OUTPUT ACCEPT

  iptables -F
  iptables -t nat -F

  iptables -X
  iptables -t nat -X

  rmmod ip_conntrack_ftp
  rmmod ipt_LOG
}

#-----------------------------------------------
# startFirewall
#-----------------------------------------------

function startFirewall() {
modprobe ip_conntrack_ftp
modprobe ipt_LOG

  iptables -F
  iptables -X

  # drop everything
  iptables -P INPUT DROP
  iptables -P FORWARD DROP
  iptables -P OUTPUT DROP


  # allow everything from IF_LO
  iptables -A INPUT -i $IF_LO -j ACCEPT
  iptables -A OUTPUT -o $IF_LO -j ACCEPT

  # allow all related from IF_INT
  iptables -A INPUT -i $IF_INT -p TCP -m state --state ESTABLISHED,RELATED -j ACCEPT
  iptables -A INPUT -i $IF_INT -p UDP -m state --state ESTABLISHED,RELATED -j ACCEPT

  # allow all outgoing TCP connections to IF_INT
  iptables -A OUTPUT -o $IF_INT -p TCP -j ACCEPT

  # logg all other destoryed packages
  iptables -A OUTPUT -j LOG -m limit --limit 5/minute --log-prefix "OUTPUT_DROP: " --log-level warn
  iptables -A INPUT -j LOG -m limit --limit 5/minute --log-prefix "INPUT_DROP: " --log-level warn

}


###############################################################################
## Start-Stop-Script                                                         ##
###############################################################################

case "$1" in
start)
echo -n "Starting firewall: iptables"
startFirewall
echo "."
;;

stop)
echo -n "Stopping firewall: iptables"
stopFirewall
echo "."
;;

restart)
$0 stop
$0 start
;;

*)
echo "Usage: firewall {start|stop|restart}"
exit 1
;;
esac

Benutzeravatar
Natas12
Beiträge: 1751
Registriert: 12.04.2002 20:59:12

Beitrag von Natas12 » 08.11.2002 10:30:36

hallo,

hatte mir das skript für die workstation runtergeladen und "eth0" in "pppd" geändert (um es für modemverbindungen zu nutzen).

komme damit jedoch nicht "raus". den aufbau des skripts verstehe ich "so halb", nur leider nicht, wie ich es an meine bedürnisse anpassen kann. hab mir zwar schon eine menge tutorials reingezogen, aber irgendwie hab ich mich in den ganzen informationen verheddert.

lange rede kurter sinn: wie passe ich das skript für modemverbindungen an?

gruß

natas12

k-pl
Beiträge: 587
Registriert: 11.01.2002 11:26:44
Wohnort: München
Kontaktdaten:

Beitrag von k-pl » 08.11.2002 10:35:21

Das muss wenn dann ja ppp0 heißen und nicht pppd. ppp0 ist das Device und pppd ein Daemon.

Benutzeravatar
Natas12
Beiträge: 1751
Registriert: 12.04.2002 20:59:12

Beitrag von Natas12 » 08.11.2002 13:22:49

ah, wieder was dazu gelernt.... ;o)
werd' ich gleich mal testen!

thanx!

k-pl
Beiträge: 587
Registriert: 11.01.2002 11:26:44
Wohnort: München
Kontaktdaten:

Beitrag von k-pl » 08.11.2002 14:03:07

Natas12 hat geschrieben:ah, wieder was dazu gelernt.... ;o)
werd' ich gleich mal testen!

thanx!
Bitte

Benutzeravatar
Natas12
Beiträge: 1751
Registriert: 12.04.2002 20:59:12

Beitrag von Natas12 » 09.11.2002 10:34:25

argh! also: jetzt hab ich mich durch mehrere tutorials durchgeklickt, diverse programme ausprobiert. so richtig schlau werd ich da nicht draus...
hab auf http://www.iptables.de folgendes skript für "eilige" gefunden - taugt das was (einfach nur dialup, modem, mehr nicht):

Code: Alles auswählen

# Verbindungsaufspuerende Module einfuegen (Wenn nicht schon im Kernel).
insmod ip_conntrack
insmod ip_conntrack_ftp

# Kette erstellen, die neue Verbindung blockt, es sei denn, sie kommen
# von innen
 iptables -N block
 iptables -A block -m state --state ESTABLISHED,RELATED -j ACCEPT
 iptables -A block -m state --state NEW -i ! ppp0 -j ACCEPT
 iptables -A block -j DROP

# Von INPUT und FORWARD Ketten zu dieser Kette springen
 iptables -A INPUT -j block
 iptables -A FORWARD -j block
alles was ich so an "fertigen" einsteigerbrandmauern gesehen habe, sah ungefähr wie das hier aus, wohingegen mir jedes tutorial was anderes erzählte...

Benutzeravatar
pdreker
Beiträge: 8297
Registriert: 29.07.2002 21:53:30
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Nürnberg

Beitrag von pdreker » 09.11.2002 16:53:51

Das Skript blockiert alles, was von aussen reinkommt, es sei denn, es wurde von innen explizit angefordert.

Tipps:
Phase1
:arrow: Eine Firewall aufbauen ist ein wenig wie Programmieren. Es gibt fast beliebig viele Wege ein Ziel zu erreichen, daher sagt auch jedes Tutorial was anders.
:arrow: Schau erst'mal in die iptables Doku (nicht Tutorial!) auf http://www.netfilter.org, und verstehe, was INPUT, FORWARD und OUTPUT bedeutet (Da gibts irgednwo so ein schönes kleines Diagramm).
:arrow: Versuche zu verstehen, was eine Chain im allgemeinen ist.
:arrow: Minimale Kenntnisse über TCP und IP wären auch noch hilfreich (Verbindungsaufbau).

Phase2
:arrow: Überlege Dir wo in Deinem Netz die Firewall steht, und wie dein Netz aufgebaut ist.
:arrow: Jetzt plane: was soll die Firewall machen? Was darf rein, was nicht?
:arrow: Mit der man-page in einem Fenster, und die Firewall im anderen: Schritt für Schritt die iptables Befehle zusammen bauen, und ausprobieren. (Aufschreiben!!!)

Konzept: Normalerweise macht man es (für @home!) folgendermassen:
:arrow: Vom Internet ins interne Netz: Es ist nichts erlaubt, ausser ich sage explizit, dass es doch OK ist.
:arrow: Vom internen Netz ins Internet: Es ist alles erlaubt, ausser ich sage explizit, dass es nicht erlaubt ist.
:arrow: Workstations sind durch das Masquerading schon nicht mehr erreichbar (also vor dem Internet geschützt), man muss also eigentlich nur den Router richtig abdichten.

Wenn Du das im Griff hast, kommt NAT. Damit kannst Du dann Ports von dem Router auf die WS weiterleiten, um z.B. P2P Dienste funktionsfähig (oder aktiv) zu machen.

Patrick
Definitely not a bot...
Jabber: pdreker@debianforum.de

Benutzeravatar
Natas12
Beiträge: 1751
Registriert: 12.04.2002 20:59:12

Beitrag von Natas12 » 09.11.2002 18:04:16

super - danke!
ich werde zunächst die von mir benutzte "minimallösung" nutzen (alles erlaubt wenn von mir angefordert) und mal basteln - es ging mir nur darum, nicht mit "offener tür" durch die gegend zu fahren... ;o))

arteist
Beiträge: 728
Registriert: 20.05.2002 17:26:23
Kontaktdaten:

Beitrag von arteist » 17.12.2002 20:57:12

was für einen sinn hat es eigentlich, dass beim workstation-skript nur tcp für outgoing erlaubt ist?

k-pl
Beiträge: 587
Registriert: 11.01.2002 11:26:44
Wohnort: München
Kontaktdaten:

Beitrag von k-pl » 21.12.2002 18:42:28

arteist hat geschrieben:was für einen sinn hat es eigentlich, dass beim workstation-skript nur tcp für outgoing erlaubt ist?
Gar keinen. udp habe ich halt da nicht gebraucht.

Benutzeravatar
eigenvalue
Beiträge: 58
Registriert: 31.12.2002 19:42:10
Wohnort: Dortmund
Kontaktdaten:

Gute Beschreibung

Beitrag von eigenvalue » 01.01.2003 01:25:56

Ich finde Patrick (pdreker) hat mit seinem Posting vom 09.11.2002 eine ziemlich gute Schritt-für-Schritt Anleitung für Einsteiger zum Aufbau einer Firewall gegeben. Ich habe das Posting direkt an ein paar Freunde weitergeleitet, die ensprechende Fragen hatten, welche sich dadurch klären konnten.

Danke an dieser Stelle :)

EigenValue
"Our problems are mostly behind us. What we have to do now is fight the solutions." -- Stult's Report

Benutzeravatar
ChinaRot
Beiträge: 17
Registriert: 12.01.2003 19:22:05

iptabels in den kernel einbinden ?

Beitrag von ChinaRot » 12.01.2003 19:28:33

Hi :-)

... ich habe zum ersten mal ein debian-rechner aufgesetzt :
- Ethernetkarten sind installiert und richtig konfiguriert
- ping ins interne und externe Netz geht
- routing geht noch nicht

... nun habe ich das o.g. Firewallskript 1zu1 übernommen und bekomme folgende Fehlermeldung:

"modprobe:Cant locate module ip_tables
> iptables v1.2.1a: cant initialize iptables table 'filter': iptables who?"

... ich denke mal, das ip_tables noch nicht in den kernel kompeliert ist
... wie mache ich das ? (bin eher ein DAU was Linux angeht)

Danke für Eure Hilfe
Daniel

Antworten