• iptables对ftp服务器的规则


    转:http://www.hackhy.com/soft/DongHua/269/html/3323.html

    Linux服务器上安装ftp提供用户上传下载,是很方便的事情,但是如果你的服务器

    开启了iptables防火墙,就要对ftp端口做一些设置。

    我之前也做过iptables允许某个端口访问的视频,为什么还要做ftp端口这个演示?

    因为ftp端口真的比较特殊,并不像80,22这些端口。

    它分为连接用的端口,还有当你上传下载文件的传输数据用的端口。

    好下面我边演示,边讲下它如何的特别。

    netstat -tnl 命令可以看到,我们现在运行了ftp服务。

    tcp 0 0 0.0.0.0:21 0.0.0.0:* LISTEN

    ================
    [root@localhost root]# iptables -L -n
    Chain INPUT (policy DROP)
    target prot opt source destination
    ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:22

    Chain FORWARD (policy DROP)
    target prot opt source destination

    Chain OUTPUT (policy DROP)
    target prot opt source destination
    ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp spt:22

    我这里现在只允许 22 端口的访问。

    现在我开始对ftp端口的设置,按照我们以前的视频,添加需要开放的端口
    ftp连接端口有2个 21 和 20 端口,我现在添加对应的规则。

    [root@localhost root]# iptables -A INPUT -p tcp --dport 21 -j ACCEPT
    [root@localhost root]# iptables -A INPUT -p tcp --dport 20 -j ACCEPT
    [root@localhost root]# iptables -A OUTPUT -p tcp --sport 21 -j ACCEPT
    [root@localhost root]# iptables -A OUTPUT -p tcp --sport 20 -j ACCEPT

    好,这样就添加完了,我们用浏览器访问一下ftp,出现超时。

    所以我刚才说 ftp 是比较特殊的端口,它还有一些端口是 数据传输端口,
    例如目录列表, 上传 ,下载 文件都要用到这些端口。

    而这些端口是 任意 端口。。。 这个 任意 真的比较特殊。

    如果不指定什么一个端口范围, iptables 很难对任意端口开放的,
    如果iptables允许任意端口访问, 那和不设置防火墙没什么区别,所以不现实的。

    那么我们的解决办法就是 指定这个数据传输端口的一个范围。

    下面我们修改一下ftp配置文件。

    我这里使用vsftpd来修改演示,其他ftp我不知道哪里修改,大家可以找找资料。

    [root@localhost root]# vi /etc/vsftpd.conf

    在配置文件的最下面 加入

    pasv_min_port=30001
    pasv_max_port=31000

    然后保存退出。

    这两句话的意思告诉vsftpd, 要传输数据的端口范围就在30001到31000 这个范围内传送。

    这样我们使用 iptables 就好办多了,我们就打开 30001到31000 这些端口。

    [root@localhost root]# iptables -A INPUT -p tcp --dport 30001:31000 -j ACCEPT
    [root@localhost root]# iptables -A OUTPUT -p tcp --sport 30001:31000 -j ACCEPT

    [root@localhost root]# service iptables save

    最后进行保存, 然后我们再用浏览器范围下 ftp。可以正常访问

    用个账号登陆上去,也没有问题,上传一些文件上去看看。

    看到了吧,上传和下载都正常。。 再查看下 iptables 的设置

    [root@localhost root]# iptables -L -n
    Chain INPUT (policy DROP)
    target prot opt source destination
    ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:22
    ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:21
    ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:20
    ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpts:30001:31000

    Chain FORWARD (policy DROP)
    target prot opt source destination

    Chain OUTPUT (policy DROP)
    target prot opt source destination
    ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp spt:22
    ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp spt:21
    ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp spt:20
    ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp spts:30001:31000

    这是我为了演示ftp特殊端口做的简单规则,大家可以添加一些对数据包的验证
    例如 -m state --state ESTABLISHED,RELATED 等等要求更加高的验证

    ---------------------------------------------------------------------------------------------------

    看来大家都没有对 TCP/20 有深刻的理解,都以为主动模式下数据除了从 TCP/21 进去,还从 TCP/20 进去

    主动模式下,客户连接 TCP/21,服务器通过 TCP/20 连接客户
    被动模式下,客户连接 TCP/21,客户再通过其他端口连接服务器的随机端口

    卡住的原因,是因为服务器在被动模式下没有打开临时端口让 client 连过来,因此需要几个条件

    1、client 没有防火墙时,用主动模式连接即可
    2、server 没有防火墙时,用被动模式即可
    3、双方都有防火墙时,vsftpd 设置被动模式高端口范围,server 打开那段范围,client 用被动模式连接即可
    4、加载 ip_conntrack_ftp 模块,使 server 支持 connection tracking,支持临时打洞,client 用被动模式即可
    5、server 使用 ip_conntrack_ftp、client 使用 ip_conntrack_ftp 和 ip_nat_ftp,支持临时打洞和临时 NAT 穿越打洞,双方使用主动或被动模式均可

  • 相关阅读:
    《浅谈12306核心模型设计思路和架构设计》阅读笔记
    《一路打怪升级,360推荐系统架构演进》阅读笔记
    SOA架构设计的案例分析
    《苏宁易购:商品详情系统架构设计》阅读笔记
    《数据蜂巢架构演进之路》阅读笔记
    洛谷P1005 矩阵取数游戏
    LOJ#6277. 数列分块入门 1
    洛谷P1879 [USACO06NOV]玉米田Corn Fields
    洛谷P1072 Hankson 的趣味题
    洛谷P2921 [USACO08DEC]在农场万圣节Trick or Treat on the Farm
  • 原文地址:https://www.cnblogs.com/google4y/p/2366798.html
Copyright © 2020-2023  润新知