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_conntrack
和ip_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"