Linux FTP服务器流量控制和限制端口21

时间:2020-01-09 10:42:01  来源:igfitidea点击:

我已经在端口21和40000:41000处设置了FTP服务器作为被动ftp的范围。
如何控制Debian/CentOS/Ubuntu Linux服务器上运行的FTP服务器/服务的传出流量?
流量经过调整后,其传输速率便受到控制。
整形可能不仅是降低可用带宽,还可以用于平滑流量突发,以改善网络性能。

Linux附带了非常好的流量控制程序。
您可以使用iptables和tc命令设置保证带宽和最大带宽以限制其传出流量。

tc命令

我建议您在执行以下任何命令之前先阅读本教程和tc命令手册页。

首先,您需要添加root qdisc,执行:

### delete old rules if any ###
# /sbin/tc qdisc del dev eth0 root
#### add it ###
# /sbin/tc qdisc add dev eth0 root handle 11: htb default 500 r2q 1

在下面的示例中,我将为测试目的将保证带宽设置为64KB/s,最大/可突发带宽设置为128KB/s(可根据您的设置随意调整这些数字)。
添加1级课程。
此类将128kbps设置为可突发带宽:

# /sbin/tc class add dev eth0 parent 11: classid 11:1 htb rate 128kbps ceil 128kbps quantum 2048#### this is our level 2 class ####
# /sbin/tc class add dev eth0 parent 11:1 classid 11:101 htb rate 64kbps ceil 128kbps prio 0 quantum 2048

您需要将叶子添加到我们的qdisc中:

# /sbin/tc qdisc add dev eth0 parent 11:101 handle 1001: sfq

最后添加我们的过滤器:

# /sbin/tc filter add dev eth0 parent 11: protocol ip handle 101 fw classid 11:101

iptables POSTROUTING规则

tc用于在Linux内核中配置流量控制。
但是,您需要使用iptables将这些规则应用于ftp tcp端口21和被动ftp tcp端口范围40000:41000,如下所示:

### iptables mangle rule ###
/sbin/iptables -A POSTROUTING -t mangle -o eth0 -p tcp -m multiport --sports 21,40000:41000 -j MARK --set-xmark 101
/sbin/iptables -A POSTROUTING -t mangle -o eth0 -p tcp -m multiport --sports 21,40000:41000 -j RETURN

请注意,mangle表用于特殊的数据包更改,如下所示:

  • " PREROUTING",用于在路由之前更改传入的数据包。
  • OUTPUT,用于在路由之前更改本地生成的数据包。
  • " INPUT"用于进入服务器本身的数据包。
  • " FORWARD",用于更改通过服务器路由的数据包。
  • POSTROUTING,用于在数据包即将外出时对其进行更改。

这是mangle表的转储:

# /sbin/iptables-save -t mangle

输出示例:

# Generated by iptables-save v1.4.8 on Sun Sep  9 14:28:18 2012
*mangle
:PREROUTING ACCEPT [353:50724]
:INPUT ACCEPT [353:50724]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [490:67671]
:POSTROUTING ACCEPT [490:67671]
-A POSTROUTING -o eth0 -p tcp -m multiport --sports 21,40000:41000 -j MARK --set-xmark 0x65/0xffffffff 
-A POSTROUTING -o eth0 -p tcp -m multiport --sports 21,40000:41000 -j RETURN 
COMMIT
# Completed on Sun Sep  9 14:28:18 2012

测试一下

使用lftp命令或者任何其他ftp客户端来测试带宽限制:

$ lftp -u username ftpservername

尝试下载一个大文件:

lftp admin@nas03:/multipedia/iso-images/centos> get CentOS-6.2-x86_64-bin-DVD1.iso