实现vsftp虚拟用户和iptables基本用法

1.搭建vsftpd服务器

1.安装vsftpd服务


[root@centos7 ~]#yum install -y vsftpd

2.启动服务

[root@centos7 ~]#systemctl start vsftpd
[root@centos7 ~]#ss -ntl
State      Recv-Q Send-Q           Local Address:Port                          Peer Address:Port
LISTEN     0      128                          *:111                                      *:*
LISTEN     0      5                192.168.122.1:53                                       *:*
LISTEN     0      128                          *:22                                       *:*
LISTEN     0      128                  127.0.0.1:631                                      *:*
LISTEN     0      100                  127.0.0.1:25                                       *:*
LISTEN     0      128                          *:43550                                    *:*
LISTEN     0      128                         :::111                                     :::*
LISTEN     0      128                         :::80                                      :::*
LISTEN     0      32                          :::21                                      :::*
LISTEN     0      128                         :::22                                      :::*
LISTEN     0      128                        ::1:631                                     :::*
LISTEN     0      100                        ::1:25                                      :::*
LISTEN     0      128                         :::46052                                 :::*   

3.测试

[root@localhost ~]# lftp 192.168.0.109
lftp 192.168.0.109:~> ls
drwxr-xr-x    2 0        0              18 Feb 17 06:19 pub

4.编辑基本设置

[root@centos7 ~]#vim /etc/vsftpd/vsftpd.conf
 anonymous_enable=NO    #关闭匿名用户登陆

5.创建虚拟用户名字密码文件(该文件使用完删除)

[root@centos7 ~]#vim user.txt    #一行用户一行密码
dcrfan
centos
admin
centos
normal
centos

6.在/etc/vsftpd/ 建立数据文件

[root@centos7 ~]#cd /etc/vsftpd/
[root@centos7 vsftpd]#db_load -T -t hash -f /root/user.txt vuser.db  #生成数据类文件
[root@centos7 vsftpd]#chmod 600 vuser.db   #让文件更加安全
[root@centos7 vsftpd]#ll vuser.db
-rw------- 1 root root 12288 Feb 17 14:39 vuser.db

7.创建一个虚拟用户映射到的系统用户

[root@centos7 vsftpd]#useradd -d /var/ftpshare -s /sbin/nologin vuser
[root@centos7 vsftpd]#chmod +rx /var/ftpshare
[root@centos7 vsftpd]#chmod -w /var/ftpshare   #去掉根共享目录w权限

8.创建文件夹,并设定权限

[root@centos7 vsftpd]#mkdir /var/ftpshare/upload
[root@centos7 vsftpd]#mkdir /var/ftpshare/download
[root@centos7 vsftpd]#setfacl -m u:vuser:rwx /var/ftpshare/{upload,download}  #给用户vuser赋予目录权限

9.手动创建pam配置文件,使pam文件使用vuser.db

[root@centos7 vsftpd]#vim /etc/pam.d/vsftpd.db
auth required pam_userdb.so db=/etc/vsftpd/vuser
account required pam_userdb.so db=/etc/vsftpd/vuser

10.在vsftpd配置中加入引用pam配置文件验证

[root@centos7 ~]#vim /etc/vsftpd/vsftpd.conf
guest_enable=YES  #所有系统用户都映射成guest用户
guest_username=vuser  #映射成用户名字
pam_service_name=vsftpd.db  #指定pam配置文件
user_config_dir=/etc/vsftpd/vuser.d   #指定每个用户的子配置文件位置

11.为不同用户创建权限控制(文件名字就是虚拟用户名字)

[root@centos7 vsftpd]#mkdir /etc/vsftpd/vuser.d
vim admin
anon_upload_enable=YES   #允许匿名用户上传
anon_mkdir_write_enable=YES  #允许匿名用户创建目录
anon_other_write_enable=YES  #匿名可删除和修改上传的文件

vim dcrfan
anon_upload_enable=YES      

vim normal
anon_max_rate=102400    #限制匿名用户传输速率上限100k

12.测试admin账号

[root@localhost ~]# lftp -u admin 192.168.0.109
Password:
lftp admin@192.168.0.109:~> ls
drwxrwxr-x    2 0        0               6 Feb 17 06:53 download
drwxrwxr-x    2 0        0               6 Feb 17 06:53 upload
lftp admin@192.168.0.109:/> cd download
cd ok, cwd=/download
lftp admin@192.168.0.109:/download> mkdir test    #可以创建目录
mkdir ok, test‘ created
lftp admin@192.168.0.109:/download> put ks7.cfg   #可以上传文件
1072 bytes transferred
lftp admin@192.168.0.109:/download> ls
-rw-------    1 5002     5002         1072 Feb 17 07:40 ks7.cfg
drwx------    2 5002     5002            6 Feb 17 07:39 test
lftp admin@192.168.0.109:/download> ls
-rw-r--r--    1 0        0               0 Feb 17 07:43 hh
-rw-------    1 5002     5002         1072 Feb 17 07:40 ks7.cfg
drwx------    2 5002     5002            6 Feb 17 07:39 test
lftp admin@192.168.0.109:/download> get hh     #可以下载文件
lftp admin@192.168.0.109:/download> !ls
anaconda-ks.cfg  Documents  hh                    ks6.cfg  Music     Public     Videos
Desktop          Downloads  initial-setup-ks.cfg  ks7.cfg  Pictures  Templates

13.测试dcrfan用户

[root@localhost ~]# lftp  -u dcrfan 192.168.0.109
Password:
lftp dcrfan@192.168.0.109:~> ls
drwxrwxr-x    3 0        0              43 Feb 17 07:43 download
drwxrwxr-x    2 0        0               6 Feb 17 06:53 upload
lftp dcrfan@192.168.0.109:/> cd upload
lftp dcrfan@192.168.0.109:/upload> mkdir test        #创建目录失败
mkdir: Access failed: 550 Permission denied. (test)
lftp dcrfan@192.168.0.109:/upload> put ks6.cfg
1092 bytes transferred
lftp dcrfan@192.168.0.109:/upload> cd /download/
lftp dcrfan@192.168.0.109:/download> get bigtest                  #传输速率没限制
104857600 bytes transferred in 1 second (95.60M/s)

14.测试normal用户

[root@localhost ~]# lftp  -u normal 192.168.0.109
Password:
lftp normal@192.168.0.109:~> ls
drwxrwxr-x    3 0        0              58 Feb 17 07:58 download
drwxrwxr-x    2 0        0              21 Feb 17 07:49 upload
lftp normal@192.168.0.109:/> cd download
lftp normal@192.168.0.109:/download> put ks6.cfg    #不可以上传文件
put: Access failed: 550 Permission denied. (ks6.cfg)
lftp normal@192.168.0.109:/download> ls
-rw-r--r--    1 0        0        104857600 Feb 17 07:58 bigtest
-rw-r--r--    1 0        0               0 Feb 17 07:43 hh
-rw-------    1 5002     5002         1072 Feb 17 07:40 ks7.cfg
drwx------    2 5002     5002            6 Feb 17 07:39 test
lftp normal@192.168.0.109:/download> get bigtest       #传输速率被限制在100k以下
‘bigtest‘ at 6684672 (6%) 99.0K/s eta:18m [Receiving data] 

2.iptables四表五链

1.Netfilter是集成内核中的防火墙,iptables是防火墙管理工具
iptables由四个表和五个链以及一些规则组成
2.四个表分别是filter、nat、mangle、raw

-filter表:过滤规则表,根据预定义的规则过滤符合条件的数据包
-nat表:network address translation 地址转换规则表   (修改目标地址 源地址)
-mangle:修改数据标记位规则表    (打标签分类)
-Raw:关闭NAT表上启用的连接跟踪机制,加快封包穿越防火墙速度 (使用比较少)

3.五个内置链chain INPUT OUTPUT FORWARD PREROUTING POSTROUTING (5个检查点)

-PREROUTING:数据包进入路由表之前  (一般dnat、REDIRECT端口转发规则应用)
-INPUT:通过路由表后目的地为本机
-FORWARD:通过路由表后,目的地不为本机 (网络防火墙filter应用地方)
-OUTPUT:由本机产生,向外转发
-POSTROUTIONG:发送到网卡接口之前   (一般snat规则应用)

3.iptables基本用法

1.systemctl stop firewalld 或者 service iptables stop 禁用系统默认规则
CentOS 6 service iptables save 将规则覆盖保存至/etc/sysconfig/iptables文件中
CentOS 7 可用下面方法保存规则

iptables  -S > /PATH/TO/SOME_RULES_FILE
iptables-save  >  /PATH/TO/SOME_RULES_FILE

centos7开机自动重载规则文件中的规则:

/etc/rc.d/rc.local文件添加
iptables-restore < /PATH/FROM/IPTABLES_RULES_FILE
并加执行权限

2.iptables -nvL 查看所有规则 --line-numbers 查看规则的序号 -x 显示精确数字 -S 显示命令格式规则

3.基本格式


iptables   [-t table]   SUBCOMMAND   chain   [-m matchname [per-match-options]]   -j targetname [per-targetoptions] 

注意事项:默认表为filter,多条规则 前面优先生效,且chain 必须大写,iptables -A INPUT -i lo -j ACCEPT 让自己能访问自己 通常都要设定

4.基本选项

-Z  统计数据包清零
-F 清理规则
-t 指定表    (默认filter表)
-A chain 追加
-D 删除记录    如 -D INPUT 1
-I chain 插入  默认第一条  如-I INPUT 2  放在第二条
-R 修改规则    如 -R  INPUT 2
-P chain 动作  设置默认规则  (不推荐使用)
-s 源地址
-d 目标地址
-p 指定协议 可使用数字如0(all)  protocol: tcp, udp, icmp, icmpv6, udplite,esp, ah, sctp, mh or all     参看:/etc/protocols
-i  报文流入接口   只应用于INPUT、FORWARD、PREROUTING链
-o  报文流出接口    只应用于INPUT、FORWARD、PREROUTING链
-j 指定动作  ACCEPT,DROP,REJECT,RETURN, LOG, SNAT, DNAT, REDIRECT, MASQUERADE等

5.定义自定义链

-N:new, 自定义一条新的规则链
-X:delete,删除自定义的空的规则链
-E:重命名自定义链;引用计数不为0的自定义链不能够被重命名,也 不能被删除

定义顺序:
a.先定义chain名字
iptables -N WEB
b.定义一系列规则
iptables -A WEB -p tcp -m multiport --dports 80,443 -j ACCEPT
c.用-j把自定义规则放在系统某个chain中
iptables -I INPUT -s 192.168.30.0/24 -j WEB
删除要反着一步一步来
iptables -D INPUT 1
iptables -D WEB 1
iptables -X WEB

6.记录日志功能
LOG: 非中断target,本身不拒绝和允许,放在拒绝和允许规则前 并将日志记录在/var/log/messages系统日志中

--log-level level    级别: emerg, alert, crit, error, warning, notice, info or debug
--log-prefix prefix 日志前缀,用于区别不同的日志,最多 29个字


iptables -I INPUT  -s 10.0.1.0/24 -p tcp -m multiport -dports 80,21,22,23 -m state --state NEW -j LOG --logprefix "new connections: " 

7.隐式扩展用法:不需要指定模块名
a. tcp协议的扩展选项

--sport port[:port]:匹配报文源端口,可以为端口范围  -p tcp --sport 22    范围 700:800
--dport port[:port]:匹配报文目标端口,可以为范围   -p tcp --dport 445
--tcp-flags  mask  comp
 #mask 需检查的标志位列表,用,分隔     例如 SYN,ACK,FIN,RST
#comp 在mask列表中必须为1的标志位列表,无指定则必须为 0,用,分隔
--tcp-flags  SYN,ACK,FIN,RST  SYN
表示要检查 的标志位为SYN,ACK,FIN,RST四个,其中SYN必须为1,余下 的必须为0
 --syn:用于匹配第一次握手  相当于:--tcp-flags  SYN,ACK,FIN,RST  SYN 

b. udp

--sport port[:port]:匹配报文的 源端口;可以是端口范围
--dport port[:port]:匹配报 文的目标端口;可以是端口范围 

c.icmp

--icmp-type {type[/code]|typename}
type/code
0  echo-reply   icmp应答报文
8   echo-request icmp请求报文
如 -p icmp --icmp-type 8  来拒绝请求报文

8.显式扩展:必须使用-m选项指明模块名
a、multiport扩展
以离散方式定义多端口匹配,最多指定15个端口

--sports port[,port|,port:port]...   指定多个源端口
--dports port[,port|,port:port]...         指定多个目标端口
--ports port[,port|,port:port]...多个源或目标端口
iptables -A INPUT -s 172.16.0.0/16 -d 172.16.100.10 -p tcp -m multiport --dports 20:22,80 -j ACCEPT 

b、iprange扩展
指明连续的(但一般不是整个网络)ip地址范围

--src-range from[-to] 源IP地址范围
--dst-range from[-to] 目标IP地址范围
 iptables -A INPUT -d 172.16.1.100 -p tcp --dport 80 -m iprange --src-range 172.16.1.5-172.16.1.10 -j DROP 

c、mac扩展
指明源MAC地址
适用于:PREROUTING, FORWARD,INPUT chains 只适合进来的包,所以没有目标地址

--mac-source XX:XX:XX:XX:XX:XX   源MAC
iptables -A INPUT -s 172.16.0.100 -m mac  --macsource 00:50:56:12:34:56 -j ACCEPT   并且关系
iptables -A INPUT -s 172.16.0.100  -j REJECT 

d、string扩展
对报文中的应用层数据做字符串模式匹配检测

 --algo {bm|kmp}:字符串匹配检测算法  (指定一个算法)
--from offset  开始偏移 (可以不写)
--to offset    结束偏移 (可以不写)
--string pattern:要检测的字符串模式
--hex-string pattern:要检测字符串模式,16进制格式
iptables -A OUTPUT -s 172.16.100.10  -p tcp --sport 80 -m string --algo bm --string "google" -j REJECT 

一般在FORWARD中设置

e、time扩展
根据将报文到达的时间与指定的时间范围进行匹配

--datestart YYYY[-MM[-DD[Thh[:mm[:ss]]]]]  日期
--datestop YYYY[-MM[-DD[Thh[:mm[:ss]]]]]
--timestart hh:mm[:ss]        时间
--timestop hh:mm[:ss]
--monthdays day[,day...]   每个月的几号
--weekdays day[,day...]   星期几 

--kerneltz:内核时区,CentOS7系统默认为UTC,需要换算
注意: centos6 不支持kerneltz ,--localtz指定本地时区(默认)
iptables -A INPUT -s 172.16.0.0/16 -d 172.16.100.10 -p tcp --dport 80 -m time --timestart 14:30 --timestop 18:30 --weekdays Sat,Sun --kerneltz -j DROP 

f、connlimit扩展
根据每客户端IP做并发连接数数量匹配 可防止CC(Challenge Collapsar挑战黑洞)***

--connlimit-upto n:连接的数量小于等于n时匹配
--connlimit-above n:连接的数量大于n时匹配
通常分别与默认的拒绝或允许策略配合使用
iptables -A INPUT -d 172.16.100.10 -p tcp --dport 22 -m connlimit --connlimit-above 2 -j REJECT 

g、limit扩展
基于收发报文的速率做匹配

--limit rate[/second|/minute|/hour|/day]
--limit-burst number  设定初始值
iptables -I INPUT  -p icmp --icmptype 8 -m limit --limit 3/minute --limit-burst 5 -j ACCEPT   (限制icmp请求包。前5个不限制。后面每分钟3个)
iptables -I INPUT 2 -p icmp -j REJECT  不满足拒绝

h、state扩展
根据”连接追踪机制“去检查连接的状态,较耗资源

NEW:新发出请求;将其识别为第一次发出的请求
ESTABLISHED:NEW状态之后,连接追踪信息库中为其建立的条目失效之前期间内所进行的通信状态  (第一次后的状态)
RELATED:新发起的但与已有连接相关联的连接,如: ftp协议中的数据连接与命令连接之间的关系  (相关的)
INVALID:无效的连接,如flag标记不正确
UNTRACKED:未进行追踪的连接,如raw表中关闭追踪
iptables -A INPUT -d 172.16.1.10 -p tcp -m multiport -dports 22,80 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -s 172.16.1.10 -p tcp -m multiport -sports 22,80 -m state --state ESTABLISHED -j ACCEPT 

应用
被动模式开放ftp

modprobe nf_conntrack_ftp   加载跟踪模块
iptables -A INPUT   -m state --state ESTABLISHED,RELATED -j ACCEPT  开放相关端口功能
iptables -A INPUT -p tcp --dport 21 -m state -state NEW -j ACCEPT   开放21端口 

9.SNAT实现(局域网访问外部网络技术)
作用链POSTROUTING,INPUT
让本地网络中的主机通过某一特定地址访问外部网络,实现地址伪装
请求报文:修改源IP

iptables -t nat -A POSTROUTING -s LocalNET (被替换源地址) -j SNAT --to-source ExtIP (要替换外网源地址)
如
iptables -t nat -A POSTROUTING -s 10.0.1.0/24  -j SNAT --to-source 172.18.1.6-172.18.1.9
MASQUERADE:动态IP,如拨号网络
如
iptables -t nat -A POSTROUTING -s 10.0.1.0/24  -j SNAT --to-source MASQUERADE

10.DNAT实现(发布给外部网络访问的服务)
作用链PREROUTING , OUTPUT
把本地网络中的主机上的某服务开放给外部网络访问(发 布服务和端口映射),但隐藏真实IP
请求报文:修改目标IP


iptables -t nat -A PREROUTING -d ExtIP(外网地址) -p tcp|udp --dport PORT -j DNAT --to-destination InterSeverIP[:PORT] (内网地址或端口)
如
iptables -t nat -A PREROUTING -s 0/0 -d 172.18.100.6 -p tcp --dport 22 -j DNAT --todestination 10.0.1.22
 iptables -t nat -A PREROUTING -s 0/0 -d 172.18.100.6 -p tcp --dport 80 -j DNAT --todestination 10.0.1.22:8080 

11.实现端口转发REDIRECT
可用于:PREROUTING OUTPUT 自定义链

--to-ports port[-port]
iptables -t nat -A PREROUTING -d 172.16.100.10 -p tcp --dport 80 -j REDIRECT --to-ports 8080
把用户访问80端口转发到8080

12.PNAT: port nat,端口和IP都进行修改 (利用端口号来区分是哪个用户发出来请求)一般配合SNAT

原文地址:http://blog.51cto.com/6289984/2351088

时间: 2024-10-07 12:48:49

实现vsftp虚拟用户和iptables基本用法的相关文章

vsftp基于mysql的虚拟用户,iptables的用法

vsftp基于mysql创建虚拟用户 1.首先安装环境 yum groupinstall -y "Development Tools" "Server PlatformDevelopment" yum install -y pam-devel mariadb-devel mariadb-server vsftpd lftp ftp 下载最新的pam-mysql http://pam-mysql.sourceforge.net/ 编译安装pam-mysql tar x

mysql实现vsftp虚拟用户访问

使用MYSQL实现VSFTP虚拟用户访问 1.查看是否安装 mysql 安装包,没有就使用yum安装一下 2.查看是否安装vsftpd 软件包 如果没有就是用yum安装一下 3.查看mysql和ftp 服务是否为开机自启动如果不是就使用chkconfig 设置一下 4.登陆数据库 5.创建数据库名字vsftp 注意是后面使用分号 6.使用数据库vsftp并创建ftpuser 表 7.查看创建的ftpuser 是否成功,已经创建成功 8.插入数据名字为 yuri  和 kebo  密码为 1234

vsftp虚拟用户登录配置详解

一.安装: 1.安装Vsftpd服务: # yum install vsftpd 2.安装DB4部件包: 这里要特别安装一个db4的包,用来支持文件数据库. # yum install db4-utils 二.系统帐户 1.建立Vsftpd服务的宿主用户: # useradd vsftpd -s /sbin/nologin 默认的Vsftpd的服务宿主用户是root,但是这不符合安全性的需要.这里建立名字为vsftpd的用户,用他来作为支持Vsftpd的服务宿主用户.由 于该用户仅用来支持Vsf

vsftp虚拟用户权限设置(转)

vsftp虚拟用户权限设置(转) 首先安装vsftp db-4斯蒂芬个http://hi.baidu.com/phpfool/item/d295fd5f6f960e3d33e0a981mkdir -p /opt/ftp创建用户 useradd -d /opt/ftp virtual创建虚拟用户 vi /etc/vsftp/loguser.txt格式如下用户名 admin密码    admin db_load -T -t hash -f loguser.txt vsftp_login.db 修改/

centos5.8 安装配置vsftp虚拟用户

vsftp因为公司时不时要用,也不是经常弄ftp,不常用就老是忘记有些东西,所以就在网上查些资料和自己遇到的一些问题结合起来写一个文档,以后需要使用ftp的时候搭建比较方便,使用虚拟用户不用担心用户登录服务器,你想让他在那个目录呆着就在那,而且修改权限方便,每个用户需要什么权限可以不同的修改,可以满足多方面的需要,所以推荐使用虚拟用户.第一次写博文,如有错误请指教! 1.查看安装包 [[email protected] ~]# rpm -qa | grep vsftpd vsftpd-2.0.5

配置vsftp虚拟用户登陆的上传下载

为了系统的安全,创建vsftp虚拟用户,其本身在Linux系统中存在一个映射账号,该账号不允许登录系统,其它虚拟账号通过数据库映射到该账号. 紧接着上次的实验,进行vsftp虚拟用户的配置.网址如下 http://blog.51cto.com/13760226/2140963 实验环境:linux6.5.虚拟win7/10 `vim /etc/vsftp` //进入vsftp目录 `vim vuser` //创建文本 `db_load -T -t hash -f vuser vuser.db`

vsftp 虚拟用户

首先安装vsftp db-4wiki mkdir -p /opt/ftp 创建用户 sudo useradd virtual -d /opt/ftp -s /bin/false sudo chown virtual:virtual /opt/ftp 创建虚拟用户 vi /etc/vsftpd/loguser.txt 格式如下(用户名) admin(密码) admin db_load -T -t hash -f loguser.txt vsftp_login.db 修改/etc/pam.d/vsf

Vsftp虚拟用户配置

1:配置前准备: yum install pam* yum install db4* 首先安装PAM(用于用户认证)和DB4(用于生成虚拟用户的用户名密码的db文件). 2.安装vsftpd yum install vsftpd 设置vsftpd开机启动: chkconfig vsftpd on 通过chkconfig --list 查看启动项 3. 配置vsftpd.conf anonymous_enable=NO local_enable=YES write_enable=YES local

vsftp虚拟用户权限问题

前面写的一篇文章<vsftp 实现不同用户不同权限配置>没有对虚拟用户的权限做解释,今天补一篇详细解释一下 virtual_use_local_privs=NO      #匿名用户不具有本地用户的权限,看不到目录中的文件,即不可浏览. anon_world_readable_only=NO     #匿名用户可以浏览FTP目录和下载文件 anon_upload_enable=YES            #允许匿名用户上传文件 anon_mkdir_write_enable=YES    #