跳至主要内容

如何在CentOS 7中使用SSL / TLS保护FTP服务器的安全文件传输

原文链接

通过其原始设计, FTP ( 文件传输协议 )不安全,意味着它不加密在两台机器之间传输的数据,以及用户的凭据。这对数据以及服务器安全造成巨大威胁。
在本教程中,我们将解释如何在CentOS / RHEL 7和Fedora的FTP服务器中手动启用数据加密服务; 我们将通过使用SSL / TLS证书保护VSFTPD ( 非常安全FTP守护程序 )服务的各个步骤。

先决条件:

  1. 您必须在CentOS 7中安装和配置FTP服务器
在开始之前,请注意,本教程中的所有命令都将以root身份运行,否则,如果不使用root帐户控制服务器,请使用sudo命令获得root权限。

第1步.生成SSL / TLS证书和私钥

我们需要首先创建一个子目录: /etc/ssl/ ,我们将存储SSL / TLS证书和密钥文件:
# mkdir /etc/ssl/private
2.然后运行以下命令在单个文件中为vsftpd创建证书和密钥,以下是每个使用的标志的解释。
  1. req - 是X.509证书签名请求(CSR)管理的命令。
  2. x509 - 表示X.509证书数据管理。
  3. days - 定义证书有效期的天数。
  4. newkey - 指定证书密钥处理器。
  5. rsa:2048 - RSA密钥处理器,将生成一个2048位的私钥。
  6. keyout - 设置密钥存储文件。
  7. out设置证书存储文件,请注意,证书和密钥都存储在同一个文件中: /etc/ssl/private/vsftpd.pem 。
# openssl req -x509 -nodes -keyout /etc/ssl/private/vsftpd.pem -out /etc/ssl/private/vsftpd.pem -days 365 -newkey rsa:2048
上述命令将要求您回答以下问题,请记住使用适用于您的方案的值。
Country Name (2 letter code) [XX]:IN
State or Province Name (full name) []:Lower Parel
Locality Name (eg, city) [Default City]:Mumbai
Organization Name (eg, company) [Default Company Ltd]:HowToing.com
Organizational Unit Name (eg, section) []:Linux and Open Source
Common Name (eg, your name or your server's hostname) []:howtoing
Email Address []:admin@howtoing.com

第2步.配置VSFTPD使用SSL / TLS

3.在执行任何VSFTPD配置之前,让我们打开端口99040000-50000 ,以允许TLS连接和被动端口的端口范围分别在VSFTPD配置文件中定义:
# firewall-cmd --zone=public --permanent --add-port=990/tcp
# firewall-cmd --zone=public --permanent --add-port=40000-50000/tcp
# firewall-cmd --reload
4.现在,打开VSFTPD配置文件并指定SSL详细信息:
# vi /etc/vsftpd/vsftpd.conf
查找选项ssl_enable并将其值设置为YES以激活使用SSL,此外,由于TSL比SSL更安全,因此我们将使用ssl_tlsv1_2选项限制VSFTPD使用TLS:
ssl_enable=YES
ssl_tlsv1_2=YES
ssl_sslv2=NO
ssl_sslv3=NO
5.然后,添加以下行以定义SSL证书和密钥文件的位置:
rsa_cert_file=/etc/ssl/private/vsftpd.pem
rsa_private_key_file=/etc/ssl/private/vsftpd.pem
6.接下来,我们必须阻止匿名用户使用SSL,然后强制所有非匿名登录使用安全的SSL连接进行数据传输,并在登录期间发送密码:
allow_anon_ssl=NO
force_local_data_ssl=YES
force_local_logins_ssl=YES
此外,我们可以添加以下选项来提高FTP服务器安全性。 当选项require_ssl_reuse设置为YES时,所有SSL数据连接都需要显示SSL会话重用; 证明他们知道与控制信道相同的主秘密。
因此,我们必须关闭它。
require_ssl_reuse=NO
同样,我们需要选择使用ssl_ciphers选项允许使用VSFTPD允许加密SSL连接的SSL密码。 这可以大大限制尝试强制特定的密码,他们可能发现了以下漏洞的攻击者的努力:
ssl_ciphers=HIGH
8.现在,设置被动端口的端口范围(最小和最大端口)。
pasv_min_port=40000
pasv_max_port=50000
9.或者,允许SSL调试,意味着使用debug_ssl选项将openSSL连接诊断记录到VSFTPD日志文件中:
debug_ssl=YES
保存所有更改并关闭文件。 然后让我们重新启动VSFTPD服务:
# systemctl restart vsftpd

第3步:使用SSL / TLS连接测试FTP服务器

10.执行所有上述配置后,通过尝试从命令行使用FTP,测试VSFTPD是否正在使用SSL / TLS连接,如下所示:
# ftp 192.168.56.10
Connected to 192.168.56.10  (192.168.56.10).
220 Welcome to HowToing.com FTP service.
Name (192.168.56.10:root) : ravi
530 Non-anonymous sessions must use encryption.
Login failed.
421 Service not available, remote server has closed connection
ftp>
验证FTP SSL安全连接
验证FTP SSL安全连接
从上面的屏幕截图,我们可以看到有一个错误通知我们VSFTPD只能允许用户从支持加密服务的客户端登录。
命令行不提供加密服务,因此产生错误。 因此,为了安全地连接到服务器,我们需要一个支持SSL / TLS连接的FTP客户端,例如FileZilla 。

第4步:安装FileZilla以安全连接到FTP服务器

11. FileZilla是一个现代,流行和重要的跨平台FTP客户端,默认支持SSL / TLS连接。
要在Linux中安装FileZilla,请运行以下命令:
--------- On CentOS/RHEL/Fedora --------- 
# yum install epel-release filezilla
--------- On Debian/Ubuntu ---------
$ sudo apt-get install  filezilla   
12.安装完成后(或者如果您已经安装了它),打开它,然后转到File => Sites Manager或(按Ctrl+S )以获取下面的Site Manager界面。
单击新建站点按钮添加新的站点/主机连接详细信息。
在Filezilla中添加新的FTP站点
在Filezilla中添加新的FTP站点
13.接下来,设置主机/站点名称,添加IP地址,定义要使用的协议,加密和登录类型,如下面的屏幕截图(使用适用于您的方案的值):
Host:  192.168.56.10
Protocol:  FTP  File Transfer Protocol
Encryption:  Require explicit FTP over   #recommended 
Logon Type: Ask for password         #recommended 
User: username
在Filezilla中添加FTP服务器详细信息
在Filezilla中添加FTP服务器详细信息
14.然后单击连接以再次输入密码,然后验证用于SSL / TLS连接的证书,并再次单击OK以连接到FTP服务器:
验证FTP SSL证书
验证FTP SSL证书
在这个阶段,我们应该通过TLS连接成功地登录到FTP服务器,检查连接状态部分以获取更多信息从下面的界面。
已通过TLS / SSL连接到FTP服务器
通过TLS / SSL连接到FTP服务器
15.最后但同样重要的是,尝试将文件从本地计算机传输到files文件夹中的FTP服务器 ,查看FileZilla界面的下端以查看有关文件传输的报告。
使用FTP安全传输文件
使用FTP安全传输文件
就这样! 始终记住,默认情况下FTP不安全,除非我们将其配置为使用SSL / TLS连接,正如我们在本教程中所展示的。 请通过下面的反馈表单分享您对本教程/主题的看法。

评论

此博客中的热门博文

Resolving errSecInternalComponent errors during code signing

原文链接 One code signing issue I commonly see, both here on DevForums and in my Day Job™ with DTS, is that the codesign command fails with errSecInternalComponent. This issue crops up in a wide variety of circumstances and the correct fix depends on the specific problem. This post is my attempt to clarify the potential causes of this error and help folks resolve it. If you have any questions or comments about this, please start a new thread, tagging it with Code Signing so that I see it. Share and Enjoy — Quinn “The Eskimo!” @ Developer Technical Support @ Apple let myEmail = "eskimo" + "1" + "@" + "apple.com" Resolving errSecInternalComponent errors during code signing In some circumstances the codesign command might fail with the error errSecInternalComponent. For example: % codesign -s "Apple Development" "MyTrue" MyTrue: errSecInternalComponent This typically affects folks who are signing code in a nonstandard environm...

iOS:检测使用VPN或Proxy

参考链接: https://www.jianshu.com/p/c3b950dbf86a https://gist.github.com/PramodJoshi/4faad4c91f7dcb4eb9b06be8390c01db http://noodlecode.net/2018/04/check-if-ios-app-is-connected-to-vpn 第一种方法 需要导入框架CFNetwork 然后,这个方法是mrc的:需要添加-fno-objc-arc的flag 代码如下: + ( BOOL )getProxyStatus { NSDictionary *proxySettings = NSMakeCollectable ([( NSDictionary *) CFNetworkCopySystemProxySettings () autorelease]); NSArray *proxies = NSMakeCollectable ([( NSArray *) CFNetworkCopyProxiesForURL (( CFURLRef )[ NSURL URLWithString: @"http://www.google.com" ], ( CFDictionaryRef )proxySettings) autorelease]); NSDictionary *settings = [proxies objectAtIndex: 0 ]; NSLog ( @"host=%@" , [settings objectForKey:( NSString *)kCFProxyHostNameKey]); NSLog ( @"port=%@" , [settings objectForKey:( NSString *)kCFProxyPortNumberKey]); NSLog ( @"type=%@" , [settings objectForKey:( NSString *)kCFProxyTypeKey]); if ([[settings object...

去广告DNS设置,国内ADGuard DNS方案,手机电脑iOS去广告,保护隐私

 原文链接 之前分享过使用mac系统搭建adguard home,这几个月用下来零零散散基本上也被弃用了。主要原因是因为需要保持电脑一直开机。但是我的电脑是笔记本,存在移动各个地域的情况,也就是说只能够屏蔽电脑自身,对于手机而言不太现实。今天偶然发现dnspod推出了高级版的公共解析。dnspod背靠腾讯云,肯定是合法合规的公共解析服务,这个高级版用起来不错。 国内自己搭建解析服务是违法行为,所以这也是为什么使用dnspod的原因。 后台截图 开始使用 首先我们先进入dnspod的公共解析页面,点击开始使用。 专业版公共解析 dnspod会提供几种预设,我们选择「开发者」即可 开发者 然后你就成功的申请到自己个人使用的dns了! 更新拦截规则 我们可以将常见的广告过滤规则加入到dns中。我们在顶部选项卡中选择「拦截规则」。 拦截规则设置 打开adguard adguard 绑定iOS设备 推荐使用描述文件的方式,删除配置时删除描述文件即可。 描述文件 绑定macOS 推荐使用描述文件的方式,删除配置时删除描述文件即可。 描述文件 mac需要在「系统偏好设置」的「网络」中查看是否正在运行。 代理 如果没有运行需要点击「···」来启动服务。 启动服务 绑定路由器 找到自己路由器的DHCP设置,修改dns,然后记得绑定自己的ip。 修改dns 绑定ip 费用 目前有300万次/月的免费额度,但没有超出之后的价格。300万次一个人比较难用完,可以放心使用。 我个人使用iOS设备两台、智能家居、电脑两台,日均请求数大致2万/日。 判断是否搭建成功 可以通过查看日志的方式,日志大概有半小时到一小时的延迟,请耐心等待。