Hoe bouw jij je firewall op?

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik ben benieuwd naar hoe andere een firewall kan maken met iptables, bijvoorbeeld voor een server.
Op dit moment doe ik zelf als volgend in Debian:

$ vi /etc/network/if-up.d/firewall
$ chmod 700 /etc/network/if-up.d/firewall


code:
1
2
3
4
5
6
7
8
9
10
11
12
#!/bin/bash

IPTABLES=/sbin/iptables

# Inkomende verbindingen
$IPTABLES -A INPUT -p tcp --dport ssh -j ACCEPT
$IPTABLES -A INPUT -p icmp  -j ACCEPT
# Uitgaande verbindingen
$IPTABLES -A INPUT -p tcp --sport http -j ACCEPT
$IPTABLES -A INPUT -p udp --sport domain -j ACCEPT
# Drop de rest
$IPTABLES -A INPUT -j DROP


$ vi /etc/network/if-down.d/firewall
$ chmod 700 /etc/network/if-down.d/firewall


code:
1
2
3
4
5
6
#!/bin/bash

IPTABLES=/sbin/iptables

# Leeg alle regels
$IPTABLES -F

Acties:
  • 0 Henk 'm!

Verwijderd

Ik gebruik altijd een frontend voor iptables. Op mijn werk gebruik ik daarvoor Uruk en prive gebruik altijd Shorewall. Ik ben het stadium van zelf aanklooien voorbij :p

Acties:
  • 0 Henk 'm!

  • Firestone
  • Registratie: Augustus 2001
  • Laatst online: 29-05 11:48

Firestone

$ su - vuursteen

Ik gebruik een bash script om mijn tables bij te houden. Hierbij laat ik alles naar binnen toe droppen, behalve dingen die ik expliciet toesta. Toegang naar buiten laat ik ongemoeid.

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
#script to set the iptables firewall
# ----------------------------------------------------------------------------


# allow local connections (disable for testing purposes only)
allow_lo="yes";


# ----------------------------------------------------------------------------
# interfaces (confirm)


localnet="lo";
internet="eth+";    # the ending '+' is a wildcard for matching patterns
                       # will match for example 'eth0' , 'eth1' ,  etc..
# ----------------------------------------------------------------------------

# stop the iptables
/etc/rc.d/iptables stop


#  reset iptables rules
iptables -P INPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -P OUTPUT ACCEPT
iptables -F
iptables -X


# create the chains
iptables -N incomming
iptables -N interfaces
iptables -N BRUTEGUARD


# >> INPUT chain
iptables -A INPUT -p icmp -j ACCEPT # ping, etc
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT # dont drop establised connection
iptables -A INPUT -j interfaces 
iptables -A INPUT -j incomming
iptables -A INPUT -p tcp -j REJECT --reject-with tcp-reset # drop everything not accepted
iptables -A INPUT -p udp -j REJECT --reject-with icmp-port-unreachable # drop everything not accepted
iptables -P INPUT DROP # drop all other protocols


# set the default policies for OUTPUT and FORWARD chains
iptables -P OUTPUT ACCEPT # dont filter outgoing
iptables -P FORWARD DROP # drop since I aint NAT


# ----------------------------------------------------------------------------
# >> interfaces chain :: allow all connections from these interfaces
#
[[ "${allow_lo}" == "yes" ]] && iptables -A interfaces -i ${localnet} -j ACCEPT


# ----------------------------------------------------------------------------
# the 'incomming' chain :: rules for accept incoming external connections (daemons)
#
iptables -A incomming -p tcp -m tcp --dport 80 -j ACCEPT    # apache/http
iptables -A incomming -p tcp -m tcp --dport 113 -j ACCEPT   # oidentd/auth
#iptables -A incomming -p tcp -m tcp --dport 443 -j ACCEPT  # https

# SSDP Discovery Service (SSDP protocol)
iptables -A incomming -p udp -m udp --dport 1900  -j ACCEPT
# SSDP Discovery Service (SSDP event notification protocol)
# Universal Plug and Play Device Host (UPNP protocol)
iptables -A incomming -p tcp -m tcp --dport 2869  -j ACCEPT


#accept ssh and avoid bruteforcings with BRUTEGUARD chain
iptables -A incomming -p tcp -m tcp --dport xxxx -j BRUTEGUARD
iptables -A incomming -p tcp -m tcp --dport xxxx -m state --state  NEW,RELATED,ESTABLISHED -j ACCEPT

 # the BRUTEGUARD chain :: block excessive connections (and bruteforcings)
iptables -A BRUTEGUARD -m recent --set --name BF
iptables -A BRUTEGUARD -m recent --update --seconds 1800 --hitcount 8 --name BF -j LOG \
                                 --log-level info --log-prefix "[BRUTEFORCE ATTEMPT] "
iptables -A BRUTEGUARD -m recent --update --seconds 1800 --hitcount 8 --name BF -j DROP

# ----------------------------------------------------------------------------
# Protection against common attacks
#
 

 # allow only SYN packets
iptables -A INPUT -p tcp ! --syn -m state --state NEW -j DROP
 # force fragments packets check
iptables -A INPUT -f -j DROP
 # drop incoming malformed XMAS packets
iptables  -A INPUT -p tcp --tcp-flags ALL ALL -j DROP
 # drop all NULL packets
iptables -A INPUT -p tcp --tcp-flags ALL NONE -j DROP


# ----------------------------------------------------------------------------
# Hide the computer                     # (optional) #
#


 # block reserved private networks incoming from the internet
 # (this could block access for interesting ip's, iex: your router, or lan computers.. )
 # uncomment only if you need it
# iptables -I INPUT -i ${internet} -s 10.0.0.0/8 -j DROP
# iptables -I INPUT -i ${internet} -s 172.16.0.0/12 -j DROP
# iptables -I INPUT -i ${internet} -s 192.168.0.0/16 -j DROP
# iptables -I INPUT -i ${internet} -s 127.0.0.0/8 -j DROP


 # block PING request
iptables -A INPUT -i ${internet} -p icmp --icmp-type echo-request -j DROP


 # ICMP type match blocking
iptables -I INPUT -p icmp --icmp-type redirect -j DROP
iptables -I INPUT -p icmp --icmp-type router-advertisement -j DROP
iptables -I INPUT -p icmp --icmp-type router-solicitation -j DROP
iptables -I INPUT -p icmp --icmp-type address-mask-request -j DROP
iptables -I INPUT -p icmp --icmp-type address-mask-reply -j DROP


# ----------------------------------------------------------------------------
# the end

/etc/rc.d/iptables save

/etc/rc.d/iptables start

# print the iptables
iptables -L;

exit 0;


Ik moet het nog eens verbeteren door meer condities toe te voegen, zoals destination and source.

Acties:
  • 0 Henk 'm!

  • Megamind
  • Registratie: Augustus 2002
  • Laatst online: 10-09 22:45
Ik gebruik gewoon Webmin met iptables, daar kan je chains mee maken etc, meer dan genoeg voor mijn doen.

Acties:
  • 0 Henk 'm!

  • ChaserBoZ_
  • Registratie: September 2005
  • Laatst online: 06-09 18:10
Verwijderd schreef op zondag 14 maart 2010 @ 19:22:
Ik gebruik altijd een frontend voor iptables. Op mijn werk gebruik ik daarvoor Uruk en prive gebruik altijd Shorewall. Ik ben het stadium van zelf aanklooien voorbij :p
Shorewall :)

'Maar het heeft altijd zo gewerkt . . . . . . '


Acties:
  • 0 Henk 'm!

  • ItsValium
  • Registratie: Juni 2009
  • Laatst online: 29-08 23:17
Ik gebruik tegenwoordig privé een pfsense vm op mijn server die alle routering en firewall, etc ... voor zijn rekening neemt, alles inkomend standaard dicht en uitgaande verbindingen standaard open. Voor elk van de services die ik draai maak in een rule aan. Werkt perfect en na testen en proberen is dit pretty secure.

Proffesioneel maak ik gebruik van Cisco en ander overpriced spul.

Acties:
  • 0 Henk 'm!

  • pennywiser
  • Registratie: November 2002
  • Laatst online: 12:11
Ik gebruik de spi firewall die mijn Zyxel adsl router zit. Werkt goed, ook onder load, met veel connecties. Verder gebruik ik op mijn linux bak iptables met fail2ban met als shell shorewall.

Acties:
  • 0 Henk 'm!

  • CyBeR
  • Registratie: September 2001
  • Niet online

CyBeR

💩

Verwijderd schreef op zondag 14 maart 2010 @ 13:47:
code:
1
2
3
4
5
6
7
8
# Inkomende verbindingen
$IPTABLES -A INPUT -p tcp --dport ssh -j ACCEPT
$IPTABLES -A INPUT -p icmp  -j ACCEPT
# Uitgaande verbindingen
$IPTABLES -A INPUT -p tcp --sport http -j ACCEPT
$IPTABLES -A INPUT -p udp --sport domain -j ACCEPT
# Drop de rest
$IPTABLES -A INPUT -j DROP
Wat je hier doet is onveilig. Ik kan nu bij elke poort op jouw server komen als ik maar zorg dat mijn kant van de verbinding tcp/80 of udp/53 is.

All my posts are provided as-is. They come with NO WARRANTY at all.


Acties:
  • 0 Henk 'm!

  • Rainmaker
  • Registratie: Augustus 2000
  • Laatst online: 14-07-2024

Rainmaker

RHCDS

Shorewall +1.

Eventueel (op een wat ouder servertje bij mijn ouders) met de Webmin module. Dus frontend op frontend :p

We are pentium of borg. Division is futile. You will be approximated.


Acties:
  • 0 Henk 'm!

Verwijderd

Persoonlijk: Shorewall

Op het werk: iptables of ipfw, gewoon rauw. Over hardware firewalls ga ik niet, dat doen mijn collega's.

Acties:
  • 0 Henk 'm!

  • _eXistenZ_
  • Registratie: Februari 2004
  • Laatst online: 02:11
Privé:
Ik heb gewoon een file /root/iptables.rules waarin ik wat aanpas, waarna ik iptables-load /root/iptables.rules tik.
Er staan ook nog een stapel rules in door fail2ban maar die restart ik altijd nadat iptabels zelf gerestart is zodat deze niet na een restart van iptables weg zijn.

Professioneel:
Ik heb geen baan :+

There is no replacement for displacement!


Acties:
  • 0 Henk 'm!

  • Osiris
  • Registratie: Januari 2000
  • Niet online
Ik draai Gentoo op m'n server en klop gewoon alle rules handmatig in de shell in. Een tweetal Gentoo init-scripts zorgen vervolgens bij het starten en stoppen van ip(6)tables voor het restoren respectievelijk saven van de rules in een of ander bestandje :P

Verder heb ik in het verleden ook wel gezocht naar een webadmin-ding voor ip(6)tables, maar als je 't eenmaal een beetje begrijpt en de `man iptables` achter de hand houdt, is dat helemaal niet nodig IMO. :)

Verder zit ik hier achter NAT, dus da's voor de inkomende verbindingen sowieso redelijk veilig, m.u.v. IPv6, wat dwars door die NAT heenprikt. (Logisch :P)

Daarom hebben alle chains van ip6tables wel een policy of rule die DROP aan 't einde zegt. :) Verder gewoon wat rules met wat accept en in het IPv4-geval nog een paar loshangende chains waarheen gejumped wordt voor het overzicht. No biggy voor mijn situatie verder. :)

Ik snap het nut van een extra GUI-achtige shell ook niet echt meer nowadays: ik snap het (CLI iptables), het is duidelijk, wat wil je nog meer?

[ Voor 6% gewijzigd door Osiris op 15-03-2010 02:46 ]


Acties:
  • 0 Henk 'm!

  • Wolfboy
  • Registratie: Januari 2001
  • Niet online

Wolfboy

ubi dubium ibi libertas

Gewoon een shell script met alle ipfw/iptables regels erin en gaan :)

Valt ook prima in te scripten waar nodig en is prima te beheren. Geeft imho ook een veel makkelijker overzicht dan een webinterface (of iig.. de meesten die ik gezien heb dan).

Blog [Stackoverflow] [LinkedIn]


Acties:
  • 0 Henk 'm!

  • igmar
  • Registratie: April 2000
  • Laatst online: 03-09 22:58

igmar

ISO20022

Ik gebruik een self-made script in combinatie met ebtables. De firewall is een bridge ivm routing issues, en alle frontents ed gaan uit van een NAT firewall.

Acties:
  • 0 Henk 'm!

  • Kalentum
  • Registratie: Juni 2004
  • Laatst online: 12:11
Ik gebruik FireHOL om filter regels te maken. Onderstaande laat niets door van buiten behalve ssh,smtp,http en laat alles door van binnen naar buiten:

code:
1
2
3
4
5
interface any world
        server ssh accept
        server smtp accept
        server http accept
        client all accept


Verder geen spannende setup ofzo.

Acties:
  • 0 Henk 'm!

Verwijderd

Hier maakt ik enkel gebruik van ufw. Met als eerste regel : ufw deny all. En dan gewoon alle poorten openen op de adressen waar dat het nodig is.

Acties:
  • 0 Henk 'm!

  • _JGC_
  • Registratie: Juli 2000
  • Nu online
Ik heb nu nog een firewall die alles los doet:
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
IPTABLES=/sbin/iptables
EXT=vlan2

#Empty tables
$IPTABLES -F
$IPTABLES -t nat -F
$IPTABLES -t mangle -F

#NAT
$IPTABLES -t nat -A POSTROUTING -o $EXT -j MASQUERADE
echo 1 > /proc/sys/net/ipv4/ip_forward

$IPTABLES -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
$IPTABLES -A INPUT -m state --state NEW -i ! $EXT -j ACCEPT
$IPTABLES -P INPUT DROP
$IPTABLES -A FORWARD -i $EXT -o $EXT -j REJECT
$IPTABLES -A FORWARD -s 192.168.1.11 -o eth0 -j ACCEPT 
$IPTABLES -A FORWARD -i vlan4 -o eth0 -j REJECT
$IPTABLES -A FORWARD -i vlan4 -o vlan3 -j REJECT
$IPTABLES -A FORWARD -i vlan4 -o vlan5 -j REJECT
$IPTABLES -A FORWARD -i vlan5 -o eth0 -j REJECT
$IPTABLES -A FORWARD -i vlan5 -o vlan3 -j REJECT
$IPTABLES -A FORWARD -i vlan5 -o vlan4 -j REJECT

#SSH
$IPTABLES -A INPUT -i $EXT -p tcp --destination-port 22 -j ACCEPT

#ICMP
$IPTABLES -A INPUT -i $EXT -p ICMP -j ACCEPT

De FORWARD rules zijn geweldig, puur gepruts, maar het werkt. Dat moet anders kunnen.

Ik wil me binnenkort nog eens wat meer gaan verdiepen in iptables en dan met tables gaan werken. Bovenstaand is gewoon een opsomming van "oh ja, dit moet ook nog", en zo bouw je dan een script. Ik heb jaren pf gebruikt als firewall, simpelweg omdat er niks beters is, maar soms wil je ook wel eens wat extra software draaien op je thuisrouter, en dan is *BSD niet altijd de beste keus.

Acties:
  • 0 Henk 'm!

  • Wolfboy
  • Registratie: Januari 2001
  • Niet online

Wolfboy

ubi dubium ibi libertas

_JGC_ schreef op maandag 15 maart 2010 @ 23:57:
De FORWARD rules zijn geweldig, puur gepruts, maar het werkt. Dat moet anders kunnen.
Ik zou de regels daar in ieder geval omdraaien. De policy standaard op REJECT (of het laatste regeltje op REJECT voor de veiligheid).

Specifiek alles blokken waarvan je denkt dat het niet veilig is zal in ieder geval nooit mijn uitgangspositie zijn. Met firewalls moet je whitelisten wat wel mag, en verder alles blocken imho ;)

Blog [Stackoverflow] [LinkedIn]


Acties:
  • 0 Henk 'm!

  • _JGC_
  • Registratie: Juli 2000
  • Nu online
Klopt, ik moet er nog steeds mee aan de slag. Sommige vlans wil ik nml niet onbeperkt natten naar internet, maar alleen poortje 80 en 21, de rest moet dicht blijven. Ik vind die input drop policy ook niet je van het, ik reject liever, droppen is niet de juiste manier om te firewallen, aangezien packets gewoon verdwijnen in een zwart gat en de verzender nog enkele malen probeert hetzelfde te versturen. Voorbeelden hiervan zijn IRC servers die proberen poort 113 te bereiken voor ident, dat duurt tijden als je dropt.

Overigens best vage configuratie dit:
eth0: netwerkkaart, vlan1 untagged
vlan2: VLAN waar modem en router op zitten
vlan3: VLAN voor thuisnetwerk
vlan4: VLAN voor buren
vlan5: VLAN voor gastgebruik

Buren zitten hier op mijn wireless voor die 2x per maand dat ze even internetten, vlan5 is voor wireless met simpele wpa key en voor PCs die ik hier in mijn netwerk hang om te installeren of repareren.
Pagina: 1