Linux下的NAT及防火墙的混合应用

【摘要】
主要讲述Linux系统下的NAT(网络地址转换)和基于NAT的防火墙技术。
首先由Linux系统的安装引入,着重介绍LINUX下的NAT的网络配置(服务端和客户端),以
及防火墙配置原则。
其次,从理论上阐述,“什么是NAT”和网络上的攻击方法。

【引言】
LINUX凭借其稳定性、安全性和代码开放在这几年中,风靡全球;作为一种类UNIX系统,Lin
ux正在互联网的各个层面得到应用,从科学计算到银行取款机,从网络web服务到高层的Oracle
数据库应用。都可以看到linux的影子。而由于Linux遵循于GPL协议(公共软件许可证),
任何人可以得到并且修改它的源代码,所以他的安全性相较于其他的非开源系统来说要高的
多;并且它可以从网络中免费下载。从这2点来说他非常适合用于网络信息闸(软路由或网
关)和自制防火墙(事实上国内的硬件防火墙厂商都是用工业X86硬件和linux来做他们的产
品,虽然那不是真正意义上的硬件防火墙)。现在学校过于注重对windows及其windows平台
上的软件、开发工具的学习。但是学生们没有意识到,真正撑起这个互联网的正是UNIX系统;

就从我对Linux的见解为大家展示UNIX系统的一角吧。
什么是NAT?
NAT英文全称是Network Address
Translation,称是网络地址转换,它是一个IETF标准,允许一个机构(包括多个网络节点
)以一个地址出现在Internet上。NAT将每个局域网节点的地址转换成一个IP地址,反之亦
然。它也可以应用到防火墙技术里,把个别IP地址隐藏起来不被外界发现,使外界无法直接
访问内部网络设备,同时,它还帮助网络可以超越地址的限制,合理地安排网络中的公有In
ternet 地址和私有IP地址 的使用。
为什么要进行NAT
假设校园网提供园区Internet接入服务,为了方便管理,校园网络中心分配给园区用户的IP
地址都是伪IP(内部ip),但是部分用户要求建立自己的WWW服务器对外发布信息,这时
候我们就可以通过NAT来提供这种服务了。我们可以在防火墙的外部网卡上绑定多个合法IP
地址或端口,然后通过NAT技术使发给其中某一个IP地址的包转发至内部某一用户的WWW服务
器上,然后再将该内部WWW服务器响应包伪装成该合法IP发出的包。

实验环境介绍
本文所有到的实验环境如下:
LINUX系统主机一台(服务端):双网卡 REDHAT 9.0 主机名:host
WINDOWS 98 系统主机一台(客户端):单网卡     主机名:test    
联想D-link 8口 10M/100M交换机一个

【正文】
网络拓扑结构:


一、 RED HAT 9.0安装和注意点
Linux是一个独立的操作系统,所以不能在其他操作系统下进行安装,他有自己的启动
方式,可以采用以下两种方法进行安装。
● 从CD-ROM进行安装
● 从FTP服务器进行安装
由于Linux系统安装(第一种方法),有随机参考手册,难度不大,所以我们着重介绍
从ftp安装。
在安装之前制作启动盘:
1. 在windows操作系统下将安装盘放入光驱;
2. 运行 e:dosutilsrawrite.exe(e盘为光驱)
3. 在运行后的界面中输入e:\images\bootnet.img
4. 指定目标盘,输入用户软盘盘符:a
这样一张安装程序的启动盘就建好了。
 
用软盘引导计算机,进入蓝色界面后,输入FTP服务器地址和ftp上的用户名及口令就
可以下在安装了。
RED HAT 9.0安装界面为中文,安装中文说明基本可以完成系统定制,在此要强调
的是,分区的时候,/swap(交换分区)大小要是内存大小的2倍;既然是作NAT网
关,要把/var(日志分区)单分出来,并且不要少于500M,有充裕的空间存储日志
,也为将来将来系统故障或受到攻击做到有据可查。
二.LINUX的网络设置和NAT原理
2.1网络设置
我们把Linux系统安装完后,整个设置平台算是搭建完毕,但是还要设置网络;设置网
络之前,或者说让linux上网前,应该把和这台服务器应该起到作用的无关服务关掉。
可以在命令行下敲入setup回车,会出现一个文本菜单,里面有“系统服务”一项,直
接用空格键取消服务前面的勾然后重新启动系统就行了。
假如是UNIX的熟练用户,可以在取消服务后,不用重新启动,在命令行侠打入
  ps aux    

会显示现在在后台运行的所有服务,看到要杀死的进程后,打入
kill -9 <pid>
(-9代表强制杀掉进程)杀死进程。
然后进入/etc/sysconfig/network-scripts/目录
vi ifcfg-eth0会出现以下内容
device=eth0
onboot=yes
bootproto=none
IPADDR=192.168.0.1 #(内网网卡iP)
netmask=255.255.255.0
TYPE=ETHERNET
USERCTL=NO
PEERDNS=NO
NETWORK=192.168.0.0(网络号)
Broadcast=192.168.0.255(广播号)
上面的设置的意思是:eth0对内的内网网卡,ip地址为192.168.0.1,子网掩码为:255.
255.255.0;

vi ifcfg-eth1会出现以下内容
device=eth1
onboot=yes
bootproto=none
IPADDR=202.204.208.5 #(外网网卡iP)
netmask=255.255.255.128
TYPE=ETHERNET
USERCTL=NO
PEERDNS=NO
NETWORK=202.204.208.0(网络号)
Broadcast=202.204.208.127(广播号)
上面的设置的意思是:eth1是对外的外网网卡,ip地址为202.204.208.5。
网卡的设置就完成了


加入nat客户端ip和名称
vi /etc/hosts
格式为:
ip地址 主机名
127.0.0.1 host

指定内网网关
vi /etc/sysconfig/network
gateway=202.204.208.7 #(网关地址,假如服务端的外网为拨号,就不要指定)

设置DNS服务器
vi /etc/resolv.conf
格式为
nameserver ip地址
nameserver 202.106.196.115
都设置好后,从新启动系统,在命令行下打入
route -a #察看路由表,看一下默认网关是否为202.204.208.7
假如是的话,服务端的网络配置就已经全部完成。

下面是客户端的网络配置
因为是win 98系统,所以只给出配置参数,配置方法略
ip地址为192.168.0.2
子网掩码:255.255.255.0
域名服务器:202.106.196.115
网关:192.168.0.1
全部网络设置完成

2.2 NAT原理
2.2.1在进入NAT设置之前,我们要先讨论一下NAT的工作原理
在引言部分,我们已经提到了一个NAT应用实例,从这个实例中可以看出NAT和防火墙是一体
的,换句话说,NAT就是防火墙。NAT对防火墙来说是子集的关系。
在本节,我们会深入讨论NAT的原理部分,为了更清晰的认识NAT,我们借用INTERNET标准化
组织发布的RFC3022文档的部分内容。
NAT有三种类型:静态NAT(Static NAT)、网络地址端口转换DNAT(destination-
NAT)、动态地址NAT(Pooled NAT)。我们主要讨论前面2种NAT.
静态nat解决问题的办法是:在内部网络中使用内部地址,通过NAT把内部地址翻译成合
法的IP地址在Internet上使用,其具体的做法是把IP包内的地址域用合法的IP地址来替换。
NAT设备维护一个状态表(路由表,所以也称NAT为软路由),用来把非法的IP地址映射到合
法的IP地址上去。每个包在NAT设备中都被翻译成正确的IP地址,发往下一级,这意味着给
处理器带来了一定的负担。但对于一般的网络来说,这种负担是微不足道的。
网络地址端口转换NAT,也叫做反向NAT,他解决问题的方法是:在内部网络中,使用内部地址
的计算机开设了网络服务(80,21等),当外部ip想访问这些服务时,NAT网关把外部访问i
p翻译成内部ip,也就是说,把内部开设的服务,映射到一个合法的ip和端口上,已供外部访
问。
假如想进一步了解他的工作原理,NAT其实就是一种IP包欺诈,也可以说是对IP报头的修改
,请看下表
4位版本
4位首部长度
8位服务类型
16位总长度(字节数)
16位标识
3位标志
13位片偏移
8位生存时间(ttl)
8位协议
16位首部校验和
32位源ip地址
32位目的ip地址
其他选项
携带数据
IP数据包格式和报头中的各字段
NAT网关(外202.204.208.5;内192.168.0.1)收到本地局域网内的客户机(192.168.0.2)
,发来的ip数据,先判断是否是本地子网中发来的,假如通过,则按照她的目的ip地址查找
本地路由表进行转发,NAT在包被继续向前送出之前转换32位源地址192.168.0.1成202.204.
208.5。相应的,IP包往回传时依据相同的地址进行转换。
2.2.2 NAT设置
我们知道了NAT的原理,就可以进行NAT的配置了,我们前面说过了NAT就是防火墙,在RED 
HAT 9.0下自带防火墙 IPTABLES
我们在做好网络设置后,假如要实现客户端(win98)通过服务端上网(静态NAT),
可以在命令行下直接打入
iptables -t nat -A POSTROUTING -o eth1 -j SNAT - to 202.204.208.5
说明:
   -t nat : 调用NAT表,调用这个表说明遇到了产生新的连接的包。
   -A :该命令将一条规则附加到链的末尾。
  POSTROUTING:指定正当信息包打算离开防火墙时改变它们的规则。
  -o eth1:输出接口为eth1
  -j SNAT:跳转,也叫触发条件,当满足SNAT规则是便发生跳转
  整条语句的意思为: 当防火墙遇到产生新的连接的包,则在他要离开防火墙时改变他
的源ip为202.204.208.5并且从eth1出口送出。

    nat的规则指定完成后,还要打开ip转发功能:
         echo 1 > /proc/sys/net/ipv4/ip_forward
这样,客户端就可以通过208.5上网了。

假如208.5的客户端192.168.0.2开设了80端口的web服务,如何让外
部访问到这个局域网内部的服务呢?
这就用到了Dnat(也叫反向NAT,端口跳转),在命令行下打入:
iptables -t nat -A PREROUTING -i eth1 -d 202.204.208.5 -p tcp -dport 80 -j DNAT
-to-destination 192.168.0.2:80
语句说明:当有通过eth1接口的tcp协议访问202.204.208.5的80端
口的时候,则触发跳转,跳转至局域网的192.168.0.2的80端口。
但是这同时也出现一个问题,在同一局域网内的机器,无法访问202.204.208.5的80端口。
以下是原因:
假设192.168.0.3不通过http://192.168.0.2:80这种方式进行浏...蛲 游侍饽兀?/a>
在命令行下打入:
iptables -t nat -A POSTROUTING -p tcp -s 192.168.0.0/24 -d 192.168.0.2/32 -j
SNAT -to 192.168.0.1
语句解释:当192.168.0.1-255这个范围的ip访问192.168.0.2这个ip的时候,当数据包离开
的时候修改源ip地址为192.168.0.1,这相当于在局域网内部,又作了一次NAT转换。局域网
内部通过192.168.0.1作为转发,而不是直接进行通信,这就避免了无法访问局域网内部ip
的情况。

目前,nat的功能就已经实现,但是并没有对包进行过滤。

三.网络攻击和防火墙
3.1什么事网络攻击
当混乱的Internet和你良好的、有序的Linux服务器网络之间进行连接时,你最好能知道哪
些东西可以进入你的大门。这就需要制定包过滤策略,既然是包过滤,肯定是要过滤掉那些
对网络有害的或者是无用的包,但哪些包是有害的呢?我们既然是在防守,不妨听听敌人的
想法。
作为一个老练的入侵者,他并不会盲目的展开攻击和入侵,他首先会确定自己的目标,当然
,确定目标的方法有2种,一是根据个人的好恶或审美观点确定目标,二是根据广义扫描器
(反馈结果简单,但是速度很快的扫描器)的反馈结果,选择整体安全性不高的网络作为攻
击目标。
接下来要做的就是了解这个网络服务器,就象和人交往一样,你对那个人越了解,就越清楚
那个人的弱点,从而你对它的伤害就越致命。对人的了解通过交谈,对服务器的了解要通过
扫描;首先要确定的是这台服务器都开有什么服务,这很简单,通过tcp协议的3次握手:
1.
当请求端对要扫描的服务器端口送一个包含SYN标志的TCP报文,这个报文指明客户端使用的
端口以及TCP连接的初始端口。
2.服务器在接受到客户端的SYN包问候,假如客户端请求连接的端口存在,则返回一个SYN
+ACK的报文,表示客户端的请求被接受。同时TCP序号被加一。那么扫描器接受到SYN+ACK报
文后,会向入侵者报告,扫描的这个端口是打开的,从而使入侵者判断这是什么服务。
3.
客户端也返回一个确认报文ACK给服务器端,同样TCP序列号被加一,到此一个TCP连接完成

4.
假如服务器的这个端口不存在,或者没有返回SYN+ACK报文,则扫描端发出一个FIN标志报文
,撤销这个TCP连接。

当确定了服务器开设了什么端口以后,有经验的入侵者可以从端口判断出这台服务器开设的
具体服务,然后就是按照不同的服务进行漏洞攻击或入侵了。

从以上攻击步骤看出,不要让服务器完全暴露在网络中,是非常重要的,也就是首先对端口
进行过滤,只允许指定的服务通过制定的端口穿越防火墙。这也就引出了RFC2979规定的互
联网防火墙规则配置的基本准则之一:
一切未被允许的就是禁止的。
基于该准则,防火墙应该封锁所有的信息流,然后对希望提供的服务逐项开放。这是一种非
常实用的方法,可以造成一种十分安全的环境,因为只有经过仔细挑选的服务才被允许实用


3.2如何防御网络攻击
从我们上例来看,我们只开设了web服务使用标准的80端口。
那我们要在防火墙中进行如下设置:
iptables -P INPUT -j DROP #我们用-P来拦截主机上所有通讯
iptables -A INPUT -p tcp -dport 80 -j ACCEPT #打开80端口的tcp协议
假如我们在将来还要还要添加适当端口,可以用上句的格式逐一添加

这样我们就实现了对网络服务器主机的端口过滤功能,这种方法也只是降低受到攻击的怕剩
蛭 械墓セ鞑⒉灰览涤诙丝诨蛘呖梢远砸丫 硕栽市砜 诺亩丝诮 泄セ鳎
攵杂谡?种攻击,还要分别制定防火墙策略。
1. 死亡之ping (ping of death)
ping,这个软件是测试网络间是否畅通用的,他应用于icmp协议,但并不依赖于哪个端口,
由于在早期的阶段,路由器对包的最大尺寸都有限制,许多操作系统对TCP/IP栈的实现在IC
MP包上都是规定64KB,并且在对包的标题头进行读取之后,要根据该标题头里包含的信息来
为有效载荷生成缓冲区,当产生畸形的,声称自己的尺寸超过ICMP上限的包也就是加载的尺
寸超过64K上限时,就会出现内存分配错误,导致TCP/IP堆栈崩溃,致使接受方当机。
为了解决这个问题,我们可以在防火墙中加入以下内容
iptables -A INPUT -p icmp -icmp-type echo-request -i eth1 -j DROP
这句话的意思是,从接口eth1进入的icmp协议的请求全部丢弃。

2. SYN Flood (拒绝服务攻击)
SYN Flood
是目前最流行的拒绝服务攻击与分布式拒绝服务攻击的方式之一,这是一种利用TCP协议缺
陷,发送大量伪造的TCP连接请求,从而使得被攻击方资源耗尽的攻击方式。
前面已经提过TCP的三次握手,问题就出在TCP连接的三次握手中,假设一个用户向服务器发
送了SYN报文后突然死机或掉线,那么服务器在发出SYN+ACK应答报文后是无法收到客户端的
ACK报文的(第三次握手无法完成),这种情况下服务器一般会重试(再次发送SKY+ACK给客
户端)并等待一段是句丢弃这个未完成的连接,这段时间的长度我们称为(SYN
Timeout),一般来说这个时间是分钟为单位(半分钟-2分钟);一个用户出现异常导致服务
器的一个线程等待1分钟并不是什么很大的问题,但如果有一个恶意的攻击者大量模拟这种
情况,服务器端将为了维护一个非常大的半连接列表而消耗非常多的资源----数以万计的半
连接,即使是简单的保存并遍历也会消耗很多的CPU资源与时间,何况还要不断对这个列表
中的IP进行SYN+ACK的重试。实际上如果服务器的TCP/IP栈不够强大,最后的结果往往是堆
栈溢出崩溃---即使服务器端的系统足够强大,服务器端也将忙于处理攻击者伪造的TCP连接
请求而无暇理睬合法请求(客户端的正常请求相较于非法请求来说非常小),此时从正常连
接的角度来说,服务器失去了响应,这种情况我们称为服务器收到了洪水攻击。
从防御角度来说,可以缩短SYN-Timeout时间,由于SYN
FLOOD攻击效果取决于服务器上保持的SYN半连接数,这个值等于SYN攻击的频度* SYN
Timeout,所以通过缩短从接受到SYN报文到区定这个报文物校并丢弃连接的时间,,可以降
低服务器的负荷。
我们可以在用IPTABLES执行如下语句:
iptables -A FORWARD -p tcp --syn -m limit --limit 1/s -j ACCEPT

在所有的IPTABLES规则制定完后,可以用$ iptables-save >
iptables-script把写入的全部的规则写入到文件,然后 在 /etc/rc.d/rc.local
加入:iptables-restore iptables-script
这样每次重新启动系统将自动载入iptables设定好的规则。

【结论】
本设计实现了Linux服务器在局域网内的代理上网应用和网络防火墙应用,大量使用了Linux
下的防火墙iptables。并且对tcp/ip协议作了透彻的讲解,对网络的典型攻击方式进行了明
确的阐述。证明Linux在作为网络网关服务器有充分的方式,不仅系统强壮,并且配置性很
强。希望给广大喜欢网络及网络管理的同学提供了新的思路。
2006.3.7 21:38 作者:cao1215 引用:0 | 收藏 |
评论:0我想找一下关于Linux下的NAT和防火墙的教程?
分类:默认栏目
我想找一下关于Linux下的NAT和防火墙的教程?2006.3.7 20:12 作者:cao1215 引用:0 |
收藏 | 评论:0redhat linux 9.0 VSFTP配置大全
分类:默认栏目
redhat linux 9.0 VSFTP配置大全

3.2 VSFTP—安全与效能兼备的ftp 服务器
3.2.1 VSFTP 概述
FTP,file transfer
protocol,这是档案传输的通讯协议,也是一般最常用来传送档案的方式。读者在使用RedH
at9 的时候,可能会感受到ftp server 有一些改变:第一,就是ftp server
只剩下vsftp,原有的wuftp 等都没放入﹔第二,就是vsftp 从XINETD
中独立出来,并将设定档从/etc/vsftpd.conf 之中移到/etc/vsftpd/vsftpd.conf。
为什么做这样的改变?可以想见的是vsftp 已有独立运作的能力,不需要XINETD
来做更进一步的管控,并且类似sendmail、httpd、ssh、samba 等,将设定文件的放入/etc
下独立的目录。
FTP 分为两类,一种为PORT FTP,也就是一般的FTP﹔另一类是PASVFTP,分述如下: PORT
FTP
这是一般形式的FTP,首先会建立控制频道,默认值是port 21,也就是跟
port 21 建立联机,并透过此联机下达指令。第二,由FTP server 端会建立数据
传输频道,默认值为20,也就是跟port 20 建立联机,并透过port 20 作数据的
传输。
PASV FTP
跟PORT FTP 类似,首先会建立控制频道,默认值是port 21,也就是跟
port 21 建立联机,并透过此联机下达指令。第二,会由client 端做出数据传输
的请求,包括数据传输port 的数字。
这两者的差异为何?PORT FTP 当中的数据传输port 是由FTP server 指定,
而PASV FTP 的数据传输port 是由FTP client 决定。通常我们使用PASV FTP,
是在有防火墙的环境之下,透过client 与server 的沟通,决定数据传输的port。


3.2.2 范例
3.2.1. 直接启动VSFTP 服务
这个范例是套用RedHat 的预设范例,直接启动vsftp。
[root@relay vsftpd]# /sbin/service vsftpd start
Starting vsftpd for vsftpd: OK ]

3.2.2. 更换port 提供服务:将预设的port 21 更换为2121
为了安全,或是以port 来区隔不同的ftp 服务,我们可能会将ftp port 改为
21 之外的port,那么,可参考以下步骤。
Step1. 修改/etc/vsftpd/vsftpd.conf
新增底下一行
listen_port=2121
Step2. 重新启动vsftpd
[root@home vsftpd]# /sbin/service vsftpd restart
Shutting down vsftpd: OK ]
Starting vsftpd for vsftpd: OK ]

3.2.3. 特定使用者peter、john 不得变更目录
使用者的预设目录为/home/username,若是我们不希望使用者在ftp 时能够
切换到上一层目录/home,则可参考以下步骤。
Step1. 修改/etc/vsftpd/vsftpd.conf
将底下三行
#chroot_list_enable=YES
# (default follows)
#chroot_list_file=/etc/vsftpd.chroot_list
改为
chroot_list_enable=YES
# (default follows)
chroot_list_file=/etc/vsftpd/chroot_list
Step2. 新增一个档案: /etc/vsftpd/chroot_list
内容增加两行:
peter
john
Step3. 重新启动vsftpd
[root@home vsftpd]# /sbin/service vsftpd restart
Shutting down vsftpd: OK ]
Starting vsftpd for vsftpd: OK ]
若是peter 欲切换到根目录以外的目录,则会出现以下警告:
ftp> cd /home
550 Failed to change directory.

3.2.4. 取消anonymous 登入
若是读者的主机不希望使用者匿名登入,则可参考以下步骤。
Step1. 修改/etc/vsftpd/vsftpd.conf

anonymous_enable=YES
改为
anonymous_enable=NO
Step2. 重新启动vsftpd
[root@home vsftpd]# /sbin/service vsftpd restart
Shutting down vsftpd: OK ]
Starting vsftpd for vsftpd: OK ]

3.2.5. 安排欢迎话语
若是我们希望使用者在登入时,能够看到欢迎话语,可能包括对该主机的
说明,或是目录的介绍,可参考以下步骤。
首先确定在/etc/vsftpd/vsftpd.conf 当中是否有底下这一行
dirmessage_enable=YES
RedHat9 的默认值是有上面这行的。
接着,在各目录之中,新增名为.message 的档案,再这边假设有一个使用
者test1,且此使用者的根目录下有个目录名为abc,那首先我们在/home/test1
之下新增.message,内容如下:
Hello~ Welcome to the home directory
This is for test only...
接着,在/home/test1/abc 的目录下新增.message,内容如下:
Welcome to abc's directory
This is subdir...
那么,当使用者test1 登入时,会看到以下讯息:
230- Hello~ Welcome to the home directory
230-
230- This is for test only...
230-
若是切换到abc 的目录,则会出现以下讯息:
250- Welcome to abc's directory
250-
250- This is subdir ...

3.2.6. 对于每一个联机,以独立的process 来运作
一般启动vsftp 时,我们只会看到一个名为vsftpd 的process 在运作,但若
是读者希望每一个联机,都能以独立的process 来呈现,则可执行以下步骤。
Step1. 修改/etc/vsftpd/vsftpd.conf
新增底下一行
setproctitle_enable=YES
Step2. 重新启动vsftpd
[root@home vsftpd]# /sbin/service vsftpd restart
Shutting down vsftpd: OK ]
Starting vsftpd for vsftpd: OK ]
使用ps -ef 的指令,可以看告不同使用者联机的情形,如下图所示:
[root@home vsftpd]# ps -ef|grep ftp
root 2090 1 0 16:41 pts/0 00:00:00 vsftpd: LISTENER
nobody 2120 2090 0 17:18 ? 00:00:00 vsftpd: 192.168.10.244:
connected
test1 2122 2120 0 17:18 ? 00:00:00 vsftpd: 192.168.10.244/test1:
IDLE
nobody 2124 2090 0 17:19 ? 00:00:00 vsftpd: 192.168.10.244:
connected
test2 2126 2124 0 17:19 ? 00:00:00 vsftpd: 192.168.10.244/test2:
IDLE
root 2129 1343 0 17:20 pts/0 00:00:00 grep ftp
[root@home vsftpd]#

3.2.7. 限制传输档案的速度:本机的使用者最高速度为200KBytes/s,匿名登入
者所能使用的最高速度为50KBytes/s
Step1. 修改/etc/vsftpd/vsftpd.conf
新增底下两行
anon_max_rate=50000
local_max_rate=200000
Step2. 重新启动vsftpd
[root@home vsftpd]# /sbin/service vsftpd restart
Shutting down vsftpd: OK ]
Starting vsftpd for vsftpd: OK ]
在这边速度的单位为Bytes/s,其中anon_max_rate 所限制的是匿名登入的
使用者,而local_max_rate 所限制的是本机的使用者。VSFTPD 对于速度的限
制,范围大概在80%到120%之间,也就是我们限制最高速度为100KBytes/s,
但实际的速度可能在80KBytes/s 到120KBytes/s 之间,当然,若是频宽不足
时,数值会低于此限制。

3.2.8. 针对不同的使用者限制不同的速度:假设test1 所能使用的最高速度为
250KBytes/s,test2 所能使用的最高速度为500KBytes/s。
Step1. 修改/etc/vsftpd/vsftpd.conf
新增底下一行
user_config_dir=/etc/vsftpd/userconf
Step2. 新增一个目录:/etc/vsftpd/userconf
mkdir /etc/vsftpd/userconf
Step3. 在/etc/vsftpd/userconf 之下新增一个名为test1 的档案
内容增加一行:
local_max_rate=250000
Step4. 在/etc/vsftpd/userconf 之下新增一个名为test2 的档案
内容增加一行:
local_max_rate=500000
Step5. 重新启动vsftpd
[root@home vsftpd]# /sbin/service vsftpd restart
Shutting down vsftpd: OK ]
Starting vsftpd for vsftpd: OK ]


3.2.9-1. 建置一个防火墙下的ftp server,使用PORT FTP mode:预设的ftp
port:21 以及ftp data port:20
启动VSFTPD 之后执行以下两行指令,只允许port 21 以及port 20 开放,
其它关闭。
iptables -A INPUT -p tcp -m multiport --dport 21,20 -j ACCEPT
iptables -A INPUT -p tcp -j REJECT --reject-with tcp-reset

3.2.9-2. 建置一个防火墙下的ftp server,使用PORT FTP mode:ftp port:2121
以及ftp data port:2020
Step1. 执行以下两行指令,只允许port 2121 以及port 2020 开放,其它关闭。
iptables -A INPUT -p tcp -m multiport --dport 2121,2020 -j ACCEPT
iptables -A INPUT -p tcp -j REJECT --reject-with tcp-reset
Step2. 修改/etc/vsftpd/vsftpd.conf
新增底下两行
listen_port=2121
ftp_data_port=2020
Step3. 重新启动vsftpd
[root@home vsftpd]# /sbin/service vsftpd restart
Shutting down vsftpd: OK ]
Starting vsftpd for vsftpd: OK ]
在这边要注意,8、9 两个例子中,ftp client(如cuteftp)的联机方式不能
够选择passive mode,否则无法建立数据的联机。也就是读者可以连上ftp
server,但是执行ls、get 等等的指令时,便无法运作。

3.2.10. 建置一个防火墙下的ftp server,使用PASS FTP mode:ftp port:2121
以及ftp data port 从9981 到9986。
Step1. 执行以下两行指令,只允许port 2121 以及port 9981-9990 开放,其它关
闭。
iptables -A INPUT -p tcp -m multiport --dport
2121,9981,9982,9983,9984,9985,9986,9987,9988,9989,9990 -j ACCEPT
iptables -A INPUT -p tcp -j REJECT --reject-with tcp-reset
Step2. 修改/etc/vsftpd/vsftpd.conf
新增底下四行
listen_port=2121
pasv_enable=YES
pasv_min_port=9981
pasv_max_port=9986
Step3. 重新启动vsftpd
[root@home vsftpd]# /sbin/service vsftpd restart
Shutting down vsftpd: OK ]
Starting vsftpd for vsftpd: OK ]
在这边要注意,在10 这个例子中,ftp client(如cuteftp)的联机方式必须
选择passive mode,否则无法建立数据的联机。也就是读者可以连上ftp
server,但是执行ls,get 等等的指令时,便无法运作。

8.2.11. 将vsftpd 与TCP_wrapper 结合
若是读者希望直接在/etc/hosts.allow 之中定义允许或是拒绝的来源地址,
可执行以下步骤。这是简易的防火墙设定。
Step1. 确定/etc/vsftpd/vsftpd.conf 之中tcp_wrappers 的设定为YES,如下图所
示:
tcp_wrappers=YES
这是RedHat9 的默认值,基本上不需修改。
Step2. 重新启动vsftpd
[root@home vsftpd]# /sbin/service vsftpd restart
Shutting down vsftpd: OK ]
Starting vsftpd for vsftpd: OK ]
Step3. 设定/etc/hosts.allow,譬如提供111.22.33.4 以及10.1.1.1 到10.1.1.254 连
线,则可做下图之设定:
vsftpd : 111.22.33.4 10.1.1. : allow
ALL : ALL : DENY

8.2.12. 将vsftpd 并入XINETD
若是读者希望将vsftpd 并入XINETD 之中,也就是7.x 版的预设设定,那
么读者可以执行以下步骤。
Step1. 修改/etc/vsftpd/vsftpd.conf

listen=YES
改为
listen=NO
Step2. 新增一个档案: /etc/xinetd.d/vsftpd
内容如下:
service vsftpd
{
disable = no
socket_type = stream
wait = no
user = root
server = /usr/sbin/vsftpd
port = 21
log_on_success += PID HOST DURATION
log_on_failure += HOST
}
Step3. 重新启动xinetd
[root@home vsftpd]# /sbin/service xinetd restart
Stopping xinetd: OK ]
Starting xinetd: OK ]
3.2.3 设定档说明
在范例中,有些省略的设定可以在这边找到,譬如联机的总数、同一个位
址的联机数、显示档案拥有者的名称等等,希望读者细读后,可以做出最适合
自己的设定。
格式
vsftpd.conf 的内容非常单纯,每一行即为一项设定。若是空白行或是开头为#的一行,
将会被忽略。内容的格式只有一种,如下所示
option=value
要注意的是,等号两边不能加空白,不然是不正确的设定。
===ascii 设定=====================
ascii_download_enable
管控是否可用ASCII 模式下载。默认值为NO。
ascii_upload_enable
管控是否可用ASCII 模式上传。默认值为NO。
===个别使用者设定===================
chroot_list_enable
如果启动这项功能,则所有的本机使用者登入均可进到根目录之外的数据夹,除了列
在/etc/vsftpd.chroot_list 之中的使用者之外。默认值为NO。
userlist_enable
用法:YES/NO
若是启动此功能,则会读取/etc/vsftpd.user_list 当中的使用者名称。此项功能可以在询
问密码前就出现失败讯息,而不需要检验密码的程序。默认值为关闭。
userlist_deny
用法:YES/NO
这个选项只有在userlist_enable 启动时才会被检验。如果将这个选项设为YES,则在
/etc/vsftpd.user_list 中的使用者将无法登入﹔ 若设为NO , 则只有在
/etc/vsftpd.user_list 中的使用者才能登入。而且此项功能可以在询问密码前就出现错误
讯息,而不需要检验密码的程序。
user_config_dir
定义个别使用者设定文件所在的目录,例如定义user_config_dir=/etc/vsftpd/userconf,
且主机上有使用者test1,test2,那我们可以在user_config_dir 的目录新增文件名为
test1 以及test2。若是test1 登入,则会读取user_config_dir 下的test1
这个档案内的设
定。默认值为无。


===欢迎语设定=====================
dirmessage_enable
如果启动这个选项,使用者第一次进入一个目录时,会检查该目录下是否有.message
这个档案,若是有,则会出现此档案的内容,通常这个档案会放置欢迎话语,或是对
该目录的说明。默认值为开启。
banner_file
当使用者登入时,会显示此设定所在的档案内容,通常为欢迎话语或是说明。默认值
为无。
ftpd_banner
这边可定义欢迎话语的字符串,相较于banner_file 是档案的形式,而ftpd_banner 是字
串的格式。预设为无。


===特殊安全设定====================
chroot_local_user
如果设定为YES,那么所有的本机的使用者都可以切换到根目录以外的数据夹。预设
值为NO。
hide_ids
如果启动这项功能,所有档案的拥有者与群组都为ftp,也就是使用者登入使用ls -al
之类的指令,所看到的档案拥有者跟群组均为ftp。默认值为关闭。
ls_recurse_enable
若是启动此功能,则允许登入者使用ls -R 这个指令。默认值为NO。
write_enable
用法:YES/NO
这个选项可以控制FTP 的指令是否允许更改file system,譬如STOR、DELE、
RNFR、RNTO、MKD、RMD、APPE 以及SITE。预设是关闭。
setproctitle_enable
用法:YES/NO
启动这项功能,vsftpd 会将所有联机的状况已不同的process 呈现出来,换句话说,使
用ps -ef 这类的指令就可以看到联机的状态。默认值为关闭。
tcp_wrappers
用法:YES/NO
如果启动,则会将vsftpd 与tcp wrapper 结合,也就是可以在/etc/hosts.allow 与
/etc/hosts.deny 中定义可联机或是拒绝的来源地址。
pam_service_name
这边定义PAM 所使用的名称,预设为vsftpd。
secure_chroot_dir
这个选项必须指定一个空的数据夹且任何登入者都不能有写入的权限,当vsftpd 不需
要file system 的权限时,就会将使用者限制在此数据夹中。默认值为/usr/share/empty


===纪录文件设定=====================
xferlog_enable
用法:YES/NO
如果启动,上传与下载的信息将被完整纪录在底下xferlog_file 所定义的档案中。预设
为开启。
xferlog_file
这个选项可设定纪录文件所在的位置,默认值为/var/log/vsftpd.log。
xferlog_std_format
如果启动,则纪录文件将会写为xferlog 的标准格式,如同wu-ftpd 一般。默认值为关
闭。


===逾时设定======================
accept_timeout
接受建立联机的逾时设定,单位为秒。默认值为60。
connect_timeout
响应PORT 方式的数据联机的逾时设定,单位为秒。默认值为60。
data_connection_timeout
建立数据联机的逾时设定。默认值为300 秒。
idle_session_timeout
发呆的逾时设定,若是超出这时间没有数据的传送或是指令的输入,则会强迫断线,
单位为秒。默认值为300。


===速率限制======================
anon_max_rate
匿名登入所能使用的最大传输速度,单位为每秒多少bytes,0 表示不限速度。默认值
为0。
local_max_rate
本机使用者所能使用的最大传输速度,单位为每秒多少bytes,0 表示不限速度。预设
值为0。


===新增档案权限设定==================
anon_umask
匿名登入者新增档案时的umask 数值。默认值为077。
file_open_mode
上传档案的权限,与chmod 所使用的数值相同。默认值为0666。
local_umask
本机登入者新增档案时的umask 数值。默认值为077。
===port 设定======================
connect_from_port_20
用法:YES/NO
若设为YES,则强迫ftp-data 的数据传送使用port 20。默认值为YES。
ftp_data_port
设定ftp 数据联机所使用的port。默认值为20。
listen_port
FTP server 所使用的port。默认值为21。
pasv_max_port
建立资料联机所可以使用port 范围的上界,0 表示任意。默认值为0。
pasv_min_port
建立资料联机所可以使用port 范围的下界,0 表示任意。默认值为0。
===其它========================
anon_root
使用匿名登入时,所登入的目录。默认值为无。
local_enable
用法:YES/NO
启动此功能则允许本机使用者登入。默认值为YES。
local_root
本机使用者登入时,将被更换到定义的目录下。默认值为无。
text_userdb_names
用法:YES/NO
当使用者登入后使用ls -al 之类的指令查询该档案的管理权时,预设会出现拥有者的
UID,而不是该档案拥有者的名称。若是希望出现拥有者的名称,则将此功能开启。
默认值为NO。
pasv_enable
若是设为NO,则不允许使用PASV 的模式建立数据的联机。默认值为开启。


===更换档案所有权===================
chown_uploads
用法:YES/NO
若是启动,所有匿名上传数据的拥有者将被更换为chown_username 当中所设定的使
用者。这样的选项对于安全及管理,是很有用的。默认值为NO。
chown_username
这里可以定义当匿名登入者上传档案时,该档案的拥有者将被置换的使用者名称。预
设值为root。
===guest 设定=====================
guest_enable
用法:YES/NO
若是启动这项功能,所有的非匿名登入者都视为guest。默认值为关闭。
guest_username
这里将定义guest 的使用者名称。默认值为ftp。
===anonymous 设定==================
anonymous_enable
用法:YES/NO
管控使否允许匿名登入,YES 为允许匿名登入,NO 为不允许。默认值为YES。
no_anon_password
若是启动这项功能,则使用匿名登入时,不会询问密码。默认值为NO。
anon_mkdir_write_enable
用法:YES/NO
如果设为YES,匿名登入者会被允许新增目录,当然,匿名使用者必须要有对上层目
录的写入权。默认值为NO。
anon_other_write_enable
用法:YES/NO
如果设为YES,匿名登入者会被允许更多于上传与建立目录之外的权限,譬如删除或
是更名。默认值为NO。
anon_upload_enable
用法:YES/NO
如果设为YES,匿名登入者会被允许上传目录的权限,当然,匿名使用者必须要有对
上层目录的写入权。默认值为NO。
anon_world_readable_only
用法:YES/NO
如果设为YES,匿名登入者会被允许下载可阅读的档案。默认值为YES。
ftp_username
定义匿名登入的使用者名称。默认值为ftp。
deny_email_enable
若是启动这项功能,则必须提供一个档案/etc/vsftpd.banner_emails,内容为email
address。若是使用匿名登入,则会要求输入email address,若输入的email address 在
此档案内,则不允许联机。默认值为NO。


===Standalone 选项==================
listen
用法:YES/NO
若是启动,则vsftpd 将会以独立运作的方式执行,若是vsftpd 独立执行,如RedHat9
的默认值,则必须启动﹔若是vsftpd 包含在xinetd 之中,则必须关闭此功能,如
RedHat8。在RedHat9 的默认值为YES。
listen_address
若是vsftpd 使用standalone 的模式,可使用这个参数定义使用哪个IP address 提供这
项服务,若是主机上只有定义一个IP address,则此选项不需使用,若是有多个IP
address,可定义在哪个IP address 上提供ftp 服务。若是不设定,则所有的IP address
均会提供此服务。默认值为无。
max_clients
若是vsftpd 使用standalone 的模式,可使用这个参数定义最大的总联机数。超过这个
数目将会拒绝联机,0 表示不限。默认值为0。
max_per_ip
若是vsftpd 使用standalone 的模式,可使用这个参数定义每个ip address 所可以联机
的数目。超过这个数目将会拒绝联机,0 表示不限。默认值为0。
=============================
3.2.4 FTP 数字代码的意义
110 重新启动标记应答。
120 服务在多久时间内ready。
125 数据链路埠开启,准备传送。
150 文件状态正常,开启数据连接端口。
200 命令执行成功。
202 命令执行失败。
211 系统状态或是系统求助响应。
212 目录的状态。
213 文件的状态。
214 求助的讯息。
215 名称系统类型。
220 新的联机服务ready。
221 服务的控制连接埠关闭,可以注销。
225 数据连结开启,但无传输动作。
226 关闭数据连接端口,请求的文件操作成功。
227 进入passive mode。
230 使用者登入。
250 请求的文件操作完成。
257 显示目前的路径名称。
331 用户名称正确,需要密码。
332 登入时需要账号信息。
350 请求的操作需要进一部的命令。
421 无法提供服务,关闭控制连结。
425 无法开启数据链路。
426 关闭联机,终止传输。
450 请求的操作未执行。
451 命令终止:有本地的错误。
452 未执行命令:磁盘空间不足。
500 格式错误,无法识别命令。
501 参数语法错误。
502 命令执行失败。
503 命令顺序错误。
504 命令所接的参数不正确。
530 未登入。
532 储存文件需要账户登入。
550 未执行请求的操作。
551 请求的命令终止,类型未知。
552 请求的文件终止,储存位溢出。
553 未执行请求的的命令,

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值