NAT后的FTP服务器部署笔记
(2019年2月19日注:这篇文章原先发在自己github那边的博客,时间是2017年2月5日)
寒假开始以后,过年之前有一个任务,为实验室的人搭建一个FTP,用之前部署好的物理服务器。这本就是网管干的活,干呗,思来想去,为了方便,决定还是采取Linux转发器+Windows服务器的形式,比较方便管理。
先说说总体的配置吧。
(1) Linux转发器,两个网卡,配有一个公网IP一个私有IP,私有IP就是该网段的网关。
(2) Windows服务器,FTP服务器,配有一个网卡,私有IP,配有两块存储分区,第一个分区是系统分区,第二个分区是存储分区,用FileZilla Server作为服务器。
简单来说,这次的配置里面最为重要的是配置好NAT的部分。Linux的转发之前已经配置并部署好了,因此只需要部署好FTP服务器,写好Linux上面防火墙的配置即可。
一、拓扑图

二、安装步骤
1.先将Linux转发器以及Windows服务器部署上去物理服务器上面,安装好软件,使得可以远程控制。

我这里是用了XShell去远程控制Linux路由器。

2. Linux路由器和Windows服务器上按照拓扑图的要求设置好IP地址、子网掩码、默认网关、DNS地址等等。进行Ping测试,确保能连接成功。


三、NAT的配置
1.参考网络上面给的文档,要先打开内核路由转发的功能,更改配置文件 /etc/sysctl.conf 里面的 net.ipv4.ip_forward 设置为1。

2. 写Linux的iptables规则,使用命令 vi /etc/sysconfig/iptables
里面加入两条即可
-A PREROUTING -d 172.22.83.63/ -p tcp -m tcp --dport -j DNAT --to-destination 192.168.100.7:
-A POSTROUTING -s 192.168.100.0/ -o eth0 -j SNAT --to-source 172.22.83.63
稍微解释一下,按照师兄给我的讲解的是。PREROUTING和POSTROUTING是针对网卡来说的,现在外网过来的数据包要进入内网,根据NAT的规则,我们需要将目的地址从路由器的地址转化为私有的内部地址,因此这里也是这样写的,-d代表目的地址,目的端口是21,映射到内网的192.168.100.7的21端口,换言之,将发往172.22.83.63:21的数据包在Linux路由器这里映射为192.168.100.7:21,使用PREROUTING。
内网出去外网时,按照NAT的规则,我们需要将源地址(此时的源地址为内部主机的私有地址)进行修改,使用路由器的地址代替,才能正确的发送数据包。
3. 重启Linux iptables service iptables restart
四、FTP主动模式和被动模式
如果按照上述配置完以后,应该还是无法访问的,当时这里困扰了我相当长的时间,后来师兄给我的提示,他让我想想FTP的传输模式。FTP一共有两种传输模式,主动模式和被动模式,先说说默认的情况下,FTP Client是使用被动模式进行连接的。
FTP被动模式工作原理:在三次握手的过程中,FTP Server监听着自己的21端口。
(1) FTP Client使用端口号x(x>1024)向FTP Server的21端口发起连接请求,同时监听x+1端口,发送PASV命令,告知自己处于被动模式。
(2) FTP Server发送确认包,同时发送自己的一个可用端口号y。(PORT y)
(3) FTP Client使用x+1端口去连接FTP Server的y端口,传输数据。
FTP主动模式工作原理:在三次握手的过程中,FTP Server监听着自己的21端口。
(1) FTP Client使用端口号x(x>1024)向FTP Server的21端口发起连接请求,同时监听x+1端口,发送PORT命令,告知自己处于主动模式。
(2) FTP Server发送确认包,使用本地FTP端口(通常是20)来连接x+1端口,进行数据传输。
因此从上可以知道,这个主动与被动是相对于Server端的来说的。
在NAT的过程中,由于默认是使用被动模式进行数据传输,我们不知道Server端使用什么端口号去连接,全部端口开放这个不现实,也不安全。因此,为了让我们的iptables支持我们的ftp,根据网上的资料,需要加载两个模块。 nf_nat_ftp 、nf_conntrack_ftp
最后我们使用命令:
modprobe nf_conntrack_ftp
modprobe nf_nat_ftp
还可以使用命令 lsmod | grep ftp 查看是否已经加载,若已经加载即可。
为了使得模块的加载不随着防火墙重启而消失,我们可以加入配置文件中。
vi /etc/sysconfig/iptables-config
#在配置文件中加入两句话。
IPTABLES_MODULES="nf_conntrack_ftp"
IPTABLES_MODULES="nf_nat_ftp"
保存并测试ftp即可。
NAT后的FTP服务器部署笔记的更多相关文章
- HappyAA服务器部署笔记1(nginx+tomcat的安装与配置)
这是本人的服务器部署笔记.文章名称叫"部署笔记1"的原因是之后我对这个进行了改进之后,会有"部署笔记2","部署笔记3"...循序渐进,估计 ...
- NAT后面的FTP SERVER终极篇
原文引用:http://blog.chinaunix.net/uid-20592805-id-1918661.html 如果对于被动模式还有不同的意见,我们可以再看下这篇文章: http://ww ...
- Linux ftp服务器部署(最简单的ftp教程)
之前在阿里云领了一个ECS服务器(顺便说一句,白嫖的,真香~),就想着做点什么,然后试着做个 ftp 站点,因为第一次尝试,结果走了不少弯路.最后终于完成了,研究了两天(哎~,脑壳笨没办法)就想着记录 ...
- Pureftp-安全的ftp服务器部署
一.简介: Pure-FTPd 是一款免费(BSD)的,安全的,高质量和符合标准的FTP服务器. 侧重于运行效率和易用性. 它提供了简单的答案,他满足了大众化的需求,包括普通用户以及主机供应商们 Pu ...
- centos 7 最小安装后 安装FTP服务器 vsftp
1.首先查看下 系统配置 rpm -q ftp #肯定是没安装, 2.安装 vsftpd yum -y vsftpd 3.vim /etc/vsftpd/vsftpd.conf anonymous_e ...
- 阿里云服务器部署笔记一(python3、Flask、uWSGI、Nginx)
一.重置密码,并重启服务器 二.安全组配置>配置规则>添加安全组规则(为了能在本地ssh到实例) 配置如下: 此配置为允许任意公网IP登陆实例,注意windows与Linux系统端口范围不 ...
- linux下模拟FTP服务器(笔记)
要在linux下做一个模仿ftp的小型服务器,后来在百度文库中找到一份算是比较完整的实现,就在原代码一些重要部分上备注自己的理解(可能有误,千万不要轻易相信). 客户端: 客户端要从服务器端中读取数据 ...
- HappyAA服务器部署笔记2(nginx的静态资源缓存配置)
我近期对服务器进行了少量改进,虽然之前使用了nginx反向代理之后性能有所提高,但仍然不够,需要使用缓存来大幅度提高静态资源的访问速度. 服务器上的静态资源主要有这些:png, jpg, svg, j ...
- 阿里云服务器部署笔记二(python3、Flask、uWSGI、Nginx)
从git上把项目拉到服务器,项目可以在服务器上运行后,就只需要配置uwsgi和nginx了.它们的逻辑关系是:外部请求->nginx->uwsgi->项目实例. 一.配置uwsgi ...
随机推荐
- Crane /// 向量旋转+线段树
题目大意: 给定n条首尾相接的线段的长度 第一条从0,0开始,所有线段垂直与x轴向上延伸 给定c次操作 每次操作给定 s,a 使得 由第s条线段的角度 逆时针旋转a后 达到第s+1条线段的角度 每次操 ...
- git提交流程简述
1.初始化:一个项目只执行一次 只要有.git隐藏文件夹就ok了 git init 或者 git clone url 2.为远程github仓库生成别名(remote-name就是远程仓库的别名)这一 ...
- 随笔记录 Linux基本操作命令 2019.7.27
临时关闭防火墙systemctl stop firewalld永久关闭防火墙systemctl disable firewalld 临时关闭selinux安全机制setenforce 0永久关闭sel ...
- Leetcode211. Add and Search Word - Data structure design 添加与搜索单词 - 数据结构设计
设计一个支持以下两种操作的数据结构: void addWord(word) bool search(word) search(word) 可以搜索文字或正则表达式字符串,字符串只包含字母 . 或 a- ...
- Android系统开发 编译系统签名的APP
前言 一般情况下,我们使用的签名都是自己生成的Java签名来编译APP. 但是,如果需要开发一些特定设备的APP(对权限有更高的要求,需求一些系统基本的权限,比如让APP可以控制设备的休眠),那就需要 ...
- K-Anonymous Sequence
K-Anonymous Sequence 给出一个递增的长度为n的序列\(\{a_i\}\),现在你可以进行一次操作,选择若干个数,分别减少任意一个正整数,定义权值为这些正整数之和,询问操作使得新序列 ...
- [转]Ubuntu安装rabbitMq
笔者ubuntu版本为Ubuntu 15.10,查看ubuntu当前版本命令:cat /etc/issue. 由于rabbitMq需要erlang语言的支持,在安装rabbitMq之前需要安装erla ...
- 为什么串行传输时总是LSB在前?
https://superuser.com/questions/1104212/why-do-serial-ports-send-data-least-significant-bit-first 其实 ...
- 线性dp——cf1012C好题
比较套路的dp题 /* dp[i][j][0|1]:前i座山盖了j座房子,第i座不盖|盖 dp[i][j][0]=min( dp[i-1][j][0] , dp[i-1][j][1]+max(0,a[ ...
- 移动端适配(绝对单位、相对单位、CSS像素、物理像素、逻辑像素、设备像素比、PPI、Viewport)
在某公司做了一次分享,主题是‘移动端和pc端开发的区别’.可以说,这总结的原版就是在这样的契机下完成的.因为我只是习惯了移动端就应该那么写(设置viewport等),要是让我给大家分条讲下所以然,还真 ...