Malmö 08.03.2012
FreeBSD är ett fritt Unixliknande operativsystem som har utvecklats från AT&T UNIX via Berkeley Software Distribution (BSD), genom 386BSD och 4.4BSD. Systemet används i många stora internetservrar, som bas för inbyggda, specialoperativsystem i till exempel routrar, på workstations och desktops.
FreeBSD fängelse mekanismen är en implementering av operativsystem-nivå virtualisering som tillåter administratörer att partitionera en FreeBSD -baserad dator systemet i flera oberoende mini-system som kallas "jails".
FreeBSD fängelser syftar främst till tre mål:
Med fängelse är det möjligt att skapa olika virtuella maskiner, var och en av dem har sin egen uppsättning av installerade verktyg och sin egen konfiguration. Detta gör det ett säkert sätt att prova och använda programvara. Till exempel är det möjligt att köra olika versioner eller prova olika konfigurationer av en webbserver i olika "jails". Och eftersom fängelset är begränsad till en begränsad räckvidd, inga effekterna av en felaktig konfiguration eller misstag (även om det görs genom att i-fängelset superanvändare) påverkar inte resten av systemet.
Bassystem användare ser jail som en katalogen i file system tree som innehåller eget system tree, och har tillgång till det; medan jailsystem användare ser bara jail's system tree och kan inte gå utanför det. Det gör säkrare att använda filservrar - ftp, http, användares konton etc.
Test av FreeBSD operativsystemet. Den uppgift som har jag framför mig är:
Jag ska försöka dokumentera sina åtgärder så att jag kunde upprepa dem snabbt utan att göra misstag. Detta kommer att vara i den dokumentation som du håller dig själv som en fusklapp.
Jag inte har en tomt CD att bränna in en ny version, använder jag en gammal CD-skiva med version 7,4, installerar grundsystemet för att undvika uppdateringar, konfigurerar jag bara att det ska fungera som en SSH-server. Jag utför uppdateringen:
freebsd-update upgrade-r 8,2-RELEASE freebsd-update install
efter omstart kör jag install kommando på nytt. Nästa steg som:
freebsd-update upgrade-r 9,0-RELEASE
Bassystem har inga portar, installerar jag flera program från sysinstall, men det är ett misstag. För när jag redan har portar - de inkluderar nyare versioner av programmer- vid uppdatering programmen installerade binärt är kompilerad igen. Så det tar mycket tid.
Så nedladdning ports, uppdateringar och installation av portupgrade.
portsnap fetch extract update
Portsnap redan finns i systemet, så behövs inte att installera det. När har jag portupgrade installerad - uppdaterar jag databasen
/usr/local/sbin/pkgdb-F /usr/local/sbin/portsdb-UU
Då ppdaterar jag programvara:/usr/local/sbin/portupgrade -a
* * *
Att göra:
- överväga att använda ett skript och cron för att automatisera uppdateringar.
Från den stunden fjärrstyrar systemet via ssh. Ändrar min editor på Tea, eftersom wordgrinder har problem med att infoga polska eller svenska bokstäver. Jag installerar mina favorita textbaserade applikationer: filmanager - mc, mail klient - alpine, och webbläsare - w3m; också försöka att avinstallera programmer:make install clean make deinstallAndra sätt att installera binära paketen:pkg_add -r
Installation och konfigurering fängelse är ett svårt och komplicerat, det kräver mycket tid och skicklighet. Så väljer jag att använda färdiga och rekommenderade shell skripte som är tillgängliga från ports under namnet ezjail . Kompilerar inte från källor för den jail på grund av en lång tid.
Formeln för att kompilera från källan:# setenv D /here/is/the/jail # mkdir -p $D # cd /usr/src # make buildworld # make installworld DESTDIR=$D # make distribution DESTDIR=$D # mount -t devfs devfs $D/dev
Men jag installerar bara ezjail via ports och redigerar filen /usr/local/etc/ezjail.conf och ladda ner källan (även om jag är övertygad om det behövs). Källor till laddning är här:
ftp://ftp.freebsd.org/pub/FreeBSD/releases/i386/9.0-RELEASE/src.txz
Grundläggande inställningar i /usr/local/etc/ezjail.confezjail_jaildir=/usr/jails ezjail_jailtemplate=${ezjail_jaildir}/newjail ezjail_jailbase=${ezjail_jaildir}/basejail ezjail_sourcetree=/usr/src ezjail_portscvsroot=freebsdanoncvs@anoncvs.FreeBSD.org:/home/ncvs ezjail_ftphost=ftp2.freebsd.org ezjail_default_execute="/usr/bin/login -f root" ezjail_archivedir="${ezjail_jaildir}/ezjail_archives" ezjail_uglyperlhack="YES"Lägg två rad till /etc/rc.confezjail_enable="YES" ifconfig_xl0_alias0="inet 192.168.2.xxx netmask 255.255.255.0"
Jag skapar ett alias för ett nätverksgränssnitt som ska användas av sytem i fängelse:ifconfig xl0 alias 192.168.2.150 netmask 255.255.255.0Sedan i den ordning:/usr/local/bin/ezjail-admin install /usr/local/bin/ezjail-admin create -r /usr/jails/first first 192.168.2.150Klar. Ezjail kör kommandon start, restart, stop
För att göra portarna tillgångliga för fängelset behöver man montera dem där. Portar monteras i /usr/jails/first/basejail/user/ports. Montera:mount_nullfs -o ro /usr/ports/ /usr/jails/first/basejail/usr/ports/Gå i fängelsejexec 1 csh(numret kommer efter kommandot jls varje gång, eftersom den kan ändra sig efter jail restart) och skapa kataloger i fängelse:mkdir -p /var/ports/distfiles mkdir /var/ports/packagesSkapar filen /etc/resolv.conf, eller kopiera från grundsystemet. Jag tar OpenDNSnamnserver 208.67.222.222 nameserver 208.67.220.220de är två till: 208.67.222.220 och 208.67.220.222 eller från Google: 8.8.8.8 och 8.8.4.4.
Sedan installera och konfigurera SSH, yaws, mc i fängelsen.
Varje gång när startar jag om bassystemet, måste starta servrarna (inte alla) i jail och - vid installation via ports i jail - montera portar till fängelset.mount_nullfs -o ro /usr/ports/ /usr/jails/first/basejail/usr/ports/
Jag installerade Debian GNU/kFreeBSD i fängelse enligt den här guiden:
http://blog.vx.sk/archives/22-Updated-Tutorial-Debian-GNUkFreeBSD-in-a-FreeBSD-jail.htmlAllt ser bra ut. När har jag installerat och konfigurerat lokales och console-setup så fungerar i wordgrinder nationälla bokstäver, medan i FreeBSD - fortfarande inte. Det finns ett problem med UTF-8 på BSD konsolen.
Tester med X misslyckats. X forwardning fungerar bara med bassystemet, på FreeBSD systemet i jail finns det autentisering fel och brist på display, dock variabeln $DISPLAY visar 10.0, och trots att .Xauthority finns i hemkatalogen. Debian är totalt katastrof - går inte att skapa cookies och $DISPLAY visar ingenting. Jag får info om skapade .Xauthority men inget skapades :( .
Även om BSD ger ett visst hoppet för framgång - jag ge upp ytterligare försök.
Jag började att syssla med brandväggen och jag förlorade kommunikationen med servern :/ .
Ipfw testas först. Det är en nativ brandvägg i FreeBSD. Totalt finns det tre brandväggar:
Jag kommer att lösa problemet med ipfw, och sedan utföra tester med ipw, som rekommenderas av författaren till handboken FreeBSD jag använder. Han nämner fördelen av enklare NAT konfiguration. Systemet innehåller avancerade nätverksverktyg, NAT, traffic shaping, stateful packet filtrering, IPv6, forward, bridge, ipstealth etc. - jag kommer inte att behandla alla möjligheter av firewall, eftersom det skulle kräva mer tid.
Problemet med ipfw inte löses - alla
moduler är OK, finns dem i systemet som standard, och fungerar på rätt
sätt. Problemet är att firewall ignorerar mina ipfw regler i en fil,
efter start reglerna so fungerar är helt annorlunda än dem mina. Path är
korrekt, templete filen kommer från FreeBSD manualsidor, hittar jag
inget fel på det. Kommer inte slösa min tid och går vidare till ipf.
(Jag använder FreeBSD handboken http://www.freebsd.org/doc/en_US.ISO8859-1/books/handbook/firewalls-ipf.html)
ipfilter_enable="YES" ipfilter_rules="/etc/ipf.rules" ipmon_enable="YES" ipmon_flags="-Ds"
Här finns inga problem, syntaxen är enkelt. Servern på LAN och bakom routern med port forwarding kräver inte sådant skydd. Men jag vill öva settings för server i DMZ.
Reglerna för min brandvägg:
Tillåter trafik loopback:
pass in quick on lo0 all pass out quick on lo0 all1. för utgående
pass out quick on xl0 proto tcp from any to 208.67.222.222 port = 53 flags S keep state pass out quick on xl0 proto udp from any to 208.67.222.222 port = 53 keep stateTillåter trafik till DHCP-servern:
pass out quick on xl0 proto udp from any to 192.168.2.1 port = 67 keep stateDessa regler bör inte fastställas för servern, men jag kommer också använda den som en fjärrarbetsstation - Jag vill använda e-post och www:
pass out quick on xl0 proto tcp from any to any port = 80 flags S keep state pass out quick on xl0 proto tcp from any to any port = 443 flags S keep state pass out quick on xl0 proto tcp from any to any port = 995 flags S keep state pass out quick on xl0 proto tcp from any to any port = 25 flags S keep state pass out quick on xl0 proto tcp from any to any port = 587 flags S keep stateJag avslutar med en blockerande regel:
block out log first quick on xl0 all2. För inkommande trafik.
block in quick on xl0 from 172.16.0.0/12 to any #RFC 1918 private IP block in quick on xl0 from 10.0.0.0/8 to any #RFC 1918 private IP block in quick on xl0 from 127.0.0.0/8 to any #loopback block in quick on xl0 from 0.0.0.0/8 to any #loopback block in quick on xl0 from 169.254.0.0/16 to any #DHCP auto-config block in quick on xl0 from 192.0.2.0/24 to any #reserved for docs block in quick on xl0 from 204.152.64.0/23 to any #Sun cluster interconnect block in quick on xl0 from 224.0.0.0/3 to any #Class D & E multicastRekommenderad blockering av skadliga eller potentiellt skadliga paketen, t.ex. echo request:
block in quick on xl0 all with frags block in quick on xl0 proto tcp all with short block in quick on xl0 all with opt lsrr block in quick on xl0 all with opt ssrr block in log first quick on xl0 proto tcp from any to any flags FUP block in quick on xl0 all with ipopts block in quick on xl0 proto icmp all icmp-type 8 block in quick on xl0 proto tcp from any to any port = 113Blockera NetBIOS tjänster - att ignorera om du delar filer genom en Windows fildelning (det finns där också en port 81, men jag använder HTTP-servern på den här porten):
block in log first quick on xl0 proto tcp/udp from any to any port = 137 block in log first quick on xl0 proto tcp/udp from any to any port = 138 block in log first quick on xl0 proto tcp/udp from any to any port = 139Dags för tillåtet inkommande trafik.
pass in quick on xl0 proto udp from 192.168.2.1 to any port = 68 keep stateTillåter trafik till min webbserver i det första jail:
pass in quick on xl0 proto tcp from any to 192.168.2.150 port = 81 flags S keep stateTillåter trafik till min ssh server. Bassystemet kan endast nås från en dator på mitt nätverk LAN - z 192.168.2.100:
pass in quick on xl0 proto tcp from 192.168.2.100 to 192.168.2.113 port = 22 flags S keep state pass in quick on xl0 proto tcp from any to 192.168.2.150 port = 32241 flags S keep state pass in quick on xl0 proto tcp from any to 192.168.2.152 port = 33241 flags S keep stateJag avslutar med en blockerande regel:
block in log first quick on xl0 all
I ipf den sista regeln är avgörande - om det finns inte tidigare option quick. Flaggor S gäller tcp protokollet - tillåter paket som initierar sessionen (SYN), och option keep state tillåter att fortsätta denna session som redan blev skapades.
Uppdatering regler:ipf -Fa -f /etc/ipf.rules
Debian i den konfiguration kan hämta och installera paket, eftersom paket manager använder http protokollet. Den utgående port 80 bör vara blockerad på server konfiguration så kommer det att förhindra nedladdningen paketen. FreeBSD använder FTP protokollet för ports och binära paketen. För att kunna använda ftp - samt ladda ner och installera paketen - måste jag addera följande rader:
pass out quick on xl0 proto tcp from any to any port = 21 flags S keep state pass out quick on xl0 proto tcp from any to any port > 1024 flags S keep state pass in quick on xl0 proto tcp from any to any port = 20 flags S keep stateReglerna som innehåller ftp-regler skriver jag till fil /etc/ipf-ftp.rules och laddar in vid behöv:
ipf -Fa -f /etc/ipf-ftp.rulesPå den sätt man kan skapa fler filer med olika regler och snabt ändra sin firewall med ett kort kommandot.
De uppgifter som jag har satt före mig har redan gjorts. Jag kommer att förbättra fängelset som är installerat så jag kan hålla igång med virtualisering. Jag kommer att fortsätta att använda FreeBSD som bas system, testa det med minsta konfigurationen för en enda demon i jail - ta bort redundanta binär från /bin, för att förhindra att köra redundanta processer, etc.
Källor:
FreeBSD Handbook- http://www.freebsd.org/doc/en_US.ISO8859-1/books/handbook/