[iptables] Router en Firewall opzetten

Pagina: 1
Acties:

  • Erik1
  • Registratie: Juni 2001
  • Niet online
Tot voorkort heb ik mijn internet gedeelt met een Clarkconnect Router, dit heeft goed gewerkt, maar de router is nu erg brak omdat ik zelf dingen heb zitten installeren enzo, daar is zo'n standaard router installatie eigenlijk niet voor bedoeld en met de hoge systeemspecs (Pentium 166/64MB) werd het er ook niet beter op :P

Ik heb nu vakantie, dus ik dacht: Ik heb mooi tijd om een nieuwe router op te zetten :)

Dus ik heb van oude onderdelen een systeempje gebouwd met:
Athlon 650
512MB SD-RAM
20GB HDD
2x 3com PCI nics (1x 10/100 voor interne netwerk en 1x 10MBit voor kabelmodem)
ISA Videokaart :P

Daar heb ik vervolgens Debian 3.0 op gezet. Met kernel 2.4.18-bf2.4.

Vervolgens heb ik de netwerkinterfaces geconfigureerd, en apache/php/mysql/webmin/enz...... erop gezet :)

Voor het routeren had ik het volgende script gemaakt:

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
#!/bin/sh
#
# router

echo -e "\n\nLoading Router Script...\n"

# IP Forwarding aanzetten
echo "1" > /proc/sys/net/ipv4/ip_forward

# Alles resetten
iptables -P INPUT ACCEPT
iptables -F INPUT 
iptables -P OUTPUT ACCEPT
iptables -F OUTPUT 
iptables -P FORWARD DROP
iptables -F FORWARD 
iptables -t nat -F

# NAT
iptables -A FORWARD -i eth0 -o eth1 -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -i eth1 -o eth0 -j ACCEPT
iptables -A FORWARD -j LOG
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

echo -e "\ndone...\n"


Dit werkt, maar is natuurlijk niet erg veilig.
Daarom heb ik met dit tooltje een script in elkaar gezet:

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
#!/bin/sh
#
# router

echo -e "\n\nLoading Router Script...\n"

IPT=/sbin/iptables
LSMOD=/sbin/lsmod
# Flushing old rules
$IPT -F
$IPT -t nat -F

# Next is your IP
NET=mijn externe ip adres


# DROP IF NO FLAGS SET OR ALL FLAGS SET (Some scanning methods uses these)
$IPT -t filter -A INPUT -p tcp -s 0/0 -d $NET --tcp-flags ALL NONE -j DROP
$IPT -t filter -A INPUT -p tcp -s 0/0 -d $NET --tcp-flags ALL ALL -j DROP

# We dont need ipchains
$LSMOD | grep ipchains -q -s && rmmod ipchains

# Allow everything on the loopback interface
$IPT -t filter -A INPUT -i lo -s 0/0 -d 0/0 -j ACCEPT
$IPT -t filter -A OUTPUT -o lo -s 0/0 -d 0/0 -j ACCEPT

# This is done to enable source verification
if [ -e /proc/sys/net/ipv4/conf/all/rp_filter ]; then
  for f in /proc/sys/net/ipv4/conf/*/rp_filter
  do
   echo 2 > $f
  done
fi

# This one is for syncookies protection
if [ -e /proc/sys/net/ipv4/tcp_syncookies ]; then
  echo 1 > /proc/sys/net/ipv4/tcp_syncookies
fi

# We dont want ICMP Dead Errors
if [ -e /proc/sys/net/ipv4/icmp_ignore_bogus_error_responses ]; then
  echo 1 > /proc/sys/net/ipv4/icmp_ignore_bogus_error_responses
fi

# We want to Ignore ICMP Broadcasts
if [ -e /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts ]; then
  echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts
fi

# We dont want anyone to play with dynamic TCP/IP
if [ -e /proc/sys/net/ipv4/ip_dynaddr ]; then
  echo 0 > /proc/sys/net/ipv4/ip_dynaddr
fi

# These IP addresses are blocked, because they are not "routable"
$IPT -t filter -A INPUT -s 1.0.0.0/8 -d $NET -j DROP
$IPT -t filter -A INPUT -s 2.0.0.0/8 -d $NET -j DROP
$IPT -t filter -A INPUT -s 7.0.0.0/8 -d $NET -j DROP
$IPT -t filter -A INPUT -s 23.0.0.0/8 -d $NET -j DROP
$IPT -t filter -A INPUT -s 27.0.0.0/8 -d $NET -j DROP
$IPT -t filter -A INPUT -s 31.0.0.0/8 -d $NET -j DROP
$IPT -t filter -A INPUT -s 41.0.0.0/8 -d $NET -j DROP
$IPT -t filter -A INPUT -s 45.0.0.0/8 -d $NET -j DROP
$IPT -t filter -A INPUT -s 60.0.0.0/8 -d $NET -j DROP
$IPT -t filter -A INPUT -s 68.0.0.0/8 -d $NET -j DROP
$IPT -t filter -A INPUT -s 69.0.0.0/8 -d $NET -j DROP
$IPT -t filter -A INPUT -s 70.0.0.0/8 -d $NET -j DROP
$IPT -t filter -A INPUT -s 71.0.0.0/8 -d $NET -j DROP
$IPT -t filter -A INPUT -s 80.0.0.0/8 -d $NET -j DROP
$IPT -t filter -A INPUT -s 88.0.0.0/8 -d $NET -j DROP
$IPT -t filter -A INPUT -s 90.0.0.0/8 -d $NET -j DROP
$IPT -t filter -A INPUT -s 91.0.0.0/8 -d $NET -j DROP
$IPT -t filter -A INPUT -s 92.0.0.0/8 -d $NET -j DROP
$IPT -t filter -A INPUT -s 100.0.0.0/8 -d $NET -j DROP
$IPT -t filter -A INPUT -s 111.0.0.0/8 -d $NET -j DROP
$IPT -t filter -A INPUT -s 112.0.0.0/8 -d $NET -j DROP
$IPT -t filter -A INPUT -s 127.0.0.0/8 -d $NET -j DROP
$IPT -t filter -A INPUT -s 127.0.0.0/8 -d $NET -j DROP
$IPT -t filter -A INPUT -s 128.66.0.0/16 -d $NET -j DROP
$IPT -t filter -A INPUT -s 172.16.0.0/12 -d $NET -j DROP
$IPT -t filter -A INPUT -s 197.0.0.0/16 -d $NET -j DROP
$IPT -t filter -A INPUT -s 201.0.0.0/8 -d $NET -j DROP
$IPT -t filter -A INPUT -s 220.0.0.0/8 -d $NET -j DROP
$IPT -t filter -A INPUT -s 222.0.0.0/8 -d $NET -j DROP
$IPT -t filter -A INPUT -s 240.0.0.0/8 -d $NET -j DROP
$IPT -t filter -A INPUT -s 242.0.0.0/8 -d $NET -j DROP
$IPT -t filter -A INPUT -s 244.0.0.0/8 -d $NET -j DROP
$IPT -t filter -A INPUT -s 251.0.0.0/8 -d $NET -j DROP
$IPT -t filter -A INPUT -s 254.0.0.0/8 -d $NET -j DROP

# In this Firewall we dont want Multicast allowed
$IPT -t filter -A INPUT -s 224.0.0.0/8 -d 0/0 -j DROP
$IPT -t filter -A INPUT -s 0/0 -d 224.0.0.0/8 -j DROP
$IPT -t filter -A OUTPUT -s 224.0.0.0/8 -d 0/0 -j DROP
$IPT -t filter -A OUTPUT -s 0/0 -d 224.0.0.0/8 -j DROP

# Block Packets with Stuffed Routing
$IPT -t filter -A INPUT -s 255.255.255.255 -j DROP
$IPT -t filter -A INPUT -d 0.0.0.0 -j DROP
$IPT -t filter -A OUTPUT -s 255.255.255.255 -j DROP
$IPT -t filter -A OUTPUT -d 0.0.0.0 -j DROP

# ICMP Should be allowed out
$IPT -A OUTPUT -p icmp -s $NET -d 0/0 -j ACCEPT

# Open inbound established connections (ssh)
$IPT  -A INPUT -p tcp --sport 22 --destination-port 513:65535 ! --syn -m state --state RELATED -j ACCEPT

# FTP Data fix
$IPT  -A INPUT -p tcp --sport 20 --destination-port 1023:65535 ! --syn -m state --state RELATED -j ACCEPT
$IPT  -A INPUT -p tcp -m state --state ESTABLISHED -j ACCEPT
$IPT  -A INPUT -p udp -s 0/0 -d $NET --destination-port 1023:65535 -j ACCEPT

# Open ports for outbound established connections
$IPT -A OUTPUT -p tcp -s $NET -d 0/0 --destination-port 1:65535 -j ACCEPT
$IPT -A OUTPUT -p udp -s $NET -d 0/0 --destination-port 1:65535 -j ACCEPT

# FTP allowed
$IPT -t filter -A INPUT -p tcp -s 0/0 -d $NET --destination-port 20  ! --syn -j ACCEPT
$IPT -t filter -A INPUT -p tcp -s 0/0 -d $NET --destination-port 21 -j ACCEPT

# SSH allowed
$IPT -t filter -A INPUT -p tcp -s 0/0 -d $NET --destination-port 22 -j ACCEPT

# HTTP allowed
$IPT -t filter -A INPUT -p tcp -s 0/0 -d $NET --destination-port 80 -j ACCEPT

# HTTPS allowed
$IPT -t filter -A INPUT -p tcp -s 0/0 -d $NET --destination-port 443 -j ACCEPT

# These TCP ports are opened also
$IPT -t filter -A INPUT -p tcp --destination-port 10000 -j ACCEPT
$IPT -t filter -A INPUT -p tcp --destination-port 2064 -j ACCEPT


# This is for forwarding and masquerading
echo '1'> /proc/sys/net/ipv4/ip_forward
/sbin/iptables --table nat --append POSTROUTING -o eth0 -j MASQUERADE
/sbin/iptables --append FORWARD --in-interface eth1 -j ACCEPT


# RESTART KLOGD (So we dont get flooded by iptables to tty)
killall -9 klogd
/sbin/klogd -x -c 4

# Deny everything not let through earlier
$IPT -A INPUT -j DROP

echo -e "\ndone...\n"


Maar om een of andere manier werkt dit niet :'( :?

Ik ben hier nu enkele dagen mee bezig, driekwart van de tijd bezig geweest met Howto's, guides, manuals, enz.. doorlezen, en de rest met prutsen op die bak :P

Ik weet echt niet wat er mis is met dat script :?

  • Tomaat
  • Registratie: November 2001
  • Laatst online: 13-05 13:50
euhm, heb je misschien wat foutmelding voor ons? ;)

  • Erik1
  • Registratie: Juni 2001
  • Niet online
Tomaat schreef op 29 december 2002 @ 18:03:
euhm, heb je misschien wat foutmelding voor ons? ;)
Ik zie geen enkele foutmelding op de linux bak, en het internet werkt gewoon niet (ik kan geen enkele site openen) :?

  • Wilke
  • Registratie: December 2000
  • Laatst online: 10:21
Dan gooi je alle regels eruit, dan moet het weer werken, vervolgens voeg je ze 1 voor 1 weer toe en kijkt waar het fout gaat....

  • Erik1
  • Registratie: Juni 2001
  • Niet online
Ok, dat zal ik eens proberen :)

  • _JGC_
  • Registratie: Juli 2000
  • Nu online
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
#! /bin/sh
# Alles leeg
iptables -F; iptables -t nat -F; iptables -t mangle -F

# NAT naar mn vaste IP adres, evt kan je die ook met scripting uit ifconfig krijgen
iptables -t nat -A POSTROUTING -o eth0 -j SNAT --to 212.187.111.31

# Forwarding aan, wel zo handig
echo 1 > /proc/sys/net/ipv4/ip_forward

#Related en established verbindingen accepteren
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

#Alle nieuwe verbindingen die niet op eth0 komen accepteren
iptables -A INPUT -m state --state NEW -i ! eth0 -j ACCEPT

#Poorten openzetten
iptables -A INPUT --protocol tcp --dport 80 -j ACCEPT
iptables -A INPUT --protocol tcp --dport 21 -j ACCEPT

# Ik wil geen mail van die sjinees die geen virusscanners goed in kan stellen
iptables -A INPUT --protocol tcp --dport 25 --source ! 210.12.140.17 -j ACCEPT

#Meer poorten open
iptables -A INPUT --protocol tcp --dport 110 -j ACCEPT
iptables -A INPUT --protocol tcp --dport 22 -j ACCEPT 
iptables -A INPUT --protocol tcp --dport 143 -j ACCEPT
iptables -A INPUT --protocol tcp --dport 209 -j ACCEPT
iptables -A INPUT --protocol tcp --dport 465 -j ACCEPT

# IPSec verbinding met onderstaand IP
iptables -A INPUT --protocol tcp --dport 50 --source 212.187.32.129 -j ACCEPT
iptables -A INPUT --protocol udp --dport 500 --source 212.187.32.129 -j ACCEPT

# INPUT op DROP gooien, alleen wat boven is opengezet is ook open
iptables -P INPUT DROP

# Spoofing tegengaan als ingaande en uitgaande interface hetzelfde zijn
iptables -A FORWARD -i eth0 -o eth0 -j REJECT

# Geforceerd alle geroute SMTP verkeer uit het netwerk door de virusscannende SMTP server  halen
iptables -t nat -A PREROUTING -i eth1 -p tcp --dport 25 -j REDIRECT --to-port 25


Dit is de mijne, vrij simpel en met input policy op DROP, hoef je je ook geen zorgen te maken over veiligheid als je een nieuw programma installeert. Werkt hier inmiddels al meer dan een jaar :)

  • Erik1
  • Registratie: Juni 2001
  • Niet online
_JGC_ schreef op 29 December 2002 @ 18:13:

[stuk code]

Dit is de mijne, vrij simpel en met input policy op DROP, hoef je je ook geen zorgen te maken over veiligheid als je een nieuw programma installeert. Werkt hier inmiddels al meer dan een jaar :)
Ik heb het precies zo overgenomen maar een paar dingen ge-comment:

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
#! /bin/sh
# Alles leeg
iptables -F; iptables -t nat -F; iptables -t mangle -F

# NAT naar mn vaste IP adres, evt kan je die ook met scripting uit ifconfig krijgen
iptables -t nat -A POSTROUTING -o eth0 -j SNAT --to [mijn externe IP]

# Forwarding aan, wel zo handig
echo 1 > /proc/sys/net/ipv4/ip_forward

#Related en established verbindingen accepteren
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

#Alle nieuwe verbindingen die niet op eth0 komen accepteren
iptables -A INPUT -m state --state NEW -i ! eth0 -j ACCEPT

#Poorten openzetten
iptables -A INPUT --protocol tcp --dport 80 -j ACCEPT
iptables -A INPUT --protocol tcp --dport 21 -j ACCEPT

# Ik wil geen mail van die sjinees die geen virusscanners goed in kan stellen
# iptables -A INPUT --protocol tcp --dport 25 --source ! 210.12.140.17 -j ACCEPT

#Meer poorten open
#iptables -A INPUT --protocol tcp --dport 110 -j ACCEPT
iptables -A INPUT --protocol tcp --dport 22 -j ACCEPT 
#iptables -A INPUT --protocol tcp --dport 143 -j ACCEPT
#iptables -A INPUT --protocol tcp --dport 209 -j ACCEPT
#iptables -A INPUT --protocol tcp --dport 465 -j ACCEPT

# IPSec verbinding met onderstaand IP
#iptables -A INPUT --protocol tcp --dport 50 --source 212.187.32.129 -j ACCEPT
#iptables -A INPUT --protocol udp --dport 500 --source 212.187.32.129 -j ACCEPT

# INPUT op DROP gooien, alleen wat boven is opengezet is ook open
iptables -P INPUT DROP

# Spoofing tegengaan als ingaande en uitgaande interface hetzelfde zijn
iptables -A FORWARD -i eth0 -o eth0 -j REJECT

# Geforceerd alle geroute SMTP verkeer uit het netwerk door de virusscannende SMTP server  halen
#iptables -t nat -A PREROUTING -i eth1 -p tcp --dport 25 -j REDIRECT --to-port 25


Maar dit werkt ook niet :?

Verwijderd

En zonder het firewall gedeelte, maar alleen met het NAT gedeelte werkt het wel?

  • Buffy
  • Registratie: April 2002
  • Laatst online: 26-12-2024

Buffy

Fire bad, Tree pretty

Gokje, de policy van de FORWARD chain staat nog steeds op DROP (van je oude script) en je hebt geen regel die return packages op de FORWARD chain toestaat.

That which doesn't kill us, makes us stranger - Trevor (AEon FLux)
When a finger points at the moon, the imbecile looks at the finger (Chinese Proverb)


  • Erik1
  • Registratie: Juni 2001
  • Niet online
Dawns_sister schreef op 29 december 2002 @ 18:39:
Gokje, de policy van de FORWARD chain staat nog steeds op DROP (van je oude script) en je hebt geen regel die return packages op de FORWARD chain toestaat.
Ik heb "iptables -P FORWARD ACCEPT" uitgevoerd, en hij doet het wel :D

Nu nog ff kijken of de juiste poorten open zijn enzo, of alles goed staat :)

  • deadinspace
  • Registratie: Juni 2001
  • Laatst online: 15-05 13:11

deadinspace

The what goes where now?

Erik1 schreef op 29 December 2002 @ 18:00:
...en met de hoge systeemspecs (Pentium 166/64MB) werd het er ook niet beter op :P
Beetje internet delen en apache draaien enzo kan wel op die bak hoor, daar is een 650 Mhz CPU met 512 MB ram ietwat overkill voor :)
Pagina: 1