我已经尝试谷歌周围获得我的FTPS与TLS(proftpd)iptables killswitch我现在有工作(见https://www.reddit.com/r/linuxquestions/comments/57mga5/is_my_iptables_killswitch_working_have_some_p/ ) 。
我使用FTPS的端口10210和无源端口的60100-60119,这个stream量不通过VPN。 我已经拿出了这个(他们在最后一个下降线上):
# Allow traffic via TLS FTPS iptables -A INPUT -p tcp -m tcp --dport 10210 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT # It seems to be working without the line under #iptables -A INPUT -p tcp -m tcp --dport 20 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT iptables -A INPUT -p tcp -m tcp --sport 10210:60119 --dport 60100:60119 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT iptables -A INPUT -p tcp -m state --state ESTABLISHED -j ACCEPT iptables -A INPUT -j REJECT --reject-with icmp-port-unreachable iptables -A OUTPUT -p tcp -m tcp --dport 10210 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT # It seems to be working without the line under #iptables -A OUTPUT -p tcp -m tcp --dport 20 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT iptables -A OUTPUT -p tcp -m tcp --sport 10210:60119 --dport 10210:60119 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
它似乎工作,但由于我是一个iptables noob,我想知道我做错了什么(我可能有;),不知道的端口范围,也许它是打开的?)
编辑我有连接问题,所以我已经改变了这个更好的工作
-A INPUT -p tcp -m tcp --dport 10210 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT -A INPUT -p tcp -m tcp --sport 10210 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT -A INPUT -p tcp -m tcp --dport 60100:60119 -j ACCEPT -A INPUT -p tcp -m state --state ESTABLISHED -j ACCEPT -A OUTPUT -p tcp -m tcp --dport 10210 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT -A OUTPUT -p tcp -m tcp --sport 10210 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT -A OUTPUT -p tcp -m tcp --dport 60100:60119 -j ACCEPT -A OUTPUT -p tcp -m tcp --sport 60100:60119 -j ACCEPT
稍后,在阅读http://ipset.netfilter.org/iptables-extensions.man.html之后 ,尝试使用此代替上述端口范围
iptables -A INPUT -p tcp --dport 60100:60119 -m conntrack --ctstate NEW,ESTABLISHED,RELATED -j ACCEPT iptables -A OUTPUT -p tcp --dport 60100:60119 -m conntrack --ctstate NEW,ESTABLISHED,RELATED -j ACCEPT iptables -A OUTPUT -p tcp --sport 60100:60119 -m conntrack --ctstate NEW,ESTABLISHED,RELATED-j ACCEPT
并删除-A INPUT -p tcp -m state --state ESTABLISHED -j ACCEPT并且我不知道我是否也应该删除-m conntrack --ctstate NEW,ESTABLISHED为10210,因为它是FTPS的input端口?
OUTPUT部分仅用于从服务器发起的连接,根本不影响从客户端发起的连接。 通常情况下, 输出 不被过滤 ,除非你有特殊要求阻止传出。
INPUT是您应该过滤的部分。
ESTABLISHED和RELATED部分用于连接,已经启动并且应该继续工作(即像握手后的TCP一样)并且通常比其他规则更高的匹配。
我们可以分成三种types的FTP连接:
在主动FTP的情况下,你需要打开传入的TCP 20和TCP 21端口,这种types的连接很less使用,即从客户端发起两个连接。
在被动FTP情况更糟糕的情况下,被动FTP使用TCP 21端口作为命令,任意连接使用RANDOM TCP端口进行数据传输,该端口将在服务器的FTP响应中指定,因此,防火墙必须“监听” FTPstream量,这需要对数据包进行更深入的检查,然后dynamic地打开端口 – 这是正常情况。 在这种情况下,使用FTP连接跟踪助手/内核模块,并解决了这个问题 – 你只需要打开TCP端口21。
在SSL的情况下 – 它甚至更疯狂,因为关于RANDOM端口的数据也被encryption,并且防火墙无法猜测要打开哪个端口,在这种情况下,一些球员指定FTP服务器configuration中的随机端口的数量并打开所有这些端口防火墙。
通常过滤表的规则顺序通常是这样的:
*filter :INPUT DROP [0:0] :FORWARD DROP [0:0] :OUTPUT ACCEPT [0:0] -A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT -A INPUT -i lo -j ACCEPT -A INPUT -p tcp -m conntrack --ctstate NEW -m tcp -m multiport --dports 22,80,443 -j ACCEPT -A INPUT -i eth1 -p tcp -m conntrack --ctstate NEW -m tcp -m multiport --dports 22,53,80,1234 -j ACCEPT -A INPUT -i eth1 -p udp -m conntrack --ctstate NEW -m udp -m multiport --dports 53,67,123 -j ACCEPT COMMIT
对于SSL,您可能会在某处添加以下规则
-A INPUT -p tcp -m conntrack --ctstate NEW -m tcp -m multiport --dports 21,15000:15050 -j ACCEPT