Sie sind nicht angemeldet.

1

07.07.2010, 13:43

https umleitung für iphone extern und intern

ich habe hier eine hirn-blockade.

mein firewall script funktioniert insoweit, das ich bequem alle daten hin und her schicken kann, nun möchte ich aber auch mein iphone mit einem sbs syncen, intern wird aber die route nicht richtig umgeleitet, daher kann ich https den eigenen server nicht erreichen, von ausserhalb funktioniert es. - ich kann also intern die serveradresse direkt angeben oder extern die dyndns-ip um zu syncen.
vieleicht kann mir jemand bei der firewall helfen.

also nochmal
(lan - Ziel: Zielrechner -> funktioniert)
(lan - Ziel: dyndns.ip -> funkioniert nicht)
(wan - Ziel: Zielrechner -> funktioniert natürlich nicht)
(wan - Ziel: dyndns.ip -> funktioniert)

gewünscht: rule für : Lan -> Ziel:dyndns.ip)

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
#!/bin/bash

echo "1" > /proc/sys/net/ipv4/ip_forward #forwarding initialisieren

ifcfg() {
	/bin/sed -n -e 's|.* inet \([^ ]\+\)/\([^ ]\+\) brd \([^ ]\+\) .* global \([^ ]\+\).*|'"${2}"'|p' \
   	-e 's|.* inet \([^ ]\+\)\(\) peer \([^ ]\+\) .* global \([^ ]\+\).*|'"${2}"'|p' <(LC_ALL="C" /sbin/ip addr show ${1})
}

ifaddr() {
	ifcfg "${1}" '\1'
}

ifnet() {
	ifcfg "${1}" '\1/\2'
}


#####################
##### Variablen #####

EXT_IF="ppp0" # Schnittstelle zum Internet
INT_IF="eth1.1" # Schnittstelle, an dem das Netzwerk hängt.
DMZ_IF="eth1.2"
SERVICES_UDP="ftp 5060" #freigegebene UDP-Ports (asterisk)
SERVICES_TCP="ftp http 822 https 987 5060" #freigegebene TCP-Ports (ftp ssh http, https, rdp)
# port ssh nach 822 verschoben! - nicht meckern, staunen!

#####################################
##### Vorhandene Regeln löschen #####
echo "Firewall: zurücksetzen"
iptables -F #löscht alle Regeln
iptables -t nat -F
iptables -t mangle -F
iptables -X #löscht eigene Ketten
iptables -t nat -X
iptables -t mangle -X

#######################
##### Grundregeln #####
echo "Firewall: Grundregeln alles löschen"
iptables -P OUTPUT  DROP
iptables -P INPUT   DROP
iptables -P FORWARD DROP

# Reject packets from RFC1918 class networks (i.e., spoofed)
# apply this for all external interfaces
iptables -N rfc1918
iptables -F rfc1918
iptables -A rfc1918 -s 10.0.0.0/8   	-j DROP
iptables -A rfc1918 -s 169.254.0.0/16   -j DROP
iptables -A rfc1918 -s 172.16.0.0/12	-j DROP
iptables -A rfc1918 -s 127.0.0.0/8  	-j DROP
iptables -A rfc1918 -s 224.0.0.0/4  	-j DROP
iptables -A rfc1918 -d 224.0.0.0/4  	-j DROP
iptables -A rfc1918 -s 240.0.0.0/5  	-j DROP
iptables -A rfc1918 -d 240.0.0.0/5  	-j DROP
iptables -A rfc1918 -s 0.0.0.0/8    	-j DROP
iptables -A rfc1918 -d 0.0.0.0/8    	-j DROP
iptables -A rfc1918 -d 239.255.255.0/24 -j DROP
iptables -A rfc1918 -d 255.255.255.255  -j DROP

# Catchdetect-portscanners protection
iptables -N handle-portscan
iptables -F handle-portscan
iptables -A handle-portscan -m limit --limit 5/minute -j LOG --log-level alert --log-tcp-options --log-prefix "[PORTSCAN] "
iptables -A handle-portscan -j DROP
iptables -N detect-portscan
iptables -F detect-portscan
iptables -A detect-portscan -j handle-portscan -p tcp --tcp-flags ALL FIN,URG,PSH     	# "NMAP-XMAS"
iptables -A detect-portscan -j handle-portscan -p tcp --tcp-flags ALL ALL             	# "XMAS"
iptables -A detect-portscan -j handle-portscan -p tcp --tcp-flags ALL SYN,RST,ACK,FIN,URG # "XMAS-PSH"
iptables -A detect-portscan -j handle-portscan -p tcp --tcp-flags ALL NONE            	# "NULL_SCAN"
iptables -A detect-portscan -j handle-portscan -p tcp --tcp-flags SYN,RST SYN,RST     	# "SYN/RST"
iptables -A detect-portscan -j handle-portscan -p tcp --tcp-flags SYN,FIN SYN,FIN     	# "SYN/FIN"

# Allow most ICMP packets to be received (so people can check our
# presence), but restrict the flow to avoid ping flood attacks
iptables -N icmp-input
iptables -F icmp-input
iptables -A icmp-input -j ACCEPT -p icmp --icmp-type echo-reply
iptables -A icmp-input -j ACCEPT -p icmp --icmp-type source-quench
iptables -A icmp-input -j ACCEPT -p icmp --icmp-type time-exceeded
iptables -A icmp-input -j ACCEPT -p icmp --icmp-type destination-unreachable
iptables -A icmp-input -j ACCEPT -p icmp --icmp-type echo-request -m limit --limit 1/second
iptables -A icmp-input -j DROP
iptables -N icmp-output
iptables -F icmp-output
iptables -A icmp-output -j DROP -p icmp --icmp-type timestamp-reply
iptables -A icmp-output -j DROP -p icmp --icmp-type address-mask-reply
iptables -A icmp-output -j ACCEPT
iptables -N icmp-forward
iptables -F icmp-forward
iptables -A icmp-forward -j ACCEPT -p icmp --icmp-type echo-reply
iptables -A icmp-forward -j ACCEPT -p icmp --icmp-type time-exceeded
iptables -A icmp-forward -j ACCEPT -p icmp --icmp-type destination-unreachable
iptables -A icmp-forward -j ACCEPT -p icmp --icmp-type echo-request -m limit --limit 1/second
iptables -A icmp-forward -j DROP


################################
##### freigegebene Dienste #####

iptables -N services
iptables -F services
#iptables -A services -p tcp -j service_sec
echo "Firewall: TCP Dienst $SERVICES_TCP"
iptables -A services -p tcp -m multiport --dports "${SERVICES_TCP// /,}" -j ACCEPT
echo "Firewall: UDP Dienst $SERVICES_UDP"
iptables -A services -p udp -m multiport --dports "${SERVICES_UDP// /,}" -j ACCEPT
#################
##### INPUT #####
iptables -A INPUT -j ACCEPT -m state --state ESTABLISHED,RELATED
iptables -A INPUT -j DROP   -m state --state INVALID

## local
echo "Firewall: eigene Anfragen"
iptables -A INPUT -i lo -j ACCEPT

# let DHCP requests through : pppoe-connect
iptables -A INPUT -j ACCEPT -p udp ! -i ${EXT_IF} --dport 67:68 --sport 67:68

## aus dem Internet (ppp0)
echo "Firewall: Neue Anfragen aus dem Netz"
# restrict icmp traffic
iptables -A INPUT -j icmp-input -p icmp

#sicherheit
iptables -A INPUT -i $EXT_IF -j rfc1918
iptables -A INPUT -i $EXT_IF -j detect-portscan
iptables -A INPUT -i $EXT_IF -j services #Dienste freigeben

#iptables -A INPUT -p ALL -i $EXT_IF -m state --state ESTABLISHED,RELATED -j ACCEPT

## aus dem Ethernet (ethX)
echo "Firewall: lokale Anfragen"
iptables -A INPUT -i $INT_IF -j ACCEPT
iptables -A INPUT -i $DMZ_IF -j ACCEPT

# alles andere wech
iptables -A INPUT ! -i ${EXT_IF} -m limit --limit 1/min -j LOG --log-prefix "[INPUT] "
iptables -A INPUT -j REJECT -p udp --reject-with icmp-port-unreachable
iptables -A INPUT -j REJECT -p tcp --reject-with tcp-reset
iptables -P INPUT DROP

##################
##### OUTPUT #####
echo "Firewall: alles weiterleiten"
iptables -A OUTPUT -j ACCEPT -m state --state ESTABLISHED,RELATED
iptables -A OUTPUT -j DROP   -m state --state INVALID

# restrict icmp traffic
iptables -A OUTPUT -j icmp-output -p icmp
iptables -P OUTPUT ACCEPT

###################
##### FORWARD #####

iptables -A FORWARD -j ACCEPT -m state --state ESTABLISHED,RELATED
iptables -A FORWARD -j DROP   -m state --state INVALID

# restrict icmp traffic
iptables -A FORWARD -j icmp-forward -p icmp

## aus dem Ethernet (ethX)
iptables -A FORWARD -p ALL -i $INT_IF -o $EXT_IF -j ACCEPT
iptables -A FORWARD -p ALL -i $DMZ_IF -o $EXT_IF -j ACCEPT

## Weiterleitung Asterisk und iphone
iptables -A FORWARD -i ${EXT_IF} -o ${INT_IF} -p tcp -d 192.168.1.11 --dport 443 -j ACCEPT
iptables -A FORWARD -i ${EXT_IF} -o ${INT_IF} -p udp -d 192.168.1.13 --dport 5060 -j ACCEPT

# Anything else LOG & REJECT
iptables -A FORWARD ! -i ${EXT_IF} -m limit --limit 1/min -j LOG --log-prefix "[FORWARD] "
iptables -A FORWARD -j REJECT --reject-with icmp-net-unreachable
iptables -P FORWARD DROP

## aus dem Internet (ppp0)
###########################
##### NAT POSTROUTING #####
echo "NAT einstellen für ${EXT_IF}"

### Portforwarding 3/3
iptables -t nat -A PREROUTING -i ${EXT_IF} -p tcp --dport 443 -j DNAT --to 192.168.1.11:443
iptables -t nat -A PREROUTING -i ${EXT_IF} -p udp --dport 5060 -j DNAT --to 192.168.1.13:5060

[ -n "${EXT_IF}" -a -n "${INT_IF}" ] && \
iptables -t nat -A POSTROUTING -o ${EXT_IF} -s $(ifnet ${INT_IF}) -j MASQUERADE
[ -n "${EXT_IF}" -a -n "${DMZ_IF}" ] && \
iptables -t nat -A POSTROUTING -o ${EXT_IF} -s $(ifnet ${DMZ_IF}) -j MASQUERADE

#iptables -t nat -A POSTROUTING -o ${EXT_IF} -s $(ifnet ${INT_IF}) -d 192.168.1.11 -j MASQUERADE

# Zugriff auf SSH max 3 Logins pro Minute vom gleichen Server!
iptables -A INPUT -p tcp --dport 822 -i ${EXT_IF} -m state --state NEW -m recent --set
iptables -A INPUT -p tcp --dport 822 -i ${EXT_IF} -m state --state ESTABLISHED -m recent --update --seconds 60 --hitcount 2 -j REJECT --reject-with tcp-reset
Die Rechtschreibung ist Freeware, du darfst sie kostenlos nutzen.
Sie ist aber nicht OpenSource, d.h. du sollst sie nicht verändern oder in veränderter Form veröffentlichen.

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »bell« (12.07.2010, 13:35) aus folgendem Grund: Tags angepasst


2

10.07.2010, 15:47

Hallo Sonie,

hatte sich der Knoten inzwischen schon gelöst?
Bin noch nicht komplett durch Dein Skript durchgestiegen.
Hast Du bedacht, dass die dyndns-IP eigentlich auf den Router zeigt? Die Weiterleitung läuft per DNAT.
So eine DNAT Rule brauchst Du auch aus dem internen Netz. Bisher hast Du das nur für "-i ${EXT_IF}"
Auch wenn Open-Source kostenlos ist, ist sie nicht umsonst. Dein Preis ist Dein Engagement und Mitarbeit an OS-Projekten.
Wenn Du keinen Preis bezahlen willst, bist Du die Ware. Und das ist nicht Open Source, geschweigedenn frei.

3

13.07.2010, 18:51

Nein, der Knoten sitzt noch, hab momentan nicht soviel Zeit, viel Arbeit.

Ja, richtig. Ich bekomme die rule nur nicht sauber definiert. Entweder außen - oder innen. Ich mache irgend einen Denkfehler und stehe auf der Leitung.

Meiner Meinung nach dürfte für die meisten dieses Script eine gute Basis für eine Feierwall sein. Deswegen auch hier das komplette Script und nicht nur ein paar Zeilen.
Die Rechtschreibung ist Freeware, du darfst sie kostenlos nutzen.
Sie ist aber nicht OpenSource, d.h. du sollst sie nicht verändern oder in veränderter Form veröffentlichen.

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »Sonie« (13.07.2010, 18:57)


4

14.07.2010, 08:50

Folgende Zeile sollte den Zugriff sowohl extern als auch intern den Zugriff über die externe IP schaffen:

Quellcode

1
iptables -t nat -A PREROUTING  -d $(ifnet ${EXT_IF})  -p tcp --dport 443 -j DNAT --to 192.168.1.11:443

Allerdings kannst Du den Port 443 auf dem Router jetzt auch intern nicht mehr erreichen, da alle Zugriffe immer zu der *.11-er IP weitergeleitet werden.

Falls die obere Zeile nichts bringt, was hast Du schon alles probiert?
Auch wenn Open-Source kostenlos ist, ist sie nicht umsonst. Dein Preis ist Dein Engagement und Mitarbeit an OS-Projekten.
Wenn Du keinen Preis bezahlen willst, bist Du die Ware. Und das ist nicht Open Source, geschweigedenn frei.

5

14.07.2010, 14:21

#iptables -t nat -A PREROUTING -d $(ifnet ${EXT_IF}) -p tcp --dport 443 -j DNAT --to 192.168.1.11:443
die rule bringt einen error:
ptables v1.4.8: invalid mask `' specified

#iptables -A FORWARD -o ${INT_IF} -p tcp -d 192.168.1.11 --dport 443 -j ACCEPT

#iptables -t nat -A PREROUTING -p tcp --dport 443 -j DNAT --to 192.168.1.11:443
Die Rechtschreibung ist Freeware, du darfst sie kostenlos nutzen.
Sie ist aber nicht OpenSource, d.h. du sollst sie nicht verändern oder in veränderter Form veröffentlichen.

6

14.07.2010, 14:40

Die Fehlermeldung bedeutet, dass $(ifnet ${EXT_IF}) etwas nicht verwendbares liefert. Wahrscheinlich ist zu dem Zeitpunkt ppp0 nicht aktiv (oder?). Du wirst auf jeden Fall ein Problem haben, wenn sich die IP ändert. Dann müsstest Du die Firewall immer neu aktivieren.

Folgender etwas alternativer Lösungsweg:
1) Du denkst Dir eine "Virtuelle IP" aus, zB. 10.20.30.40
2) Du stellst in Deinem DNS Server (auf dem Router die Hosts Datei?) diese IP für Deinen DynDNS Namen ein.
-> Als Ergebniss soll ein "ping name.dyndns.org" versuchen diese Virtuelle IP zu erreichen.
3) Für externe Zugriffe behälst Du Deine vorhandene NAT Rule
Für die interne Zugriffe :P :

Quellcode

1
iptables -t nat -A PREROUTING -i ${INT_IF} -d 10.20.30.40 -p tcp --dport 443 -j DNAT --to 192.168.1.11:443

Diese Möglichkeit scheint erstmal komplexer zu sein, dafür zuverlässiger, da keine Dynaischen IPs vorkommen.
Auch wenn Open-Source kostenlos ist, ist sie nicht umsonst. Dein Preis ist Dein Engagement und Mitarbeit an OS-Projekten.
Wenn Du keinen Preis bezahlen willst, bist Du die Ware. Und das ist nicht Open Source, geschweigedenn frei.

7

19.07.2010, 08:27

Zitat


Die Fehlermeldung bedeutet, dass $(ifnet ${EXT_IF}) etwas nicht verwendbares liefert. Wahrscheinlich ist zu dem Zeitpunkt ppp0 nicht aktiv (oder?). Du wirst auf jeden Fall ein Problem haben, wenn sich die IP ändert. Dann müsstest Du die Firewall immer neu aktivieren.


eigentlich nicht. Aber ifnet() liefert hier was komisches aus:

Quellcode

1
2
 # echo $(ifnet ${EXT_IF})
92.75.155.42/ 1.0.0.0/2


woher kommt die 1.0.0.0? in ifconfig seh ich kein device.
Die Rechtschreibung ist Freeware, du darfst sie kostenlos nutzen.
Sie ist aber nicht OpenSource, d.h. du sollst sie nicht verändern oder in veränderter Form veröffentlichen.