Lines 487-499
Link Here
|
487 |
<title>High-Level Administrative Tools in the &os; Ports |
487 |
<title>High-Level Administrative Tools in the &os; Ports |
488 |
Collection</title> |
488 |
Collection</title> |
489 |
|
489 |
|
490 |
<para>Among the many third-party utilities for jail |
490 |
<para>Manually creating and managing jails can quickly become |
491 |
administration, one of the most complete and useful is |
491 |
tedious and error-prone. The ports collection contains some |
492 |
<package>sysutils/ezjail</package>. It is a set of scripts |
492 |
utilities designed to simplify jail management. |
493 |
that contribute to &man.jail.8; management. Please refer to |
493 |
|
494 |
<link xlink:href="&url.books.handbook;/jails-ezjail.html">the |
494 |
Their listing here doesn't imply an recommendation or |
495 |
handbook section on <application>ezjail</application></link> |
495 |
endorsement. Nothing more than a list of the different names |
496 |
for more information.</para> |
496 |
of jail utilities in the ports sysutils category that you may |
|
|
497 |
want to review.</para> |
498 |
|
499 |
<programlisting>bsdploy, cbsd, ezjail, iocage, iocell, jail-primer, jailadmin, qjail, warden</programlisting> |
497 |
</sect2> |
500 |
</sect2> |
498 |
|
501 |
|
499 |
<sect2 xml:id="jails-updating"> |
502 |
<sect2 xml:id="jails-updating"> |
Lines 560-573
Link Here
|
560 |
it provides a simple way to add, remove, and upgrade |
563 |
it provides a simple way to add, remove, and upgrade |
561 |
jails.</para> |
564 |
jails.</para> |
562 |
|
565 |
|
563 |
<note> |
|
|
564 |
<para>Simpler solutions exist, such as |
565 |
<application>ezjail</application>, which provides an easier |
566 |
method of administering &os; jails but is less versatile than |
567 |
this setup. <application>ezjail</application> is covered in |
568 |
more detail in <xref linkend="jails-ezjail"/>.</para> |
569 |
</note> |
570 |
|
571 |
<para>The goals of the setup described in this section are:</para> |
566 |
<para>The goals of the setup described in this section are:</para> |
572 |
|
567 |
|
573 |
<itemizedlist> |
568 |
<itemizedlist> |
Lines 955-1628
Link Here
|
955 |
</sect2> |
950 |
</sect2> |
956 |
</sect1> |
951 |
</sect1> |
957 |
|
952 |
|
958 |
<sect1 xml:id="jails-ezjail"> |
|
|
959 |
<info> |
960 |
<title>Managing Jails with |
961 |
<application>ezjail</application></title> |
962 |
|
963 |
<authorgroup> |
964 |
<author> |
965 |
<personname> |
966 |
<firstname>Warren</firstname> |
967 |
<surname>Block</surname> |
968 |
</personname><contrib>Originally contributed by </contrib> |
969 |
</author> |
970 |
</authorgroup> |
971 |
</info> |
972 |
|
973 |
<para>Creating and managing multiple jails can quickly become |
974 |
tedious and error-prone. Dirk Engling's |
975 |
<application>ezjail</application> automates and greatly |
976 |
simplifies many jail tasks. A <emphasis>basejail</emphasis> is |
977 |
created as a template. Additional jails use |
978 |
&man.mount.nullfs.8; to share many of the basejail directories |
979 |
without using additional disk space. Each additional jail takes |
980 |
only a few megabytes of disk space before applications are |
981 |
installed. Upgrading the copy of the userland in the basejail |
982 |
automatically upgrades all of the other jails.</para> |
983 |
|
984 |
<para>Additional benefits and features are described in detail on |
985 |
the <application>ezjail</application> web site, <link |
986 |
xlink:href="https://erdgeist.org/arts/software/ezjail/"></link>.</para> |
987 |
|
988 |
<sect2 xml:id="jails-ezjail-install"> |
989 |
<title>Installing <application>ezjail</application></title> |
990 |
|
991 |
<para>Installing <application>ezjail</application> consists of |
992 |
adding a loopback interface for use in jails, installing the |
993 |
port or package, and enabling the service.</para> |
994 |
|
995 |
<procedure xml:id="jails-ezjail-install-procedure"> |
996 |
<step> |
997 |
<para>To keep jail loopback traffic off the host's loopback |
998 |
network interface <literal>lo0</literal>, a second |
999 |
loopback interface is created by adding an entry to |
1000 |
<filename>/etc/rc.conf</filename>:</para> |
1001 |
|
1002 |
<programlisting>cloned_interfaces="lo1"</programlisting> |
1003 |
|
1004 |
<para>The second loopback interface <literal>lo1</literal> |
1005 |
will be created when the system starts. It can also be |
1006 |
created manually without a restart:</para> |
1007 |
|
1008 |
<screen>&prompt.root; <userinput>service netif cloneup</userinput> |
1009 |
Created clone interfaces: lo1.</screen> |
1010 |
|
1011 |
<para>Jails can be allowed to use aliases of this secondary |
1012 |
loopback interface without interfering with the |
1013 |
host.</para> |
1014 |
|
1015 |
<para>Inside a jail, access to the loopback address |
1016 |
<systemitem class="ipaddress">127.0.0.1</systemitem> is |
1017 |
redirected to the first <acronym>IP</acronym> address |
1018 |
assigned to the jail. To make the jail loopback |
1019 |
correspond with the new <literal>lo1</literal> interface, |
1020 |
that interface must be specified first in the list of |
1021 |
interfaces and <acronym>IP</acronym> addresses given when |
1022 |
creating a new jail.</para> |
1023 |
|
1024 |
<para>Give each jail a unique loopback address in the |
1025 |
<systemitem |
1026 |
class="ipaddress">127.0.0.0</systemitem><systemitem |
1027 |
class="netmask">/8</systemitem> netblock.</para> |
1028 |
</step> |
1029 |
|
1030 |
<step> |
1031 |
<para>Install |
1032 |
<package role="port">sysutils/ezjail</package>:</para> |
1033 |
|
1034 |
<screen>&prompt.root; <userinput>cd /usr/ports/sysutils/ezjail</userinput> |
1035 |
&prompt.root; <userinput>make install clean</userinput></screen> |
1036 |
</step> |
1037 |
|
1038 |
<step> |
1039 |
<para>Enable <application>ezjail</application> by adding |
1040 |
this line to <filename>/etc/rc.conf</filename>:</para> |
1041 |
|
1042 |
<programlisting>ezjail_enable="YES"</programlisting> |
1043 |
</step> |
1044 |
|
1045 |
<step> |
1046 |
<para>The service will automatically start on system boot. |
1047 |
It can be started immediately for the current |
1048 |
session:</para> |
1049 |
|
1050 |
<screen>&prompt.root; <userinput>service ezjail start</userinput></screen> |
1051 |
</step> |
1052 |
</procedure> |
1053 |
</sect2> |
1054 |
|
1055 |
<sect2 xml:id="jails-ezjail-initialsetup"> |
1056 |
<title>Initial Setup</title> |
1057 |
|
1058 |
<para>With <application>ezjail</application> installed, the |
1059 |
basejail directory structure can be created and populated. |
1060 |
This step is only needed once on the jail host |
1061 |
computer.</para> |
1062 |
|
1063 |
<para>In both of these examples, <option>-p</option> causes the |
1064 |
ports tree to be retrieved with &man.portsnap.8; into the |
1065 |
basejail. That single copy of the ports directory will be |
1066 |
shared by all the jails. Using a separate copy of the ports |
1067 |
directory for jails isolates them from the host. The |
1068 |
<application>ezjail</application> <acronym>FAQ</acronym> |
1069 |
explains in more detail: <link |
1070 |
xlink:href="http://erdgeist.org/arts/software/ezjail/#FAQ"></link>.</para> |
1071 |
|
1072 |
<procedure xml:id="jails-ezjail-initialsetup-procedure"> |
1073 |
<step> |
1074 |
<stepalternatives> |
1075 |
<step> |
1076 |
<title>To Populate the Jail with &os;-RELEASE</title> |
1077 |
|
1078 |
<para>For a basejail based on the &os; RELEASE matching |
1079 |
that of the host computer, use |
1080 |
<command>install</command>. For example, on a host |
1081 |
computer running &os; 10-STABLE, the latest |
1082 |
RELEASE version of &os; -10 will be installed in |
1083 |
the jail):</para> |
1084 |
|
1085 |
<screen>&prompt.root; <userinput>ezjail-admin install -p</userinput></screen> |
1086 |
</step> |
1087 |
|
1088 |
<step> |
1089 |
<title>To Populate the Jail with |
1090 |
<command>installworld</command></title> |
1091 |
|
1092 |
<para>The basejail can be installed from binaries |
1093 |
created by <buildtarget>buildworld</buildtarget> on |
1094 |
the host with |
1095 |
<command>ezjail-admin update</command>.</para> |
1096 |
|
1097 |
<para>In this example, &os; 10-STABLE has been |
1098 |
built from source. The jail directories are created. |
1099 |
Then <buildtarget>installworld</buildtarget> is |
1100 |
executed, installing the host's |
1101 |
<filename>/usr/obj</filename> into the |
1102 |
basejail.</para> |
1103 |
|
1104 |
<screen>&prompt.root; <userinput>ezjail-admin update -i -p</userinput></screen> |
1105 |
|
1106 |
<para>The host's <filename>/usr/src</filename> is used |
1107 |
by default. A different source directory on the host |
1108 |
can be specified with <option>-s</option> and a path, |
1109 |
or set with <varname>ezjail_sourcetree</varname> in |
1110 |
<filename>/usr/local/etc/ezjail.conf</filename>.</para> |
1111 |
</step> |
1112 |
</stepalternatives> |
1113 |
</step> |
1114 |
</procedure> |
1115 |
|
1116 |
<tip> |
1117 |
<para>The basejail's ports tree is shared by other jails. |
1118 |
However, downloaded distfiles are stored in the jail that |
1119 |
downloaded them. By default, these files are stored in |
1120 |
<filename>/var/ports/distfiles</filename> within each |
1121 |
jail. <filename>/var/ports</filename> inside each jail is |
1122 |
also used as a work directory when building ports.</para> |
1123 |
</tip> |
1124 |
|
1125 |
<tip> |
1126 |
<para>The <acronym>FTP</acronym> protocol is used by default |
1127 |
to download packages for the installation of the basejail. |
1128 |
Firewall or proxy configurations can prevent or interfere |
1129 |
with <acronym>FTP</acronym> transfers. The |
1130 |
<acronym>HTTP</acronym> protocol works differently and |
1131 |
avoids these problems. It can be chosen by specifying a |
1132 |
full <acronym>URL</acronym> for a particular download mirror |
1133 |
in <filename>/usr/local/etc/ezjail.conf</filename>:</para> |
1134 |
|
1135 |
<programlisting>ezjail_ftphost=http://<replaceable>ftp.FreeBSD.org</replaceable></programlisting> |
1136 |
|
1137 |
<para>See <xref linkend="mirrors-ftp"/> for a list of |
1138 |
sites.</para> |
1139 |
</tip> |
1140 |
</sect2> |
1141 |
|
1142 |
<sect2 xml:id="jails-ezjail-create"> |
1143 |
<title>Creating and Starting a New Jail</title> |
1144 |
|
1145 |
<para>New jails are created with |
1146 |
<command>ezjail-admin create</command>. In these examples, |
1147 |
the <literal>lo1</literal> loopback interface is used as |
1148 |
described above.</para> |
1149 |
|
1150 |
<procedure xml:id="jails-ezjail-create-steps"> |
1151 |
<title>Create and Start a New Jail</title> |
1152 |
|
1153 |
<step> |
1154 |
<para>Create the jail, specifying a name and the loopback |
1155 |
and network interfaces to use, along with their |
1156 |
<acronym>IP</acronym> addresses. In this example, the |
1157 |
jail is named <literal>dnsjail</literal>.</para> |
1158 |
|
1159 |
<screen>&prompt.root; <userinput>ezjail-admin create <replaceable>dnsjail</replaceable> '<replaceable>lo1|127.0.1.1</replaceable>,<replaceable>em0</replaceable>|<replaceable>192.168.1.50</replaceable>'</userinput></screen> |
1160 |
|
1161 |
<tip xml:id="jails-ezjail-raw-network-sockets"> |
1162 |
<para>Most network services run in jails without |
1163 |
problems. A few network services, most notably |
1164 |
&man.ping.8;, use |
1165 |
<emphasis>raw network sockets</emphasis>. In jails, raw |
1166 |
network sockets are disabled by default for security. |
1167 |
Services that require them will not work.</para> |
1168 |
|
1169 |
<para>Occasionally, a jail genuinely needs raw sockets. |
1170 |
For example, network monitoring applications often use |
1171 |
&man.ping.8; to check the availability of other |
1172 |
computers. When raw network sockets are actually needed |
1173 |
in a jail, they can be enabled by editing the |
1174 |
<application>ezjail</application> |
1175 |
configuration file for the individual jail, |
1176 |
<filename>/usr/local/etc/ezjail/<replaceable>jailname</replaceable></filename>. |
1177 |
Modify the <literal>parameters</literal> |
1178 |
entry:</para> |
1179 |
|
1180 |
<programlisting>export jail_<replaceable>jailname</replaceable>_parameters="allow.raw_sockets=1"</programlisting> |
1181 |
|
1182 |
<para>Do not enable raw network sockets unless services in |
1183 |
the jail actually require them.</para> |
1184 |
</tip> |
1185 |
</step> |
1186 |
|
1187 |
<step> |
1188 |
<para>Start the jail:</para> |
1189 |
|
1190 |
<screen>&prompt.root; <userinput>ezjail-admin start <replaceable>dnsjail</replaceable></userinput></screen> |
1191 |
</step> |
1192 |
|
1193 |
<step> |
1194 |
<para>Use a console on the jail:</para> |
1195 |
|
1196 |
<screen>&prompt.root; <userinput>ezjail-admin console <replaceable>dnsjail</replaceable></userinput></screen> |
1197 |
</step> |
1198 |
</procedure> |
1199 |
|
1200 |
<para>The jail is operating and additional configuration can be |
1201 |
completed. Typical settings added at this point |
1202 |
include:</para> |
1203 |
|
1204 |
<procedure> |
1205 |
<step> |
1206 |
<title>Set the |
1207 |
<systemitem class="username">root</systemitem> |
1208 |
Password</title> |
1209 |
|
1210 |
<para>Connect to the jail and set the |
1211 |
<systemitem class="username">root</systemitem> user's |
1212 |
password:</para> |
1213 |
|
1214 |
<screen>&prompt.root; <userinput>ezjail-admin console <replaceable>dnsjail</replaceable></userinput> |
1215 |
&prompt.root; <userinput>passwd</userinput> |
1216 |
Changing local password for root |
1217 |
New Password: |
1218 |
Retype New Password:</screen> |
1219 |
</step> |
1220 |
|
1221 |
<step> |
1222 |
<title>Time Zone Configuration</title> |
1223 |
|
1224 |
<para>The jail's time zone can be set with &man.tzsetup.8;. |
1225 |
To avoid spurious error messages, the &man.adjkerntz.8; |
1226 |
entry in <filename>/etc/crontab</filename> can be |
1227 |
commented or removed. This job attempts to update the |
1228 |
computer's hardware clock with time zone changes, but |
1229 |
jails are not allowed to access that hardware.</para> |
1230 |
</step> |
1231 |
|
1232 |
<step> |
1233 |
<title><acronym>DNS</acronym> Servers</title> |
1234 |
|
1235 |
<para>Enter domain name server lines in |
1236 |
<filename>/etc/resolv.conf</filename> so |
1237 |
<acronym>DNS</acronym> works in the jail.</para> |
1238 |
</step> |
1239 |
|
1240 |
<step> |
1241 |
<title>Edit <filename>/etc/hosts</filename></title> |
1242 |
|
1243 |
<para>Change the address and add the jail name to the |
1244 |
<literal>localhost</literal> entries in |
1245 |
<filename>/etc/hosts</filename>.</para> |
1246 |
</step> |
1247 |
|
1248 |
<step> |
1249 |
<title>Configure <filename>/etc/rc.conf</filename></title> |
1250 |
|
1251 |
<para>Enter configuration settings in |
1252 |
<filename>/etc/rc.conf</filename>. This is much like |
1253 |
configuring a full computer. The host name and |
1254 |
<acronym>IP</acronym> address are not set here. Those |
1255 |
values are already provided by the jail |
1256 |
configuration.</para> |
1257 |
</step> |
1258 |
</procedure> |
1259 |
|
1260 |
<para>With the jail configured, the applications for which the |
1261 |
jail was created can be installed.</para> |
1262 |
|
1263 |
<tip> |
1264 |
<para>Some ports must be built with special options to be used |
1265 |
in a jail. For example, both of the network monitoring |
1266 |
plugin packages |
1267 |
<package role="port">net-mgmt/nagios-plugins</package> and |
1268 |
<package role="port">net-mgmt/monitoring-plugins</package> |
1269 |
have a <literal>JAIL</literal> option which must be enabled |
1270 |
for them to work correctly inside a jail.</para> |
1271 |
</tip> |
1272 |
</sect2> |
1273 |
|
1274 |
<sect2 xml:id="jails-ezjail-update"> |
1275 |
<title>Updating Jails</title> |
1276 |
|
1277 |
<sect3 xml:id="jails-ezjail-update-os"> |
1278 |
<title>Updating the Operating System</title> |
1279 |
|
1280 |
<para>Because the basejail's copy of the userland is shared by |
1281 |
the other jails, updating the basejail automatically updates |
1282 |
all of the other jails. Either source or binary updates can |
1283 |
be used.</para> |
1284 |
|
1285 |
<para>To build the world from source on the host, then |
1286 |
install it in the basejail, use:</para> |
1287 |
|
1288 |
<screen>&prompt.root; <userinput>ezjail-admin update -b</userinput></screen> |
1289 |
|
1290 |
<para>If the world has already been compiled on the host, |
1291 |
install it in the basejail with:</para> |
1292 |
|
1293 |
<screen>&prompt.root; <userinput>ezjail-admin update -i</userinput></screen> |
1294 |
|
1295 |
<para>Binary updates use &man.freebsd-update.8;. These |
1296 |
updates have the same limitations as if |
1297 |
&man.freebsd-update.8; were being run directly. The most |
1298 |
important one is that only -RELEASE versions of &os; are |
1299 |
available with this method.</para> |
1300 |
|
1301 |
<para>Update the basejail to the latest patched release of |
1302 |
the version of &os; on the host. For example, updating from |
1303 |
RELEASE-p1 to RELEASE-p2.</para> |
1304 |
|
1305 |
<screen>&prompt.root; <userinput>ezjail-admin update -u</userinput></screen> |
1306 |
|
1307 |
<para>To upgrade the basejail to a new version, first |
1308 |
upgrade the host system as described in <xref |
1309 |
linkend="freebsdupdate-upgrade" />. Once the host has |
1310 |
been upgraded and rebooted, the basejail can then be |
1311 |
upgraded. &man.freebsd-update.8; has no way of determining |
1312 |
which version is currently installed in the basejail, so the |
1313 |
original version must be specified. Use &man.file.1; to |
1314 |
determine the original version in the basejail:</para> |
1315 |
|
1316 |
<screen>&prompt.root; <userinput>file /usr/jails/basejail/bin/sh</userinput> |
1317 |
/usr/jails/basejail/bin/sh: ELF 64-bit LSB executable, x86-64, version 1 (FreeBSD), dynamically linked (uses shared libs), for FreeBSD 9.3, stripped</screen> |
1318 |
|
1319 |
<para>Now use this information to perform the upgrade from |
1320 |
<literal>9.3-RELEASE</literal> to the current version of |
1321 |
the host system:</para> |
1322 |
|
1323 |
<screen>&prompt.root; <userinput>ezjail-admin update -U -s <replaceable>9.3-RELEASE</replaceable></userinput></screen> |
1324 |
|
1325 |
<para>After updating the basejail, &man.mergemaster.8; must |
1326 |
be run to update each jail's configuration files.</para> |
1327 |
|
1328 |
<para>How to use &man.mergemaster.8; depends on the purpose |
1329 |
and trustworthiness of a jail. If a jail's services or |
1330 |
users are not trusted, then &man.mergemaster.8; should only |
1331 |
be run from within that jail:</para> |
1332 |
|
1333 |
<example xml:id="jails-ezjail-update-mergemaster-untrusted"> |
1334 |
<title>&man.mergemaster.8; on Untrusted Jail</title> |
1335 |
|
1336 |
<para>Delete the link from the jail's |
1337 |
<filename>/usr/src</filename> into the basejail and |
1338 |
create a new <filename>/usr/src</filename> in the jail |
1339 |
as a mountpoint. Mount the host computer's |
1340 |
<filename>/usr/src</filename> read-only on the jail's |
1341 |
new <filename>/usr/src</filename> mountpoint:</para> |
1342 |
|
1343 |
<screen>&prompt.root; <userinput>rm /usr/jails/<replaceable>jailname</replaceable>/usr/src</userinput> |
1344 |
&prompt.root; <userinput>mkdir /usr/jails/<replaceable>jailname</replaceable>/usr/src</userinput> |
1345 |
&prompt.root; <userinput>mount -t nullfs -o ro /usr/src /usr/jails/<replaceable>jailname</replaceable>/usr/src</userinput></screen> |
1346 |
|
1347 |
<para>Get a console in the jail:</para> |
1348 |
|
1349 |
<screen>&prompt.root; <userinput>ezjail-admin console <replaceable>jailname</replaceable></userinput></screen> |
1350 |
|
1351 |
<para>Inside the jail, run <command>mergemaster</command>. |
1352 |
Then exit the jail console:</para> |
1353 |
|
1354 |
<screen>&prompt.root; <userinput>cd /usr/src</userinput> |
1355 |
&prompt.root; <userinput>mergemaster -U</userinput> |
1356 |
&prompt.root; <userinput>exit</userinput></screen> |
1357 |
|
1358 |
<para>Finally, unmount the jail's |
1359 |
<filename>/usr/src</filename>:</para> |
1360 |
|
1361 |
<screen>&prompt.root; <userinput>umount /usr/jails/<replaceable>jailname</replaceable>/usr/src</userinput></screen> |
1362 |
</example> |
1363 |
|
1364 |
<example xml:id="jails-ezjail-update-mergemaster-trusted"> |
1365 |
|
1366 |
<title>&man.mergemaster.8; on Trusted Jail</title> |
1367 |
|
1368 |
<para>If the users and services in a jail are trusted, |
1369 |
&man.mergemaster.8; can be run from the host:</para> |
1370 |
|
1371 |
<screen>&prompt.root; <userinput>mergemaster -U -D /usr/jails/<replaceable>jailname</replaceable></userinput></screen> |
1372 |
</example> |
1373 |
</sect3> |
1374 |
|
1375 |
<sect3 xml:id="jails-ezjail-update-ports"> |
1376 |
<title>Updating Ports</title> |
1377 |
|
1378 |
<para>The ports tree in the basejail is shared by the other |
1379 |
jails. Updating that copy of the ports tree gives the other |
1380 |
jails the updated version also.</para> |
1381 |
|
1382 |
<para>The basejail ports tree is updated with |
1383 |
&man.portsnap.8;:</para> |
1384 |
|
1385 |
<screen>&prompt.root; <userinput>ezjail-admin update -P</userinput></screen> |
1386 |
</sect3> |
1387 |
</sect2> |
1388 |
|
1389 |
<sect2 xml:id="jails-ezjail-control"> |
1390 |
<title>Controlling Jails</title> |
1391 |
|
1392 |
<sect3 xml:id="jails-ezjail-control-stop-start"> |
1393 |
<title>Stopping and Starting Jails</title> |
1394 |
|
1395 |
<para><application>ezjail</application> automatically starts |
1396 |
jails when the computer is started. Jails can be manually |
1397 |
stopped and restarted with <command>stop</command> and |
1398 |
<command>start</command>:</para> |
1399 |
|
1400 |
<screen>&prompt.root; <userinput>ezjail-admin stop <replaceable>sambajail</replaceable></userinput> |
1401 |
Stopping jails: sambajail.</screen> |
1402 |
|
1403 |
<para>By default, jails are started automatically when the |
1404 |
host computer starts. Autostarting can be disabled |
1405 |
with <command>config</command>:</para> |
1406 |
|
1407 |
<screen>&prompt.root; <userinput>ezjail-admin config -r norun <replaceable>seldomjail</replaceable></userinput></screen> |
1408 |
|
1409 |
<para>This takes effect the next time the host computer is |
1410 |
started. A jail that is already running will not be |
1411 |
stopped.</para> |
1412 |
|
1413 |
<para>Enabling autostart is very similar:</para> |
1414 |
|
1415 |
<screen>&prompt.root; <userinput>ezjail-admin config -r run <replaceable>oftenjail</replaceable></userinput></screen> |
1416 |
</sect3> |
1417 |
|
1418 |
<sect3 xml:id="jails-ezjail-control-backup"> |
1419 |
<title>Archiving and Restoring Jails</title> |
1420 |
|
1421 |
<para>Use <command>archive</command> to create a |
1422 |
<filename>.tar.gz</filename> archive of a jail. The file |
1423 |
name is composed from the name of the jail and the current |
1424 |
date. Archive files are written to the archive directory, |
1425 |
<filename>/usr/jails/ezjail_archives</filename>. A |
1426 |
different archive directory can be chosen by setting |
1427 |
<varname>ezjail_archivedir</varname> in the configuration |
1428 |
file.</para> |
1429 |
|
1430 |
<para>The archive file can be copied elsewhere as a backup, or |
1431 |
an existing jail can be restored from it with |
1432 |
<command>restore</command>. A new jail can be created from |
1433 |
the archive, providing a convenient way to clone existing |
1434 |
jails.</para> |
1435 |
|
1436 |
<para>Stop and archive a jail named |
1437 |
<literal>wwwserver</literal>:</para> |
1438 |
|
1439 |
<screen>&prompt.root; <userinput>ezjail-admin stop <replaceable>wwwserver</replaceable></userinput> |
1440 |
Stopping jails: wwwserver. |
1441 |
&prompt.root; <userinput>ezjail-admin archive <replaceable>wwwserver</replaceable></userinput> |
1442 |
&prompt.root; <userinput>ls /usr/jails/ezjail-archives/</userinput> |
1443 |
wwwserver-201407271153.13.tar.gz</screen> |
1444 |
|
1445 |
<para>Create a new jail named |
1446 |
<literal>wwwserver-clone</literal> from the archive created |
1447 |
in the previous step. Use the <filename>em1</filename> |
1448 |
interface and assign a new <acronym>IP</acronym> address to |
1449 |
avoid conflict with the original:</para> |
1450 |
|
1451 |
<screen>&prompt.root; <userinput>ezjail-admin create -a /usr/jails/ezjail_archives/wwwserver-201407271153.13.tar.gz <replaceable>wwwserver-clone</replaceable> 'lo1|127.0.3.1,em1|192.168.1.51'</userinput></screen> |
1452 |
</sect3> |
1453 |
</sect2> |
1454 |
|
1455 |
<sect2 xml:id="jails-ezjail-example-bind"> |
1456 |
<title>Full Example: <application>BIND</application> in a |
1457 |
Jail</title> |
1458 |
|
1459 |
<para>Putting the <application>BIND</application> |
1460 |
<acronym>DNS</acronym> server in a jail improves security by |
1461 |
isolating it. This example creates a simple caching-only name |
1462 |
server.</para> |
1463 |
|
1464 |
<itemizedlist xml:id="jails-ezjail-example-bind-assumptions"> |
1465 |
<listitem> |
1466 |
<para>The jail will be called |
1467 |
<literal>dns1</literal>.</para> |
1468 |
</listitem> |
1469 |
|
1470 |
<listitem> |
1471 |
<para>The jail will use <acronym>IP</acronym> address |
1472 |
<literal>192.168.1.240</literal> on the host's |
1473 |
<literal>re0</literal> interface.</para> |
1474 |
</listitem> |
1475 |
|
1476 |
<listitem> |
1477 |
<para>The upstream <acronym>ISP</acronym>'s DNS servers are |
1478 |
at <literal>10.0.0.62</literal> and |
1479 |
<literal>10.0.0.61</literal>.</para> |
1480 |
</listitem> |
1481 |
|
1482 |
<listitem> |
1483 |
<para>The basejail has already been created and a ports tree |
1484 |
installed as shown in |
1485 |
<xref linkend="jails-ezjail-initialsetup"/>.</para> |
1486 |
</listitem> |
1487 |
</itemizedlist> |
1488 |
|
1489 |
<example xml:id="jails-ezjail-example-bind-steps"> |
1490 |
<title>Running BIND in a Jail</title> |
1491 |
|
1492 |
<para>Create a cloned loopback interface by adding a line to |
1493 |
<filename>/etc/rc.conf</filename>:</para> |
1494 |
|
1495 |
<programlisting>cloned_interfaces="lo1"</programlisting> |
1496 |
|
1497 |
<para>Immediately create the new loopback interface:</para> |
1498 |
|
1499 |
<screen>&prompt.root; <userinput>service netif cloneup</userinput> |
1500 |
Created clone interfaces: lo1.</screen> |
1501 |
|
1502 |
<para>Create the jail:</para> |
1503 |
|
1504 |
<screen>&prompt.root; <userinput>ezjail-admin create dns1 'lo1|127.0.2.1,re0|192.168.1.240'</userinput></screen> |
1505 |
|
1506 |
<para>Start the jail, connect to a console running on it, and |
1507 |
perform some basic configuration:</para> |
1508 |
|
1509 |
<screen>&prompt.root; <userinput>ezjail-admin start dns1</userinput> |
1510 |
&prompt.root; <userinput>ezjail-admin console dns1</userinput> |
1511 |
&prompt.root; <userinput>passwd</userinput> |
1512 |
Changing local password for root |
1513 |
New Password: |
1514 |
Retype New Password: |
1515 |
&prompt.root; <userinput>tzsetup</userinput> |
1516 |
&prompt.root; <userinput>sed -i .bak -e '/adjkerntz/ s/^/#/' /etc/crontab</userinput> |
1517 |
&prompt.root; <userinput>sed -i .bak -e 's/127.0.0.1/127.0.2.1/g; s/localhost.my.domain/dns1.my.domain dns1/' /etc/hosts</userinput></screen> |
1518 |
|
1519 |
<para>Temporarily set the upstream <acronym>DNS</acronym> |
1520 |
servers in <filename>/etc/resolv.conf</filename> so ports |
1521 |
can be downloaded:</para> |
1522 |
|
1523 |
<programlisting>nameserver 10.0.0.62 |
1524 |
nameserver 10.0.0.61</programlisting> |
1525 |
|
1526 |
<para>Still using the jail console, install |
1527 |
<package role="port">dns/bind99</package>.</para> |
1528 |
|
1529 |
<screen>&prompt.root; <userinput>make -C /usr/ports/dns/bind99 install clean</userinput></screen> |
1530 |
|
1531 |
<para>Configure the name server by editing |
1532 |
<filename>/usr/local/etc/namedb/named.conf</filename>.</para> |
1533 |
|
1534 |
<para>Create an Access Control List (<acronym>ACL</acronym>) |
1535 |
of addresses and networks that are permitted to send |
1536 |
<acronym>DNS</acronym> queries to this name server. This |
1537 |
section is added just before the <literal>options</literal> |
1538 |
section already in the file:</para> |
1539 |
|
1540 |
<programlisting>... |
1541 |
// or cause huge amounts of useless Internet traffic. |
1542 |
|
1543 |
acl "trusted" { |
1544 |
192.168.1.0/24; |
1545 |
localhost; |
1546 |
localnets; |
1547 |
}; |
1548 |
|
1549 |
options { |
1550 |
...</programlisting> |
1551 |
|
1552 |
<para>Use the jail <acronym>IP</acronym> address in the |
1553 |
<literal>listen-on</literal> setting to accept |
1554 |
<acronym>DNS</acronym> queries from other computers on the |
1555 |
network:</para> |
1556 |
|
1557 |
<programlisting> listen-on { 192.168.1.240; };</programlisting> |
1558 |
|
1559 |
<para>A simple caching-only <acronym>DNS</acronym> name server |
1560 |
is created by changing the <literal>forwarders</literal> |
1561 |
section. The original file contains:</para> |
1562 |
|
1563 |
<programlisting>/* |
1564 |
forwarders { |
1565 |
127.0.0.1; |
1566 |
}; |
1567 |
*/</programlisting> |
1568 |
|
1569 |
<para>Uncomment the section by removing the |
1570 |
<literal>/*</literal> and <literal>*/</literal> lines. |
1571 |
Enter the <acronym>IP</acronym> addresses of the upstream |
1572 |
<acronym>DNS</acronym> servers. Immediately after the |
1573 |
<literal>forwarders</literal> section, add references to the |
1574 |
<literal>trusted</literal> <acronym>ACL</acronym> defined |
1575 |
earlier:</para> |
1576 |
|
1577 |
<programlisting> forwarders { |
1578 |
10.0.0.62; |
1579 |
10.0.0.61; |
1580 |
}; |
1581 |
|
1582 |
allow-query { any; }; |
1583 |
allow-recursion { trusted; }; |
1584 |
allow-query-cache { trusted; };</programlisting> |
1585 |
|
1586 |
<para>Enable the service in |
1587 |
<filename>/etc/rc.conf</filename>:</para> |
1588 |
|
1589 |
<programlisting>named_enable="YES"</programlisting> |
1590 |
|
1591 |
<para>Start and test the name server:</para> |
1592 |
|
1593 |
<screen>&prompt.root; <userinput>service named start</userinput> |
1594 |
wrote key file "/usr/local/etc/namedb/rndc.key" |
1595 |
Starting named. |
1596 |
&prompt.root; <userinput>/usr/local/bin/dig @192.168.1.240 freebsd.org</userinput></screen> |
1597 |
|
1598 |
<para>A response that includes</para> |
1599 |
|
1600 |
<screen>;; Got answer;</screen> |
1601 |
|
1602 |
<para>shows that the new <acronym>DNS</acronym> server is |
1603 |
working. A long delay followed by a response |
1604 |
including</para> |
1605 |
|
1606 |
<screen>;; connection timed out; no servers could be reached</screen> |
1607 |
|
1608 |
<para>shows a problem. Check the configuration settings and |
1609 |
make sure any local firewalls allow the new |
1610 |
<acronym>DNS</acronym> access to the upstream |
1611 |
<acronym>DNS</acronym> servers.</para> |
1612 |
|
1613 |
<para>The new <acronym>DNS</acronym> server can use itself for |
1614 |
local name resolution, just like other local computers. Set |
1615 |
the address of the <acronym>DNS</acronym> server in the |
1616 |
client computer's |
1617 |
<filename>/etc/resolv.conf</filename>:</para> |
1618 |
|
1619 |
<programlisting>nameserver 192.168.1.240</programlisting> |
1620 |
|
1621 |
<para>A local <acronym>DHCP</acronym> server can be configured |
1622 |
to provide this address for a local <acronym>DNS</acronym> |
1623 |
server, providing automatic configuration on |
1624 |
<acronym>DHCP</acronym> clients.</para> |
1625 |
</example> |
1626 |
</sect2> |
1627 |
</sect1> |
1628 |
</chapter> |
953 |
</chapter> |