Ident-Daemon für NAT-User
Inhalt:Was ist Ident
Manche IRC(net)-/ftp-/SMTP-/???-Server verlangen eine erfolgreiche Ident-Response, um auf sie zuzugreifen. Z.B. wird nur eine Verbindung pro IP-Adresse ins IRCnet zugelassen, jedoch weitere, wenn jeweils eine andere Ident-Response geliefert werden kann. Ident, auch auth(entication) genannt, laeuft auf 113/tcp, hat trotz des Namens aber nichts mit Authentifizierung zu tun. Da diese Ident-Requests als neue Anfragen (SYN-Pakete) reinkommen, muss also schonmal TCP-Port 113 offen sein, da ist nix mit ESTABLISHED oder RELATED. Hosts, die geNATtet auf solche Server zugreifen, koennen selbst natuerlich keine Ident-Response liefern, schliesslich hat man nur einen TCP-Port 113, den man nicht auf alle forwarden kann. Was also tun, damit eine Ident-Response geliefert werden kann und die geNATteten Rechner so auf diese Server kommen? http://www.zugschlus.de/zmna/authInstallation
oidentd installieren; bei Debian genuegt dazu der uebliche apt-get|aptitude-Befehl. Fuer RPM-kisten gibt's oidentd-2.0.4-fr3.i386.rpm, oidentd-2.0.4-fr3.src.rpm, worauf sich hier jetzt auch bezogen wird. (TODO: Debians oidentd checken) Normalerweise verlaeuft eine Ident-Abfrage in etwa so:$ telnet remote 113 Trying ... Connected to localhost. Escape character is '^]'. 42,23 42 , 23 : USERID : UNIX : hanswurst quit Connection closed by foreign host.Mit 42,23 wird die Src-/Dst-Port-Kombination genannt, wovon der User/Prozess in Erfahrung gebracht werden soll, der dahintersteckt. Im Beispiel gibt's also gerade eine TCP-Verbindung zwischen dem eigenen Rechner und dem Host remote auf den Ports 42 und 23, die der Benutzer "hanswurst" geöffnet hat, wie die Antwort zeigt. Anstatt "quit" koennten noch direkt weitere Anfragen gestellt werden. Folgende Moeglichkeiten sind fuer einen Masq-Router also denkbar:
- Die Ident-Anfrage wird weitergeleitet zu dem geNATteten Host, der die Verbindung aufgebaut hat, und dessen Antwort wird dann an den anfragenden Server zurueckgegeben. Ist nicht besonders schoen, weil nicht so performant, fehleranfaellig, und jeder User muss sich um seinen eigenen Identd kuemmern (was aber evtl. auch wieder sinnvoll sein kann). Damit arbeitet der Identd auf dem Masq-Router dann also quasi als Proxy.
- Einfacher ist es, wenn der Router einfach selbst (irgend)eine Antwort gibt. Wenn eine bestimmte Antwort gegeben werden soll, dann braucht man eine Tabelle (masqrouter:/etc/oidentd_masq.conf) in der pro maskierter IP-Adresse eine Ident-Response (USER OS-TYPE) steht. Wir waehlen als USER den DNS-Hostname zur 10er-IP-Adresse und als OS-TYPE "UNKNOWN".
Debian
In der Datei/etc/default/oident trägt man ungefähr folgendes ein:
OIDENT_OPTIONS="-m " OIDENT_USER=nobody OIDENT_GROUP=root #OIDENT_BEHIND_PROXY=yes
Red-Hat
Der oidentd aus oidentd-2.0.4-fr3.i386.rpm bringt ein Init-Script (/etc/init.d/identd) mit, das fuer Red Hat Linux release 8.0 (Psyche) u.a. leicht angepasst werden muss:
@@ -26,7 +26,8 @@
[ -x /usr/sbin/oidentd ] || exit 0
-IDENTDOPTS="-q -u nobody -g nobody"
+# "-m" was added and "-g nobody" was commented in order to make oidentd work as required.
+# without "-q" there's always a log-entry generated on a ident-request/reply, which could
+# be used to check who has (probably) initated a connection to the requesting computer
+# just shortly before.
+IDENTDOPTS="-m -q -u nobody" # -g nobody"
RETVAL=0
start() {
Updates
Regelmaessig muss die Datei /etc/oidentd_masq.conf generiert und aktualisiert werden. Wesentlich dabei ist nur, dass eben jede durch den Router geNATtete IP-Adresse drinsteht. Es empfiehlt sich also ein taegliches Update. oident_masq.conf
Eine beispielhafte oident_masq.conf:
10.1.1.2 berry UNKNOWN 10.1.3.2 corsa UNKNOWN 10.1.2.5 sunshine UNKNOWN 10.1.2.6 pilot UNKNOWN 10.1.2.7 ken UNKNOWN 10.1.3.9 droll UNKNOWNSo sollte das Aktualisieren der Datei oident_masq.conf erfolgen (als root):
# cat oident_masq.conf,neu | ssh masqrouter "cat > etc/oidentd_masq.conf,neu" # ssh masqrouter "mv /etc/oidentd_masq.conf,neu /etc/oidentd_masq.conf"
Funktionstest
Das Funktionieren des oidentd laesst sich beispielsweise so von einem maskierte/geNATteten Rechner aus pruefen; hier laeuft also kein oidentd auf dem Masq-Router:
$ bitchx freechat-network.de
...
-:- Connecting to port 6667 of server freechat-network.de [refnum 0]
[e] *** Looking up your hostname...
[e] *** Checking ident...
[e] *** Found your hostname
[e] *** No ident response; username prefixed with ~
>>> IRC [IRC@main.freechat-network.de] requested VERSION from hog
-:- BitchX: For more information about BitchX type /about
-:- Welcome to the Freechat-Network IRC Network hog!~hog@gw-1.selfnet.de
(from main.freechat-network.de)
...
Nun schon, aber die Ident-Response war negativ:
$ bitchx freechat-network.de
...
-:- Connecting to port 6667 of server freechat-network.de [refnum 0]
[e] *** Looking up your hostname...
[e] *** Checking ident...
[e] *** Received identd response
[e] *** Found your hostname
>>> IRC [IRC@main.freechat-network.de] requested VERSION from hog
-:- BitchX: For more information about BitchX type /about
-:- Welcome to the Freechat-Network IRC Network hog_!~hog@gw-3.selfnet.de
(from main.freechat-network.de)
...
Hier ist dann alles in Butter, die Tilde ist weg:
$ bitchx freechat-network.de
...
-:- Connecting to port 6667 of server freechat-network.de [refnum 0]
[e] *** Looking up your hostname...
[e] *** Checking ident...
[e] *** Received identd response
[e] *** Found your hostname
>>> IRC [IRC@main.freechat-network.de] requested VERSION from hog
-:- BitchX: For more information about BitchX type /about
-:- Welcome to the Freechat-Network IRC Network hog_!goh@gw-3.selfnet.de
(from main.freechat-network.de)
...
Freechat-Network gehoert uebrigens nicht zum IRCnet, verlangt also auch keine Ident-Responses.
Bugs / Patches
Ältere 2.4er Linux-Kernel
ACHTUNG: Es gibt krasse Bugs in Linux bis in die 2.6er-Vanilla-Serie hinein, die so 'nen Router toeten (Oops! verursachbar evtl. durch telnet localhost 113 ...) koennen, also ggf. moeglichst alle patches (die was mit /proc/net/ip_conntrack zu tun haben aus patch-o-matic-ng von http://www.netfilter.org/ einspielen.Vgl.:
http://groups.google.de/groups?hl=de&lr=&ie=UTF-8&threadm=4041.00000000.3b9762d8%40newsgate.onet.pl
http://lkml.org/lkml/2003/12/30/141
<kaber@trash.net>, tracked down by Raivis Bucis <raivis@mt.lv>) �This patch fixes an oops while listing /proc/net/ip_conntrack.�
http://kernel.org/pub/linux/kernel/v2.6/ChangeLog-2.6.7 This patch fixes an oops while listing /proc/net/ip_conntrack. Tracked down by Raivis Bucis <raivis@mt.lv> http://www.linuxhq.com/kernel/changelog/v2.6/7-rc3-bk7/ ChangeSet@1.1754.8.3, 2004-06-14 17:28:58-07:00, laforge@netfilter.org
http://groups.google.de/groups?hl=de&lr=&ie=UTF-8&threadm=4041.00000000.3b9762d8%40newsgate.onet.pl
Neuer 2.6er Kernel
Neue Kernel haben in der Kernel-Config die eigentlich recht praktische OptionCONFIG_IP_NF_CT_ACCT .
Leider ändert sich das Format der Datei /proc/net/ip_conntrack , wenn man diese Option aktiviert.
Damit oidentd auch mit dem neuen Format zurecht kommt, hilft folgender patch:
Ein Debian-Paket mit diesem Patch fertig drin liegt auf unserem FTP-Server:
Alternativen
etwaige Alternativen (weniger gute, da u.a. i.d.R. schon laenger nicht mehr gepflegt, d.h. veraltet):- midentd http://panorama.sth.ac.at/midentd/
- bidentd
- ...
| I | Attachment | Action | Size | Date | Who | Comment |
|---|---|---|---|---|---|---|
| |
oidentd-linux-2.6.10_conntrack.patch | manage | 0.7 K | 07 Jan 2005 - 01:11 | Main.matthias |