Themabewertung:
  • 0 Bewertung(en) - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
Firewall projekt
#1
Code:
#!/bin/sh
###########################################
#     Das externe Interface
#     z.b. ippp0 fuer ISDN oder ppp0 fuer modem
###########################################
EXTIF="ppp0"

##################################################
#          IP des Lokalen Netzwerks
# z.b. 10.0.0.0/24 fuer ein 10.0.0.0 IP Netzwerk
##################################################
LANIP="10.0.0.0/24"

###############################
# Loeschen der iptables Rules.
###############################
iptables -F -t filter
iptables -X -t filter
iptables -F -t nat
iptables -X -t nat

################ Masquerading ##################
# Nur diese Zeile ist noetig fuer Masquerading!
################################################
iptables -t nat -A POSTROUTING -o $EXTIF -s $LANIP -j MASQUERADE

####### Input DROP #######
#   Protokollfiltering   #
##########################
iptables -A INPUT -p icmp -d 0/0 -i $EXTIF -j DROP
iptables -A INPUT -p igmp -d 0/0 -i $EXTIF -j DROP
#iptables -A INPUT -p raw -d 0/0 -i $EXTIF -j DROP

#####################
#  Portfiltering auf $EXTIF   #
#####################

###Port 21+20 FTP###
#iptables -A INPUT -p tcp -d 0/0 --dport 20:21 -i $EXTIF -j ACCEPT
###Port 22 SSH###
iptables -A INPUT -p tcp -d 0/0 --dport 22 -i $EXTIF -j ACCEPT
###Port 23 Telnet###
#iptables -A INPUT -p tcp -d 0/0 --dport 23 -i $EXTIF -j ACCEPT
###Port 25 SMTP###
#iptables -A INPUT -p tcp -d 0/0 --dport 25 -i $EXTIF -j ACCEPT
###Port 37 TIME###
#iptables -A INPUT -p tcp -d 0/0 --dport 37 -i $EXTIF -j ACCEPT
###Port 53 DNS###
#iptables -A INPUT -p tcp -d 0/0 --dport 53 -i $EXTIF -j ACCEPT
###Port 79 FINGER###
#iptables -A INPUT -p tcp -d 0/0 --dport 79 -i $EXTIF -j ACCEPT
###Port 80 HTTP###
iptables -A INPUT -p tcp -d 0/0 --dport 80 -i $EXTIF -j ACCEPT
###Port 110 POP3###
#iptables -A INPUT -p tcp -d 0/0 --dport 110 -i $EXTIF -j ACCEPT
###Port 113 AUTH(ident)###
iptables -A INPUT -p tcp -d 0/0 --dport 113 -i $EXTIF -j ACCEPT
###Port 137-139 Netbios###
#iptables -A INPUT -p tcp -d 0/0 --dport 137:139 -i $EXTIF -j ACCEPT
###Port 143 IMAP###
#iptables -A INPUT -p tcp -d 0/0 --dport 143 -i $EXTIF -j ACCEPT


###die restlichen well known Ports dicht machen###
iptables -A INPUT -p tcp -d 0/0 --dport 0:1023 -i $EXTIF -j DROP
iptables -A INPUT -p udp -d 0/0 --dport 0:1023 -i $EXTIF -j DROP
####################################

###### NAT #######
# Portforwarding
##################
#iptables -t nat -A PREROUTING -p tcp --dport 666 -i $EXTIF -j DNAT --to 192.168.0.29:21
#iptables -t nat -A PREROUTING -p tcp --dport 79 -i $IF -j DNAT --to 209.10.41.242:79
#iptables -A FORWARD -i $EXTIF -p tcp -d 209.10.41.242 --dport 79 -j ACCEPT

So ich hab mal templis sein Script genommen und bissel verändert
Ich denke auf dieser Basis kann man aufbauen.
Alle Well Known Ports d.h. 0-1023 werden erstma auf dem externen Interface abgelehnt. Vor dem Ablehnen stehen einige Accept regeln mit Portnummer sowie dem Dienst der normal auf diesem Port arbeitet. Die meisten sind auskommentiert und jeder kann sich durch auskommentieren und einkommentieren seine Firewall zusammenstellen.
Bei den Portforwardingregeln hab ich mal die Beispiele von templis stehen gelassen weil die sich sowieso jeder selbst confen muss.
Antworten
#2
Joa sieht ja soweit erstmal gut aus.

Was hälst Du von folgenden Ergänzungen:
Code:
# Ungültige IP-Päckchen, die zu keine Verbindung gehören droppen
iptables -A INPUT -m state --state INVALID -j DROP
# DoS Attacken verhindern
iptables -A INPUT --syn -m limit -limit 300/minute -j ACCEPT
iptables -A INPUT --syn -j REJECT --reject-with icmp-port-unreachable

- Silkem
Antworten
#3
Da ich das Script momentan nicht ausprobieren kann, habe ich dazu noch eine Frage:

-->   iptables -A INPUT -p icmp -d 0/0 -i $EXTIF -j DROP

werden damit nicht auch echo responses abgeblockt, die evtl. von mir angefordert wurden?

also z.B. wenn ich "ping hackingbord.de" mache, sende ich ja ein ICMP Echo-Request, das auch rauskommt, nur kommt dann auch die Antwort wieder rein ?

---

Vielleicht kann man in die Firewall auch noch einbauen, dass verschiedene Phone-Home-Programme geblockt werden. Zum Beispiel sollte der komplette IP-Bereich von Microsoft gesperrt sein Wink

----

Zusätzlich würde ich noch folgende Ports explizit sperren:

###Port 3128 Squid###
#iptables -A INPUT -p tcp -d 0/0 --dport 3128 -i $EXTIF -j DROP
(man kann natürlich Squid auch so konfigurieren, dass es nur Anfragen aus dem lokalen Netz annimmt, aber so scheint es mir einfacher und auch übersichtlicher)

###Port 3306 MySQL###
#iptables -A INPUT -p tcp -d 0/0 --dport 3306 -i $EXTIF -j DROP
(ältere MySQL-Versionen könnten evtl. noch anfällig für Exploits sein, ausserdem greift in den meisten Fällen nur der eigene Webserver drauf zu)

###Port 10000 Webmin###
#iptables -A INPUT -p tcp -d 0/0 --dport 10000 -i $EXTIF -j DROP
Millionen Bücher blieben Von den Menschen früh´rer Zeiten
Hätten sie nichts aufgeschrieben, könnt ihr Geist uns nicht begleiten.
Und verdammt zu Ignoranten müssten wir durchs Leben schreiten.
Alle Bücher sind Garanten für den Fortschritt und die menschliche Kultur.
Antworten
#4
Code:
#!/bin/sh
#############################################
#  Das externe Interface
#  z.b. ippp0 fuer ISDN oder ppp0 fuer modem
#############################################
EXTIF="ppp0"

##################################################
#  IP des Lokalen Netzwerks
#  z.b. 10.0.0.0/24 fuer ein 10.0.0.0 IP Netzwerk
##################################################
LANIP="10.0.0.0/24"



##################################
#  Loeschen der iptables Rules.  #
##################################
iptables -F -t filter
iptables -X -t filter
iptables -F -t nat
iptables -X -t nat


################ Masquerading #####################
#  Nur diese Zeile ist noetig fuer Masquerading!  #
###################################################
iptables -t nat -A POSTROUTING -o $EXTIF -s $LANIP -j MASQUERADE


###### Input DROP ######
#  Protokollfiltering  #
########################
iptables -A INPUT -p icmp -d 0/0 -i $EXTIF -j DROP
iptables -A INPUT -p igmp -d 0/0 -i $EXTIF -j DROP
#iptables -A INPUT -p raw -d 0/0 -i $EXTIF -j DROP


#############################
#  Schutz vor Attacken !!!  #
#############################
# Ungueltige IP-Paeckchen, die zu keine Verbindung gehoeren droppen
iptables -A INPUT -m state --state INVALID -j DROP
# DoS Attacken verhindern
iptables -A INPUT --syn -m limit -limit 300/minute -j ACCEPT
iptables -A INPUT --syn -j REJECT --reject-with icmp-port-unreachable


##############################
#  Portfiltering auf $EXTIF  #
##############################

##################
#well known Ports#
##################

###Port 21+20 FTP###
#iptables -A INPUT -p tcp -d 0/0 --dport 20:21 -i $EXTIF -j ACCEPT
###Port 22 SSH###
iptables -A INPUT -p tcp -d 0/0 --dport 22 -i $EXTIF -j ACCEPT
###Port 23 Telnet###
#iptables -A INPUT -p tcp -d 0/0 --dport 23 -i $EXTIF -j ACCEPT
###Port 25 SMTP###
#iptables -A INPUT -p tcp -d 0/0 --dport 25 -i $EXTIF -j ACCEPT
###Port 37 TIME###
#iptables -A INPUT -p tcp -d 0/0 --dport 37 -i $EXTIF -j ACCEPT
###Port 53 DNS###
#iptables -A INPUT -p tcp -d 0/0 --dport 53 -i $EXTIF -j ACCEPT
###Port 79 FINGER###
#iptables -A INPUT -p tcp -d 0/0 --dport 79 -i $EXTIF -j ACCEPT
###Port 80 HTTP###
iptables -A INPUT -p tcp -d 0/0 --dport 80 -i $EXTIF -j ACCEPT
###Port 110 POP3###
#iptables -A INPUT -p tcp -d 0/0 --dport 110 -i $EXTIF -j ACCEPT
###Port 113 AUTH(ident)###
iptables -A INPUT -p tcp -d 0/0 --dport 113 -i $EXTIF -j ACCEPT
###Port 137-139 Netbios###
#iptables -A INPUT -p tcp -d 0/0 --dport 137:139 -i $EXTIF -j ACCEPT
###Port 143 IMAP###
#iptables -A INPUT -p tcp -d 0/0 --dport 143 -i $EXTIF -j ACCEPT

###die restlichen well known Ports dicht machen###
iptables -A INPUT -p tcp -d 0/0 --dport 0:1023 -i $EXTIF -j DROP
iptables -A INPUT -p udp -d 0/0 --dport 0:1023 -i $EXTIF -j DROP

##################
#registered Ports#
##################

###Port 3128 Squid###
iptables -A INPUT -p tcp -d 0/0 --dport 3128 -i $EXTIF -j DROP
###Port 3306 MySQL###
iptables -A INPUT -p tcp -d 0/0 --dport 3306 -i $EXTIF -j DROP
###Port 10000 Webmin###
iptables -A INPUT -p tcp -d 0/0 --dport 10000 -i $EXTIF -j DROP


###### NAT #########
#  Portforwarding  #
####################
#iptables -t nat -A PREROUTING -p tcp --dport 666 -i $EXTIF -j DNAT --to 192.168
#iptables -t nat -A PREROUTING -p tcp --dport 79 -i $IF -j DNAT --to 209.10.41.2
#iptables -A FORWARD -i $EXTIF -p tcp -d 209.10.41.242 --dport 79 -j ACCEPT



<!--EDIT|AgentSP|19 Dez. 2001,17:05-->
Antworten
#5
iptables v1.2.2: Unknown arg `--syn'

iptables v1.2.2: unknown protocol `raw' specified

die beiden probs hab ich bei mir

hat wer ne idee woran das liegt?

Gruss
AgentSP
Antworten
#6
--syn geht bei mir auch nicht, ist aber equivalent zu:
----tcp-flags SYN,RST,ACK SYN nach der Manpage.

- Silkem
Antworten
#7
Hab den Fehler mit Syn gefunden
der Abschnitt muss dann so aussehen:

Code:
#############################
#  Schutz vor Attacken !!!  #
#############################
# Ungueltige IP-Paeckchen, die zu keine Verbindung gehoeren droppen
iptables -A INPUT -m state --state INVALID -j DROP
# DoS Attacken verhindern
iptables -A INPUT -p tcp --syn -m limit --limit 300/minute -j ACCEPT
iptables -A INPUT -p tcp --syn -j REJECT --reject-with icmp-port-unreachable

aber das prob mit raw weiss ich immernoch net warum
Antworten
#8
Ich hätte da noch ein Add-On: (PortFW)
Code:
#!/bin/sh
########
# PortFW fuer direkte ICQ Verbindungen
# Achtung: Muss in den ICQ Preferences -> Connections -> User eingestellt
#          werden.
#

# ICQ_PORTRANGE Port Bereich fuer ICQ es sollten mindestens 10 Ports
# weitergereicht werden... im Beispiel Port 2048 bis 2059
# Ist die folgende Zeile auskommentiert wird kein PortFW eingerichtet
ICQ_PORTRANGE=2048:2059

# ICQ_FORWARDTO= die IP-Adresse des internen Client an den ICQ Verbindungen
# weitergereicht werden sollen
ICQ_FORWARDTO=192.168.1.100

if [ "$ICQ_PORTRANGE" != "" ]; then
 iptables -t nat -A PREROUTING -p tcp --dport $ICQ_PORTRANGE -j DNAT --to $ICQ_FORWARDTO
fi

- Silkem



<!--EDIT|Silkem|19 Dez. 2001,18:42-->
Antworten
#9
tach erstmal

super sache mit den linux system als router

auch klasse das ihr da mal die iptables sauber zusammenstellt

leider habe ich eigendlich erst 2 wochen erfahrung mit meinen
linux 7.3 prof auf meinen server

ins netz kann ich nur wenn squit starte
die server ip ist als gateway in den client eingetragen
---
was muss ich alles starten um die iptables zu nutzen
---
und ins netz zu gehen

am server habe ich dsl flat am laufen

ich hoffe auf euere hilfe und eine detailierte beschreibung

mfg
peter eberhardt
Antworten
#10
@peter eberhardt:
(Vorweg: leider kenn ich mich mit dem SuSE Linux nicht hunderprozentig aus, es sind manche Scripte und Konfigurationen an anderer Stelle, das iptables Kommando ist aber das gleiche!)

Also, damit Du den Linux-Rechner als router zu einem "normalen" Interneteinwahl-Zugang (damit meine ich auch T-DSL) nutzt, musst Du sogenanntes Masquerading nutzen.
Dabei beim Masquerading ändert der Router die Absender Ip Adresse (in die des Routers) einer IP-Verbindung und versendet diese dann über einen eigenen Port. Intern merkt sich das System von welcher internen IP-Adresse die Anfrage kam und leitet dann Antworten aus dem Internet direkt an den Server in lokalen Netzwerk weiter.

Die benötigten Packete sind eigentlich Grundpackete die schon auf deinem System installiert sein müssten.
Du kannst einfach mal auf der Konsole iptables als root eingeben, normalerweise sollte das Programm ungefähr folgende Meldung bringen:
Code:
bash-2.05# iptables
iptables v1.2.2: no command specified
Try `iptables -h' or 'iptables --help' for more information.

Wenn Du das Script aus dem ersten Post in eine Datei abtippst... oder aus dem Topic kopierst und diese Datei dann mittels sh dateiname aufrufst, erhälst Du automatisch eine Firewall mit Masquerading. Für das Masquerading ist eigentlich nur folgende Zeile notwendig:
Code:
iptables -t nat -A POSTROUTING -o $EXTIF -s $LANIP -j MASQUERADE

Achte darauf, das Du die Variablen EXTIF und LANIP an dein Netz anpasst.

[edit]
Für DSL-Flat muss EXTIF=ppp0 sein.
[/edit]

- Silkem



<!--EDIT|Silkem|19 Dez. 2001,22:04-->
Antworten
#11
die erste meldung komm bei mir genauso

die lanip ist bei mir 192.168.115.100 (server)
oder habe ich das missverstanden

squid muss ich wahrscheinlich stoppen

wo im dateisystem steht den die iptables datei?

mfg

peter eberhardt

PS es wird
Antworten
#12
hi, es ist egal ob squid läuft oder nicht

für dich müsste der Befehl wohl
iptables -t nat -A POSTROUTING -o ppp0 -s 192.168.115.0/24 -j MASQUERADE
heissen. Das externe Interface ist ja bei dir ppp0 und da deine IP am Server 192.168.115.100 ist, schätze ich dass alle deine Rechner eine IP in der Form 192.168.115.xxx haben, deshlab 192.168.115.0/24 .

Es kann aber sein dass du erst ipforwarding aktivieren musst.
Code:
echo 1 > /proc/sys/net/ipv4/ip_forward
Antworten
#13
ip forwarding wird beim start ausgeführt
hab ich gesehn

den ersten befehl habe ich ausgeführt ging eigendlich ohne meckern

als nächstes habe ich squid beendet und schon hatte ich keine verbindung mehr ins netz

wo muss ich die iptables platzieren und welche endung muss die datei haben --- wenn überhaubt eine endung

mfg

peter eberhardt
Antworten
#14
ach ja beim start meckert das system die routing.conf

glaub ich an
da steht 10.10.irgendwas drin

welchen eintrag muss ich da machen ??

mfg

peter eberhardt
Antworten
#15
Zitat:squid muss ich wahrscheinlich stoppen
Nein musst Du nicht, damit Du den Rechner dann als Gateway nutzen kannst musst Du natürlich den Proxy aus deinen Browser-Einstallungen rausnehmen.

Zitat:wo im dateisystem steht den die iptables datei?
Wo Du die Script-Datei hinschreibst ist egal, es ist wie eine BAT-Datei (unter Windows) zu handhaben.

Zitat:wo muss ich die iptables platzieren und welche endung muss die datei haben --- wenn überhaubt eine endung
Dateiendungen sind unter Linux ungefähr so egal wie Klossbrühe ... Shell-Scripten gibt man in der Regel die Endung .sh oder gar keine.
Zitat:ach ja beim start meckert das system die routing.conf

glaub ich an
da steht 10.10.irgendwas drin

welchen eintrag muss ich da machen ??
Welchen Fehler bekommst Du auf dem Bildschirm? Und was steht in der routing.conf genau?

Noch ein Hinweis: Wenn Du nur MASQUERADING haben möchtest, dann sparst Du Dir das Abtippen des Scriptes sondern gibst einfach das was AgentSP drei Posts höher geschrieben hat an der Kommando Zeile ein. (Die dritte Zeile des Posts) FERTIG Du solltest Masquerading haben.

Noch Eins zu Kontrolle: wenn Du cat /proc/sys/net/ipv4/ip_forward eingibst sollte die Ausgabe so aussehen:
Code:
bash-2.05$ cat /proc/sys/net/ipv4/ip_forward
1
Wenn da ne 0 steht dann musst Du Forwarding noch einstellen!

- Silkem



<!--EDIT|Silkem|20 Dez. 2001,11:40-->
Antworten
#16
noch ein kleine ergänzung...  wenn du das script abgeseichert hast ... wo auch immer du musst es als root starten und nehmen wir an das script hast du unter ~firewall (~ ist dein home dir)abgespeichert... dann gehst du in selbiges und machst ./firewall
eine endung ist unwichtig kannst du aber machen
Kellnerin:
Well, there's egg and bacon; egg sausage and bacon; bacon sausage and
spam; spam egg spam spam bacon and spam; spam sausage spam spam bacon
spam tomato and spamspam spam spam egg and
spam.

Mann: I don't like spam!
Antworten
#17
DukePyrolator schrieb:--> iptables -A INPUT -p icmp -d 0/0 -i $EXTIF -j DROP

werden damit nicht auch echo responses abgeblockt, die evtl. von mir angefordert wurden?

also z.B. wenn ich "ping hackingbord.de" mache, sende ich ja ein ICMP Echo-Request, das auch rauskommt, nur kommt dann auch die Antwort wieder rein ?
hast recht pyro, wenn man nen ping auf nen rechner macht kommt auch kein response mehr rein.
Ich denke das sollten wir ändern.
Allerdings ist mir noch etwas aufgefallen: Wenn ich von meinem windows rechner aus nen Ping auf z.B. hackingbord.de mache, dann bekommt er eine response!
Warum bekommt mein win ne response und Linux net?

Wir sollten nicht einfach alles icmp blocken sondern nur teilweise.
Antworten
#18
Weil die Regel zum Blocken der ICMP-Pakete in der INPUT-Tabelle steht.
Ankommende ICMP-Pakete für deinen Win-Rechner werden aber gar nicht in der INPUT-Tabelle verarbeitet.

Schau Dir mal die Abbildung in der ct' genau an Wink

gruß
DukePyrolator

PS: ich hab gerade noch nen guten Link gefunden:
<a href="http://www.linuxguruz.org/iptables/" target="_blank">http://www.linuxguruz.org/iptables/</a>



<!--EDIT|DukePyrolator|21 Dez. 2001,09:52-->
Millionen Bücher blieben Von den Menschen früh´rer Zeiten
Hätten sie nichts aufgeschrieben, könnt ihr Geist uns nicht begleiten.
Und verdammt zu Ignoranten müssten wir durchs Leben schreiten.
Alle Bücher sind Garanten für den Fortschritt und die menschliche Kultur.
Antworten
#19
hi leute
thanks erstmal für die hilfe bis jetzt

also die iptables ist also sowas ähnliches wie eine batch unter windows

um die datei auszuführen muss man sie wahrscheinlich ausfürbar machen
oder ?

wie macht man das
desweiteren muss squid laufen ?? um auf den clients internet zu haben

squid möchte ich eigendlich nicht verwenden da ich die iptables begreifen will
ipmask ist auch nödig da ich auch auf die clients die hinter den linuxrechner sind aus den internet zugreifen will
(ftp)

ausserdem will ich den essel und eigendlich alle internetclients
wie napster und konsorten laufen lassen

wenn ich squid beende ist auch auf den clients schluss mit tcp/ip

in meiner netzwerkeinstellung (windows) ist eine feste ip
(192.168.115.101) eingetragen
subnetmask ist überall 255.255.255.0

und im standartgateway ist die feste ip des linuxrechners eingetragen

müssen die proxyeinstellungen im browser

richtig

(proxyadresse 192.168.115.100  Port 3128 )

und nötig ??? ( weiter oben steht ich kann die einstellungen rausnehmen) ??

in meiner route.conf steht folgender eintrag

default 0.0.0.0

das kann nicht richtig sein oder ??

ausserdem baut mir der linuxrechner nach einer gewissen zeit
(6000 sek) die verbindung ab
kann man das verhindern bzw wie kann sich der rechner wieder automatisch neu einwählen

auf euere antworten freut sich
peter eberhardt
Antworten
#20
nein iptables ist nicht sowas wie ne .bat in win iptables ist eine komplette firewall fuer den kernel 2.4.x und das was wir schreiben ist im prinzip eine .bat in win womit wir die iptables richtig ausführen(besser kann ich es nicht erklären)
das nennt sich in linux shell script ein solches erkennst du immer an dem anfang der datei (#!/bin/sh)
die datei startest du mit ./name_der_datei
Kellnerin:
Well, there's egg and bacon; egg sausage and bacon; bacon sausage and
spam; spam egg spam spam bacon and spam; spam sausage spam spam bacon
spam tomato and spamspam spam spam egg and
spam.

Mann: I don't like spam!
Antworten


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste