教你配置安全的ProFTPD服务器(中)

二、 基本加固ProFTPD服务器步骤

   1.升级版本

    注:如果当前版本已经是最新版本,可以跳过第一步。

    升级陈旧的ProFTPD版本,因为早期的ProFTPD版本存在的安全漏洞。对于一个新配置的ProFTPD服务器来说使用最新稳定版本是最明智的选择,可以在其官方网站下载其源代码进行编译。ProFTPD最新版本是1.3.4a,官方网址:http://www.ProFTPD.org 。

   2.理解ProFTPD服务器运行方式

    守护进程(Daemon)定义:是在计算机启动时就被运行的,并在系统中持续运行的进程, 它等待着随时为客户提供自身负责的服务。守护进程的工作就是打开一个端口,并且等待(Listen)进入的连接。 如果客户提请了一个连接,守护进程就创建(fork)子进程来响应此连接, 而父进程继续监听更多的服务请求。正因为如此,每个守护进程都可以处理多个客户服务请求。ProFTPD能以Stand-alone、xinetd两种模式运行。首先我们要理解这两个模式的含义。

    (1)Stand-alone(运行独立)守护进程

    Stand-alone(独立运行)守护进程由init脚本负责管理,所有独立运行的守护进程的脚本在/etc/rc.d/init.d/目录下。系统服务都是独立运行的守护进程包括:syslogd和cron等。运行独立的守护进程工作方式称作:stand-alone。它Unix传统的C/S模式的访问模式。服务器监听(Listen)在一个特点的端口上等待客户端的联机。如果客户端产生一个连接请求,守护进程就创建(Fork)一个子服务器响应这个连接,而主服务器继续监听。以保持多个子服务器池等待下一个客户端请求。stand-alone模式工作原理见图5。

图5 stand-alone工作模式

    工作在stand-alone模式下的网络服务有route、gated。另外是大家最熟悉是Web服务器:Apache和邮件服务器Sendmail、域名服务器Bind。因为这些负载很大服务器上,预先创子服务器,可以通过客户的服务速度。在Linux系统中通过stand-alone工作模式启动的服务由/etc/rc.d/下面对应的运行级别当中的符号链接启动。

(2)xinetd模式

    从守护进程的概念可以看出,对于系统所要通过的每一种服务,都必须运行一个监听某个端口连接所发生的守护进程,这通常意味着资源浪费。为了解决这个问题,Linux引进了“网络守护进程服务程序”的概念。Redhat Linux 9.0使用的网络守护进程是xinted(eXtended InterNET daemon)。和stand-alone模式相比xinted模式也称 Internet Super-Server(超级服务器)。xinetd能够同时监听多个指定的端口,在接受用户请求时,他能够根据用户请求的端口不同,启动不同的网络服务进程来处理这些用户请求。可以把xinetd看做一个管理启动服务的管理服务器,它决定把一个客户请求交给那个程序处理,然后启动相应的守护进程。xinetd模式工作原理见图6。

图6 xinetd工作模式


    和stand-alone工作模式相比,系统不想要每一个网络服务进程都监听其服务端口。运行单个xinetd就可以同时监听所有服务端口,这样就降低了系统开销,保护系统资源。但是对于访问量大、经常出现并发访问时,xinetd想要频繁启动对应的网络服务进程,反而会导致系统性能下降。察看系统为Linux服务提供那种模式方法在Linux命令行可以使用pstree命令可以看到两种不同方式启动的网络服务。一般来说系统一些负载高的服务:sendmail、Apache服务是单独启动的。而其他服务类型都可以使用xinetd超级服务器管理。守护进程的分类:系统守护进程:如atd、crond、lpd、syslogd、login等。网络守护进程:如sshd、httpd、sendmail、xinetd等。

    查看目前运行的守护进程树可以使用命令:“pstree”。pstree指令用ASCII字符显示树状结构,清楚地表达程序间的相互关系。如果不指定程序识别码或用户名称,则会把系统启动时的第一个程序视为基层,并显示之后的所有程序。若指定用户名称,便会以隶属该用户的第一个程序当作基层,然后显示该用户的所有程序。主要命令选型:

-a  显示每个程序的完整指令,包含路径,参数或是常驻服务的标示。 
-c  不使用精简标示法。 
-G  使用VT100终端机的列绘图字符。 
-h  列出树状图时,特别标明现在执行的程序。 
-H<程序识别码>  此参数的效果和指定"-h"参数类似,但特别标明指定的程序。 
-l  采用长列格式显示树状图。 
-n  用程序识别码排序。预设是以程序名称来排序。 
-p  显示程序识别码。 
-u  显示用户名称。 
-U  使用UTF-8列绘图字符。 
pstree 输出界面见图7()内是进程号。

图7 pstree 输出界面


    xinetd提供类似于inetd+tcp_wrapper的功能,但是更加强大和安全。xinetd(eXtended InterNET services daemon)提供类似于inetd+tcp_wrapper的功能,但是更加强大和安全。它能提供以下特色:

  • 支持对tcp、ucp、RPC服务(但是当前对RPC的支持不够稳定) 。
  • 基于时间段的访问控制 。
  • 功能完备的log功能,即可以记录连接成功也可以记录连接失败的行为。
  • 能有效的防止DoS攻击(Denial of Services) 。
  • 能限制同时运行的同意类型的服务器数目 。
  • 能限制启动的所有服务器数目 。
  • 能限制log文件大小 。
  • 将某个服务绑定在特定的系统接口上,从而能实现只允许私有网络访问某项服务 。
  • 能实现作为其他系统的代理。如果和ip伪装结合可以实现对内部私有网络的访问。

    原则上任何系统服务都可以使用xinetd,然而,我认为,最适合应该是哪些常用的internet服务,同时,这个服务的请求数目和频繁程度不会太高。象DNS和Apache就不适合采用这种方式,而象Ftp、telnet、 SSH等就很适合使用xinetd方式,系统默认使用xinetd的服务可以分为如下几类:

  1、标准internet服务:telnet ftp
2、信息服务:finger netstat systat
3、邮件服务:imap imaps pop2 pop3 pops 
4、RPC服务:rquotad rstatd rusersd sprayd walld
5、BSD服务:comsat exec login ntalk shell talk
6、内部服务:chargen daytime echo servers services time
7、安全服务:irc
8、其他服务:name uucp

Red Hat 中xinetd 的配置文件:主配置文件:/etc/xinetd.conf,每一个由xinetd启动的服务在目录/etc/xinetd.d/下都有一个以服务名称命名的配置文件。在主配置文件/etc/xinetd.conf中将/etc/xinetd.d目录下的所有文件的内容使用 includedir /etc/xinetd.d语句包含进来。xinetd的配置选项见表-1。

表 1. xinetd的指示符


    xinetd能有效的防止拒绝服务攻击(Denial of Services)原理:

    (a)限制同时运行的进程数:

    通过设置instances选项设定同时运行的并发进程数:
instances=20
    当服务器被请求连接的进程数达到20个时,xinetd将停止接受多出部分的连接请求。直到请求连接数低于设定值为止。

    (b)限制一个IP地址的最大连接数:

    通过限制一个主机的最大连接数,从而防止某个主机独占某个服务。
per_source=5
    这里每个IP地址可以连接单个IP地址的连接数是5个。

    (c)限制负载:

    xinetd还可以使用限制负载的方法防范拒绝服务攻击。用一个浮点数作为负载系数,当负载达到这个数目的时候,该服务将暂停处理后续的连接:
max_load = 2.8
    上面的例子中当一项系统负载达到2.8时,所有服务将暂时中止,直到系统负载下降到设定值以下。说明要使用这个选项,编译时要加入--with-loadavg ,xinetd将而已处理max-load配置选项。从而在系统负载过重时关闭某些服务进程,来实现某些拒绝服务攻击。 

    (d)限制所有服务器数目(连接速率):

    xinetd可以使用cps选项设定连接速率,下面的例子:
cps = 25 60
    第一个参数表示每秒可以处理的连接数,如果超过了这个连接数之后进入的连接将被暂时停止处理;第二个参数表示停止处理多少秒后继续处理先前暂停处理的连接。即服务器最多启动25个连接,如果达到这个数目将停止启动新服务60秒。在此期间不接受任何请求。

3.尽量使用xinetd方式运行ProFTPD服务器

    ProFTPD能以Stand-alone、xinetd两种模式运行。当用户账号比较少又经常需要连接到ProFTPD服务器时推荐使用xinetd模式运行。使用xinetd方式运行ProFTPD可以有效防范DoS攻击。使用xinetd方式运行ProFTPD的步骤:

    (1)检查确省运行情况

    确省情况下ProFTPD以stand-alone工作模式运行,可以使用“ps aux| grep proftpd”命令查看进程号,然后使用kill命令中止运行。

    (2)修改配置文件

    修改/etc/proftpd.conf文件的ServerType选项由“standalone”改为“inetd”。

    (3)建立用户组

    groupadd nogroup

    (4)创建配置文件/etc/xinetd.d/proftpd,代码如下:

service ftp 

flags = REUSE 
socket_type = stream   “服务的数据封包类型为stream”
instances = 30           “最多可以同时建立30个ftp连接。”
max_load = 3.0        “最大负载“
wait = no         “不需等待,即ftp服务将以多线程的方式运行”
user = root         “执行此服务进程的用户是root”
server = /usr/local/sbin/proftpd “启动脚本位置”
log_on_success = HOST PID 
log_on_failure = HOST RECORD 
disable = no   “允许运行proftpd”
}


    (5)重新启动xinetd配置

    killall -USR1 xinetd

    (6)使用命令连接服务器

    可以使用“ftp localhost”连接本地服务器,如果连接被拒绝,可以使用命令:
    tail -f /var/log/messages查看错误信息。

 

Trackback:http://hi.baidu.com/tonyty163/blog/item/e0493b5916ca3ad79c8204b2.html
 

 

转载于:https://www.cnblogs.com/JohnShao/archive/2012/05/01/2477546.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/569127.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java 将Word转为PDF、PNG、SVG、RTF、XPS、TXT、XML

同一文档在不同的编译或阅读环境中&#xff0c;需要使用特定的文档格式来打开&#xff0c;通常需要通过转换文档格式的方式来实现。下面将介绍在Java程序中如何来转换Word文档为其他几种常见文档格式&#xff0c;如PDF、图片png、svg、xps、rtf、txt、xml等。 使用工具&#xf…

CentOS7上GitLab的使用

生成SSH Keys 生成root账号的ssh key # ssh-keygen -t rsa -C "adminexample.com" 显示pub key的值 # cat ~/.ssh/id_rsa.pub 复制显示出来的 pub key 以root账号登陆gitlab&#xff0c;点击 "profile settings" 然后点击 "SSH Keys" 将复制的pu…

数据库:除运算

除运算 设关系R除以关系S的结果为关系T&#xff0c;则T包含所有在R但不在S中的属性及其值&#xff0c;则T的原则与S的元组的所有组合都在R中。用象集来定义除法&#xff1a;给定关系R&#xff08;X&#xff0c;Y&#xff09;和S&#xff08;Y&#xff0c;Z&#xff09;。其中X&…

[图解tensorflow源码] 入门准备工作附常用的矩阵计算工具[转]

[图解tensorflow源码] 入门准备工作附常用的矩阵计算工具[转] Link: https://www.cnblogs.com/yao62995/p/5773142.html tensorflow使用了自动化构建工具bazel、脚本语言调用c或cpp的包裹工具swig、使用EIGEN作为矩阵处理工具、Nvidia-cuBLAS GPU加速计算库、结构化数据存储格式…

现共收到 5 个分组,其目的地址分别为: (1) 128.96.40.10 (2) 128.96.41.12 (3) 128.96.41.151 (4) 192.4.123.17 (5) 192.4.

计算目的地址的下一跳&#xff1a; 设某路由器建立了如表 1 所示路由表。现共收到 5 个分组&#xff0c;其目的地址分别为&#xff1a;(1) 128.96.40.10(2) 128.96.41.12(3) 128.96.41.151(4) 192.4.123.17(5) 192.4.123.90试分别计算下一跳解答&#xff1a; 用目的IP地址和路由…

【转】Docker学习_本地/容器文件互传(5)

1、查找所有容器 #docker ps a 2、找出我们想要的容器名字并查找容器长ID #docker inspect -f {{.ID}} python 3、拷贝本地文件到容器 docker cp 本地路径 容器长ID:容器路径docker cp /Users/xubowen/Desktop/auto-post-advance.py 38ef22f922704b32cf2650407e16b146bf61c221…

数据流图典型例题

数据流图典型例题 1.假设一家工厂的采购部每天需要一张订货报表&#xff0c;报表按零件编号排序&#xff0c;表中列出所有需要再次订货的零件。对于每个需要再次订货的零件应该列出下列数据&#xff1a;零件编号、零件名称、订货数量、目前价格、主要供应商、次要供应商。零件…

白盒测试的逻辑覆盖辨析(语句覆盖、判定覆盖、条件覆盖、判定/条件覆盖、条件组合覆盖)

白盒测试逻辑覆盖&#xff08;语句覆盖、判定覆盖、条件覆盖、判定/条件覆盖、条件组合覆盖&#xff09; 逻辑覆盖测试&#xff1a; 语句覆盖&#xff1a;每条语句至少执行一次判定覆盖&#xff1a;每一判定的每个分支至少执行一次条件覆盖&#xff1a;每一判定中的每个条件&…

03 CSS听课笔记

CSS&#xff1a;页面美化和布局控制 1. 概念&#xff1a; Cascading Style Sheets 层叠样式表层叠&#xff1a;多个样式可以作用在同一个html的元素上&#xff0c;同时生效 2. 好处&#xff1a;(1)功能强大(2)将内容展示和样式控制分离   * 降低耦合度。解耦   * 让分工协作…

安装MySQL时出现“服务没有响应控制功能。请键入 NET HELPMSG 2186 以获得更多的帮助。”的问题解决

安装MySQL时出现“服务没有响应控制功能”的问题解决第一步&#xff1a;设置环境变量第二步&#xff1a;初始化my.ini第三步&#xff1a;添加文件第一步&#xff1a;设置环境变量 安装MySQL时&#xff0c;运行“net start mysql”时出现“服务没有响应控制功能。请键入 NET HE…

时间序列模型——ARIMA模型实现预测

ARIMA模型和因子预测 文章目录ARIMA模型和因子预测一、ARIMA模型&#xff08;整个周期&#xff09;1.数据预处理2.展示时序图2.数据建模&#xff08;1&#xff09;差分d&#xff08;2&#xff09;p和q&#xff08;3&#xff09;选择模型&#xff08;4&#xff09;检验残差序列&…

线段树 离散化

题目一&#xff1a;E. Infinite Inversions 这个题目没什么思维量&#xff0c;还比较简单&#xff0c;就是离散化要加上每一个值的后面一个值&#xff0c;然后每一个值放进去的不是1 &#xff0c;而是这个值与下一个点的差值。 因为这个数代表了一堆数&#xff0c;然后每一次的…

时序模型——如何用Python进行时序模型预测的baseline预测(简单规则)

时序模型——如何用Python进行时序模型预测的baseline预测&#xff08;简单规则&#xff09; 在对时间序列问题进行建模预测之前&#xff0c;通常可以通过一些简单的规则对结果进行提前的预测&#xff0c;可以作为baseline&#xff0c;供之后的模型进行参考。很多数据分析的比…

简单关联规则算法例题-9个顾客的编号为(T1,T2,T3,T4,T5,T6,T7,T8,T9),每一个顾客购买的商品记录{{I1,I2,I5}...},并使用python实现简单关联规则

题目&#xff1a; 简单关联规则算法例题-9个顾客的编号为&#xff08;T1,T2,T3,T4,T5,T6,T7,T8,T9&#xff09;,每一个顾客购买的商品记录{{I1,I2,I5},{I2,I4},{I2,I3},{I1,I2,I4},{I1,I3},{I2,I3},{I1,I3},{I1,I2,I3,I5},{I1,I2,I3}}&#xff0c;求频繁项集&#xff1b;并用py…

ASP.NET AJAX (Atlas) 拖放(Drag Drop)功能6种实现方法总结

在Ajax程序中实现传统桌面程序中异常简单的拖放功能却并不是件容易的事情。然而Web上的拖放功能又如此的让人痴迷&#xff0c;所以几乎每个成熟的Ajax类库都提供了自己的一套实现拖放的封装&#xff0c;ASP.NET AJAX (Atlas) 自然也不例外。本文将总结并简要分析ASP.NET AJAX (…

python实现决策树-数据集如下图所示,根据我们对决策树的理解,设计一棵决策树,并输入{Age:36,Salary:H,STU:No,Credit:OK} 测试数据,是否与预期结果一致?

题目&#xff1a;数据集如下图所示&#xff0c;根据我们对决策树的理解&#xff0c;设计一棵决策树&#xff0c;并输入{Age:36,Salary:H,STU:No,Credit:OK} 测试数据&#xff0c;是否与预期结果一致&#xff1f;注意&#xff0c;不允许直接调用Sklearn提供的决策树方法 决策树算…

047 一维数据的格式化和处理

目录 一、概述二、数据组织的维度2.1 从一个数据到一组数据2.2 维度&#xff1a;一组数据的组织形式2.3 一维数据2.4 二维数据2.5 多维数据2.6 高维数据2.7 数据的操作周期三、一维数据的表示3.1 如果数据间有序&#xff1a;使用列表类型3.2 如果数据间无序&#xff1a;使用集合…

jupyter中中文显示不正常_jupyter画图中文显示乱码问题解决办法

问题&#xff1a;为什么Jumpy中运行图片无法正常显示中文字体&#xff1f; 在使用jumpy运行可视化代码时&#xff0c;发现图片无法正常显示中文符号&#xff0c;在尝试网上诸多方法后&#xff0c;发现只需加一行代码即可解决 解决方法&#xff1a; 可以查看一下代码中是否存…

如何合理的定义用户流失——流失多少天算流失

关于流失用户&#xff0c;我们首先想到的是选择怎样的时间跨度才能准确定义玩家为一个流失用户。通常在游戏中&#xff0c;会有对流失玩家召回活动&#xff0c;假如流失玩家的流失期限定义太短&#xff0c;比如3天未登录游戏&#xff0c;即算流失&#xff1b;这样虽然能够覆盖更…

如何使jupyter notebook自动补全代码和生成不同级别的标题

在我们使用jupyter notenook去编写程序时&#xff0c;在这个交互式的笔记本上使用python语言去进行数据分析&#xff0c;十分方便。但当分析的内容有点多时&#xff0c;我们能清楚的看清该步内容处于第几级目录下&#xff0c;使分析的逻辑清晰明了。因此接下来&#xff0c;我们…