/usr/share/doc/HOWTO/de-html/DE-NET3-HOWTO-4.html is in doc-linux-de 2003.10-5.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 905 906 907 908 909 910 911 912 913 914 915 916 917 918 919 920 921 922 923 924 925 926 927 928 929 930 931 932 933 934 935 936 937 938 939 940 941 942 943 944 945 946 947 948 949 950 951 952 953 954 955 956 957 958 959 960 961 962 963 964 965 966 967 968 969 970 971 972 973 974 975 976 977 978 979 980 981 982 983 984 985 986 987 988 989 990 991 992 993 994 995 996 997 998 999 1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 1011 1012 1013 1014 1015 1016 1017 1018 1019 1020 1021 1022 1023 1024 1025 1026 1027 1028 1029 1030 1031 1032 1033 1034 1035 1036 1037 1038 1039 1040 1041 1042 1043 1044 1045 1046 1047 1048 1049 1050 1051 1052 1053 1054 1055 1056 1057 1058 1059 1060 1061 1062 1063 1064 1065 1066 1067 1068 1069 1070 1071 1072 1073 1074 1075 1076 1077 1078 1079 1080 1081 1082 1083 1084 1085 1086 1087 1088 1089 1090 1091 1092 1093 1094 1095 1096 1097 1098 1099 1100 1101 1102 1103 1104 1105 1106 1107 1108 1109 1110 1111 1112 1113 1114 1115 1116 1117 1118 1119 1120 1121 1122 1123 1124 1125 1126 1127 1128 1129 1130 1131 1132 1133 1134 1135 1136 1137 1138 1139 1140 1141 1142 1143 1144 1145 1146 1147 1148 1149 1150 1151 1152 1153 1154 1155 1156 1157 1158 1159 1160 1161 1162 1163 1164 1165 1166 1167 1168 1169 1170 1171 1172 1173 1174 1175 1176 1177 1178 1179 1180 1181 1182 1183 1184 1185 1186 1187 1188 1189 1190 1191 1192 1193 1194 1195 1196 1197 1198 1199 1200 1201 1202 1203 1204 1205 1206 1207 1208 1209 1210 1211 1212 1213 1214 1215 1216 1217 1218 1219 1220 1221 1222 1223 1224 1225 1226 1227 1228 1229 1230 1231 1232 1233 1234 1235 1236 1237 1238 1239 1240 1241 1242 1243 1244 1245 1246 1247 1248 1249 1250 1251 1252 1253 1254 1255 1256 1257 1258 1259 1260 1261 1262 1263 1264 1265 1266 1267 1268 1269 1270 1271 1272 1273 1274 1275 1276 1277 1278 1279 1280 1281 1282 1283 1284 1285 1286 1287 1288 1289 1290 1291 1292 1293 1294 1295 1296 1297 1298 1299 1300 1301 1302 1303 1304 1305 1306 1307 1308 1309 1310 1311 1312 1313 1314 1315 1316 1317 1318 1319 1320 1321 1322 1323 1324 1325 1326 1327 1328 1329 1330 1331 1332 1333 1334 1335 1336 1337 1338 1339 1340 1341 1342 1343 1344 1345 1346 1347 1348 1349 1350 1351 1352 1353 1354 1355 1356 1357 1358 1359 1360 1361 1362 1363 1364 1365 1366 1367 1368 1369 1370 1371 1372 1373 1374 1375 1376 1377 1378 1379 1380 1381 1382 1383 1384 1385 1386 1387 1388 1389 1390 1391 1392 1393 1394 1395 1396 1397 1398 1399 1400 1401 1402 1403 1404 1405 1406 1407 1408 1409 1410 1411 1412 1413 1414 1415 1416 1417 1418 1419 1420 1421 1422 1423 1424 1425 1426 1427 1428 1429 1430 1431 1432 1433 1434 1435 1436 1437 1438 1439 1440 1441 1442 1443 1444 1445 1446 1447 1448 1449 1450 1451 1452 1453 1454 1455 1456 1457 1458 1459 1460 1461 1462 1463 1464 1465 1466 1467 1468 1469 1470 1471 1472 1473 1474 1475 1476 1477 1478 1479 1480 1481 1482 1483 1484 1485 1486 1487 1488 1489 1490 1491 1492 1493 1494 1495 1496 1497 1498 1499 1500 1501 1502 1503 1504 1505 1506 1507 1508 1509 1510 1511 1512 1513 1514 1515 1516 1517 1518 1519 1520 1521 1522 1523 1524 1525 1526 1527 1528 1529 1530 1531 1532 1533 1534 1535 1536 1537 1538 1539 1540 1541 1542 1543 1544 1545 1546 1547 1548 1549 1550 1551 1552 1553 1554 1555 1556 1557 1558 1559 1560 1561 1562 1563 1564 1565 1566 1567 1568 1569 1570 1571 1572 1573 1574 1575 1576 1577 1578 1579 1580 1581 1582 1583 1584 1585 1586 1587 1588 1589 1590 1591 1592 1593 1594 1595 1596 1597 1598 1599 1600 1601 1602 1603 1604 1605 1606 1607 1608 1609 1610 1611 1612 1613 1614 1615 1616 1617 1618 1619 1620 1621 1622 1623 1624 1625 1626 1627 1628 1629 | <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
<HTML>
<HEAD>
<META NAME="GENERATOR" CONTENT="LinuxDoc-Tools 0.9.65">
<TITLE>Linux NET-3 HOWTO : Grundkonfiguration</TITLE>
<LINK HREF="DE-NET3-HOWTO-5.html" REL=next>
<LINK HREF="DE-NET3-HOWTO-3.html" REL=previous>
<LINK HREF="DE-NET3-HOWTO.html#toc4" REL=contents>
</HEAD>
<BODY>
<A HREF="DE-NET3-HOWTO-5.html"><IMG SRC="next.png" ALT="Weiter"></A>
<A HREF="DE-NET3-HOWTO-3.html"><IMG SRC="prev.png" ALT="Zurück"></A>
<A HREF="DE-NET3-HOWTO.html#toc4"><IMG SRC="toc.png" ALT="Inhalt"></A>
<HR>
<H2><A NAME="s4">4.</A> <A HREF="DE-NET3-HOWTO.html#toc4">Grundkonfiguration</A></H2>
<P>Die folgenden Abschnitte sollte man gut durchlesen, denn ihr Verständnis
ist sehr wichtig, bevor man mit der tatsächlichen Konfiguration beginnen
kann. Es handelt sich um grundlegende Prinzipien die unabhängig davon
sind, welche Art von Netzwerk letztendlich verwendet wird.</P>
<H2><A NAME="ss4.1">4.1</A> <A HREF="DE-NET3-HOWTO.html#toc4.1">Was brauche ich für den Anfang?</A>
</H2>
<P>Einige Dinge benötigt man, bevor man sich mit der Zusammenstellung und
Konfiguration seines Netzwerkes beschäftigen kann. Die wichtigsten
davon sind:</P>
<H3>Aktuelle Kernel Quelldateien.</H3>
<P>Der derzeit installierte Kernel hat oft nicht die Treiber für die
gewünschte Hardware und Netzwerk-Protokolle eingebunden. Hier ist eine
Neukompilation des Kernels mit den entsprechenden Optionen notwendig.</P>
<P>Die jeweils aktuelle Kernel-Version befindet sich auf
<BLOCKQUOTE><CODE>
<A HREF="ftp://ftp.funet.fi/pub/Linux/PEOPLE/Linus/v2.0">ftp.funet.fi:/pub/Linux/PEOPLE/Linus/v2.0</A></CODE></BLOCKQUOTE>
</P>
<P>Normalerweise wird das Archiv mit den Quelltexten in das Verzeichnis
<CODE>/usr/src/linux</CODE> entpackt. Weiterführende Informationen dazu,
wie man Patches einspielt und den Kernel übersetzt, findet man im
<EM>
<A HREF="DE-Kernel-HOWTO.html">Kernel HOWTO</A></EM>.
Die Konfiguration der verschiedenen Module beschreibt das
<EM>
<A HREF="http://sunsite.unc.edu/LDP/HOWTO/Module-HOWTO.html">Module HOWTO</A></EM></P>
<P>Solange nicht besonders auf eine besondere Kernel-Version verwiesen
wird, sollte man bei den Standard-Kernels bleiben. Dies sind die
Versionen mit gerader zweiter Ziffer. Die Entwickler-Kernel
(gekennzeichnet durch eine ungerade zweite Ziffer, derzeit 2.1.xx)
können strukturelle Veränderungen oder Test-Code enthalten, die
im Zusammenspiel mit anderen Programmen des Systems zu Problemen führen
können. Wer sich nicht sicher ist, daß er mit derartigen
Schwierigkeiten umgehen kann, sollte bei den Standard-Versionen
bleiben.</P>
<H3>Aktuelle Hilfsprogramme.</H3>
<P>Diese Programme (englisch: network tools) dienen dazu, die Netzwerk
Devices (Kernel-Schnittstellen zur Hardware) zu konfigurieren. Damit
können also zum Beispiel Netzwerkadressen zugeordnet werden oder routes
definiert werden.</P>
<P>Normalerweise kommen alle neueren Linux Distributionen mit diesen
Hilfsprogrammen. Wer sie bei der Erstinstallation weggelassen hat, muß
dies in jedem Fall nachholen.</P>
<P>Wer keine fertige Distribution verwendet muß sich die Quellen selbst
besorgen und die nötigen Programme kompilieren. Dies ist aber nicht
weiter schwierig.</P>
<P>Sie werden betreut von Bernd Eckenfels und können via <CODE>ftp</CODE> bezogen
werden, entweder von
<BLOCKQUOTE><CODE>
<A HREF="ftp://ftp.inka.de/pub/comp/Linux/networking/NetTools/">ftp.inka.de:/pub/comp/Linux/networking/NetTools/</A></CODE></BLOCKQUOTE>
oder die Spiegelung
<BLOCKQUOTE><CODE>
<A HREF="ftp://ftp.linux.uk.org/pub/linux/Networking/PROGRAMS/NetTools/">ftp.linux.uk.org:/pub/linux/Networking/PROGRAMS/NetTools/</A></CODE></BLOCKQUOTE>
</P>
<P>Auf jeden Fall muß man sich vergewissern, daß die Version sich auch mit
dem eingesetzten Kernel verträgt. Um die gegenwärtig (also als dieser
Text geschrieben wurde) aktuelle Version zu installieren geht man wie
folgt vor:</P>
<P>
<BLOCKQUOTE><CODE>
<PRE>
#
# cd /usr/src
# tar xvfz net-tools-1.32-alpha.tar.gz
# cd net-tools-1.32-alpha
# make config
# make
# make install
#
</PRE>
</CODE></BLOCKQUOTE>
</P>
<P>Wer außerdem auch beabsichtigt, ein Firewall aufzusetzen oder IP
Masquerading zu verwenden, wird darüberhinaus das Programm
<EM>ipfwadm</EM> benötigen. Die aktuellste Version bekommt man über
<CODE>
<A HREF="ftp:/ftp.xos.nl/pub/linux/ipfwadm">ftp.xos.nl:/pub/linux/ipfwadm</A></CODE>.
Auch dort gibt es unterschiedliche Versionen, man muß deshalb darauf
achten die für den eigenen Kernel passende auszuwählen.</P>
<P>Die Installation ist dann ganz einfach (wieder am Beispiel der gerade
aktuellen Version):</P>
<P>
<BLOCKQUOTE><CODE>
<PRE>
#
# cd /usr/src
# tar xvfz ipfwadm-2.3.0.tar.gz
# cd ipfwadm-2.3.0
# make
# make install
#
</PRE>
</CODE></BLOCKQUOTE>
</P>
<H3>Anwendungsprogramme.</H3>
<P>Mit `Anwendungen' sind hier Programme wie <EM>telnet</EM> oder
<EM>ftp</EM> sowie die zugehörigen Server gemeint. David Holland
(<CODE>
<A HREF="mailto:dholland@hcs.harvard.edu">dholland@hcs.harvard.edu</A></CODE>) verwaltet inzwischen eine
Distribution mit den am weitesten verbreiteten dieser Programme. Man
erhält sie hier:
<BLOCKQUOTE><CODE>
<A HREF="ftp://ftp.uk.linux.org/pub/linux/Networking/base">ftp.uk.linux.org:/pub/linux/Networking/base</A></CODE></BLOCKQUOTE>
</P>
<P>Zur Installation der derzeit aktuellen Version geht man folgendermaßen
vor:
<BLOCKQUOTE><CODE>
<PRE>
#
# cd /usr/src
# tar xvfz /pub/net/NetKit-B-0.08.tar.gz
# cd NetKit-B-0.08
# more README
# vi MCONFIG
# make
# make install
#
</PRE>
</CODE></BLOCKQUOTE>
</P>
<H3>Adressen.</H3>
<P>Die reinen Internet Protokoll Adressen bestehen aus 4 Bytes.
Standardmäßig schreibt man diese in einer durch Punkte getrennten
Dezimalschreibweise: Jedes Byte wird in eine Dezimalzahl umgewandelt
(0-255), wobei führende Nullen weggelassen werden (außer wenn die Zahl
Null ist). Diese vier Zahlen werden dann, durch einen Dezimalpunkt `.'
getrennt, hintereinander aufgeschrieben. Für gewöhnlich bekommt jedes
Interface eines Rechners eine eigene IP Adresse. Es ist zwar erlaubt,
daß verschiedene Schnittstellen eines Rechners dieselbe Adresse
verwenden, dies wird aber normalerweise nicht gemacht.</P>
<P>Ein Internet Protokoll Netzwerk besteht aus einer fortlaufenden Sequenz
von IP Adressen. Alle Adressen innerhalb eines solchen Netzwerkes haben
einige Ziffern mit den anderen gemeinsam. Dieser Übereinstimmende Teil
wird als `Netwerk-Anteil' bezeichnet, die verbleibenden Ziffern bilden
den Host-Anteil (Rechner-Teil). Die Anzahl an Bits die bei allen
Adressen im Netz gleich ist, bezeichnet man als <EM>netmask</EM>. Ihre
Aufgabe is es festzustellen, ob ein Rechner zu diesem Netzwerk gehört,
oder nicht. Hier ein Beispiel:</P>
<P>
<BLOCKQUOTE><CODE>
<PRE>
----------------- ---------------
Host Address 192.168.110.23
Network Mask 255.255.255.0
Network Portion 192.168.110.
Host portion .23
----------------- ---------------
Network Address 192.168.110.0
Broadcast Address 192.168.110.255
----------------- ---------------
</PRE>
</CODE></BLOCKQUOTE>
</P>
<P>Jede Adresse, die bitweise mit der netmask durch ein logisches AND
verknüpft wird, ergibt so die Adresse des Netzwerkes, zu der sie
gehört. Die Netzwerk-Adresse besitzt deshalb immer die kleinste Nummer
aus dem Bereich des Netzwerkes, und der Host-Anteil ist immer Null.</P>
<P>Die Broadcast Adresse ist eine besondere Adresse, auf die jeder Rechner
eines Netzwerkes zusätzlich zu seiner eigenen, eindeutigen reagiert. An
diese Adresse werden Datagramme gesendet, die jeder Rechner im Netzwerk
erhalten soll. Einige besondere Datentypen wie Routing-Informationen
oder Warnungen werden über diese Broadcast Adresse verbreitet, damit
alle Rechner sie sofort erhalten. Es gibt zwei verwendete Standards
dafür, wie eine solche Broadcast-Adresse aussieht. Am weitesten
verbreitet ist es, die höchste Nummer des Adressbereiches zu verwenden,
im obigen Beispiel also die <CODE>192.168.110.255</CODE>. An einigen
Stellen wird auch die Netzwerk-Adresse für diesen Zweck verwendet. In
der Praxis ist es egal, welche dieser Adressen verwandt wird. Es muß
nur sichergestellt sein, daß alle Rechner des Netzes mit derselben
Broadcast-Adresse konfiguriert werden.</P>
<P>In einer recht frühen Phase der Entwicklung des IP Protokolles wurden
einige willkürlich gewählte Bereiche des Adressraumes zu Netzwerken
zusammengefaßt, die man als Klassen bezeichnet. Diese Klassen stellen
die Standard-Größen für ein Netzwerk dar, die Aufteilung ist wie folgt:</P>
<P>
<BLOCKQUOTE><CODE>
<PRE>
----------------------------------------------------------
| Netzwerk|Netmask | Netzwerk Adressen |
| Klasse | | |
----------------------------------------------------------
| A | 255.0.0.0 | 0.0.0.0 - 127.255.255.255 |
| B | 255.255.0.0 | 128.0.0.0 - 191.255.255.255 |
| C | 255.255.255.0 | 192.0.0.0 - 223.255.255.255 |
|Multicast| 240.0.0.0 | 224.0.0.0 - 239.255.255.255 |
----------------------------------------------------------
</PRE>
</CODE></BLOCKQUOTE>
</P>
<P>Welcher dieser Adressen man verwenden sollte hängt vom jeweiligen Fall
ab, eventuell muß man eine Kombination der unten aufgeführten Aktionen
durchführen. </P>
<P>
<DL>
<DT><B>Anbinden eines einzelnen Linux-Rechners in ein bestehendes Netz</B><DD>
<P>In diesem Fall muß man sich an den Administrator des Netzes wenden und
ihn um folgende Informationen bitten:
<UL>
<LI>IP Adresse für den Rechner</LI>
<LI>IP Netzwerk Adresse</LI>
<LI>IP Broadcast Adresse</LI>
<LI>IP Netmask</LI>
<LI>Adresse des Routers</LI>
<LI>Adresse des Domain Name Servers</LI>
</UL>
Mit diesen Angaben kann man dann sein Netzwerk unter Linux
konfigurieren. </P>
<DT><B>Neubildung eines Netzwerkes, daß keine Verbindung zum Internet hat</B><DD>
<P>Wer sich ein kleines privates Netzwerk zulegen will und nicht
beabsichtigt, dieses jemals mit dem Internet zu verbinden, kann im
Prinzip seine Adressen völlig frei auswählen. Aus Sicherheitsgründen,
und um trotzdem eine gewisse Konsistenz in der Adressenvergabe zu
wahren, wurden jedoch einige Bereiche des Adressraumes speziell für
diesen Zweck reserviert. Sie sind im RFC1597 festgelegt:</P>
<P>
<BLOCKQUOTE><CODE>
<PRE>
-----------------------------------------------------------
| Adressbereiche f. private Nutzung |
-----------------------------------------------------------
| Netzwerk| Netmask | Netzwerk Adressen |
| Klasse | | |
-----------------------------------------------------------
| A | 255.0.0.0 | 10.0.0.0 - 10.255.255.255 |
| B | 255.255.0.0 | 172.16.0.0 - 172.31.255.255 |
| C | 255.255.255.0 | 192.168.0.0 - 192.168.255.255 |
-----------------------------------------------------------
</PRE>
</CODE></BLOCKQUOTE>
</P>
<P>Zuerst sollte man sich überlegen, wie groß das eigene Netz sein soll und
dann einen geeigneten Bereich auswählen.</P>
</DL>
</P>
<H2><A NAME="ss4.2">4.2</A> <A HREF="DE-NET3-HOWTO.html#toc4.2">Wo muß ich die Konfiguration durchführen?</A>
</H2>
<P>Unter Linux gibt es unterschiedliche Ansätze, wie die Boot-Prozedur
abläuft. In jedem Fall wird aber, nachdem der Kernel geladen ist, ein
Programm mit dem Namen <EM>init</EM> gestartet. <EM>init</EM> liest dann die
Konfigurationsdatei <CODE>/etc/inittab</CODE> und beginnt den eigentlichen
Boot-Prozeß. Es gibt verschiedene Versionen des <EM>init</EM>-Programmes,
und das ist auch bereits der Hauptgrund für die unterschiedlichen
Bootkonzepte der verschiedenen Distributionen.</P>
<P>Für gewöhnlich enthält <CODE>/etc/inittab</CODE> einen Eintrag der Form
<BLOCKQUOTE><CODE>
<PRE>
si::sysinit:/etc/init.d/boot
</PRE>
</CODE></BLOCKQUOTE>
</P>
<P>Diese Zeile legt den Namen desjenigen Shell-Scriptes fest, das den
Bootprozeß steuert. In gewisser Weise handelt es sich um das
Äquivalent zu der Datei <CODE>AUTOEXEC.BAT</CODE> in DOS.</P>
<P>Meist werden von diesem Script aus weitere Scripte aufgerufen, und oft
ist eines davon dann für die Konfiguration des Netzwerkes zuständig. </P>
<P>Die folgende Tabelle gibt einen Anhaltspunkt, welche Dateien das für die
diversen Distributionen sind:</P>
<P>
<BLOCKQUOTE><CODE>
<PRE>
-------------------------------------------------------------------------------
Distrib. |Schnittstellen Konfig./Routing |Server Initialisierung
-------------------------------------------------------------------------------
Debian |/etc/init.d/network |/etc/init.d/netbase
| |/etc/init.d/netstd_init
| |/etc/init.d/netstd_nfs
| |/etc/init.d/netstd_misc
-------------------------------------------------------------------------------
Slackware|/etc/rc.d/rc.inet1 |/etc/rc.d/rc.inet2
-------------------------------------------------------------------------------
RedHat |/etc/sysconfig/network-scripts/ifup-<ifname>|/etc/rc.d/init.d/network
-------------------------------------------------------------------------------
</PRE>
</CODE></BLOCKQUOTE>
</P>
<P>Die meisten modernen Distributionen stellen ein Programm zur Verfügung,
mit dem man die gängigsten Netzwerk Schnittstellen konfigurieren kann.
Es lohnt sich auf jeden Fall diese Programme auszuprobieren, bevor man
sich an eine manuelle Installation macht.</P>
<P>
<BLOCKQUOTE><CODE>
<PRE>
--------------------------------------------
Distrib | Netzwerk Konfigurations Programm
--------------------------------------------
RedHat | /sbin/netcfg
Slackware | /sbin/netconfig
--------------------------------------------
</PRE>
</CODE></BLOCKQUOTE>
</P>
<H2><A NAME="ss4.3">4.3</A> <A HREF="DE-NET3-HOWTO.html#toc4.3">Anlegen der Netzwerk Schnittstellen.</A>
</H2>
<P>In vielen Varianten von Unix haben die verschiedenen Netzwerk Devices
feste Einträge im Verzeichnis <CODE>/dev</CODE>. Nicht so bei Linux. Hier
werden diese Einträge dynamisch von der Software angelegt, die
entsprechenden Dateien in <CODE>/dev</CODE> müssen also nicht vorhanden
sein.</P>
<P>In fast allen Fällen werden die Device-Einträge für das Netzwerk
automatisch von den jeweiligen Treibern angelegt, sobald diese bei der
Initialisierung die entsprechende Hardware vorfinden. So legt der
Ethernet-Treiber z.B. die Schnittstellen <CODE>eth[0..n]</CODE> an,
durchnumeriert in der Reihenfolge, in der die Hardware gefunden wird.
Der ersten Karte wird der Eintrag <CODE>eth0</CODE> zugeordnet, der zweiten
<CODE>eth1</CODE> usw.</P>
<P>Manche Device-Einträge, insbesondere <CODE>SLIP</CODE> und <CODE>PPP</CODE>, werden
jedoch erst aufgrund von Benutzerprogrammen angelegt. Auch in diesem
Fall gilt die sequentielle Durchnumerierung, sie werden eben nur nicht
bereits beim Booten des Systems angelegt. Das liegt daran, daß sich die
Anzahl der aktiven <CODE>slip</CODE> oder <CODE>ppp</CODE> Geräte bei laufendem Betrieb
ändern kann - im Gegensatz zu Ethernetkarten. Diese Fälle werden später
genauer behandelt.</P>
<H2><A NAME="ss4.4">4.4</A> <A HREF="DE-NET3-HOWTO.html#toc4.4">Konfiguration der Netzwerk Schnittstelle.</A>
</H2>
<P>Hat man sich alle benötigten Programme und Informationen besorgt, kann
mit der Konfiguration der Netzwerk Schnittstelle begonnen werden. Mit
Konfiguration ist dabei gemeint, der Schnittstelle die Adresse
zuzuteilen sowie für andere einstellbare Parameter die richtigen Werte
einzusetzen. Das hierfür am meisten verwendete Programm ist
<CODE>ifconfig</CODE>, das steht für Interface Configure, also
Schnittstellenkonfiguration. </P>
<P>Ein typisches Beispiel für den Einsatz von <CODE>ifconfig</CODE> ist etwa
<BLOCKQUOTE><CODE>
<PRE>
# ifconfig eth0 192.168.0.1 netmask 255.255.255.0 up
</PRE>
</CODE></BLOCKQUOTE>
In diesem Fall wird die Schnittstelle <CODE>eth0</CODE> mit der Adresse
<CODE>192.168.0.1</CODE> sowie der Netmask <CODE>255.255.255.0</CODE> konfiguriert.
Das abschließende <EM>up</EM> aktiviert die Schnittstelle.</P>
<P>Der Kernel hat einige voreingestellte Standardwerte für viele der
Konfigurationsparameter. So kann man natürlich Netzwerkadresse und
Broadcastadresse für eine Schnittstelle festlegen. Tut man dies nicht,
wie im obigen Beispiel, dann versucht der Kernel für diese Parameter
vernünftige Werte anzunehmen. Dies macht er anhand der Netzwerk-Klasse
der angegebenen IP-Adresse. In diesem Fall wäre das ein Klasse-C Netz,
dementsprechend benutzt der Kernel <CODE>192.168.0.0</CODE> als Netzwerk-Adresse
und <CODE>192.168.0.255</CODE> als Broadcast-Adresse.</P>
<P><CODE>ifconfig</CODE> besitzt unzählige Parameter. Die wichtigsten davon sind
<DL>
<DT><B>up</B><DD>
<P>aktiviert die Schnittstelle</P>
<DT><B>down</B><DD>
<P>deaktiviert die Schnittstelle</P>
<DT><B><CODE>[-]</CODE>arp</B><DD>
<P>(de-)aktiviert das
Adress-Auflösungs-Protokoll. (address resolution protocoll) für diese
Schnittstelle.</P>
<DT><B><CODE>[-]</CODE>allmulti</B><DD>
<P>(de-)aktiviert den sogenannten
promiscuous mode. In diesem Modus kann man eine Schnittstelle anweisen
auch Datenpakete anzunehmen, die nicht an diese Schnittstelle adressiert
sind. Dies ist sehr wichtig für Programme wie <CODE>tcpdump</CODE>.</P>
<DT><B>mtu N</B><DD>
<P>legt die <CODE>MTU</CODE> fest.</P>
<DT><B>netmask addr</B><DD>
<P>legt die Netzwerk Maske für die Schnittstelle fest.</P>
<DT><B>irq addr</B><DD>
<P>legt den verwendeten Interrupt der Hardware fest. Dies
funktioniert aber nur für einige wenige Geräte.</P>
<DT><B><CODE>[-]</CODE>broadcast [addr<CODE>]</CODE></B><DD>
<P>damit kann die
Adresse für Broadcast-Meldungen festgelegt werden oder die Annahme
solcher Pakete abgeschaltet werden.</P>
<DT><B><CODE>[-]</CODE>pointopoint [addr] </B><DD>
<P>hiermit
wird die Adresse des Rechners am anderen Ende der Verbindung festgelegt,
z.B. im Falle von <CODE>SLIP</CODE> und <CODE>PPP</CODE> Verbindungen.</P>
<DT><B>hw <type> <addr></B><DD>
<P>damit lassen sich für bestimmte
Netzwerk-Typen die Hardware Adressen festlegen. Das ist für Ethernet
kaum nützlich, für andere Typen wie AX.25 aber schon.</P>
</DL>
</P>
<P><CODE>ifconfig</CODE> kann im Prinzip zur Konfiguration jeder beliebigen
Netzwerk Schnittstelle verwendet werden. Einige Programme wie <CODE>pppd</CODE>
oder <CODE>dip</CODE> machen dies jedoch selbständig, sodaß sich ein manueller
Aufruf von <CODE>ifconfig</CODE> in diesem Fall erübrigt.</P>
<H2><A NAME="ss4.5">4.5</A> <A HREF="DE-NET3-HOWTO.html#toc4.5">Konfiguration des Name Resolver.</A>
</H2>
<P>Der <EM>Name Resolver</EM> ist ein Teil der Standardbibliothek von Linux.
Seine Aufgabe ist es, benutzerfreundliche Rechnernamen wie
<CODE>ftp.funet.fi</CODE> in Rechnerfreundliche IP-Adressen wie
<CODE>128.214.248.6</CODE> zu übersetzen.</P>
<H3>Aus was besteht ein Name?</H3>
<P>Jeder ist wohl inzwischen mit Rechnernamen im Internet vertraut, doch
mancher versteht nicht genau wie sie gebildet werden. Namen im Internet
haben eine hierarchische Struktur, bilden also so etwas wie einen Baum
mit Verästelungen. Eine <EM>Domain</EM> ist eine Gruppe von Namen. Eine
solche <EM>Domain</EM> kann wiederum unterteilt sein in mehrere
<EM>subdomains</EM>. Eine <EM>toplevel domain</EM> ist eine <EM>domain</EM>, die
nicht mehr <EM>subdomain</EM> einer anderen ist. Diese <EM>Toplevel
Domains</EM> sind im RFC-920 festgelegt. Beispiele für die bekanntesten
<EM>Toplevel Domains</EM> sind:</P>
<P>
<DL>
<DT><B>COM</B><DD>
<P>Kommerzielle Organisationen</P>
<DT><B>EDU</B><DD>
<P>Bildung und Lehre</P>
<DT><B>GOV</B><DD>
<P>Regierungsstellen</P>
<DT><B>MIL</B><DD>
<P>Militärische Organisationen</P>
<DT><B>ORG</B><DD>
<P>Andere Organisationen</P>
<DT><B>Länderkennzeichen</B><DD>
<P>Diese sind gebildet aus zwei Buchstaben, die für
ein Land stehen
country.</P>
</DL>
</P>
<P>Jede dieser höchsten Domänen hat nun Unterdomänen. So gibt es für viele
Länder wieder eine Unterteilung entsprechend der höchsten Domänen, also
etwa <CODE>com.au</CODE> und <CODE>gov.au</CODE> für kommerzielle und staatliche
Organisationen in Australien. Aus historischen Gründen liegen praktisch
alle nicht länderspezifischen Toplevel Domänen in den USA, obwohl auch
diese einen spezifischen Länder-Code (<CODE>.us</CODE>)besitzen.</P>
<P>Die nächste Ebene der Unterteilung stellt meist der Name der
Organisation dar. Weitere Unterdomänen sind dann sehr unterschiedlich,
oft basieren sie auf internen Strukturen der jeweiligen Organisation,
jedoch kann der Netzadministrator jedes ihm sinnvoll erscheinende
Kriterium zur Unterteilung verwenden.</P>
<P>Der erste, am weitesten links stehende Teil des Namens ist immer der
eindeutige Name des jeweiligen Rechners, man bezeichnet ihn als
<EM>hostname</EM>, der übrige Teil rechts davon wird <EM>domainname</EM>
genannt. Beide zusammen bilden den <EM>Fully Qualified Domain Name</EM>.</P>
<P>Am Beispiel meines eigenen Email Rechners ist der vollständige
Domainname <CODE>perf.no.itg.telstra.com.au</CODE>. das heißt der Rechnername
(<EM>hostname</EM>) ist <CODE>perf</CODE>, der <EM>domainname</EM>
<CODE>no.itg.telstra.com.au</CODE>. Die oberste Domain (<EM>top level domain</EM>)
ist Australien (<CODE>.au</CODE>) und es handelt sich um eine kommerzielle
Organisation (<CODE>.com</CODE>). Der Name der Firma ist <CODE>telstra</CODE>, und die
Namensgebung der internen Unterdomänen basiert auf der Firmenstruktur,
in diesem Fall befindet sich der Rechner in der Information Technology
Group, Sektion Network Operation.</P>
<H3>Welche Informationen brauche ich?</H3>
<P>Natürlich muß man wissen, zu welcher Domäne der Rechner gehören soll.
Weiterhin benötigt die Software, die das Übersetzen von Namen in gültige
IP-Adressen übernimmt, die Adresse eines <EM>Domain Name Servers</EM>,
dessen IP-Nummer man sich ebenfalls besorgen muß.</P>
<P>Es gibt insgesamt drei Dateien, die editiert werden müssen, auf jede von
ihnen wird im folgenden eingegangen.</P>
<H3>/etc/resolv.conf</H3>
<P><CODE>/etc/resolv.conf</CODE> ist die zentrale Konfigurationsdatei für den
Name Resolver. Das Format ist sehr einfach, es ist eine Textdatei mit
einem Schlüsselwort pro Zeile. Normalerweise werden drei davon benutzt,
dies sind:
<DL>
<DT><B>domain</B><DD>
<P>Dieser Eintrag bestimmt den Namen der lokalen Domain.</P>
<DT><B>search</B><DD>
<P>Mit diesem Eintrag kann man die Namen von zusätzlichen
Domänen angeben, in denen nach einem Hostnamen gesucht wird.</P>
<DT><B>nameserver</B><DD>
<P>Mit diesem Eintrag - es können mehrere davon angegeben
werden - gibt man die IP Adresse eines Domain Name Servers an.</P>
</DL>
</P>
<P>Eine typische Datei <CODE>/etc/resolv.conf</CODE> sieht etwa so aus:
<BLOCKQUOTE><CODE>
<PRE>
domain maths.wu.edu.au
search maths.wu.edu.au wu.edu.au
nameserver 192.168.10.1
nameserver 192.168.12.1
</PRE>
</CODE></BLOCKQUOTE>
</P>
<P>In diesem Beispiel ist der Standard Domain Name, der an nicht
vollständige angegebene Rechnernamen angehängt wird,
<CODE>maths.wu.edu.au</CODE> ist. Wird der Rechner in dieser Domain nicht
gefunden, wird auch in der Domäne <CODE>wu.edu.au</CODE> gesucht. Weiterhin
sind zwei unabhängige Nameserver Einträge vorhanden, beide können von
der Name Resolver Software benutzt werden um Namen aufzulösen.</P>
<H3>/etc/host.conf</H3>
<P>In der Datei <CODE>/etc/host.conf</CODE> können einige Verhaltensweisen der
Name Resolving Software festgelegt werden. Das Format dieser Datei ist
ausführlich in der Online Hilfe zu <CODE>resolv+(8)</CODE> beschrieben. Jedoch
wird in praktisch allen Fällen das folgende Beispiel ausreichend sein:</P>
<P>
<BLOCKQUOTE><CODE>
<PRE>
order hosts,bind
multi on
</PRE>
</CODE></BLOCKQUOTE>
</P>
<P>Mit diesen Einträgen wird festgelegt, daß die Software zunächst in der
Datei <CODE>/etc/hosts</CODE> nach einer Namen - Adressen Zuordnung sucht,
bevor der Nameserver gefragt wird. Außerdem sollen alle gültigen
Adresseinträge, die in <CODE>/etc/hosts</CODE> gefunden werden, als Antwort
geliefert werden, und nicht nur der erste.</P>
<H3>/etc/hosts</H3>
<P>In der Datei <CODE>/etc/hosts</CODE> können die IP Adressen von lokalen
Rechnern eingetragen werden. Ein Rechner, dessen Namen in dieser Datei
auftaucht, wird auch ohne eine Nachfrage bei dem Domain Name Server
gefunden. Der Nachteil dabei ist aber, daß man diese Datei selber auf
dem aktuellen Stand halten muß, wenn sich die IP Adresse eines hier
eingetragenen Rechners ändert. In einem gut verwalteten System wird man
hier meist nur Einträge für das Loopback Interface sowie den lokalen
Rechnernamen vorfinden:</P>
<P>
<BLOCKQUOTE><CODE>
<PRE>
# /etc/hosts
127.0.0.1 localhost loopback
192.168.0.1 this.host.name
</PRE>
</CODE></BLOCKQUOTE>
</P>
<P>Wie man am ersten Eintrag sieht, sind auch mehrere Namen je
Adresseintrag erlaubt.</P>
<H2><A NAME="ss4.6">4.6</A> <A HREF="DE-NET3-HOWTO.html#toc4.6">Die Konfiguration des Loopback Interface.</A>
</H2>
<P>Das <CODE>loopback</CODE> Interface ist eine spezielle Schnittstelle, über die
man eine Verbindung zum eigenen Rechner aufbauen kann. Es gibt einige
Gründe, warum dies sinnvoll sein kann, zum Beispiel wenn man Netzwerk
Software testen will, ohne dabei von anderen Teilnehmern des Netzes
gestört zu werden. Die Standard IP Adresse für dieses Loopback
Interface ist <CODE>127.0.0.1</CODE>. Unabhängig, auf welchem Rechner man
arbeitet, ein <CODE>telnet 127.0.0.1</CODE> baut immer eine Verbindung zum
lokalen Rechner auf.</P>
<P>Die Konfiguration dieser Schnittstelle ist äußerst einfach und sollte
auf jeden Fall vorgenommen werden:</P>
<P>
<BLOCKQUOTE><CODE>
<PRE>
# ifconfig lo 127.0.0.1
# route add -host 127.0.0.1 lo
</PRE>
</CODE></BLOCKQUOTE>
</P>
<P>Der <CODE>route</CODE>-Befehl wird im nächsten Kapitel ausführlich behandelt.</P>
<H2><A NAME="ss4.7">4.7</A> <A HREF="DE-NET3-HOWTO.html#toc4.7">Routing.</A>
</H2>
<P><EM>Routing</EM> ist ein wichtiges Thema, es ließen sich leicht Bände damit
füllen. Obwohl die meisten nur recht geringe Ansprüche an das Routing
haben, trifft das für einige nicht zu. Im folgenden werden nur die
grundlegenden Aspekte des Routing behandelt. Wer weitergehende
Informationen zu diesem Thema benötigt, der sei auf die
Literaturhinweise zu Beginn dieses Dokumentes verwiesen.</P>
<P>Zunächst zum Begriff selber: Was ist <EM>IP Routing</EM>? Hier ist die
Definition, die ich selber verwende:</P>
<P>
<BLOCKQUOTE>
IP Routing ist der Prozeß über den ein Rechner mit
unterschiedlichen Netzwerkanbindungen entscheidet, über welche
Verbindung ein empfangenes IP Datagramm weitergeleitet werden soll.
</BLOCKQUOTE>
</P>
<P>Dies soll an einem Beispiel eines typischen Routers in einem Büro
verdeutlicht werden. Dieser habe eine PPP Verbindung zum Internet,
bedient über einige Ethernet Segmente lokale Workstations und ist über
eine weitere PPP Verbindung mit einer Zweigstelle verbunden. Empfängt
dieser Router nun ein Datagramm von irgendeiner dieser Verbindungen, so
wird über das Routing festgelegt, über welche der Verbindungen das
Datagramm weitergereicht wird. Jeder Rechner benötigt das Routing, denn
selbst der einfachste Rechner am Internet besitzt mindestens zwei
Netzwerk Schnittstellen, nämlich das Loopback Interface sowie die
normale Schnittstelle zum restlichen Netzwerk, also Ethernet, PPP oder
SLIP.</P>
<P>Also, wie funktioniert nun dieses Routing? Jeder einzelne Rechner hat
eine eigene Liste mit Vorschriften für das Routing, man nennt sie die
<EM>Routing Table</EM>. Diese Tabelle enthält Zeilen mit typischerweise
mindestens drei Spalten. Die erste Spalte enthält die Zieladresse, die
zweite Spalte die Schnittstelle, über die das Datenpaket weitergeleitet
werden soll, und die dritte enthält optional die IP Adresse eines
anderen Rechners (Gateway), der das Datenpaket zu seinem nächsten
Etappenziel leitet. Unter Linux kann man sich diese Tabelle mit dem
folgenden Befehl ansehen:
<BLOCKQUOTE><CODE>
<PRE>
# cat /proc/net/route
</PRE>
</CODE></BLOCKQUOTE>
Der eigentliche Vorgang des Routing ist sehr einfach: Ein eingehendes
Datenpaket wird entgegengenommen, seine Zieladresse wird untersucht und
mit den Einträgen in der Tabelle verglichen. Der Eintrag, der der
Zieladresse am besten entspricht, wird selektiert und das Datenpaket an
die in diesem Eintrag festgelegte Schnittstelle weitergeleitet.
Ist für die Adresse auch ein Gateway eingetragen, wird das Paket an
diesen Rechner adressiert, andernfalls wird angenommen, daß der
Zielrechner zu dem Netzwerk gehört, mit dem die benutzte Schnittstelle
verbunden ist. </P>
<P>Um die Routing Table zu verändern gibt es einen speziellen Befehl.
Dieser Befehl übernimmt die Kommandozeilenargumente und setzt sie in die
entsprechenden Systemaufrufe um die den Kernel dazu veranlassen, die
entsprechenden Einträge in der Routing Table hinzuzufügen, zu entfernen
oder zu verändern. Aus naheliegenden Gründen heißt dieser Befehl
<CODE>route</CODE>.</P>
<P>Ein einfaches Beispiel: Nehmen wir an wir befinden uns an einem
Ethernet Netzwerk. Es sei ein Klasse C Netz mit der Adresse
<CODE>192.168.1.0</CODE>. Unsere eigene IP Adresse ist <CODE>192.168.1.10</CODE>, und
der Rechner <CODE>192.168.1.1</CODE> ist ein Router mit Verbindung zum Internet.</P>
<P>Zunächst muß natürlich die Schnittstelle wie bereits beschrieben
konfiguriert werden, also etwa
<BLOCKQUOTE><CODE>
<PRE>
# ifconfig eth0 192.168.1.10 netmask 255.255.255.0 up
</PRE>
</CODE></BLOCKQUOTE>
Als nächstes muß in die Routing Table eingetragen werden, daß Datagramme
an alle Adressen <CODE>192.168.1.*</CODE> direkt über das Ethernet Device
<CODE>eth0</CODE> geleitet werden:
<BLOCKQUOTE><CODE>
<PRE>
# route add -net 192.168.0.0 netmask 255.255.255.0 eth0
</PRE>
</CODE></BLOCKQUOTE>
Über den Schalter <CODE>-net</CODE> im obigen Befehl wird dem <CODE>route</CODE>
Programm mitgeteilt, daß es sich um einen Eintrag für ein ganzes
Netzwerk handelt. Die andere Alternative ist ein Eintrag <CODE>host</CODE>, bei
dem nur eine einzige IP Adresse engegeben wird.</P>
<P>Mittels diesem Eintrag ist der eigene Rechner nun in der Lage, zu allen
anderen Rechnern im lokalen Ethernet IP Verbindungen aufzubauen. Doch
was ist mit Rechnern, die sich außerhalb dieses Netzes befinden?</P>
<P>Es wäre sehr umständlich und nicht praktikabel, für jedes denkbare
Netzwerk einen entsprechenden Eintrag anzufügen. Aus diesem Grund gibt
es eine Standardeinstellung in der festgelegt wird, wie mit Paketen zu
verfahren ist, die nicht gesondert in der Routing Table aufgeführt sind:
die <EM>Default Route</EM>. Im obigen Beispiel heißt das: Alles was nicht
im lokalen Netz ist, wird über den Router weitergeleitet - der wird dann
schon wissen, wie mit dem Paket zu verfahren ist. Den entsprechenden
Eintrag in der Routing Table erzeugt man folgendermaßen:
<BLOCKQUOTE><CODE>
<PRE>
# route add default gw 192.168.1.1 eth0
</PRE>
</CODE></BLOCKQUOTE>
Durch den Parameter <CODE>gw</CODE> wird dem <CODE>route</CODE>-Befehl mitgeteilt daß
die folgende Adresse die IP-Adresse eines Gateway Rechners oder eines
Routers ist, an den die Pakete weitergeleitet werden.</P>
<P>Die komplette Konfiguration sieht also so aus:
<BLOCKQUOTE><CODE>
<PRE>
# ifconfig eth0 192.168.1.10 netmask 255.255.255.0 up
# route add -net 192.168.0.0 netmask 255.255.255.0 eth0
# route add default gw 192.168.1.1 eth0
</PRE>
</CODE></BLOCKQUOTE>
Ein Blick in die <CODE>rc</CODE>-Dateien, die beim Bootprozeß das Netzwerk
initialisieren, sollte ähnliche Einträge (wenn auch mit anderen
Adressen)zu Tage bringen, denn es ist eine sehr verbreitete
Konfiguration.</P>
<P>Wir können uns nun an ein etwas komplizierteres Beispiel wagen. Nehmen
wir an, wir wollten einen einfachen Router konfigurieren, z.B. den
bereits erwähnten mit mehreren lokalen Netzen und einer PPP Verbindung
zum Internet. Für drei lokale Ethernet Segmente würde die Routing Table
etwa folgendermaßen aufgebaut:
<BLOCKQUOTE><CODE>
<PRE>
# route add 192.168.1.0 netmask 255.255.255.0 eth0
# route add 192.168.2.0 netmask 255.255.255.0 eth1
# route add 192.168.3.0 netmask 255.255.255.0 eth2
# route add default ppp0
</PRE>
</CODE></BLOCKQUOTE>
Für jede der an diesen Router angeschlossenen Workstations hätte die
Routing Table dieselbe einfache Form wie im vorangegangenen Beispiel,
lediglich der Router muß alle drei Netzwerke separat aufführen, da er ja
die Aufteilung der Datenpakete auf diese Netze durchführen muß. Bleibt
also nur noch die Frage, warum in der default route der Eintrag <CODE>gw</CODE>
fehlt. Der Grund dafür ist, daß es sich bei einer PPP-Verbindung
(ebenso wie bei einer Verbindung über das SLIP Protokoll) um eine
Verbindung zwischen genau zwei Rechnern handelt. Der Kernel `weiß' also
welchen Rechner er über die PPP-Verbindung anspricht, und die
zusätzliche Angabe einer Gateway-Adresse ist in diesem Falle überflüssig.
Lediglich für Ethernet-, Arcnet- oder Token Ring Verbindungen ist die
Angabe einer Gatewayadresse zwingend vorgeschrieben, da hier über eine
Verbindung eine große Zahl an Rechnern erreicht werden kann.</P>
<H3>Was macht das <CODE>routed</CODE> Programm?</H3>
<P>Die oben beschriebene Konfiguration ist optimiert auf einfache Netzwerke
mit nur wenigen, unveränderlichen Pfaden zu den unterschiedlichen
Zielen. In einem komplexen Netzwerk werden die Dinge jedoch etwas
schwieriger. Doch zum Glück betrifft das nur die wenigsten.</P>
<P>Das größte Problem des manuellen oder statischen Routing, das im vorigen
Abschnitt beschrieben wurde, tritt auf, wenn ein (Verbindungs-) Rechner
im Netzwerk ausfällt. In diesem Fall besteht die einzige Möglichkeit,
ein Datenpaket dennoch zum Ziel weiterzuleiten darin, von Hand
einzugreifen und die entsprechenden Routes manuell einzutragen --
vorausgesetzt natürlich, es existiert solch ein alternativer Weg.
Das ist umständlich, langsam und fehleranfällig. Deshalb wurden
unterschiedliche Mechanismen entwickelt, um die Routing Table
automatisch anzupassen, falls ein Netzwerkfehler auftritt und `Umwege'
zum Ziel bekannt sind. All diese Techniken bezeichnet man als
<EM>dynamische Routing Protokolle</EM>.</P>
<P>Die bekanntesten dynamischen Protokolle sind RIP (Routing Information
Protocol) und OSPF (Open Shortest Path First Protocol). RIP ist
besonders in kleinen Netzwerken wie mittelgroßen Betrieben oder
Gebäude-Netzwerken sehr verbreitet. OSPF ist moderner und insbesondere
darauf ausgelegt, in großen Netzwerken benutzt zu werden, in denen es
eine große Zahl an Wegen durch das Netzwerk gibt. Die am weitesten
verbreiteten Vertreter dieser Protokolle sind <CODE>routed</CODE> (RIP) und
<CODE>gated</CODE> (OSPF). <CODE>routed</CODE> ist normalerweise Bestandteil jeder
Linux Distribution, sonst bekommt man es mit dem Paket NetKit (s.o.).</P>
<P>Ein Beispiel für die Verwendung dynamischen Routings ist die folgende
Konfiguration:
<BLOCKQUOTE><CODE>
<PRE>
192.168.1.0 / 192.168.2.0 /
255.255.255.0 255.255.255.0
- -
| |
| /-----\ /-----\ |
| | |ppp0 // ppp0| | |
eth0 |---| A |------//---------| B |---| eth0
| | | // | | |
| \-----/ \-----/ |
| \ ppp1 ppp1 / |
- \ / -
\ /
\ /
\ /
\ /
\ /
\ /
\ /
\ /
ppp0\ /ppp1
/-----\
| |
| C |
| |
\-----/
|eth0
|
|---------|
192.168.3.0 /
255.255.255.0
</PRE>
</CODE></BLOCKQUOTE>
Es gibt drei Router: A, B und C. Jeder ist für ein Ethernet Segment mit
einem Klasse C IP Netzwerk (netmask 255.255.255.0) zuständig.
Darüberhinaus verfügt jeder Router über jeweils eine PPP-Verbindung zu
jedem der anderen beiden Router, diese Bilden also ein Dreieck.</P>
<P>Ganz offensichtlich könnte die Routing Table für Router A folgendermaßen
aussehen:
<BLOCKQUOTE><CODE>
<PRE>
# route add -net 192.168.1.0 netmask 255.255.255.0 eth0
# route add -net 192.168.2.0 netmask 255.255.255.0 ppp0
# route add -net 192.168.3.0 netmask 255.255.255.0 ppp1
</PRE>
</CODE></BLOCKQUOTE>
Dies funktioniert aber nur, solange die Verbindung zwischen Router A und
B besteht. Bricht diese Verbindung zusammen, können Rechner des
Ethernet Segmentes von Router A keinen Rechner des Segmentes von Router
B mehr erreichen, da A die Datagramme über die PPP-Verbindung an B
weiterreichen will. Sie können immernoch Verbindungen zu den Rechnern
des Segmentes C aufbauen, und diese wiederum können problemlos mit
Rechnern im Segment B kommunizieren, da die Verbindung zwischen B und C
immernoch besteht.</P>
<P>Es wäre also naheliegend daß A die an B gerichteten Pakete an C sendet
und diese dann von C an B weitergeleitet werden. Für genau diese Art
von Problemen sind die dynamischen Protokolle wie RIP ausgelegt. Würde
auf jedem der drei Router A, B und C ein Routing Dämon laufen, würden
diese im Falle eines Netzwerkfehlers die Routing Tabellen der drei
Router automatisch den neuen Gegebenheiten anpassen.
Ein derartiges Netz zu konfigurieren ist sehr einfach, es sind lediglich
zwei Schritte notwendig. Hier das Beispiel für Router A:
<BLOCKQUOTE><CODE>
<PRE>
# route add -net 192.168.1.0 netmask 255.255.255.0 eth0
# /usr/sbin/routed
</PRE>
</CODE></BLOCKQUOTE>
Der Routing Dämon <CODE>routed</CODE> erkennt beim Start automatisch alle
aktiven Netzwerkschnittstellen und sendet und erkennt über diese
Schnittstellen Meldungen um festzustellen, ob Änderungen in der Routing
Table nötig sind.</P>
<P>Die war nur eine sehr kurze Beschreibung, was dynamisches Routing ist,
und in welchen Fällen man es verwendet. Wer genauere Informationen
benötigt sei auf die am Anfang dieses Textes genannten Quellen
verwiesen.</P>
<P>Wichtige Punkte im Zusammenhang mit dynamischen Routing sind:
<OL>
<LI>Einen Routing Dämon benötigt nur, wer auf seinem Rechner mehrere
verschiedene mögliche Routes zu einer Zieladresse besitzt.</LI>
<LI>Der Routing Dämon ändert automatisch die Routing Table, um sie an
Änderungen im Netzwerk anzupassen.</LI>
<LI>RIP ist für kleine und mittelgroße Netzwerke ausgelegt.</LI>
</OL>
</P>
<H2><A NAME="ss4.8">4.8</A> <A HREF="DE-NET3-HOWTO.html#toc4.8">Die Konfiguration von Netzwerk Servern und Diensten.</A>
</H2>
<P>Netzwerk Server und Dienste bezeichnet diejenigen Programme, die es
einem Nutzer von außerhalb (remote user) erlauben, ihren Rechner
zu benutzen. Dieser Nutzer stellt eine Netzwerkverbindung zu ihrem
Rechner, oder besser zu einem Server-Programm auf ihrem Rechner, her.
Dieser Server, man nennt ihn auch Netzwerk Dämon, überwacht einen
<EM>Port</EM>. Er nimmt ankommende Verbindungswünsche entgegen und führt
dann die jeweiligen Aktionen aus. Es gibt zwei unterschiedliche
Methoden, wie ein solcher Netzwerk-Dämon arbeitet:
<DL>
<DT><B>Standalone</B><DD>
<P>Der Dämon überwacht selber den Port. Im Falle einer
ankommenden Verbindung übernimmt der Dämon selbst die Arbeit und stellt
die gewünschte Dienstleistung zur Verfügung.</P>
<DT><B>slave des <CODE>inetd</CODE> Servers</B><DD>
<P>Der <CODE>inetd</CODE> Server ist ein
besonderer Dämon der allgemein darauf spezialisiert ist, eingehende
Netzwerkverbindungen zu beantworten. Er besitzt eine eigene
Konfigurationsdatei in der festgelegt wird, welche Programme er starten
muß wenn auf einem Port eine tcp oder udp Anfrage eintrifft. Diese
Ports werden in einer anderen Datei beschrieben, davon später mehr.</P>
</DL>
Es gibt zwei wichtige Konfigurationsdateien, die an die eigenen
Bedürfnisse angepaßt werden müssen. Dies sind <CODE>/etc/services</CODE>,
in dem den unterschiedlichen Portnummern Namen zugeordnet werden, und
<CODE>/etc/inetd.conf</CODE>, die Konfigurationsdatei des <CODE>inetd</CODE>
Netzwerkdämons. </P>
<H3><CODE>/etc/services</CODE></H3>
<P>Die Datei <CODE>/etc/services</CODE> ist eine einfache Datenbasis, die jedem
Port einen für Menschen leichter verständlichen Namen zuordnet. Das
Format dieser Datei ist sehr einfach: Es handelt sich um eine Textdatei,
und jede Zeile stellt einen Eintrag der Datenbasis dar. ein solcher
Eintrag besteht aus drei Feldern, durch beliebig viele Leerzeichen
getrennt. Diese drei Felder sind:
<PRE>
Name Port/Protokoll Aliases # Kommentar
</PRE>
<DL>
<DT><B>Name</B><DD>
<P>Ein einzelnes Wort, welches den jeweiligen Service
beschreibt.</P>
<DT><B>Port/Protokoll</B><DD>
<P>Dieses Feld besteht aus zwei Einträgen.
<DL>
<DT><B>Port</B><DD>
<P>Eine Nummer, die die Portnummer angibt, unter der
der jeweilige Service angesprochen werden kann. Die meisten der
üblichen Services haben festgelegte Nummern, dies wird in
<CODE>RFC-1340</CODE> beschrieben.</P>
<DT><B>Protokoll</B><DD>
<P>Je nach verwendetem Protokoll steht hier
<CODE>tcp</CODE> oder <CODE>udp</CODE></P>
</DL>
Es ist wichtig darauf hinzuweisen daß ein Eintrag <CODE>18/tcp</CODE> etwas
ganz anderes ist als ein Eintrag <CODE>18/udp</CODE>. Es gibt keinen
technischen Grund warum ein Service über beide Protokolle zur Verfügung
stehen sollte. Nur in seltenen Ausnahmefällen ist dies der Fall, dann
wird man beide Einträge, also für <CODE>udp</CODE> und <CODE>tcp</CODE> finden.</P>
<DT><B>Aliases</B><DD>
<P>Zusätzliche Namen, unter denen dieser Service
angesprochen werden kann.</P>
</DL>
Jeglicher Text nach dem Hash-Zeichen (<CODE>#</CODE>) wird ignoriert.</P>
<H3>Ein Beispiel für <CODE>/etc/services</CODE>.</H3>
<P>Alle modernen Linux Distributionen enthalten bereits eine gute Version
dieser Datei. Falls aber jemand seinen eigenen Rechner von Grund auf
selber aufbauen will, hier ist die mit der Debian Distribution
gelieferte Version.
<BLOCKQUOTE><CODE>
<PRE>
# /etc/services:
# $Id: services,v 1.3 1996/05/06 21:42:37 tobias Exp $
#
# Network services, Internet style
#
# Note that it is presently the policy of IANA to assign a single well-known
# port number for both TCP and UDP; hence, most entries here have two entries
# even if the protocol doesn't support UDP operations.
# Updated from RFC 1340, ``Assigned Numbers'' (July 1992). Not all ports
# are included, only the more common ones.
tcpmux 1/tcp # TCP port service multiplexer
echo 7/tcp
echo 7/udp
discard 9/tcp sink null
discard 9/udp sink null
systat 11/tcp users
daytime 13/tcp
daytime 13/udp
netstat 15/tcp
qotd 17/tcp quote
msp 18/tcp # message send protocol
msp 18/udp # message send protocol
chargen 19/tcp ttytst source
chargen 19/udp ttytst source
ftp-data 20/tcp
ftp 21/tcp
ssh 22/tcp # SSH Remote Login Protocol
ssh 22/udp # SSH Remote Login Protocol
telnet 23/tcp
# 24 - private
smtp 25/tcp mail
# 26 - unassigned
time 37/tcp timserver
time 37/udp timserver
rlp 39/udp resource # resource location
nameserver 42/tcp name # IEN 116
whois 43/tcp nicname
re-mail-ck 50/tcp # Remote Mail Checking Protocol
re-mail-ck 50/udp # Remote Mail Checking Protocol
domain 53/tcp nameserver # name-domain server
domain 53/udp nameserver
mtp 57/tcp # deprecated
bootps 67/tcp # BOOTP server
bootps 67/udp
bootpc 68/tcp # BOOTP client
bootpc 68/udp
tftp 69/udp
gopher 70/tcp # Internet Gopher
gopher 70/udp
rje 77/tcp netrjs
finger 79/tcp
www 80/tcp http # WorldWideWeb HTTP
www 80/udp # HyperText Transfer Protocol
link 87/tcp ttylink
kerberos 88/tcp kerberos5 krb5 # Kerberos v5
kerberos 88/udp kerberos5 krb5 # Kerberos v5
supdup 95/tcp
# 100 - reserved
hostnames 101/tcp hostname # usually from sri-nic
iso-tsap 102/tcp tsap # part of ISODE.
csnet-ns 105/tcp cso-ns # also used by CSO name server
csnet-ns 105/udp cso-ns
rtelnet 107/tcp # Remote Telnet
rtelnet 107/udp
pop-2 109/tcp postoffice # POP version 2
pop-2 109/udp
pop-3 110/tcp # POP version 3
pop-3 110/udp
sunrpc 111/tcp portmapper # RPC 4.0 portmapper TCP
sunrpc 111/udp portmapper # RPC 4.0 portmapper UDP
auth 113/tcp authentication tap ident
sftp 115/tcp
uucp-path 117/tcp
nntp 119/tcp readnews untp # USENET News Transfer Protocol
ntp 123/tcp
ntp 123/udp # Network Time Protocol
netbios-ns 137/tcp # NETBIOS Name Service
netbios-ns 137/udp
netbios-dgm 138/tcp # NETBIOS Datagram Service
netbios-dgm 138/udp
netbios-ssn 139/tcp # NETBIOS session service
netbios-ssn 139/udp
imap2 143/tcp # Interim Mail Access Proto v2
imap2 143/udp
snmp 161/udp # Simple Net Mgmt Proto
snmp-trap 162/udp snmptrap # Traps for SNMP
cmip-man 163/tcp # ISO mgmt over IP (CMOT)
cmip-man 163/udp
cmip-agent 164/tcp
cmip-agent 164/udp
xdmcp 177/tcp # X Display Mgr. Control Proto
xdmcp 177/udp
nextstep 178/tcp NeXTStep NextStep # NeXTStep window
nextstep 178/udp NeXTStep NextStep # server
bgp 179/tcp # Border Gateway Proto.
bgp 179/udp
prospero 191/tcp # Cliff Neuman's Prospero
prospero 191/udp
irc 194/tcp # Internet Relay Chat
irc 194/udp
smux 199/tcp # SNMP Unix Multiplexer
smux 199/udp
at-rtmp 201/tcp # AppleTalk routing
at-rtmp 201/udp
at-nbp 202/tcp # AppleTalk name binding
at-nbp 202/udp
at-echo 204/tcp # AppleTalk echo
at-echo 204/udp
at-zis 206/tcp # AppleTalk zone information
at-zis 206/udp
z3950 210/tcp wais # NISO Z39.50 database
z3950 210/udp wais
ipx 213/tcp # IPX
ipx 213/udp
imap3 220/tcp # Interactive Mail Access
imap3 220/udp # Protocol v3
ulistserv 372/tcp # UNIX Listserv
ulistserv 372/udp
#
# UNIX specific services
#
exec 512/tcp
biff 512/udp comsat
login 513/tcp
who 513/udp whod
shell 514/tcp cmd # no passwords used
syslog 514/udp
printer 515/tcp spooler # line printer spooler
talk 517/udp
ntalk 518/udp
route 520/udp router routed # RIP
timed 525/udp timeserver
tempo 526/tcp newdate
courier 530/tcp rpc
conference 531/tcp chat
netnews 532/tcp readnews
netwall 533/udp # -for emergency broadcasts
uucp 540/tcp uucpd # uucp daemon
remotefs 556/tcp rfs_server rfs # Brunhoff remote filesystem
klogin 543/tcp # Kerberized `rlogin' (v5)
kshell 544/tcp krcmd # Kerberized `rsh' (v5)
kerberos-adm 749/tcp # Kerberos `kadmin' (v5)
#
webster 765/tcp # Network dictionary
webster 765/udp
#
# From ``Assigned Numbers'':
#
#> The Registered Ports are not controlled by the IANA and on most systems
#> can be used by ordinary user processes or programs executed by ordinary
#> users.
#
#> Ports are used in the TCP [45,106] to name the ends of logical
#> connections which carry long term conversations. For the purpose of
#> providing services to unknown callers, a service contact port is
#> defined. This list specifies the port used by the server process as its
#> contact port. While the IANA can not control uses of these ports it
#> does register or list uses of these ports as a convienence to the
#> community.
#
ingreslock 1524/tcp
ingreslock 1524/udp
prospero-np 1525/tcp # Prospero non-privileged
prospero-np 1525/udp
rfe 5002/tcp # Radio Free Ethernet
rfe 5002/udp # Actually uses UDP only
bbs 7000/tcp # BBS service
#
#
# Kerberos (Project Athena/MIT) services
# Note that these are for Kerberos v4, and are unofficial. Sites running
# v4 should uncomment these and comment out the v5 entries above.
#
kerberos4 750/udp kdc # Kerberos (server) udp
kerberos4 750/tcp kdc # Kerberos (server) tcp
kerberos_master 751/udp # Kerberos authentication
kerberos_master 751/tcp # Kerberos authentication
passwd_server 752/udp # Kerberos passwd server
krb_prop 754/tcp # Kerberos slave propagation
krbupdate 760/tcp kreg # Kerberos registration
kpasswd 761/tcp kpwd # Kerberos "passwd"
kpop 1109/tcp # Pop with Kerberos
knetd 2053/tcp # Kerberos de-multiplexor
zephyr-srv 2102/udp # Zephyr server
zephyr-clt 2103/udp # Zephyr serv-hm connection
zephyr-hm 2104/udp # Zephyr hostmanager
eklogin 2105/tcp # Kerberos encrypted rlogin
#
# Unofficial but necessary (for NetBSD) services
#
supfilesrv 871/tcp # SUP server
supfiledbg 1127/tcp # SUP debugging
#
# Datagram Delivery Protocol services
#
rtmp 1/ddp # Routing Table Maintenance Protocol
nbp 2/ddp # Name Binding Protocol
echo 4/ddp # AppleTalk Echo Protocol
zip 6/ddp # Zone Information Protocol
#
# Debian GNU/Linux services
rmtcfg 1236/tcp # Gracilis Packeten remote config server
xtel 1313/tcp # french minitel
cfinger 2003/tcp # GNU Finger
postgres 4321/tcp # POSTGRES
mandelspawn 9359/udp mandelbrot # network mandelbrot
# Local services
</PRE>
</CODE></BLOCKQUOTE>
</P>
<H3><CODE>/etc/inetd.conf</CODE></H3>
<P>Die Datei <CODE>/etc/inetd.conf</CODE> ist die Konfigurationsdatei des
Server Dämons <CODE>inetd</CODE>. Bei einer eingehenden Anfrage nach einem
bestimmten Service sieht der Dämon in dieser Datei nach, was zu tun
ist. Für jeden Service, den man anbieten will, muß ein entsprechender
Eintrag vorhanden sein in dem festgelegt wird, welcher Däamon bei
einer Anfrage gestartet werden soll, und wie dies zu geschehen hat.</P>
<P>Auch hier ist das Dateiformat sehr einfach, es handelt sich ebenfalls
um eine reine Textdatei, in der in jeder Zeile ein anzubietender
Service beschrieben wird. Das Zeichen <CODE>#</CODE>dient als
Kommentarzeichen, nachfolgender Text wird ignoriert. Jede Zeile
enthält sieben Felder, die jeweils durch eine beliebige Anzahl von
Leerzeichen oder Tabulatoren voneinander getrennt sind. Die
Bezeichnungen der einzelnen Felder sind folgende:
<BLOCKQUOTE><CODE>
<PRE>
service socket_type proto flags user server_path server_args
</PRE>
</CODE></BLOCKQUOTE>
<DL>
<DT><B>service</B><DD>
<P>Name des Dienstes, entsprechend dem Eintrag in
<CODE>ætc/services</CODE>.</P>
<DT><B>socket_type</B><DD>
<P>Dieser Eintrag beschreibt den Typ des Socket,
der für den Dienst gilt. Erlaubte Einträge sind <CODE>stream</CODE>,
<CODE>dgram</CODE>, <CODE>raw</CODE>, <CODE>rdm</CODE> und <CODE>seqpacket</CODE>. Die Gründe
für die Unterteilung sind technischer Natur, aber als Faustregel
kann man davon ausgehen, daß praktisch alle <CODE>tcp</CODE>basierten
Dienste <CODE>stream</CODE> verwenden, während <CODE>udp</CODE>-basierte Dienste
<CODE>dgram</CODE> benutzen. Nur in ganz seltenen Fällen wird ein Dienst
einen anderen Typ verwenden.</P>
<DT><B>proto</B><DD>
<P>Das für diesen Service gültige Protokoll. Es
muß mit dem Eintrag in <CODE>/etc/services</CODE> übereinstimmen,
normalerweise also entweder <CODE>tcp</CODE>oder <CODE>udp</CODE>. Für Server, die
Sun RPC (Remote Procedure Call) verwenden, lauten die Einträge
<CODE>rpc/tcp</CODE> oder <CODE>rpc/udp</CODE>.</P>
<DT><B>flags</B><DD>
<P>Hier gibt es nur zwei mögliche Einträge. Dem
<CODE>inetd</CODE> Server wird damit angezeigt, ob das gestartete
Serverprogramm den Socket nach dem Start wieder freigibt oder nicht.
Danach entscheidet sich, ob für eine weitere eingehende Anfrage ein
neuer Prozeß gestartet werden muß, oder ob der laufende Prozeß
auch die neuen Anfragen bearbeitet. Die Regeln hierfür sind etwas
schwierig, aber auch hier gilt als Faustregel: <CODE>tcp</CODE>-Dienste
benötigen den Eintrag <CODE>nowait</CODE>, <CODE>udp</CODE>-Dienste verwenden
<CODE>wait</CODE>. Es gibt hier aber etliche Ausnahmen, im Zweifelsfall sollte
man sich am Beispiel orientieren.</P>
<DT><B>user</B><DD>
<P>Dieser Eintrag legt den Nutzernamen entsprechend
<CODE>/etc/passwd</CODE> fest, mit dessen Rechten der Server gestartet
wird. Dies wird oft aus Sicherheitsgründen gemacht. Verwendet man
hier der Benutzer <CODE>nobody</CODE>, so werden die möglichen
Folgeschäden eingegrenzt, sollte doch jemand die
Sicherheitsmechanismen des Systems umgehen. Allerdings benötigen
viele Server die Rechte des Systemadministrators, deshalb steht hier
meist <CODE>root</CODE>.</P>
<DT><B>server_path</B><DD>
<P>Dies ist der Name inklusive vollem Pfad des zu
startenden Servers.</P>
<DT><B>server_args</B><DD>
<P>Dieser Eintrag umfaßt die gesamte restliche
Zeile und ist optional. Hier können zusätzliche Argumente für
das Serverprogramm übergeben werden.</P>
</DL>
</P>
<H3>Ein Beispiel für <CODE>/etc/inetd.conf</CODE></H3>
<P>Wie auch im Falle von <CODE>/etc/services</CODE> gehört ein
funktionierendes <CODE>/etc/inetd.conf</CODE> zum Standardumfang jeder
Distribution. Der Vollständigkeit halber hier die Version der
Debian Distribution.</P>
<P>
<BLOCKQUOTE><CODE>
<PRE>
# /etc/inetd.conf: see inetd(8) for further informations.
#
# Internet server configuration database
#
#
# Modified for Debian by Peter Tobias <tobias@et-inf.fho-emden.de>
#
# <service_name> <sock_type> <proto> <flags> <user> <server_path> <args>
#
# Internal services
#
#echo stream tcp nowait root internal
#echo dgram udp wait root internal
discard stream tcp nowait root internal
discard dgram udp wait root internal
daytime stream tcp nowait root internal
daytime dgram udp wait root internal
#chargen stream tcp nowait root internal
#chargen dgram udp wait root internal
time stream tcp nowait root internal
time dgram udp wait root internal
#
# These are standard services.
#
telnet stream tcp nowait root /usr/sbin/tcpd /usr/sbin/in.telnetd
ftp stream tcp nowait root /usr/sbin/tcpd /usr/sbin/in.ftpd
#fsp dgram udp wait root /usr/sbin/tcpd /usr/sbin/in.fspd
#
# Shell, login, exec and talk are BSD protocols.
#
shell stream tcp nowait root /usr/sbin/tcpd /usr/sbin/in.rshd
login stream tcp nowait root /usr/sbin/tcpd /usr/sbin/in.rlogind
#exec stream tcp nowait root /usr/sbin/tcpd /usr/sbin/in.rexecd
talk dgram udp wait root /usr/sbin/tcpd /usr/sbin/in.talkd
ntalk dgram udp wait root /usr/sbin/tcpd /usr/sbin/in.ntalkd
#
# Mail, news and uucp services.
#
smtp stream tcp nowait root /usr/sbin/tcpd /usr/sbin/in.smtpd
#nntp stream tcp nowait news /usr/sbin/tcpd /usr/sbin/in.nntpd
#uucp stream tcp nowait uucp /usr/sbin/tcpd /usr/lib/uucp/uucico
#comsat dgram udp wait root /usr/sbin/tcpd /usr/sbin/in.comsat
#
# Pop et al
#
#pop-2 stream tcp nowait root /usr/sbin/tcpd /usr/sbin/in.pop2d
#pop-3 stream tcp nowait root /usr/sbin/tcpd /usr/sbin/in.pop3d
#
# `cfinger' is for the GNU finger server available for Debian. (NOTE: The
# current implementation of the `finger' daemon allows it to be run as `root'.)
#
#cfinger stream tcp nowait root /usr/sbin/tcpd /usr/sbin/in.cfingerd
#finger stream tcp nowait root /usr/sbin/tcpd /usr/sbin/in.fingerd
#netstat stream tcp nowait nobody /usr/sbin/tcpd /bin/netstat
#systat stream tcp nowait nobody /usr/sbin/tcpd /bin/ps -auwwx
#
# Tftp service is provided primarily for booting. Most sites
# run this only on machines acting as "boot servers."
#
#tftp dgram udp wait nobody /usr/sbin/tcpd /usr/sbin/in.tftpd
#tftp dgram udp wait nobody /usr/sbin/tcpd /usr/sbin/in.tftpd /boot
#bootps dgram udp wait root /usr/sbin/bootpd bootpd -i -t 120
#
# Kerberos authenticated services (these probably need to be corrected)
#
#klogin stream tcp nowait root /usr/sbin/tcpd /usr/sbin/in.rlogind -k
#eklogin stream tcp nowait root /usr/sbin/tcpd /usr/sbin/in.rlogind -k -x
#kshell stream tcp nowait root /usr/sbin/tcpd /usr/sbin/in.rshd -k
#
# Services run ONLY on the Kerberos server (these probably need to be corrected)
#
#krbupdate stream tcp nowait root /usr/sbin/tcpd /usr/sbin/registerd
#kpasswd stream tcp nowait root /usr/sbin/tcpd /usr/sbin/kpasswdd
#
# RPC based services
#
#mountd/1 dgram rpc/udp wait root /usr/sbin/tcpd /usr/sbin/rpc.mountd
#rstatd/1-3 dgram rpc/udp wait root /usr/sbin/tcpd /usr/sbin/rpc.rstatd
#rusersd/2-3 dgram rpc/udp wait root /usr/sbin/tcpd /usr/sbin/rpc.rusersd
#walld/1 dgram rpc/udp wait root /usr/sbin/tcpd /usr/sbin/rpc.rwalld
#
# End of inetd.conf.
ident stream tcp nowait nobody /usr/sbin/identd identd -i
</PRE>
</CODE></BLOCKQUOTE>
</P>
<H2><A NAME="ss4.9">4.9</A> <A HREF="DE-NET3-HOWTO.html#toc4.9">Weitere Konfigurationsdateien im Netzwerkumfeld.</A>
</H2>
<P>Es gibt noch eine ganze Reihe an Dateien, die mit der
Netzwerkkonfiguration unter Linux zu tun haben. Die meisten davon wird
man nie verändern müssen, es lohnt sich aber dennoch, sie kurz
zu beschreiben, damit klar wird was darinsteht, und wozu sie gut sind.</P>
<H3><CODE>/etc/protocols</CODE></H3>
<P><CODE>/etc/protocols</CODE> ist eine Datei, in der Protokollnamen und
Identifikationsnummern einander zugeordnet werden. Sie wird vorwiegend
von Programmierern verwendet, damit sie in ihren Programmen die Dienste
anhand ihres Namens verwenden können, außerdem von Programmen wie
<CODE>tcpdump</CODE>, um anstelle von Nummern Namen ausgeben zu können.
Die Standardsyntax dieser Datei ist
<BLOCKQUOTE><CODE>
<PRE>
Protokollname Nummer Alias
</PRE>
</CODE></BLOCKQUOTE>
Die Datei <CODE>/etc/protocols</CODE> der
Debian Distribution sieht so aus:
<BLOCKQUOTE><CODE>
<PRE>
# /etc/protocols:
# $Id: protocols,v 1.1 1995/02/24 01:09:41 imurdock Exp $
#
# Internet (IP) protocols
#
# from: @(#)protocols 5.1 (Berkeley) 4/17/89
#
# Updated for NetBSD based on RFC 1340, Assigned Numbers (July 1992).
ip 0 IP # internet protocol, pseudo protocol number
icmp 1 ICMP # internet control message protocol
igmp 2 IGMP # Internet Group Management
ggp 3 GGP # gateway-gateway protocol
ipencap 4 IP-ENCAP # IP encapsulated in IP (officially ``IP'')
st 5 ST # ST datagram mode
tcp 6 TCP # transmission control protocol
egp 8 EGP # exterior gateway protocol
pup 12 PUP # PARC universal packet protocol
udp 17 UDP # user datagram protocol
hmp 20 HMP # host monitoring protocol
xns-idp 22 XNS-IDP # Xerox NS IDP
rdp 27 RDP # "reliable datagram" protocol
iso-tp4 29 ISO-TP4 # ISO Transport Protocol class 4
xtp 36 XTP # Xpress Tranfer Protocol
ddp 37 DDP # Datagram Delivery Protocol
idpr-cmtp 39 IDPR-CMTP # IDPR Control Message Transport
rspf 73 RSPF # Radio Shortest Path First.
vmtp 81 VMTP # Versatile Message Transport
ospf 89 OSPFIGP # Open Shortest Path First IGP
ipip 94 IPIP # Yet Another IP encapsulation
encap 98 ENCAP # Yet Another IP encapsulation
</PRE>
</CODE></BLOCKQUOTE>
</P>
<H3><CODE>/etc/networks</CODE></H3>
<P>Die Datei <CODE>/etc/networks</CODE> hat eine ähnliche Funktion wie
<CODE>/etc/hosts</CODE>. Es stellt eine einfache Datenbasis für die
Zuordnung von Netzwerknamen und -adressen dar. Der einzige Unterschied
zu letzterem besteht darin, daß nur zwei Einträge je Zeile erlaubt sind,
und zwar folgendermassen:
<BLOCKQUOTE><CODE>
<PRE>
Netzwerkname Netzwerkadresse
</PRE>
</CODE></BLOCKQUOTE>
</P>
<P>Auch hier ein kleines Beispiel:
<BLOCKQUOTE><CODE>
<PRE>
loopnet 127.0.0.0
localnet 192.168.0.0
amprnet 44.0.0.0
</PRE>
</CODE></BLOCKQUOTE>
</P>
<P>Bei Programmen wie <CODE>route</CODE>wird ein Netzwerk, das einen Eintrag in
<CODE>/etc/networks</CODE> hat, mit seinem Namen anstelle der reinen
Netzwerkadresse angezeigt.</P>
<H2><A NAME="ss4.10">4.10</A> <A HREF="DE-NET3-HOWTO.html#toc4.10">Netzwerksicherheit und Zugangskontrolle</A>
</H2>
<P>Zu Beginn dieses Abschnittes eine kleine Warnung: Einen Rechner oder gar
ein Netzwerk gegen unerlaubtes Eindringen abzusichern ist ein äußerst
schwieriges Unterfangen. Ich selber betrachte mich nicht als Experten
auf diesem Gebiet, und obwohl die im folgenden beschriebenen Mechanismen
sicherlich hilfreich sind möchte ich all denen, die wirklich um die
Sicherheit ihres Systems besorgt sind, raten, selber geeignete Literatur
zu suchen. Im Internet findet man viele gute Hinweise dazu.</P>
<P>Ein wichtiger Grundsatz zur Sicherheit ist
<B>Aktivieren sie keine Dienste, die sie nicht benötigen</B>.
Die meisten Distributionen sind heute mit einer Vielzahl von Servern
ausgestattet, die beim Bootprozeß automatisch gestartet werden. Um ein
Mindestmaß an Systemsicherheit zu gewährleisten sollten Sie sich die
Datei <CODE>/etc/inetd.conf</CODE> in Ruhe ansehen und alle nichtbenötigten
Dienste durch Einfügen eines <CODE>#</CODE> am Zeilenanfang
auszukommentieren. Gute `Kandidaten' hierfür sind <CODE>shell</CODE>, <CODE>login</CODE>,
<CODE>exec</CODE>, <CODE>uucp</CODE> und <CODE>ftp</CODE> sowie informelle Dienste wie
<CODE>finger</CODE>, <CODE>netstat</CODE> und <CODE>systat</CODE>.</P>
<P>Es gibt eine große Zahl an Sicherheits- und Zugangskontrollmechanismen,
ich werde im folgenden die wichtigsten davon kurz beschreiben.</P>
<H3><CODE>/etc/ftpusers</CODE></H3>
<P>Die Datei <CODE>/etc/ftpusers</CODE> bietet eine einfache Möglichkeit,
einzelne Personen vom Zugang über <CODE>ftp</CODE> auszuschließen. Die Datei
wird vom ftp-Dämonen <CODE>ftpd</CODE> gelesen, wenn eine FTP-Verbindung
aufgebaut wird. Die Datei enthält einfach eine Liste mit den
Benutzernamen all derer, denen ein Login verboten werden soll. Hier ein
Beispiel:
<BLOCKQUOTE><CODE>
<PRE>
# /etc/ftpusers - users not allowed to login via ftp
root
uucp
bin
mail
</PRE>
</CODE></BLOCKQUOTE>
</P>
<H3><CODE>/etc/securetty</CODE></H3>
<P>Mit dieser Datei wird festgelegt, an welchen (virtuellen) Terminals
(<CODE>ttys</CODE>) sich der Systemverwalter <CODE>root</CODE> einloggen darf.
<CODE>/etc/securetty</CODE> wird vom Login-Programm (normalerweise
<CODE>/bin/login</CODE>) gelesen und enthält eine Liste der erlaubten
Terminals, auf allen anderen kann <CODE>root</CODE> sich nicht einloggen:
<BLOCKQUOTE><CODE>
<PRE>
# /etc/securetty - tty's on which root is allowed to login
tty1
tty2
tty3
tty4
</PRE>
</CODE></BLOCKQUOTE>
</P>
<H3>Die <CODE>tcpd</CODE> Hostzugangskontrolle</H3>
<P>Das Programm <CODE>tcpd</CODE> ist ihnen vielleicht schon in der Datei
<CODE>/etc/inetd.conf</CODE> aufgefallen. Es stellt Kontroll- und
Zugangskontrollmechanismen für diejenigen Dienste zur Verfügung, für die
es konfiguriert wird.</P>
<P>Wird es von <CODE>inetd</CODE> gestartet so liest es zwei Dateien, anhand derer
der Zugang zum überwachten Server gewährt oder verboten werden kann.</P>
<P>Die beiden Steuerdateien werden jeweils solange gelesen, bis ein
zutreffender Eintrag gefunden wird. Wird ein solcher zutreffender
Eintrag nicht gefunden, wird angenommen, daß der Zugang für jeden
erlaubt ist. Gelesen werden die Dateien in der Reihenfolge
<CODE>/etc/hosts.allow</CODE>, <CODE>/etc/hosts.deny</CODE>. Die beiden Dateien
werden in den folgenden Abschnitten beschrieben. Für eine detaillierte
Beschreibung sei auf die <CODE>man</CODE> Hilfeseiten verwiesen,
<CODE>host_access(5)</CODE> ist hier ein guter Startpunkt.</P>
<H3><CODE>/etc/hosts.allow</CODE></H3>
<P>Dies ist eine der Konfigurationsdateien des Programmes
<CODE>/usr/sbin/tcpd</CODE>. In <CODE>/etc/hosts.allow</CODE> wird eingestellt,
welchen anderen Rechnern der Zugang zu Diensten auf dem eigenen Rechner
gestattet werden soll. Das Dateiformat ist sehr einfach:
<BLOCKQUOTE><CODE>
<PRE>
# /etc/hosts.allow
#
# <service list>: <host list> [: command]
</PRE>
</CODE></BLOCKQUOTE>
</P>
<P>
<DL>
<DT><B>service list</B><DD>
<P>Eine durch Kommata getrennte Liste von Namen der
Dienste, für die der Eintrag gelten soll, z.B. <CODE>ftpd</CODE>, <CODE>telnetd</CODE>
oder <CODE>fingerd</CODE>.</P>
<DT><B>host list</B><DD>
<P>Eine durch Komma getrennte Liste von
Rechnernamen, es können hier auch IP-Adressen angegeben werden. Außerdem
können Platzhalter verwendet werden. Beispiele hierfür sind
<CODE>gw.vk2ktj.ampr.org</CODE> (bestimmter Rechner), <CODE>.uts.edu.au</CODE> (alle
Rechner deren Name mit dieser Zeichenkette endet) oder <CODE>44.</CODE> (alle
IP-Adressen, die mit der angegebenen Ziffernfolge beginnen). Weiterhin
existieren einige besondere, die die Konfiguration vereinfachen.
Einige davon sind <CODE>ALL</CODE> (jeder Rechner), <CODE>LOCAL</CODE> (Rechner ohne
Dezimalpunkt "<CODE>.</CODE>" im Namen, also solche der lokalen Domain) sowie
<CODE>PARANOID</CODE> (Rechner, deren Namen nicht der Adresse entspricht; dient
der Vermeidung von Spoofing). Ein letzter nützlicher Eintrag ist
<CODE>EXCEPT</CODE>. Dadurch können Listen mit Ausnahmen definiert werden, wie
in einem späteren Beispiel erläutert wird.</P>
<DT><B>command</B><DD>
<P>Dies ist ein optionaler Parameter. Hier kann ein
Programm mit seinem vollständigen Pfad angegeben werden welches jedesmal
ausgeführt wird, wenn die entsprechende Regel erfüllt ist. Es kann
beispielsweise ein Programm gestartet werden das herauszufinden
versucht, wer gerade auf dem anderen Rechner eingelogged ist, oder eine
Meldung an den Systemadministrator schickt, daß gerade jemand versucht,
diesen Dienst zu nutzen. Zur Kommandogenerierung existieren einige
Platzhalter, die automatisch gesetzt werden: <CODE>%h</CODE> ist der Name des
Rechners, der die Verbindung aufbauen will, oder seine
IP-Adresse. <CODE>%d</CODE> ist der Name des Dämons, der gestartet werden soll.</P>
</DL>
Ein Beispiel:
<BLOCKQUOTE><CODE>
<PRE>
# /etc/hosts.allow
#
# Mail ist jedem erlaubt
in.smtpd: ALL
# Telnet und FTP nur von lokalen Rechnern sowie meinem Rechner zu Hause
telnetd, ftpd: LOCAL, myhost.athome.org.au
# Finger ist allen erlaubt, aber es wird protokolliert, woher die
# Anfrage kommt
fingerd: ALL: (finger @%h | mail -s "finger from %h" root)
</PRE>
</CODE></BLOCKQUOTE>
</P>
<H3><CODE>/etc/hosts.deny</CODE></H3>
<P>Dies ist eine der Konfigurationsdateien des Programmes
<CODE>/usr/sbin/tcpd</CODE>. In <CODE>/etc/hosts.deny</CODE> wird eingestellt,
welchen anderen Rechnern der Zugang zu Diensten auf dem eigenen Rechner
verboten werden soll.</P>
<P>Ein einfaches Beispiel sieht etwa so aus:
<BLOCKQUOTE><CODE>
<PRE>
# /etc/hosts.deny
#
# Kein Zugang fuer Rechner mit suspektem Namen
ALL: PARANOID
#
# Verbot fuer ALLE Rechner
ALL: ALL
</PRE>
</CODE></BLOCKQUOTE>
</P>
<P>Der Eintrag <CODE>PARANOID</CODE> ist hier redundant, da der folgende Eintrag in
jedem Fall einen Zugang unterbindet. Jeder der beiden Einträge ist eine
sinnvolle Einstellung, abhängig von den jeweiligen Bedürfnissen.</P>
<P>Die sicherste Konfiguration ist ein Eintrag <CODE>ALL: ALL</CODE> in
<CODE>/etc/hosts.deny</CODE> zusammen mit einer Datei
<CODE>/etc/hosts.allow</CODE> in der im einzelnen festgelegt wird, für wen
der Zugang erlaubt wird.</P>
<H3><CODE>/etc/hosts.equiv</CODE></H3>
<P>Die Datei <CODE>/etc/hosts.equiv</CODE> erlaubt es, einzelnen Rechnern und
Benutzern den Zugang zur eigenen Maschine ohne Paßwortabfrage zu
ermöglichen. Dies ist in einer sicheren Umgebung hilfreich, in der man
alle anderen Maschinen unter Kontrolle hat. Andernfalls ist es aber ein
großes Sicherheitsrisiko. Denn der eigene Rechner ist nur so sicher wie
der unsicherste Rechner, dem man vertraut. Wer großen Wert auf höchste
Sicherheit legt sollte diesen Mechanismus nicht verwenden, und auch den
Nutzern nahelegen, die Datei <CODE>.rhosts</CODE> nicht zu verwenden.</P>
<H3>Konfiguration des <CODE>ftp</CODE> Dämons</H3>
<P>Viele Besitzer von vernetzten Rechnern sind daran interessiert, anderen
Personen das Übertragen von Daten von und zum eigenen Rechner zu
ermöglichen, ohne ihnen einen expliziten Account einzurichten. Dazu
dient der FTP Server. Es muß aber sichergestellt sein, daß der
<CODE>ftp</CODE>-Dämon korrekt für den anonymen Zugang konfiguriert ist. Die
Seite <CODE>ftpd(8)</CODE> der Online-Hilfe beschreibt die dazu notwendigen
Schritte in einiger Länge. Diesen Tips sollte man unbedingt folgen.
Außerdem ein wichtiger Tip: Verwenden sie auf keinen Fall einfach eine
Kopie der eigenen Datei <CODE>/etc/passwd</CODE> im anonymen
Heimatverzeichnis <CODE>/etc</CODE>. Stellen sie sicher, daß alle
unwichtigen Einträge entfernt werden, sonst stehen Angriffen durch
Paßwortentschlüsselung Tür und Tor offen.</P>
<H3>Einrichtung eines Firewall</H3>
<P>Eine extrem sichere Methode gegen Angriffe über das Netzwerk ist es,
erst gar keine Datagramme an den Rechner heranzulassen. Dieses wird in
einem eigenen Dokument beschrieben, dem
<EM>
<A HREF="DE-Firewall-HOWTO.html">Firewall HOWTO</A></EM>.</P>
<H3>Weitere Tips und Vorschläge</H3>
<P>Hier noch ein paar weitere Hinweise, auch wenn der eine oder andere
davon geeignet ist, Glaubenskriege unter Unix-Administratoren
hervorzurufen.
<DL>
<DT><B>sendmail</B><DD>
<P>Obwohl die Verwendung des <CODE>sendmail</CODE>-Dämons sehr
weit verbreitet ist, taucht er mit erschreckender Regelmäßigkeit in
Warnungen vor Sicherheitslöchern auf. Es obliegt jedem selber, ob er
<CODE>sendmail</CODE> verwenden will.</P>
<DT><B>NFS und andere Sun RPC Dienste</B><DD>
<P>Seien Sie vorsichtig damit. Es
gibt bei diesen Diensten eine große Zahl potentieller
Sicherheitsrisiken. Allerdings ist es schwierig, für etwas wie NFS eine
Alternative zu finden. Wenn Sie diese Dienste benutzen, seien Sie
vorsichtig, wem Sie einen Zugriff darauf erlauben.</P>
</DL>
</P>
<HR>
<A HREF="DE-NET3-HOWTO-5.html"><IMG SRC="next.png" ALT="Weiter"></A>
<A HREF="DE-NET3-HOWTO-3.html"><IMG SRC="prev.png" ALT="Zurück"></A>
<A HREF="DE-NET3-HOWTO.html#toc4"><IMG SRC="toc.png" ALT="Inhalt"></A>
</BODY>
</HTML>
|