Brannmur

Fra Oslo Linux User Group (OLUG)
Hopp til: navigasjon, søk

Hvordan å... Sette opp en brannmur

Av Joachim Mæland, 1. april 2003

Før man får tilstrekkelig kunnskap og erfaring med å sette opp brannmurer med IPTables, vil jeg på det sterkeste anbefale at man tar utgangspunkt i ferdige script, eller script som genereres, basert på brukervalg. Et godt utgangspunkt for det siste finner man <a href="http://www.e3.com.au/firewall/index.php">her</a>.

Krav til brannmur

I vårt eksempel skal vi sette opp en brannmur som beskytter en enkeltsående maskin som også benyttes som arbeidsstasjon. Maskinen skal være mailserver, webserver og det skal være mulig å logge seg inn med ssh.

Ved valgene som er naturlig for en slik brannmur, vil oppsettet av brannmurscriptet skje i 2 trinn, som vist nedenfor:


<form action="" method="post">

Internet Interface: <input type="text" name="INET_IFACE" value="eth0" size="6" tabindex="1" />

Select Type of Internet Address
<input type="radio" name="DYNAMIC_IP" tabindex="2" /> Static Internet IP Address
<input type="radio" name="DYNAMIC_IP" CHECKED="CHECKED" tabindex="4" /> Dynamic Internet IP Address

Single System or Private Network Gateway?
<input type="radio" name="GATEWAY" tabindex="5" value="CHECKED" /> Single System
<input type="radio" name="GATEWAY" CHECKED="CHECKED" tabindex="6" /> Gateway/Firewall

<input type="checkbox" name="INBOUND_ALLOW" CHECKED="CHECKED" tabindex="300" /> Allow Inbound Services

<input type="submit" value="Generate Firewall!" tabindex="750" />

</form> Publisert med tillatelse fra <a href="mailto:scott@morizot.net">Scott Morizot</a>.



<form action="" method="post">

<p>Internet Interface: <input type="text" name="INET_IFACE" value="eth0" size="6" tabindex="1" />

Select Type of Internet Address
<input type="radio" name="DYNAMIC_IP2" tabindex="2" /> Static Internet IP Address
<input type="radio" name="DYNAMIC_IP2" CHECKED="CHECKED" tabindex="4" /> Dynamic Internet IP Address

Single System or Private Network Gateway?
<input type="radio" name="GATEWAY2" CHECKED="CHECKED" tabindex="5" /> Single System
<input type="radio" name="GATEWAY2" tabindex="6" /> Gateway/Firewall

<input type="checkbox" name="INBOUND_ALLOW" CHECKED="CHECKED" tabindex="300" /> Allow Inbound Services

  • <input type="checkbox" name="SSH_IN" CHECKED="CHECKED" tabindex="301" /> SSH
  • <input type="checkbox" name="DNS_IN" value="true" tabindex="302" /> DNS Server
  • <input type="checkbox" name="HTTP_IN" CHECKED="CHECKED" tabindex="303" /> Web Server
  • <input type="checkbox" name="FTP_IN" tabindex="304" /> FTP Server <input type="checkbox" name="PASSIVE_IN" tabindex="305" /> Allow Passive FTP Connections?
  • <input type="checkbox" name="EMAIL_IN" CHECKED="CHECKED" tabindex="308" /> Email Server
  • <input type="checkbox" name="NTP_IN" tabindex="309" /> Time Server (NTP)
  • <input type="checkbox" name="DHCP_IN" tabindex="310" /> DHCP Server (on the Internet interface)
  • <input type="checkbox" name="IM_IN" tabindex="311" /> ICQ File Transfers
<p><input type="submit" value="Generate Firewall!" tabindex="750" />

</form> Publisert med tillatelse fra <a href="mailto:scott@morizot.net">Scott Morizot</a>.


Det resulterende scriptet kan benyttes i RedHat, slik det er beskrevet i selve scriptet. For Debian kan man følge fremgangsmåten lenger ned på denne siden. Ved å benytte dette scriptet ender man opp med en brannmur med følgende porter åpne:

Webserver
Vanlig http på port 80 og https på port 443
Mailserver
SMTP på port 25, POP3 på port 110 og IMAP4 på port 143
Secure shell
Secure shell, ssh på port 22

<p>Dersom man ikke kjører tjenester på alle disse portene kan disse komenteres ut med en "#" i begynnelsen av linja. Scriptet som blir resultatet av valgene ovenfor finnes <a href="hvordan.php?entry=hvordan-000007.inc">her</a>. <p> Dette scriptet lagres lokalt, jeg har valg navnet "brannmur.sh". Dersom du lagrer scriptet direkte på maskinen som settes opp som hjemmeserver, kan du hoppe over neste punkt. <p>

Kopier scriptet til hjemmeserveren

<p> Jeg anbefaler ssh og scp for å kopiere scriptet inn på serveren.

neyachim@poteten:~$ scp brannmur.sh jm@hjemmeserver.net:.      [ENTER]
jm@hjemmeserver.net's password:
brannmur.sh         100% |*** / ***|  4607       00:00
neyachim@poteten:~$

Klargjør serveren, kjør scriptet

<p> Logg inn på serveren:

neyachim@poteten:~$ ssh -l jm hjemmeserver.net      [ENTER]
jm@hjemmeserver.net's password:

<p> Su til root:


jm@gigantis:~$ su root      [ENTER]
Password:

<p> Lage tomt regelsett, (om dette er en nyisntallert boks er det i utgangspunktet tomt, men greit å være sikker)

gigantis:/home/jm# /sbin/iptables  -P INPUT ACCEPT      [ENTER]
gigantis:/home/jm# /sbin/iptables  -P OUTPUT ACCEPT      [ENTER]
gigantis:/home/jm# /sbin/iptables  -P FORWARD  ACCEPT      [ENTER]
gigantis:/home/jm# /sbin/iptables  -F      [ENTER]

Lagre tomt regelsett:

gigantis:/home/jm# /etc/init.d/iptables save inactive      [ENTER]

<p> Gjør scriptet kjørbart:

gigantis:/home/jm# chmod +x iptables.sh      [ENTER]

<p>

Kjør scriptet:

gigantis:/home/jm# ./brannmur.sh      [ENTER]

<p> List opp regelsettet:

gigantis:/home/jm# /sbin/iptables -nL      [ENTER]

<p> Lagre regelsettet:

gigantis:/home/jm# /etc/init.d/iptables save active      [ENTER]

Sørge for at iptables starter opp ved boot

<p> Sjansen er tilstede for at iptables startes opp ved boot, men for å være på den sikre siden, installerer vi et verktøy for å konfigurere tjenester. (Bruk av dette verktøyet er strengt tatt ikke nødvendig, men det kan være greit å ha tilgjengelig)

gigantis:/home/jm# apt-get install rcconf      [ENTER]
gigantis:/home/jm# rcconf      [ENTER]

<p> Dette bringer opp følgende skjermbilde: Fil:Rcconf.png

Her krysser man av for iptables og [Ok]. Bekreftelsen på at en symbolsk link til oppstartsscript lages ser man i form av:

gigantis:/home/jm# rcconf
 Adding system startup for /etc/init.d/iptables ...
   /etc/rc0.d/K20iptables -> ../init.d/iptables
   /etc/rc1.d/K20iptables -> ../init.d/iptables
   /etc/rc6.d/K20iptables -> ../init.d/iptables
   /etc/rc2.d/S20iptables -> ../init.d/iptables
   /etc/rc3.d/S20iptables -> ../init.d/iptables
   /etc/rc4.d/S20iptables -> ../init.d/iptables
   /etc/rc5.d/S20iptables -> ../init.d/iptables

<p> Et alternativ til rcconf er å benytte:


gigantis:/home/jm# dpkg-reconfigure iptables      [ENTER]

og svare "Yes" på om den skal "Enable the iptables init.d script?"

Oppsummering

<p>

Nå skal maskinen være beskyttet. Siden vi lagret det aktive regelsettet, etter at scriptet ble kjørt, vil regelsettet bli benyttet hver gang maskinen rebooter...