TFTP: Zeitüberschreitung bei der Übertragung auf einem RHEL 6-Server

3

Ich stoße hier an eine Wand und versuche, TFTP mit RHEL 6 als Server zum Laufen zu bringen. Der Fehler vom Client ist einfach "Zeitüberschreitung der Übertragung". Auf dem Server kann ich sehen, dass UDP 69-Datenverkehr von meinem Client eingeht, aber ich sehe keine Pakete, die zum Client zurückkehren. In den Protokollen sehe ich, dass xinetd die Anfrage bearbeitet. Auf dem Server verwende ich die TFTP-Version:

tftp-server-0.49-8.el6.x86_64

Hier ist der Befehl, den ich vom Client aus ausführe.

tftp -v 192.168.100.10 -c get file

Tcpdump Server Seite:

13:54:02.136438 IP (tos 0x0, ttl 64, id 0, offset 0, flags [DF], proto UDP (17), length 49)
192.168.100.11.37126 > 192.168.100.10.tftp: [udp sum ok]  21 RRQ "file" netascii

Und das wiederholt sich immer wieder, bis die Übertragung abgelaufen ist. Hier ist meine Logdatei:

Jul 26 13:54:22 server in.tftpd[7068]: RRQ from 192.168.100.11 filename file

Und das wiederholt sich auch immer wieder, bis die Übertragung abgelaufen ist. Meine Konfiguration:

service tftp
{
    disable = no
    socket_type             = dgram
    protocol                = udp
    wait                    = yes
    user                    = root
    server                  = /usr/sbin/in.tftpd
    server_args             = -v -v -v -s /var/lib/tftpboot
    per_source              = 11
    cps                     = 100 2
    flags                   = IPv4
}

Die Iptables-Regel befindet sich oben:

[root@server tftpboot]# iptables -L --line-numbers | grep tftp
1    ACCEPT     udp  --  anywhere             anywhere             state NEW udp dpt:tftp 

Kernelmodule werden geladen:

[root@server tftpboot]# lsmod | grep tftp
nf_conntrack_tftp       4814  0 
nf_conntrack           79537  4     nf_conntrack_tftp,nf_conntrack_ipv4,nf_conntrack_ipv6,xt_state

SELinux ist freizügig:

[root@server tftpboot]# getenforce 
Permissive

Ich habe alles in hosts.allow erlaubt:

xinetd : ALL

Und ich weiß, dass der Service zuhört:

[root@server tftpboot]# lsof -i :69
COMMAND    PID USER   FD   TYPE   DEVICE SIZE/OFF NODE NAME
in.tftpd  7023 root    0u  IPv4 11763412      0t0  UDP *:tftp 
xinetd   32761 root    5u  IPv4 11763412      0t0  UDP *:tftp 
[root@server tftpboot]# netstat -anp | grep ":69"
udp        0      0 0.0.0.0:69                  0.0.0.0:*                                7023/in.tftpd    

world hat RX im tftpboot-Verzeichnis:

[root@server lib]# ll | grep tftp*
drwxr-xr-x.  2 root      root     4096 Jul 26 12:17 tftpboot

Und die Welt hat die Akten darin gelesen. Andere Dinge habe ich versucht.

1) Verwenden von tcp anstelle von udp = FAIL

2) Verschieben des TFTP-Stammverzeichnisses = FAIL

3) Und wie Sie sehen, ist die ausführliche Protokollierung für TFTP bereits aktiviert

4) Ändern Sie den Benutzer in der Konfiguration = FAIL

Ich bin zu diesem Zeitpunkt ratlos. Hat jemand dieses Problem schon einmal angetroffen?

UPDATE: Hier ist meine vollständige Iptables-Konfiguration:

*filter
:INPUT ACCEPT [0:0]
:FORWARD DROP [0:0]
:OUTPUT ACCEPT [1:136]
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p udp -m udp --dport 69 -m state --state NEW,ESTABLISHED -  j ACCEPT
-A INPUT -j DROP
COMMIT

Außerdem habe ich iptables deaktiviert und erhalte immer noch die gleiche Zeitüberschreitungsnachricht.

UPDATE # 2 - Ich habe auch das Folgende in iptables hinzugefügt, aber iptables ist nicht glücklich.

-A INPUT --sport 1024: --dport 1024: -m state --state ESTABLISHED -j   ACCEPT
-A OUTPUT --sport 1024: --dport 1024: -m state --state ESTABLISHED,RELATED -j ACCEPT

Error:

iptables: Applying firewall rules: iptables-restore v1.4.7: unknown option `--sport'

UPDATE # 3

Nicht, dass das helfen könnte, aber ich war neugierig zu sehen, ob ich tatsächlich verwandte Pakete gesehen habe, die die Firewall kamen und verließen. Hier ist ein Schnappschuss der beiden Regeln, die ich eingefügt habe, um sowohl 69 zum und vom Client als auch die für die Datenübertragung benötigten Ports zuzulassen.

Vor dem Beginn der Übertragung:

 5      245 ACCEPT     udp  --  *      *       192.168.10.11         0.0.0.0/0           udp dpt:69 state NEW,ESTABLISHED 
   0        0 ACCEPT     udp  --  *      *       192.168.10.11         0.0.0.0/0           udp spts:1024:65535 dpts:1024:65535 state   ESTABLISHED 
--
   0        0 ACCEPT     udp  --  *      *       0.0.0.0/0             192.168.10.11      udp spt:69 state ESTABLISHED 
  30      960 ACCEPT     udp  --  *      *       0.0.0.0/0             192.168.10.11      udp spts:1024:65535 dpts:1024:65535 state  RELATED,ESTABLISHED 

Nach dem Übertragungsversuch:

   10      490 ACCEPT     udp  --  *      *       192.168.10.11        0.0.0.0/0           udp dpt:69 state NEW,ESTABLISHED 
    0        0 ACCEPT     udp  --  *      *       192.168.10.11            0.0.0.0/0           udp spts:1024:65535 dpts:1024:65535 state      ESTABLISHED 
 --
   0        0 ACCEPT     udp  --  *      *       0.0.0.0/0             192.168.10.11      udp spt:69 state ESTABLISHED 
   58     1856 ACCEPT     udp  --  *      *       0.0.0.0/0             192.168.10.11      udp spts:1024:65535 dpts:1024:65535 state  RELATED,ESTABLISHED 

Das sagt mir also, dass es nicht die Firewall ist und wenn ich keine Rückpakete mit tcpdump sehe, liegt etwas dazwischen, vielleicht sogar die Anwendung selbst.

user53029
quelle
Das vom Server zurückgegebene Paket verwendet eine andere Quellportnummer als 69, die zufällig ausgewählt wird (siehe tftp-server.com/tftp-server-help/tftp-protocol.html ). Es handelt sich also wahrscheinlich um ein Firewall-Problem. Schauen Sie sich unix.stackexchange.com/questions/99270/… an , eine Frage, die dieselben Symptome beschreibt, unter denen Sie leiden .
Jeremy Dover
Sie erlauben ICMP nicht. Dies führt auf jeden Fall zu verschiedenen Verbindungsproblemen, auch wenn dies nicht die Ursache für dieses spezielle Problem ist.
Michael Hampton
Jeremy - Ich habe mir diesen Link angesehen und ein paar dieser Aussagen ausprobiert, aber einen Fehler erhalten. Ich habe meine Frage bearbeitet, um dies zu berücksichtigen.
user53029
Bei Update 2 wird eine Fehlermeldung angezeigt, da Sie vor --sport -p udp zu Ihrer Syntax hinzufügen müssen. Ansonsten hat iptables keinen Kontext für die Portnummern.
Jeremy Dover
Ok, die Änderungen vorgenommen, aber immer noch kein Glück. Ich bin mir nicht sicher, was ich sonst noch versuchen soll.
user53029

Antworten:

3

Da Sie das stateModul in Ihrer iptables-Konfiguration verwenden, um nur NEUE Verbindungen auf dem tftp-Port zuzulassen, und Sie nur einen Auszug aus Ihrer Firewall-Konfiguration gepostet haben:

1 ACCEPT udp -- anywhere anywherestate NEWudp dpt:tftp

Gibt es diese Regel in der INPUT-Kette und gibt es auch eine generische -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPTRegel? (In diesem Fall sollte diese Regel wahrscheinlich die erste Regel in Ihrer INPUT-Kette sein.)

Denn obwohl das UDP-Protokoll selbst zustandslos ist, scheinen die Conntrack-Module weiterhin einige Statusinformationen für UDP zu verwalten, und es kann vorkommen, dass das erste UDP-Paket akzeptiert wird und jedes nachfolgende Paket als Teil eines "eingerichteten" oder "verwandten" Pakets betrachtet wird " Sitzung statt" neu "und abgelehnt.

HBruijn
quelle
Ich habe meine Frage so aktualisiert, dass sie alle meine Einstellungen für iptables enthält. Ich habe immer noch ein Problem mit oder ohne Iptables.
user53029