Toon posts:

[iptables firewall] ik loop vast op forwarding en NAT

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik heb hier fast Adsl van XS4all. Ik heb een Alcatel speed Touch modem die via Sip spoof methode het internet verzorgd.

Ik heb nu een ipchains firewall draaien en die werkt prima. Maar ik wil nu eindelijk wel eens over op iptables. Ik heb iptables altijd al lastig gevonden. Zeker in vergelijking met ipchains. Ik heb heel veel topics gelezen met mensen die problemen hadden met iptables i.c.m. Nat.

Ik heb hier de complete Netfilter documentatie van www.netfilter.org liggen en het boek Linux firewalls second edition. Beide documenten heb ik doorgelezen.

Aan de hand van de documentatie ben ik begonnen met de input en output regels.

code:
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
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
#!/bin/sh

# The location of important programs
IPT=/sbin/iptables
DEPMOD=/sbin/depmod
INSMOD=/sbin/insmod
MODPROBE=/sbin/modprobe

# Symbolic constants for recurring names and addresses
INTERNET="eth1"             # Internet connected interface
LOOPBACK_INTERFACE="lo"         # The name of the Loopback interface
IPADDR="XXX.XXX.XXX.XXX"            # Internet ip address
LOOPBACK="127.0.0.0/8"          # reserved loopback address range
CLASS_A="10.0.0.0/8"            # Class A private networks
CLASS_B="172.16.0.0/12"         # Class B private networks
CLASS_C="192.168.0.0/16"        # Class C private networks
CLASS_D_MULTICAST="224.0.0.0/4"     # Class D multicast addresses
ClASS_E_RESERVED_NET="240.0.0.0/5"  # Class E reserved addresses
BROADCAST_SRC="0.0.0.0"         # Broadcast source address
BROADCAST_DEST="255.255.255.255"    # Broadcast destination address
PRIVPORTS="0:1023"          # Well-know, privileged port range
UNPRIVPORTS="1024:65535"        # Unprivileged port range
CONNECTION_TRACKING="1"         # Enable connection tracking

# Enable broadcast echo Protection
echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts

# Disable source Routed Packets
for f in /proc/sys/net/ipv4/conf/*/accept_source_route; do 
    echo 0 > $f
    
done

# Disable ICMP Redirect Acceptance
for f in /proc/sys/net/ipv4/conf/*/accept_redirects; do
    echo 0 > $f

done

# Don't send redirect messages
for f in /proc/sys/net/ipv4/conf/*/send_redirects; do
    echo 0 > $f

done

# Log packets with impossible addresses
for f in /proc/sys/net/ipv4/conf/*/log_martians; do
    echo 1 > $f
    
done

# Remove any existing rules from all chains
$IPT --flush
$IPT -t nat --flush
$IPT -t mangle --flush

# Set the default policy to DENY
$IPT --policy INPUT DROP
$IPT --policy OUTPUT DROP
$IPT --policy FORWARD DROP

$IPT -t nat --policy PREROUTING DROP
$IPT -t nat --policy OUTPUT DROP
$IPT -t nat --policy POSTROUTING DROP

$IPT -t mangle --policy PREROUTING DROP
$IPT -t mangle --policy OUTPUT DROP

# Unlimited traffice on the loopback interface
$IPT -A INPUT -i lo -j ACCEPT
$IPT -A OUTPUT -o lo -j ACCEPT

# Stealth scans and TCP state Flags
# All of the bits are cleared
$IPT -A INPUT -p tcp --tcp-flags ALL NONE -j DROP

# SYN and FIN are both set
$IPT -A INPUT -p tcp --tcp-flags SYN,FIN SYN,FIN -j DROP

# SYN and RST are both set
$IPT -A INPUT -p tcp --tcp-flags SYN,RST SYN,RST -j DROP

# FIN and RST ar both set
$IPT -A INPUT -p tcp --tcp-flags FIN,RST FIN,RST -j DROP

# FIN is the only bit set, without the expected accompanying ACK
$IPT -A INPUT -p tcp --tcp-flags ACK,FIN FIN -j DROP

# PSH is the only bit set, without the expected accompanying ACK
$IPT -A INPUT -p tcp --tcp-flags ACK,PSH PSH -j DROP

# URG is the only bit set, without the expected accompanying ACK
$IPT -A INPUT -p tcp --tcp-flags ACK,URG URG -j DROP

# Using Connection State to Bypass Rule Checking
if [ "$CONNECTION_TRACKING" = "1" ]; then
   $IPT -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
   $IPT -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
   # Using the state module alone, INVALID will break protocols that use
   # bi-directional connections or multiple connections or exchanges,
   # unless an ALG is provided for the protocol.

   $IPT -A INPUT -m state --state INVALID -j LOG \
    --log-prefix "INVALID input: "
    
   $IPT -A INPUT -m state --state INVALID -j DROP
   
   $IPT -A OUTPUT -m state --state INVALID -j LOG \
    --log-prefix "INVALID output: "
    
   $IPT -A OUTPUT -m state --state INVALID -j DROP
fi

# Source address spoofing and other bad addresses
# Refuse spoofed packets pretending to be from the 
# external interfaces ip address
$IPT -A INPUT -i $INTERNET -s $IPADDR -j DROP

# Refuse packets claiming to be from a Class A private network
$IPT -A INPUT -i $INTERNET -s $CLASS_A -j DROP

# Refuse packets claiming to be from a Class B private network
$IPT -A INPUT -i $INTERNET -s $CLASS_B -j DROP

# Refuse packets claiming to be from a Class C private network
$IPT -A INPUT -i $INTERNET -s $CLASS_C -j DROP

# Refuse packets claiming to be from the loopback interface private network
$IPT -A INPUT -i $INTERNET -s $LOOPBACK -j DROP

# Refuse malformed broadcast packets
$IPT -A INPUT -i $INTERNET -s $BROADCAST_DEST -j LOG
$IPT -A INPUT -i $INTERNET -s $BROADCAST_DEST -j DROP

$IPT -A INPUT -i $INTERNET -d $BROADCAST_SRC -j LOG
$IPT -A INPUT -i $INTERNET -d $BROADCAST_SRC -j DROP

# Refuse limited broadcasts
$IPT -A INPUT -i $INTERNET -d $BROADCAST_DEST -j DROP

# Refuse Class D multicast addresses
# illegas as as source address
$IPT -A INPUT -i $INTERNET -s $CLASS_D_MULTICAST -j DROP

# Filter incomming AUTH requests to your server 
$IPT -A INPUT -i $INTERNET -p tcp \
     --sport $UNPRIVPORTS \
     -d $IPADDR --dport 113 -j REJECT --reject-with tcp-reset 

# Allowing the Lan to access the internal interface
LAN_INTERFACE="eth0"
LAN_ADDRESS="192.168.0.0/24"
if [ "$CONNECTION_TRACKING" = "1" ]; then
    $IPT -A INPUT -i $LAN_INTERFACE \
         -s  $LAN_ADDRESS \
     -m state --state NEW -j ACCEPT
fi

# Allowing DNS Lookups as a Client
# Caching Dns server
CACHING_NAMESERVER="194.109.104.104"
if [ "$CONNECTION_TRACKING" = "1" ]; then
    $IPT -A OUTPUT -o $INTERNET -p udp \
         -s $IPADDR --sport $UNPRIVPORTS \
     -d $CACHING_NAMESERVER --dport 53 \
     -m state --state NEW -j ACCEPT
fi

# Allowing DNS Lookups as a Client
# Caching Dns server
# Tcp rules
CACHING_NAMESERVER="194.109.104.104"
if [ "$CONNECTION_TRACKING" = "1" ]; then
    $IPT -A OUTPUT -o $INTERNET -p tcp \
         -s $IPADDR --sport $UNPRIVPORTS \
     -d $CACHING_NAMESERVER --dport 53 \
     -m state --state NEW -j ACCEPT

# Primary Dns server
PRIMARY_NAMESERVER="194.109.6.66" 
if [ "$CONNECTION_TRACKING" = "1" ]; then
    $IPT -A OUTPUT -o $INTERNET -p udp \
         -s $IPADDR --sport $UNPRIVPORTS \
     -d $PRIMARY_NAMESERVER --dport 53 \
     -m state --state NEW -j ACCEPT
fi

# Secondary Dns server
SECONDARY_NAMESERVER="194.109.9.99"
if [ "$CONNECTION_TRACKING" = "1" ]; then
    $IPT -A OUTPUT -o $INTERNET -p udp \
         -s $IPADDR --sport $UNPRIVPORTS \
     -d $SECONDARY_NAMESERVER --dport 53 \
     -m state --state NEW -j ACCEPT
fi

# Allowing clients access to remote SSH Servers
SSH_PORTS="1024:65535"
if [ "$CONNECTION_TRACKING" = "1" ]; then
    $IPT -A OUTPUT -o $INTERNET -p tcp \
         -s $IPADDR --sport $SSH_PORTS \
     --dport 22 -m state --state NEW -j ACCEPT   
fi

# Allowing remote client access to you Local SSH server
if [ "$CONNECTION_TRACKING" = "1" ]; then
    $IPT -A INPUT -i $INTERNET -p tcp \
         -s $IPADDR --sport $SSH_PORTS \
     --dport 22 -m state --state NEW -j ACCEPT   
fi

# Allowing outgoing client access to remote FTP servers
# Outgoing FTP requests over the Control Channel
# The data channel is done by connection tracking
if [ "$CONNECTION_TRACKING" = "1" ]; then
    $IPT -A INPUT -i $INTERNET -p tcp \
         -s $IPADDR --sport $UNPRIVPORTS \
     --dport 21 -m state --state NEW -j ACCEPT
fi

# Port-mode FTP data channels
if [ "$CONNECTION_TRACKING" = "1" ]; then
    $IPT -A OUTPUT -o $INTERNET -p tcp \
         -s $IPADDR --sport $UNPRIVPORTS \
     --dport $UNPRIVPORTS -m state --state NEW -j ACCEPT
fi

# Accessing remote websites as a client
if [ "$CONNECTION_TRACKING" = "1" ]; then
    $IPT -A OUTPUT -o $INTERNET -p tcp \
         -s $IPADDR --sport $UNPRIVPORTS \
     --dport 80 -m state --state NEW -j ACCEPT
fi

# Enabling outgoing traceroute requests
TRACEROUTE_SRC_PORTS="32769:65535"
TRACEROUTE_DEST_PORTS="33434:33523"
$IPT -A OUTPUT -o $INTERNET -p udp \
     -s $IPADDR --sport $TRACEROUTE_SRC_PORTS \
     --dport $TRACEROUTE_DEST_PORTS -j ACCEPT
     
# Allow access to the time server of Xs4all
#TIME_SERVER="ntp.xs4all.nl"
#if [ "$CONNECTION_TRACKING" = "1" ]; then
#    $IPT -A OUTPUT -o $INTERNET -p udp \
#    -s $IPADDR --sport $UNPRIVPORTS \
#    -d $TIME_SERVER --dport 123 \
#    -m state --state NEW -j ACCEPT
#fi

# Filtering ICMP control and status messages
# Fragmented ICMP Messages
$IPT -A INPUT -i $INTERNET --fragment -p icmp -j LOG \
     --log-prefix "Fragmented ICMP: "
     
$IPT -A INPUT -i $INTERNET --fragment -p icmp -j DROP

# Source quench control (Type 4) messages
$IPT -A INPUT -i $INTERNET -p icmp \
     --icmp-type source-quench -d $IPADDR -j ACCEPT
     
$IPT -A OUTPUT -o $INTERNET -p icmp \
     -s $IPADDR --icmp-type source-quench -j ACCEPT 
     
# Parameter problem status (Type 12) messages
$IPT -A INPUT -i $INTERNET -p icmp \
     --icmp-type parameter-problem -d $IPADDR -j ACCEPT
     
$IPT -A OUTPUT -o $INTERNET -p icmp \
     -s $IPADDR --icmp-type parameter-problem -j ACCEPT
     
# Destination unreachable error (Type 3) messages
$IPT -A INPUT -i $INTERNET -p icmp \
     --icmp-type destination-unreachable -d $IPADDR -j ACCEPT
     
$IPT -A OUTPUT -o $INTERNET -p icmp \
     -s $IPADDR --icmp-type fragmentation-needed -j ACCEPT
     
# Don't log dropped outgoning ICMP error messages
$IPT -A OUTPUT -o $INTERNET -p icmp \
     -s $IPADDR --icmp-type destination-unreachable -j DROP
     
# Time exceeded status (Type 11) messages
$IPT -A INPUT -i $INTERNET -p icmp \
     --icmp-type time-exceeded -d $IPADDR -j ACCEPT
     
$IPT -A INPUT -i $INTERNET -p icmp \
     --icmp-type time-exceeded -d $IPADDR -j ACCEPT
     
# Outgoing ping to remote hosts
if [ "$CONNECTION_TRACKING" = "1" ]; then          
$IPT -A OUTPUT -o $INTERNET -p icmp \
     -s $IPADDR --icmp-type echo-request \
     -m state --state NEW -j ACCEPT
fi

# Incoming pings from remote hosts
if [ "$CONNECTION_TRACKING" = "1" ]; then
$IPT -A INPUT -i $INTERNET -p icmp \
     --icmp-type echo-request \
     -d $IPADDR -m state --state NEW -j ACCEPT
fi


Deze regels zijn getest en werken ook. Ik kan vanaf de linux machine met lynx websites bezoeken enz.

Zijn de icmp regels wel nodig? Ik heb begrepen de connection tracking dit ook afhandeld? Klopt dit kunnen deze regels eruit?

Ik heb expres zoveel regels. Zaken als multiport kunnen later altijd nog als het werkt.


Daarna ben ik verder gegaan met de forwarding regels en NAT.

code:
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
###############################
# the forwarding and NAT rules#
###############################

# Using connection state to bypass rule checking
if [ "$CONNECTION_TRACKING" = "1" ]; then
    $IPT -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
    $IPT -t nat -A POSTROUTING -m state --state ESTABLISHED,RELATED -j ACCEPT
    $IPT -t nat -A PREROUTING -m state --state ESTABLISHED,RELATED -j ACCEPT
    # Using the state module alone, INVALID will break protocols that use
    # bi-directional connections of multiple connections or exchanges,
    # unless an ALG is provided for the protocol.

    $IPT -A FORWARD -m state --state INVALID -j LOG \
         --log-prefix "INVALID forward: "
   
    $IPT -t nat -A POSTROUTING -m state --state INVALID -j LOG \
    --log-prefix "INVALID POSTROUTING: "
  
    $IPT -t nat -A POSTROUTING -m state --state INVALID -j DROP
 
    $IPT -t nat -A PREROUTING -m state --state INVALID -j LOG \
     --log-prefix "INVALID PREROUTING: "
    
    $IPT -t nat -A PREROUTING -m state --state INVALID -j DROP
fi

# Allowing DNS lookups as a client
# Caching nameserver
$IPT -A FORWARD -o $INTERNET -p udp \
     --sport $UNPRIVPORTS -d $CACHING_NAMESERVER --dport 53 \
     -m state --state NEW -j ACCEPT
     
$IPT -A FORWARD -o $INTERNET -p tcp \
     --sport $UNPRIVPORTS -d $CACHING_NAMESERVER --dport 53 \
     -m state --state NEW -j ACCEPT  

# Primary dns server    
$IPT -A FORWARD -o $INTERNET -p udp \
     --sport $UNPRIVPORTS -d $PRIMARY_NAMESERVER --dport 53 \
     -m state --state NEW -j ACCEPT
     
# Secondary dns server
$IPT -A FORWARD -o $INTERNET -p udp \
     --sport $UNPRIVPORTS -d $SECONDARY_NAMESERVER --dport 53 \
     -m state --state NEW -j ACCEPT
     
# Allowing access to remote websites (tcp 80)
$IPT -A FORWARD -o $INTERNET -p tcp \
     --sport $UNPRIVPORTS --dport 80 \
     -m state --state NEW -j ACCEPT

# Allowing access to remote news servers (tcp 119)
$IPT -A FORWARD -o $INTERNET -p tcp \
     --sport $UNPRIVPORTS --dport 119 \
     -m state --state NEW -j ACCEPT
     
# Allowing access to remote ftp servers (tcp 21)
# Control channel
$IPT -A FORWARD -o $INTERNET -p tcp \
     --sport $UNPRIVPORTS --dport 21 \
     -m state --state NEW -j ACCEPT
     
# Data channel
$IPT -A FORWARD -o $INTERNET -p tcp \
     --sport $UNPRIVPORTS --dport 20 \
     -m state --state NEW -j ACCEPT
     
# Ftp passive port modus
$IPT -A FORWARD -o $INTERNET -p tcp \
     --sport $UNPRIVPORTS --dport $UNPRIVPORTS \
     -m state --state NEW -j ACCEPT   
     
# Allowing access to remote ssl websites (tcp 443)
$IPT -A FORWARD -o $INTERNET -p tcp \
     --sport $UNPRIVPORTS --dport 443 \
     -m state --state NEW -j ACCEPT   
       
# Allowing access to remote pop3 servers (tcp 110)
$IPT -A FORWARD -o $INTERNET -p tcp \
     --sport $UNPRIVPORTS --dport 110 \
     -m state --state NEW -j ACCEPT
     
# Allowing access to remote smtp servers (tcp 25) 
$IPT -A FORWARD -o $INTERNET -p tcp \
     --sport $UNPRIVPORTS --dport 25 \
     -m state --state NEW -j ACCEPT 
     
# Allowing access to remote ssh servers (tcp 22)
$IPT -A FORWARD -o $INTERNET -p tcp \
     --sport $UNPRIVPORTS --dport $UNPRIVPORTS \
     -m state --state NEW -j ACCEPT       
     
# Allow access to the time server of xs4all
#$IPT -A FORWARD -o $INTERNET -p udp \
#     --sport $UNPRIVPORTS -d $TIME_SERVER --dport 123 \
#     -m state --state NEW -j ACCEPT

# Allow access to the Nipo server (tcp 634)            
NIPO_SERVER="193.173.106.23"
$IPT -A FORWARD -o $INTERNET -p tcp \
     --sport $UNPRIVPORTS --dport 634 \
     -m state --state NEW -j ACCEPT       

# Allow outgoing Auth requests
$IPT -A FORWARD -o $INTERNET -p tcp \
     --sport $UNPRIVPORTS --dport 113 \
     -m state --state NEW -j ACCEPT
     
# NAT the internal lan to the internet
$IPT -t nat -A POSTROUTING -o eth1 -j SNAT --to $IPADDR


Ik wil later met PREROUTING poort 80 doorsturen naar een machine in het interne lan. Dit ga ik pas doen als gewoon Nat vanuit het LAN werkt.

$IPT -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
$IPT -t nat -A POSTROUTING -m state --state ESTABLISHED,RELATED -j ACCEPT
$IPT -t nat -A PREROUTING -m state --state ESTABLISHED,RELATED -j ACCEPT

Zijn de bovenste regels goed of moet dit helemaal anders.

Ik wil met de forward regels bereiken dat alleen expliciet de regels toegevoegd doorgelaten moeten worden.

Alle regels geven geen fouten behalve de laatste SNAT regel:
$IPT -t nat -A POSTROUTING -o eth1 -j SNAT --to $IPADDR
Dan krijg ik invalid argument SNAT.

Ik heb denk ik een beetje hulp nodig om verder te komen. Doe ik iets grandioos fout?

[ Voor 8% gewijzigd door Verwijderd op 14-06-2004 15:00 . Reden: ip adres eruit gehaald. Vraag over icmp ]


  • Seth4Chaos
  • Registratie: Maart 2001
  • Niet online

Seth4Chaos

that's me...

Verwijderd schreef op 14 juni 2004 @ 14:50:
code:
1
2
# NAT the internal lan to the internet
$IPT -t nat -A POSTROUTING -o eth1 -j SNAT --to $IPADDR


Alle regels geven geen fouten behalve de laatste SNAT regel:
$IPT -t nat -A POSTROUTING -o eth1 -j SNAT --to $IPADDR
Dan krijg ik invalid argument SNAT.

Ik heb denk ik een beetje hulp nodig om verder te komen. Doe ik iets grandioos fout?
probeer is:
code:
1
$IPT -t nat -A POSTROUTING -o eth1 -j SNAT --to-source $IPADDR

Mistakes are proof that you are trying...


  • Stacium
  • Registratie: Februari 2001
  • Niet online

Stacium

Perfect Molecular Chaos

Verwijderd schreef op 14 juni 2004 @ 14:50:
[..]
Zijn de icmp regels wel nodig? Ik heb begrepen de connection tracking dit ook afhandeld? Klopt dit kunnen deze regels eruit?

Ik heb expres zoveel regels. Zaken als multiport kunnen later altijd nog als het werkt.
die icmp regels filteren rare/niet kloppende icmp-pakketen, kan weinig kwaad zou ik zeggen ;) Totdat alles goed werkt zou je ze eruit kunnen laten om het geheel wat overzichtelijker te maken.
Verwijderd schreef op 14 juni 2004 @ 14:50:
[..]
Daarna ben ik verder gegaan met de forwarding regels en NAT.

$IPT -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
$IPT -t nat -A POSTROUTING -m state --state ESTABLISHED,RELATED -j ACCEPT
$IPT -t nat -A PREROUTING -m state --state ESTABLISHED,RELATED -j ACCEPT

Zijn de bovenste regels goed of moet dit helemaal anders.
AFAIK zijn die laatste 2 regels niet nodig, routed pakketten worden al via de forward gecontroleerd.
Je geeft bij de forward geen input, output, source e.d. op, vanuit het LAN kan met dus ook alleen maar met related/est. verbindingen werken, denk niet dat dat de bedoeling is. Voor inet->LAN is de 'state'-filter goed. Voor LAN->inet zou je alles open kunnen zetten, of alleen bepaalde poorten

It seemed like a good idea at the time


Verwijderd

Topicstarter
Stacium schreef op 14 juni 2004 @ 15:54:

AFAIK zijn die laatste 2 regels niet nodig, routed pakketten worden al via de forward gecontroleerd.
Je geeft bij de forward geen input, output, source e.d. op, vanuit het LAN kan met dus ook alleen maar met related/est. verbindingen werken, denk niet dat dat de bedoeling is. Voor inet->LAN is de 'state'-filter goed. Voor LAN->inet zou je alles open kunnen zetten, of alleen bepaalde poorten
Kan je een voorbeeld geven wat ik in mijn FORWARDING regels fout doe?

Moet ik van:

code:
1
2
3
4
5
# Allowing DNS lookups as a client
# Caching nameserver
$IPT -A FORWARD -o $INTERNET -p udp \
     --sport $UNPRIVPORTS -d $CACHING_NAMESERVER --dport 53 \
     -m state --state NEW -j ACCEPT

dit maken
code:
1
2
3
4
5
6
# Allowing DNS lookups as a client
# Caching nameserver
$IPT -A FORWARD -o $INTERNET -p udp \
     -s $LAN_ADDRESS \
     --sport $UNPRIVPORTS -d $CACHING_NAMESERVER --dport 53 \
     -m state --state NEW -j ACCEPT

of
code:
1
2
3
4
5
6
7
8
9
10
11
# Set the default policy to DENY
$IPT --policy INPUT DROP
$IPT --policy OUTPUT DROP
$IPT --policy FORWARD DROP

$IPT -t nat --policy PREROUTING DROP
$IPT -t nat --policy OUTPUT DROP
$IPT -t nat --policy POSTROUTING DROP

$IPT -t mangle --policy PREROUTING DROP
$IPT -t mangle --policy OUTPUT DROP



Je bedoelt in de default policy FORWARDING op ACCEPT zetten?

Is dit genoeg om samen met SNAT alle het naar buiten gaande verkeer toe te laten?

Ik heb hier wel aan gedacht maar ik denk dat ik met deze regels meer controle krijg.

  • Stacium
  • Registratie: Februari 2001
  • Niet online

Stacium

Perfect Molecular Chaos

ik zie dat je poorten voor http, ftp enz naar het Internet al open had staan in de forward-rules. Had ik net overheen gelezen
je zou in regels 7, 8 en 9 de -i en -o kunnen toevoegen, omdat het alleen voor het verkeer vanaf het internet naar je LAN geldt

Maar als ik je regels doorlees en je past toe wat Seth4Chaos zei, dan zou het moeten werken lijkt me

[ Voor 55% gewijzigd door Stacium op 14-06-2004 17:09 ]

It seemed like a good idea at the time


  • siepeltjuh
  • Registratie: Maart 2003
  • Niet online
Ik heb ook een probleem met iptables.

Blijkbaar hebben we gezocht op dezelfde sites want ik kom met een vergelijkbaar script.
Mijn probleem is dat ik de poorten niet geforward krijg.
ik wil graag emule draaien op 192.168.9.20 poort 4663

Ik krijg met de volgende code deze melding:
# perl proxy.sh
Bad argument `4663'
Try `iptables -h' or 'iptables --help' for more information.
iptables v1.2.6a: Unknown arg `--dport'
Try `iptables -h' or 'iptables --help' for more information.

Deze meldingen zijn van regel nr 60 en 65:

PHP:
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
#!/bin/bash

#string setten
EXTERNAL_INT="eth0"
EXTERNAL_IP="`/sbin/ifconfig eth0 | grep 'inet addr' | awk '{print $2}' | sed -e 's/.*://'`"
LOOPBACK="127.0.0.0/8"
RESERVED_IP_172_SPACE="172.16.0.0/12"
RESERVED_IP_192_SPACE="192.168.0.0/16"
RESERVED_IP_10_SPACE="10.0.0.0/8"
RESERVED_IP_MULTICAST="224.0.0.0/4"
RESERVED_IP_FUTURE="240.0.0.0/5"

#echo 1 > /proc/sys/net/ipv4/conf/all/rp_filter
#echo 1 > /proc/sys/net/ipv4/conf/all/log_martians
#echo 0 > /proc/sys/net/ipv4/conf/all/send_redirects
#echo 0 > /proc/sys/net/ipv4/conf/all/accept_source_route
#echo 0 > /proc/sys/net/ipv4/conf/all/accept_redirects
#echo 1 > /proc/sys/net/ipv4/tcp_syncookies
#echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts

#modules
modprobe ip_conntrack_ftp
modprobe iptable_nat


#Initialize
iptables --flush
iptables -t nat --flush
iptables -t mangle --flush

#Deleten

iptables --delete-chain
iptables -t nat --delete-chain
iptables -t mangle --delete-chain

# SETTEN

iptables --policy INPUT DROP
iptables --policy OUTPUT DROP
iptables --policy FORWARD DROP

# The loopback interface should accept all traffic
iptables -A INPUT  -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT

#DNS open zetten
iptables -A OUTPUT -p udp -o eth0 --dport 53 --sport 1024:65535 -j ACCEPT
iptables -A INPUT -p udp -i eth0 --sport 53 --dport 1024:65535 -j ACCEPT

#firewall laten surfen
iptables -A OUTPUT -j ACCEPT -m state --state NEW,ESTABLISHED,RELATED -o eth0 -p tcp
iptables -A INPUT -j ACCEPT -m state --state ESTABLISHED,RELATED -i eth0 -p tcp

#lokaal netwerk laten verbinden
iptables -A INPUT   -j ACCEPT -p all -s 192.168.9.0/24 -i eth1
iptables -A OUTPUT  -j ACCEPT -p all -d 192.168.9.0/24 -o eth1

#masquerade aanzetten
iptables -t nat -A PREROUTING -p all -i eth0 -d $external_ip --dport 4663 --sport 1024:65535 -j DNAT --to 192.168.9.20:4663
iptables -A POSTROUTING -t nat -o eth0 -s 192.168.9.0/24 -d 0/0 -j MASQUERADE
echo 1 > /proc/sys/net/ipv4/ip_forward

# het boeltje forwarden
iptables -A FORWARD -p all -i eth0 -o eth1 -d 192.168.9.20 --dport 4663 --sport 1024:65535 -m state --state NEW -j ACCEPT
iptables -A FORWARD -t filter -i eth1 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -t filter -i eth0 -m state --state ESTABLISHED,RELATED     -j ACCEPT

Can`t live without the mods


Verwijderd

Topicstarter
Ik heb alle wijzigingen doorgevoerd maar hij blijft de foutmelding

iptables: invalid argurment geven op de regel:

code:
1
2
$IPT -t nat -A POSTROUTING -s 192.168.0.0/24 \
        -o $INTERNET -j SNAT --to-source $IPADDR


Wat is hier fout aan?

Dit komt letterlijk uit de NAT howto van www.netfilter.org

  • Stacium
  • Registratie: Februari 2001
  • Niet online

Stacium

Perfect Molecular Chaos

Verwijderd schreef op 14 juni 2004 @ 19:32:
Ik heb alle wijzigingen doorgevoerd maar hij blijft de foutmelding

iptables: invalid argurment geven op de regel:

code:
1
2
$IPT -t nat -A POSTROUTING -s 192.168.0.0/24 \
        -o $INTERNET -j SNAT --to-source $IPADDR


Wat is hier fout aan?

Dit komt letterlijk uit de NAT howto van www.netfilter.org
heb je de module voor SNAT gecompileerd (en geladen)?

je kan ook (tijdelijk) "-j SNAT --to-source $IPADDR" vervangen door "-j MASQUERADE" (dus zonder argument)

Masqen is bedoel voor routers met een dynamische ip, maar werkt (uiteraard) ook voor een statisch ip.

It seemed like a good idea at the time


  • Seth4Chaos
  • Registratie: Maart 2001
  • Niet online

Seth4Chaos

that's me...

Verwijderd schreef op 14 juni 2004 @ 19:32:
Ik heb alle wijzigingen doorgevoerd maar hij blijft de foutmelding

iptables: invalid argurment geven op de regel:

code:
1
2
$IPT -t nat -A POSTROUTING -s 192.168.0.0/24 \
        -o $INTERNET -j SNAT --to-source $IPADDR


Wat is hier fout aan?

Dit komt letterlijk uit de NAT howto van www.netfilter.org
kijk is even wat er in je kernel config staat bij:
CONFIG_IP_NF_NAT en
CONFIG_IP_NF_TARGET_MASQUERADE

deze moeten of "Y" hebben of "M", als ze "M" hebben dan moet je even met 'lsmod' kijken of je deze modules wel geladen hebt.

Mistakes are proof that you are trying...


Verwijderd

Ik denk dat je zo'n beetje het belangrijkste vergeet: IP-forwarding aanzetten :)
code:
1
echo 1 > /proc/sys/net/ipv4/conf/all/forwarding
Verwijderd schreef op 14 juni 2004 @ 14:50:
code:
1
2
3
4
5
# Disable source Routed Packets
for f in /proc/sys/net/ipv4/conf/*/accept_source_route; do 
    echo 0 > $f
    
done
Dit can overigens ook met "all"
code:
1
echo 0 > /proc/sys/net/ipv4/conf/all/accept_source_route

Verwijderd

Topicstarter
Ik ben na mijn vakantie er weer mee bezig geweest en ondertussen is de firewall af en werkt hij. Hij gaf die foutmeldingen bij de SNAT rule omdat je voor de patch-o-matic pptp vpn patch iptables moet hercompileren. Dit staat in de uitleg bij de patch.

Hier de firewall.
code:
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
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
#!/bin/sh

# The location of important programs
IPT=/usr/local/sbin/iptables
DEPMOD=/sbin/depmod
INSMOD=/sbin/insmod
MODPROBE=/sbin/modprobe

# Symbolic constants for recurring names and addresses
INTERNET="eth1"             # Internet connected interface
LOOPBACK_INTERFACE="lo"         # The name of the Loopback interface
IPADDR="xxx.xxx.xxx.xxx"            # Internet ip address
LOOPBACK="127.0.0.0/8"          # reserved loopback address range
CLASS_A="10.0.0.0/8"            # Class A private networks
CLASS_B="172.16.0.0/12"         # Class B private networks
CLASS_C="192.168.0.0/16"        # Class C private networks
CLASS_D_MULTICAST="224.0.0.0/4"     # Class D multicast addresses
ClASS_E_RESERVED_NET="240.0.0.0/5"  # Class E reserved addresses
BROADCAST_SRC="0.0.0.0"         # Broadcast source address
BROADCAST_DEST="255.255.255.255"    # Broadcast destination address
PRIVPORTS="0:1023"          # Well-know, privileged port range
UNPRIVPORTS="1024:65535"        # Unprivileged port range

# Enable broadcast echo Protection
echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts

# Disable source Routed Packets
for f in /proc/sys/net/ipv4/conf/*/accept_source_route; do 
    echo 0 > $f
    
done

# Disable ICMP Redirect Acceptance
for f in /proc/sys/net/ipv4/conf/*/accept_redirects; do
    echo 0 > $f

done

# Don't send redirect messages
for f in /proc/sys/net/ipv4/conf/*/send_redirects; do
    echo 0 > $f

done

# Log packets with impossible addresses
for f in /proc/sys/net/ipv4/conf/*/log_martians; do
    echo 1 > $f
    
done

# Remove any existing rules from all chains
$IPT -F
$IPT -F -t nat 
$IPT -F -t mangle 

# Set the default policy to DENY
$IPT -P INPUT  DROP
$IPT -P OUTPUT  DROP
$IPT -P FORWARD DROP

# Remove any pre-existing user-defined chains
$IPT -X
$IPT -X -t nat
$IPT -X -t mangle

# Zero counts
$IPT -Z

# Unlimited traffic on the loopback interface
$IPT -A INPUT -i lo -j ACCEPT
$IPT -A OUTPUT -o lo -j ACCEPT

# Stealth scans and TCP state Flags
# All of the bits are cleared
$IPT -A INPUT -p tcp --tcp-flags ALL NONE -j DROP

# SYN and FIN are both set
$IPT -A INPUT -p tcp --tcp-flags SYN,FIN SYN,FIN -j DROP

# SYN and RST are both set
$IPT -A INPUT -p tcp --tcp-flags SYN,RST SYN,RST -j DROP

# FIN and RST ar both set
$IPT -A INPUT -p tcp --tcp-flags FIN,RST FIN,RST -j DROP

# FIN is the only bit set, without the expected accompanying ACK
$IPT -A INPUT -p tcp --tcp-flags ACK,FIN FIN -j DROP

# PSH is the only bit set, without the expected accompanying ACK
$IPT -A INPUT -p tcp --tcp-flags ACK,PSH PSH -j DROP

# URG is the only bit set, without the expected accompanying ACK
$IPT -A INPUT -p tcp --tcp-flags ACK,URG URG -j DROP

# Using Connection State to Bypass Rule Checking
$IPT -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
$IPT -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

# Using the state module alone, INVALID will break protocols that use
# bi-directional connections or multiple connections or exchanges,
# unless an ALG is provided for the protocol.

$IPT -A INPUT -m state --state INVALID -j LOG \
     --log-prefix "INVALID input: "
    
$IPT -A INPUT -m state --state INVALID -j DROP
   
$IPT -A OUTPUT -m state --state INVALID -j LOG \
     --log-prefix "INVALID output: "
    
$IPT -A OUTPUT -m state --state INVALID -j DROP

# Source address spoofing and other bad addresses
# Refuse spoofed packets pretending to be from the 
# external interfaces ip address
$IPT -A INPUT -i $INTERNET -s $IPADDR -j DROP

# Refuse packets claiming to be from a Class A private network
$IPT -A INPUT -i $INTERNET -s $CLASS_A -j DROP

# Refuse packets claiming to be from a Class B private network
$IPT -A INPUT -i $INTERNET -s $CLASS_B -j DROP

# Refuse packets claiming to be from a Class C private network
$IPT -A INPUT -i $INTERNET -s $CLASS_C -j DROP

# Refuse packets claiming to be from the loopback interface private network
$IPT -A INPUT -i $INTERNET -s $LOOPBACK -j DROP

# Refuse malformed broadcast packets
$IPT -A INPUT -i $INTERNET -s $BROADCAST_DEST -j LOG
$IPT -A INPUT -i $INTERNET -s $BROADCAST_DEST -j DROP

$IPT -A INPUT -i $INTERNET -d $BROADCAST_SRC -j LOG
$IPT -A INPUT -i $INTERNET -d $BROADCAST_SRC -j DROP

# Refuse limited broadcasts
$IPT -A INPUT -i $INTERNET -d $BROADCAST_DEST -j DROP

# Refuse Class D multicast addresses
# illegas as as source address
$IPT -A INPUT -i $INTERNET -s $CLASS_D_MULTICAST -j DROP

# Filter incomming AUTH requests to your server (tcp 113)
$IPT -A INPUT -i $INTERNET -p tcp \
     --sport $UNPRIVPORTS \
     -d $IPADDR --dport 113 -j REJECT --reject-with tcp-reset 

# Allowing the Lan to access the internal interface
INTERNAL_INTERFACE="eth0"
$IPT -A INPUT -i $INTERNAL_INTERFACE -m state --state NEW -j ACCEPT
$IPT -A OUTPUT -o $INTERNAL_INTERFACE -m state --state NEW -j ACCEPT

# Allowing DNS Lookups as a Client  (udp 53)
CACHING_NAMESERVER="194.109.6.66"
PRIMARY_NAMESERVER="194.109.9.99" 
SECONDARY_NAMESERVER="194.109.104.104"
$IPT -A OUTPUT -o $INTERNET -p udp \
     -s $IPADDR --sport $UNPRIVPORTS \
     -d $CACHING_NAMESERVER --dport 53 \
     -m state --state NEW -j ACCEPT

# Tcp Rules (tcp 53)
$IPT -A OUTPUT -o $INTERNET -p tcp \
    -s $IPADDR --sport $UNPRIVPORTS \
    -d $CACHING_NAMESERVER --dport 53 \
    -m state --state NEW -j ACCEPT

# Primary Dns server (udp 53)
$IPT -A OUTPUT -o $INTERNET -p udp \
     -s $IPADDR --sport $UNPRIVPORTS \
     -d $PRIMARY_NAMESERVER --dport 53 \
     -m state --state NEW -j ACCEPT

# Secondary Dns server (udp 53)
$IPT -A OUTPUT -o $INTERNET -p udp \
     -s $IPADDR --sport $UNPRIVPORTS \
     -d $SECONDARY_NAMESERVER --dport 53 \
     -m state --state NEW -j ACCEPT

# Allow client access to remote SSH Servers (tcp 22)
$IPT -A OUTPUT -o $INTERNET -p tcp \
     -s $IPADDR --sport $UNPRIVPORTS \
     --dport 22 -m state --state NEW -j ACCEPT   

# Allow remote clients access to you Local SSH server (tcp 22)
$IPT -A INPUT -i $INTERNET -p tcp \
     -d $IPADDR --sport $UNPRIVPORTS \
     --dport 22 -m state --state NEW -j ACCEPT   

# Allowing outgoing client access to remote FTP servers (tcp 21)
# Outgoing FTP requests over the Control Channel
# The data channel is done by connection tracking
$IPT -A INPUT -i $INTERNET -p tcp \
     -s $IPADDR --sport $UNPRIVPORTS \
     --dport 21 -m state --state NEW -j ACCEPT

# Port-mode FTP data channels (tcp 1024:65535)
$IPT -A OUTPUT -o $INTERNET -p tcp \
     -s $IPADDR --sport $UNPRIVPORTS \
     --dport $UNPRIVPORTS -m state --state NEW -j ACCEPT

# Accessing remote websites as a client (tcp 80)
$IPT -A OUTPUT -o $INTERNET -p tcp \
     -s $IPADDR --sport $UNPRIVPORTS \
     --dport 80 -m state --state NEW -j ACCEPT

# Allow access to the time server of Xs4all
TIME_SERVER="ntp.xs4all.nl"
#    $IPT -A OUTPUT -o $INTERNET -p udp \
#    -s $IPADDR --sport $UNPRIVPORTS \
#    -d $TIME_SERVER --dport 123 \
#    -m state --state NEW -j ACCEPT

# Outgoing ping to remote hosts
$IPT -A OUTPUT -o $INTERNET -p icmp \
     -s $IPADDR --icmp-type echo-request \
     -m state --state NEW -j ACCEPT

# Incoming pings from remote hosts
$IPT -A INPUT -i $INTERNET -p icmp \
     --icmp-type echo-request \
     -d $IPADDR -m state --state NEW -j ACCEPT

###############################
# the forwarding and NAT rules#
###############################

# Using connection state to bypass rule checking
$IPT -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT

# Using the state module alone, INVALID will break protocols that use
# bi-directional connections of multiple connections or exchanges,
# unless an ALG is provided for the protocol.

$IPT -A FORWARD -m state --state INVALID -j LOG \
     --log-prefix "INVALID forward: "

$IPT -A FORWARD -m state --state INVALID -j DROP

# Allow dns lookups as a client (udp 53)
# Caching nameserver 
$IPT -A FORWARD -i $INTERNAL_INTERFACE -o $INTERNET -p udp \
     --sport $UNPRIVPORTS \
     -d $CACHING_NAMESERVER --dport 53 \
     -m state --state NEW -j ACCEPT

# Tcp rules (tcp 53)     
$IPT -A FORWARD -i $INTERNAL_INTERFACE -o $INTERNET -p tcp \
     --sport $UNPRIVPORTS \
     -d $CACHING_NAMESERVER --dport 53 \
     -m state --state NEW -j ACCEPT

# Primary nameserver (udp 53)
$IPT -A FORWARD -i $INTERNAL_INTERFACE -o $INTERNET -p udp \
     --sport $UNPRIVPORTS \
     -d $PRIMARY_NAMESERVER --dport 53 \
     -m state --state NEW -j ACCEPT

# Secondary nameserver (udp 53)  
$IPT -A FORWARD -i $INTERNAL_INTERFACE -o $INTERNET -p udp \
     --sport $UNPRIVPORTS \
     -d $SECONDARY_NAMESERVER --dport 53 \
     -m state --state NEW -j ACCEPT

# Testing of portforwarding a webserver
WEBSERVER="192.168.50.99"
$IPT -A PREROUTING -t nat -p tcp -d $IPADDR --dport 80 \
     -j DNAT --to $WEBSERVER:80

$IPT -A FORWARD -i $INTERNET -o $INTERNAL_INTERFACE -p tcp \
      --sport $UNPRIVPORTS \
     --dport 80 \
     -m state --state NEW -j ACCEPT
     
# Allow access to remote websites (tcp 80)
$IPT -A FORWARD -i $INTERNAL_INTERFACE -o $INTERNET -p tcp \
     --sport $UNPRIVPORTS \
     --dport 80 \
     -m state --state NEW -j ACCEPT

# Allowing access to remote ftp servers (tcp 21)
# Control channel
# Connection tracking is taking care of the data channel
$IPT -A FORWARD -i $INTERNAL_INTERFACE -o $INTERNET -p tcp \
     --sport $UNPRIVPORTS \
     --dport 21 \
     -m state --state NEW -j ACCEPT
 
# Ftp passive port modus ftp (tcp 1024:65535)
$IPT -A FORWARD -i $INTERNAL_INTERFACE -o $INTERNET -p tcp \
     --sport $UNPRIVPORTS \
     --dport $UNPRIVPORTS \
     -m state --state NEW -j ACCEPT

# Allow access to remote telnet (tcp 23)
#$IPT -A FORWARD -i $INTERNAL_INTERFACE -o $INTERNET -p tcp \
#     --sport $UNPRIVPORTS \
#     --dport 23 \
#     -m state --state NEW -j ACCEPT

# Allowing access to remote news servers (tcp 119)
$IPT -A FORWARD -i $INTERNAL_INTERFACE -o $INTERNET -p tcp \
     --sport $UNPRIVPORTS \
     --dport 119 \
     -m state --state NEW -j ACCEPT
        
# Allowing access to remote ssl websites (tcp 443)
$IPT -A FORWARD -i $INTERNAL_INTERFACE -o $INTERNET -p tcp \
     --sport $UNPRIVPORTS \
     --dport 443 \
     -m state --state NEW -j ACCEPT   
       
# Allowing access to remote pop3 servers (tcp 110)
$IPT -A FORWARD -i $INTERNAL_INTERFACE -o $INTERNET -p tcp \
     --sport $UNPRIVPORTS \
     --dport 110 \
     -m state --state NEW -j ACCEPT
     
# Allowing access to remote smtp servers (tcp 25) 
$IPT -A FORWARD -i $INTERNAL_INTERFACE -o $INTERNET -p tcp \
     --sport $UNPRIVPORTS \
     --dport 25 \
     -m state --state NEW -j ACCEPT 

# Allow access to remote ssh servers (tcp 22)
$IPT -A FORWARD -i $INTERNAL_INTERFACE -o $INTERNET -p tcp \
     --sport $UNPRIVPORTS \
     --dport 22 \
     -m state --state NEW -j ACCEPT

# Allow access to the time server of xs4all (udp 123)
$IPT -A FORWARD -i $INTERNAL_INTERFACE -o $INTERNET -p udp \
     --sport $UNPRIVPORTS \
     -d $TIME_SERVER --dport 123 \
     -m state --state NEW -j ACCEPT

# Allow access to the Nipo server (tcp 634)            
NIPO_SERVER="193.173.106.23"
$IPT -A FORWARD -i $INTERNAL_INTERFACE -o $INTERNET -p tcp \
     --sport $UNPRIVPORTS \
     -d $NIPO_SERVER --dport 25 \
     -m state --state NEW -j ACCEPT       

# Allow outgoing Auth requests (tcp 113)
$IPT -A FORWARD -i $INTERNAL_INTERFACE -o $INTERNET -p tcp \
     --sport $UNPRIVPORTS \
     --dport 113 \
     -m state --state NEW -j ACCEPT

# Allow clients to access remote pptp vpn servers (tcp 1723)
$IPT -A FORWARD -i $INTERNAL_INTERFACE -o $INTERNET -p tcp \
     --sport $UNPRIVPORTS \
     --dport 1723 \
     -m state --state NEW -j ACCEPT

# Allow clients to ping remote hosts
$IPT -A FORWARD -i $INTERNAL_INTERFACE -o $INTERNET -p icmp \
     --icmp-type echo-request \
     -m state --state NEW -j ACCEPT
     
# Use NAT for internet access from the lan
$IPT -t nat -A POSTROUTING -s 192.168.50.0/24 \
        -o $INTERNET -j SNAT --to $IPADDR


De keuzes die ik heb gemaakt. Ik heb geen gebruikt gemaakt van alles forwarden met de regel:

$IPT -A FORWARD -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT

Dit omdat ik nu een betere controle heb over wat er naar buiten gaat vanaf het lan.

Ik heb nog een vraag.

Als je naar de nameservers regels kijkt moet ik voor elke name server een aparte rule aanmaken. Dit komt dan op een totaal van 6. Is het niet mogelijk om alle drie de name servers in 1 regel te stoppen. Ik heb verschillende zaken geprobeerd maar steeds krijg ik errors van iptables. Is dit gewoon niet mogelijk?

Ik bedoel iets in de trand van:

code:
1
2
3
4
5
6
7
8
9
# Allowing DNS Lookups as a Client  (udp 53)
CACHING_NAMESERVER="194.109.6.66"
PRIMARY_NAMESERVER="194.109.9.99" 
SECONDARY_NAMESERVER="194.109.104.104"
$IPT -A OUTPUT -o $INTERNET -p udp \
     -s $IPADDR --sport $UNPRIVPORTS \
     -d $CACHING_NAMESERVER, \
          CACHING_NAMESERVER,$SECONDARY_NAMESERVER --dport 53 \
     -m state --state NEW -j ACCEPT


Ik gebruik ook port forwarding voor een test webserver. Graag wil ik alleen vanaf bepaalde ip adressen hier toegang tot bieden.

Hiervoor heb ik de volgende regels:
code:
1
2
3
4
5
6
7
8
9
# Testing of portforwarding a webserver
WEBSERVER="192.168.50.99"
$IPT -A PREROUTING -t nat -p tcp -d $IPADDR --dport 80 \
     -j DNAT --to $WEBSERVER:80

$IPT -A FORWARD -i $INTERNET -o $INTERNAL_INTERFACE -p tcp \
      --sport $UNPRIVPORTS \
     --dport 80 \
     -m state --state NEW -j ACCEPT

Ik had in het begin nog wat problemen met portforwarding. Ik moet of de tweede regel die hierboven staat toevoegen of NEW toevoegen aan de regel voor connection tracking. Aangezien ik dit niet wil omdat dan alles vanaf het lan naar buiten mag heb ik hierover ook een vraag.

Er vanuit gaande dat het toevoegen van meerdere verschillende ip adressen aan 1 regel niet wil. Wordt de verbinding eerst afgehandeld door de PREROUTING rule of door de forward rule?

In welke regel moet ik de de -s <ip adres> toevoegen? De forward of de PREROUTING regel? Ik heb getest en in beide regels werkt de blockering. Dus je kan zeggen voeg de -s <ipadres optie> in beide in maar als dat in de forward rule niet hoeft omdat verkeer eerst door de PREROUTING rule wordt geblokeerd scheelt dit bij meerdere ip adressen wel extra forward regels.
Pagina: 1