iptables:为什么只有OUTPUT规则需要桑巴客户端?

我尝试了下面的samba客户端的iptables规则,他们的工作。 请注意INPUT,OUTPUT和FORWARD的策略都设置为DROP

iptables -A OUTPUT -m state --state NEW,ESTABLISHED -p udp --dport 137 -j ACCEPT iptables -A OUTPUT -m state --state NEW,ESTABLISHED -p udp --dport 138 -j ACCEPT iptables -A OUTPUT -m state --state NEW,ESTABLISHED -p tcp --dport 139 -j ACCEPT iptables -A OUTPUT -m state --state NEW,ESTABLISHED -p tcp --dport 445 -j ACCEPT 

为什么我们只需要输出samba客户端的规则? 为什么我们不需要INPUT规则来打开传入数据包的端口?

还有一个问题:连锁店的名称是否带有内部指示的意义,或者它们只是助记符以便理解?

 iptables: ------------- # Generated by iptables-save v1.4.7 on Wed Aug 28 21:18:39 2013 *filter :INPUT DROP [0:0] :FORWARD DROP [0:0] :OUTPUT DROP [4:284] -A INPUT -p udp -m udp --dport 177 -j ACCEPT -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT -A INPUT -p icmp -j ACCEPT -A INPUT -i lo -j ACCEPT -A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT -A INPUT -j REJECT --reject-with icmp-host-prohibited -A INPUT -p tcp -m tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT -A INPUT -p tcp -m tcp --sport 21 -m state --state ESTABLISHED -j ACCEPT -A INPUT -p tcp -m tcp --dport 20 -m state --state NEW,ESTABLISHED -j ACCEPT -A INPUT -p tcp -m tcp --sport 1024:65535 --dport 1024:65535 -m state --state ESTABLISHED -j ACCEPT -A INPUT -p tcp -m tcp --sport 1024:65535 --dport 80 -m state --state NEW,ESTABLISHED -j ACCEPT -A INPUT -p tcp -m tcp --sport 1024:65535 --dport 443 -m state --state NEW,ESTABLISHED -j ACCEPT -A INPUT -p tcp -m tcp --sport 80 --dport 1024:65535 -m state --state ESTABLISHED -j ACCEPT -A INPUT -p tcp -m tcp --sport 443 --dport 1024:65535 -m state --state ESTABLISHED -j ACCEPT -A INPUT -p icmp -m icmp --icmp-type 8 -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT -A INPUT -p icmp -m icmp --icmp-type 0 -m state --state RELATED,ESTABLISHED -j ACCEPT -A INPUT -p tcp -m tcp --sport 25 -m state --state ESTABLISHED -j ACCEPT -A FORWARD -j REJECT --reject-with icmp-host-prohibited -A OUTPUT -p tcp -m tcp --dport 7100 -j ACCEPT -A OUTPUT -p tcp -m tcp --dport 6000 -j ACCEPT -A OUTPUT -p udp -m udp --sport 177 -j ACCEPT -A OUTPUT -p tcp -m tcp --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT -A OUTPUT -p tcp -m tcp --sport 22 -j ACCEPT -A OUTPUT -p tcp -m tcp --dport 21 -m state --state NEW,ESTABLISHED -j ACCEPT -A OUTPUT -p tcp -m tcp --sport 20 -m state --state ESTABLISHED -j ACCEPT -A OUTPUT -p tcp -m tcp --sport 1024:65535 --dport 1024:65535 -m state --state RELATED,ESTABLISHED -j ACCEPT -A OUTPUT -p tcp -m tcp --sport 80 --dport 1024:65535 -m state --state ESTABLISHED -j ACCEPT -A OUTPUT -p tcp -m tcp --sport 443 --dport 1024:65535 -m state --state ESTABLISHED -j ACCEPT -A OUTPUT -p tcp -m tcp --sport 1024:65535 --dport 80 -m state --state NEW,ESTABLISHED -j ACCEPT -A OUTPUT -p tcp -m tcp --sport 1024:65535 --dport 443 -m state --state NEW,ESTABLISHED -j ACCEPT -A OUTPUT -p icmp -m icmp --icmp-type 0 -m state --state RELATED,ESTABLISHED -j ACCEPT -A OUTPUT -p icmp -m icmp --icmp-type 8 -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT -A OUTPUT -p tcp -m tcp --dport 25 -m state --state NEW,ESTABLISHED -j ACCEPT -A OUTPUT -p udp -m state --state NEW,ESTABLISHED -m udp --dport 137 -j ACCEPT -A OUTPUT -p udp -m state --state NEW,ESTABLISHED -m udp --dport 138 -j ACCEPT -A OUTPUT -p tcp -m state --state NEW,ESTABLISHED -m tcp --dport 139 -j ACCEPT -A OUTPUT -p tcp -m state --state NEW,ESTABLISHED -m tcp --dport 445 -j ACCEPT COMMIT # Completed on Wed Aug 28 21:18:39 2013 

数据包stream中最明确地包含了默认的链路名称。 互联网上有许多图表显示了数据包可能通过链的不同path,但是一般情况下,对于您的场景,来自机器的stream量将遍历输出,并且stream向机器的stream量将遍历input。 他们也会穿越其他的连锁店,但这个问题的范围并不重要。

还要回顾一下,iptables在第一个配对比赛的基础上工作(第一个处理一个数据包的比赛,比如接受,拒绝或丢弃,导致链的处理也停止)。 所以,在-A INPUT -j REJECT --reject-with icmp-host-prohibited之后,你的input规则都没有任何影响。

这就是说,你的samba连接工作的原因是这个input规则: -m state --state RELATED,ESTABLISHED -j ACCEPT 。 这是因为当你连接到另一个桑巴主机时,conntrack会logging连接状态,这个规则将开始接受返回的stream量。 我怀疑你会发现,如果你试图从这个盒子里提供一些东西,没有人可以访问它。