Changes between Initial Version and Version 1 of SynFirewall


Ignore:
Timestamp:
08/08/08 00:10:41 (16 years ago)
Author:
trac
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • SynFirewall

    v1 v1  
     1= Syn-3 firewall =
     2
     3Dit document gaat uit van voorkennis over netfilter/iptables.
     4
     5De firewall-code bevind zich in de SCC: source:trunk/npl/syn3/webint/src/firewall . (moeten we dit nog omzetten naar een bashscript zodat het open is?)
     6
     7De firewall zorgt voor firewalling NAAR de box zelf en voor forwarding DOOR de machine. Deze 2 verschillen moeten we nog opsplitsen bij de weergave in de SCC zodat dit duidelijker word voor de eindgebruiker. (zie ook #63)
     8
     9Bepaalde chains zijn vast (niet instelbaar/veranderbaar) en andere chains zijn dynamisch. (hier komen de instellingen van de user in).
     10
     11= Custom regels =
     12
     13De gebruiker kan speciale regels toevoegen in '''/etc/firewall/firewall.up'''.  Dit is een bashscript wat aangeroepen word nadat de firewall 'gestart' is. Hierin kun je dus nog meer iptables commandos aanroepen. Er word ook gecontroleerd op exit codes.
     14
     15Er staan wat voorbeelden in het script. (vergeet de x-bit niet!)
     16
     17= Algemene chains =
     18
     19Deze worden gebruik voor zowel forwarding als input.
     20
     21== Service groep chains ==
     22
     23Voor iedere service-groep die de gebruiker aanmaakt word een apparte DROP en ACCEPT chain gemaakt. Deze chains worden weer aangeroepen vanuit andere chains om bepaalde servicegroepen in 1x te Accepten of Droppen. De servicegroep file ziet er ongeveer zo uit:
     24{{{
     25[Syn-3] root@darkstar.example.net ~# cat /etc/firewall/services
     26,,
     27/tcp,,(Al het TCP verkeer)
     28/udp,,(Al het UDP verkeer)
     29389/tcp,,LDAP database
     303128/tcp,,Proxy-server
     3125/tcp,Email verkeer,Mail bezorgen via SMTP
     32143/tcp,Email verkeer,Mail ophalen via IMAP
     33110/tcp,Email verkeer,Mail ophalen via POP3
     34993/tcp,Email verkeer,Mail ophalen via Secure IMAP (ssl)
     35...ingekort...
     36/gre,Windows VPN verkeer,Generic routing encapsulation
     371723/tcp,Windows VPN verkeer,PPTP control
     38}}}
     39
     40De ''Email verkeer'' service groep ziet er dan als volgt uit in iptables -L -v:
     41{{{
     42Chain AEmail_verkeer (1 references)
     43 pkts bytes target     prot opt in     out     source               destination
     44    0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           tcp dpt:25
     45    0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           tcp dpt:143
     46    0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           tcp dpt:110
     47    0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           tcp dpt:993
     48
     49Chain DEmail_verkeer (0 references)
     50 pkts bytes target     prot opt in     out     source               destination
     51    0     0 DROP       tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           tcp dpt:25
     52    0     0 DROP       tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           tcp dpt:143
     53    0     0 DROP       tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           tcp dpt:110
     54    0     0 DROP       tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           tcp dpt:993
     55}}}
     56
     57De regels in deze chains matchen dus alleen op protocol en poort en hebben de naam van de servicegroep met een A (accept) of D (drop) ervoor. De chains worden aangeroepen door andere chains die al op andere dingen gefiltert hebben. Sommige van deze chains kunnen dus ook ongebruikt zijn.
     58
     59== Common chain ==
     60
     61De common chain bevat algemene dingen die altijd van toepassing zijn. Dit is het droppen van packets met state INVALID en het doorlaten van RELATED en ESTABLISHED pakketjes. (gewoon droge statefull firewalling)
     62
     63Deze chain zorgt dus dat paketjes die bij reeds bestaande connecties horen er door kunnen.
     64
     65{{{
     66Chain common (2 references)
     67 pkts bytes target     prot opt in     out     source               destination
     68    8  1408 DROP       all  --  *      *       0.0.0.0/0            0.0.0.0/0           state INVALID
     69 1550  802K ACCEPT     all  --  *      *       0.0.0.0/0            0.0.0.0/0           state RELATED,ESTABLISHED
     70}}}
     71
     72= Firewalling '''van/naar''' de box =
     73
     74== Input chain ==
     75
     76In deze '''vaste''' chain worden de pakketjes die naar de box zelf gaan gefirewalled. Deze chain heeft de volgende vaste regels:
     77
     78{{{
     79Chain INPUT (policy DROP 0 packets, 0 bytes)
     80 pkts bytes target     prot opt in     out     source               destination
     81  174 13561 ACCEPT     all  --  lo     *       0.0.0.0/0            0.0.0.0/0
     82    0     0 admins     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           tcp dpt:10000
     83   61  4076 admins     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           tcp dpt:22
     84   93  7168 input_deny  all  --  *      *       0.0.0.0/0            0.0.0.0/0
     85   93  7168 common     all  --  *      *       0.0.0.0/0            0.0.0.0/0
     86   20  2238 input_allow  all  --  *      *       0.0.0.0/0            0.0.0.0/0           state NEW
     87}}}
     88
     89 * Vanaf interface '''lo''' mag alles.
     90 * Verkeer naar poort 10000 en 22 gaat via de '''admins''' chain. Hierin staan de administrator IP's die dus nooit uitgefirewalled kunnen worden.
     91 * Het overgebleven verkeer gaat respectievelijk door de '''input_deny''', '''common''' en '''intput_allow''' chains.
     92
     93=== Admins chain ===
     94
     95Dit is een simpelle lijst met geaccepteerde ip adressen uit '''/etc/firewall/admins''':
     96{{{
     97Chain admins (2 references)
     98 pkts bytes target     prot opt in     out     source               destination
     99    0     0 ACCEPT     all  --  *      *       192.168.0.96         0.0.0.0/0
     100    0     0 ACCEPT     all  --  *      *       195.169.61.233       0.0.0.0/0
     101    0     0 ACCEPT     all  --  *      *       195.169.61.234       0.0.0.0/0
     102    0     0 ACCEPT     all  --  *      *       212.203.31.1         0.0.0.0/0
     103}}}
     104
     105
     106=== input_deny en input_allow ===
     107
     108Dit zijn de chains waar de hoofd-beslissing gemaakt word om verkeer toe te laten of te blokkeren dat '''naar''' de firewall box zelf gaat. Deze ziet er ongeveer zo uit:
     109{{{
     110Chain input_allow (1 references)
     111 pkts bytes target     prot opt in     out     source               destination
     112  191 25152 ACCEPT     all  --  *      *       0.0.0.0/0            0.0.0.0/0
     113    0     0 AEmail_verkeer  all  --  eth0   *       0.0.0.0/0            0.0.0.0/0
     114    0     0 ACCEPT     tcp  --  eth0   *       0.0.0.0/0            0.0.0.0/0           tcp dpt:21
     115    0     0 AInternet_verkeer  all  --  eth0   *       0.0.0.0/0            0.0.0.0/0
     116    0     0 AIPSEC_verkeer  all  --  eth1   *       0.0.0.0/0            0.0.0.0/0
     117    0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           tcp dpt:25
     118    0     0 ANetwerk   all  --  eth0   *       0.0.0.0/0            0.0.0.0/0
     119    0     0 ACCEPT     tcp  --  eth0   *       0.0.0.0/0            0.0.0.0/0           tcp dpt:3128
     120    0     0 ASysteem_beheer  all  --  eth0   *       0.0.0.0/0            0.0.0.0/0
     121    0     0 AVOIP      all  --  eth0   *       0.0.0.0/0            0.0.0.0/0
     122    0     0 ACCEPT     tcp  --  eth0   *       0.0.0.0/0            0.0.0.0/0           tcp dpt:80
     123    0     0 AWindows_networking  all  --  eth0   *       0.0.0.0/0            0.0.0.0/0
     124
     125Chain input_deny (1 references)
     126 pkts bytes target     prot opt in     out     source               destination
     127    0     0 DROP       tcp  --  eth1   *       0.0.0.0/0            0.0.0.0/0           tcp dpt:5050
     128}}}
     129
     130Hier kan het volgende allemaal gebeuren:
     131 * Matchen op source adress.
     132 * Matchen op input interface.
     133 * Matchen op 1 specifieke destination protocollen/poorten.
     134 * Naar een A... of D... chain springen om daar verder te matchen op alle protocollen/poorten van een bepaalde serivce groep.
     135 * input_allow bevat alleen de regels die iets toegestaan.
     136 * input_deny bevat alleen de regels die iets blokkeren.
     137
     138'''Edwin: Voor vserver-firewalling moet hier nog op destination adres gematched kunnen worden! Zie #63.'''
     139
     140
     141== Output chain ==
     142
     143De output chain is op dit moment leeg en heeft een ACCEPT policy. Alles naar buiten toe mag dus.
     144
     145= Forwarding '''door''' de box =
     146
     147== Forward chain ==
     148
     149Pakketjes die door de machine gerouteert moeten gaan allemaal door deze '''vaste''' chain. Deze ziet er zo uit:
     150{{{
     151Chain FORWARD (policy DROP 0 packets, 0 bytes)
     152 pkts bytes target     prot opt in     out     source               destination
     153    0     0 common     all  --  *      *       0.0.0.0/0            0.0.0.0/0
     154    0     0 forward_pat  all  --  *      *       0.0.0.0/0            0.0.0.0/0           state NEW
     155    0     0 forward_deny  all  --  *      *       0.0.0.0/0            0.0.0.0/0
     156    0     0 forward_allow  all  --  *      *       0.0.0.0/0            0.0.0.0/0           state NEW
     157}}}
     158
     159 * Alle pakketjes gaan door de bekende common chain word eerst aangeroepen om bestaande connecties in stand te houden.
     160 * Nieuwe connecties gaan door de forward_pat chain.
     161 * Alle pakketjes gaan door de forward_deny chain.
     162 * Nieuwe connecties gaan door de forward_allow chain.
     163
     164=== forward_deny en forward_allow ===
     165
     166Hier word de hoofd-beslissing gemaakt voor pakketjes '''door''' de box.
     167
     168{{{
     169Chain forward_allow (1 references)
     170 pkts bytes target     prot opt in     out     source               destination
     171    0     0 ACCEPT     all  --  ipsec0 eth0    0.0.0.0/0            0.0.0.0/0
     172    0     0 ACCEPT     all  --  eth0   *       0.0.0.0/0            0.0.0.0/0
     173    0     0 AInternet_verkeer  all  --  eth0   eth1    0.0.0.0/0            0.0.0.0/0
     174
     175Chain forward_deny (1 references)
     176 pkts bytes target     prot opt in     out     source               destination
     177}}}
     178
     179Hier kan het volgende allemaal gebeuren:
     180 * Matchen op source adress.
     181 * Matchen op destination adress.
     182 * Matchen op input interface.
     183 * Matchen op output interface.
     184 * Matchen op 1 specifieke destination protocollen/poorten.
     185 * Naar een A... of D... chain springen om daar verder te matchen op alle protocollen/poorten van een bepaalde serivce groep.
     186 * forward_allow bevat alleen de regels die iets toegestaan.
     187 * forward_deny bevat alleen de regels die iets blokkeren.
     188
     189=== forward_pat ===
     190
     191Hier word de hoofd-beslissing gemaakt voor port-forwards '''door''' de box.
     192
     193Deze chain werkt samen met de nat-table om port forwards te kunnen maken. In de nat-table bepalen we waar naartoe ge-portforward word:
     194{{{
     195[Syn-3] root@kantoor.datux.nl ~# iptables -t nat -L -v -n
     196Chain PREROUTING (policy ACCEPT 2151M packets, 181G bytes)
     197 pkts bytes target     prot opt in     out     source               destination
     198    0     0 DNAT       tcp  --  *      *       1.2.3.4              192.168.101.250     tcp dpt:21 to:192.168.0.176:21
     199}}}
     200
     201En in de forward_pat chain (in de filter-table) vinden we de bijbehorende firewalling:
     202{{{
     203Chain forward_pat (1 references)
     204 pkts bytes target     prot opt in     out     source               destination
     205    0     0 ACCEPT     tcp  --  *      *       1.2.3.4              192.168.0.176       tcp dpt:21
     206}}}
     207Merk opdat de destination het ge-natte adres bevat en niet de oorspronkelijke destination-adres.
     208
     209Een port-forward kan op dit moment alleen per protocol/port en niet voor hele service groepen.