我在这里打墙,试图让tftp使用RHEL 6作为服务器。 来自客户端的错误仅仅是“转移超时”。 在服务器上,我可以看到来自客户端的udp 69stream量,但是我没有看到任何数据包返回到客户端。 在日志中,我可以看到xinetd正在处理请求。 在服务器上我正在运行tftp版本:
tftp-server-0.49-8.el6.x86_64
这是我从客户端运行的命令。
tftp -v 192.168.100.10 -c get file
Tcpdump服务器端:
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
这一直重复,直到转移超时。 这是我的日志文件:
Jul 26 13:54:22 server in.tftpd[7068]: RRQ from 192.168.100.11 filename file
这也一遍又一遍地重复,直到转移超时。 我的configuration:
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 }
iptables的规则是在顶部:
[root@server tftpboot]# iptables -L --line-numbers | grep tftp 1 ACCEPT udp -- anywhere anywhere state NEW udp dpt:tftp
内核模块被加载:
[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是宽容的:
[root@server tftpboot]# getenforce Permissive
我已经允许所有hosts.allow:
xinetd : ALL
而且我知道该服务正在倾听:
[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
世界上的tftpboot目录上有RX:
[root@server lib]# ll | grep tftp* drwxr-xr-x. 2 root root 4096 Jul 26 12:17 tftpboot
世界上已经阅读了里面的文件。 其他的事情,我已经尝试。
1)使用tcp而不是udp = FAIL
2)移动tftp根目录=失败
3)正如你所看到的,我已经为tftp打开了详细的日志logging
4)更改config = FAIL中的用户
在这一点上,我感到不知所措。 有没有人遇到过这个问题?
更新:这是我完整的iptablesconfiguration:
*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
另外,我已禁用iptables,仍然得到相同的传输超时消息。
更新#2 – 我也添加了以下到iptables,但iptables不高兴。
-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
错误:
iptables: Applying firewall rules: iptables-restore v1.4.7: unknown option `--sport'
更新#3
这不是说可能有帮助,但我很好奇,看看事实上,我看到相关的数据包进入和离开防火墙。 下面是我插入的两条规则的快照,允许来自客户端的69个数据以及数据传输所需的端口。
转移开始之前:
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
转移尝试后:
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
所以这告诉我它不是防火墙,如果我没有看到与tcpdump返回包之间的东西,也许应用程序本身。
既然你在你的iptablesconfiguration中使用state模块,只允许在tftp端口上build立新的连接,你只能从你的防火墙configuration文件中摘录摘录:
1 ACCEPT udp -- anywhere anywhere state NEW udp dpt:tftp
是INPUT链中的规则,是否还有一个通用-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT规则? (如果是这样,那么这个规则可能应该是INPUT链中的第一条规则。)
因为虽然UDP协议本身是无状态的,但是conntrack模块似乎仍然为UDP保留一些状态信息,并且你可能会遇到第一个UDP数据包被接受,并且每个后续数据包被认为是“已build立”或“相关“ 会议而不是”新“而被拒绝。