怎样设置iptables规则才能让ftp服务器正常传输数据?
本帖最后由 13025700481 于 2010-08-22 18:59 编辑
在服务器上有这样一条iptables规则。
$IPTABLES -A INPUT -p tcp --dport 21 --syn -m state --state NEW -j ACCEPT
这个按照我的理解应该是添加一条规则为“协议为tcp并且端口为21的只接受那些设置了SYN位而清除了ACK和FIN位的TCP的为了发起新连接的数据包”。
再结合上面的规则,不属于已建立的连接的数据包都要丢弃。
那时我不明白,以为只需要用到21端口。
再过了一段时间。
在没设置防火墙规则的时侯,发现用tcpdump监控流量,服务器会在20端口向客户机发送一个TCP连接请求,用它来传输数据。
而这个端口是被过滤的。
当我添加了一条规则后它却还是照样不行。
在服务器上用tcpdump查看,20端口还是没有被打开。因为没有数据包从那个端口发出。
之后在服务器上添加规则,单独列出20端口,让它完全暴露。
在客户机上用tcpdump查看,还是没有数据包从20端口发出,于是就无法列出文件了。
用iptables -L查看被启用的所有规则,20端口的向外的SYN数据包是被允许通过的啊。。。
但为什么就是不行呢?
在服务器上有这样一条iptables规则。
109.png (43.36 KB, 下载次数: 4)
$IPTABLES -A INPUT -p tcp --dport 21 --syn -m state --state NEW -j ACCEPT
这个按照我的理解应该是添加一条规则为“协议为tcp并且端口为21的只接受那些设置了SYN位而清除了ACK和FIN位的TCP的为了发起新连接的数据包”。
再结合上面的规则,不属于已建立的连接的数据包都要丢弃。
那时我不明白,以为只需要用到21端口。
再过了一段时间。
在没设置防火墙规则的时侯,发现用tcpdump监控流量,服务器会在20端口向客户机发送一个TCP连接请求,用它来传输数据。
119.png (12.27 KB, 下载次数: 4)
而这个端口是被过滤的。
当我添加了一条规则后它却还是照样不行。
123.png (132.4 KB, 下载次数: 4)
122.png (36.36 KB, 下载次数: 4)
在服务器上用tcpdump查看,20端口还是没有被打开。因为没有数据包从那个端口发出。
之后在服务器上添加规则,单独列出20端口,让它完全暴露。
126.png (8.26 KB, 下载次数: 4)
在客户机上用tcpdump查看,还是没有数据包从20端口发出,于是就无法列出文件了。
127.png (97.47 KB, 下载次数: 4)
用iptables -L查看被启用的所有规则,20端口的向外的SYN数据包是被允许通过的啊。。。
128.png (10.12 KB, 下载次数: 4)
但为什么就是不行呢?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(6)
conntract机制可以保证
LZ 可以看一下 Linux 网络问题版置顶的《2 小时玩转 iptables》文档,里面有例子和详细的原理解释
不知道LS说的是什么?
需要上下文吧?
搞定。
#!/bin/sh
IPTABLES=/sbin/iptables
IP6TABLES=/sbin/ip6tables
echo "[+] Flushing existing iptables rules..."
$IPTABLES -F
$IPTABLES -F -t nat
$IPTABLES -X
$IPTABLES -P INPUT DROP
$IPTABLES -P OUTPUT DROP
$IPTABLES -P FORWARD DROP
echo "[+] Disabling IPv6 traffic..."
$IP6TABLES -P INPUT DROP
$IP6TABLES -P OUTPUT DROP
$IP6TABLES -P FORWARD DROP
echo "[+] Load connection-tracking modules..."
#Loading when boot
#Edit /etc/sysconfig/iptables-config
#Add:
#IPTABLES_MOUDULES="ip_conntrack_ftp"
modprobe ip_conntrack_ftp
echo "[+] Setting up INPUT chain..."
$IPTABLES -A INPUT -m state --state INVALID -j LOG --log-prefix "DROP INVALID " --log-ip-options --log-tcp-options --log-tcp-sequence
$IPTABLES -A INPUT -m state --state INVALID -j DROP
$IPTABLES -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
$IPTABLES -A INPUT -p tcp --dport 21 --syn -m state --state NEW -j ACCEPT
$IPTABLES -A INPUT -i eth0 -j LOG --log-prefix "DROP " --log-ip-options --log-tcp-options --log-tcp-sequence
$IPTABLES -A INPUT -i lo -j ACCEPT
echo "[+] Setting up OUTPUT chain..."
$IPTABLES -A OUTPUT -m state --state INVALID -j LOG --log-prefix "DROP INVALID " --log-ip-options --log-tcp-options --log-tcp-sequence
$IPTABLES -A OUTPUT -m state --state INVALID -j DROP
$IPTABLES -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
$IPTABLES -A OUTPUT -p tcp --dport 21 --syn -m state --state NEW -j ACCEPT
$IPTABLES -A OUTPUT -p tcp --dport 22 --syn -m state --state NEW -j ACCEPT
$IPTABLES -A OUTPUT -p tcp --dport 25 --syn -m state --state NEW -j ACCEPT
$IPTABLES -A OUTPUT -p tcp --dport 43 --syn -m state --state NEW -j ACCEPT
$IPTABLES -A OUTPUT -p tcp --dport 80 --syn -m state --state NEW -j ACCEPT
$IPTABLES -A OUTPUT -p tcp --dport 443 --syn -m state --state NEW -j ACCEPT
$IPTABLES -A OUTPUT -p tcp --dport 4321 --syn -m state --state NEW -j ACCEPT
$IPTABLES -A OUTPUT -p tcp --dport 53 -m state --state NEW -j ACCEPT
$IPTABLES -A OUTPUT -p udp --dport 53 -m state --state NEW -j ACCEPT
$IPTABLES -A OUTPUT -p icmp --icmp-type echo-request -j ACCEPT
$IPTABLES -A OUTPUT -o eth0 -j LOG --log-prefix "DROP " --log-ip-options --log-tcp-options --log-tcp-sequence
$IPTABLES -A OUTPUT -o lo -j ACCEPT
iptables有个ftp的模块,楼主加载下看看