Brannmur
Innhold
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
</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...