iptables:tftp 服务器的规则

iptables:tftp 服务器的规则

UDP我有一个监听标准端口的 tftp 服务器69。我已在我的规则中添加了以下规则iptables来阻止除 之外的所有内容UDP 69

-A INPUT -i eth0 -s 192.168.1.0/24 -p udp -m udp --dport 69 -j ACCEPT
-A INPUT                                                    -j   DROP

但通过此规则,客户端无法访问 tftp 服务器。我读过,tftp使用更高的端口进行实际传输(类似于ftp),并且我应该使用该ip_conntrack_tftp模块。

# zcat /proc/config.gz  | grep -i tftp
CONFIG_NF_CONNTRACK_TFTP=m

我的内核中有该模块,但是我还需要做什么?

答案1

  • 首先:您只允许连接到源 IP 匹配“192.168.1.0/24”的服务器。需要确定的是:这是一个 LAN IP,因此只有当您的服务器和客户端属于同一 LAN 时,这才有效。在这种情况下,您可能有一个路由器作为互联网的防火墙,因此您不需要任何 iptables 配置。

  • 第二:我会将你的第一个设置更改为

    -A INPUT -i eth0 -s 192.168.1.0/24 -p udp --dport 69 -m state --state NEW,ESTABLISHED -j ACCEPT
    
  • 但是,使用上面给出的设置,您只允许端口 69 上的传入连接,这意味着您的服务器无法发回任何消息(取决于传出连接的默认过滤策略)。要允许服务器在端口 69 上应答,您需要有一个接受传出连接的默认策略

    -P OUTPUT ACCEPT
    

    或者允许端口 69 上的应答:

    -A OUTPUT -i eth0 -p udp --sport 69 -m state --state ESTABLISHED -j ACCEPT
    
  • 此外,您还必须加载内核模块ip_conntrackip_conntrack_tftp“更高的端口连接”。 (检查两者是否已使用 加载lsmod。)要接受新连接以进行实际数据传输,请使用

    -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
    

请注意,无法在 >1024 的端口上建立全新的连接。

答案2

对于TFTP客户端,相当简单的解决方案是在iptables中添加配置。

文件:/etc/sysconfig/iptables-config

IPTABLES_MODULES="nf_conntrack_netbios_ns ip_conntrack_tftp"

相关内容