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 xf  pam_mysql-0.7RC1.tar.gz

cd  pam_mysql-0.7RC1

./configure --with-pam=/usr --with-mysql=/usr --with-pam-mods-dir=/usr/lib64/security

make

make install

2 配置vsftp

建立pam认证所需文件

vim /etc/pam.d/vsftpd.mysql

添加如下两行
auth required /usr/lib64/security/pam_mysql.so user=vsftpd passwd=centos host=127.0.0.1 db=vsftpd table=user usercolumn=name passwdcolumn=password crypt=2

account required /usr/lib64/security/pam_mysql.so user=vsftpd passwd=centos host=127.0.0.1 db=vsftpd table=user usercolumn=name passwdcolumn=password crypt=2

建立虚拟用户映射的系统用户及对应的目录

 mkdir /ftproot

 useradd -s /sbin/nologin -d ftproot vuser

创建测试目录

 mkdir /ftproot/{pub,upload}
 cd /ftproot
 chown vuser:vuser upload

修改vsftpd的配置文件,使其适应mysql认证


vim /etc/vsftpd/vsftpd.conf

修改pam_service_name选项的值如下所示

pam_service_name=vsftpd.mysql

添加以下两行:

guest_enable=YES

guest_username=vuser

配置虚拟用户具有不同的访问权限
创建所需目录,并为虚拟用户提供配置文件

mkdir /etc/vsftpd/vusers_conf

cd /etc/vsftpd/vusers_conf

配置虚拟用户具有不同的访问权限:

vim tom 写入如下内容


anon_upload_enable=YES

anon_mkdir_write_enable=YES

anon_other_write_enable=YES

vim jerry

anon_upload_enable=NO

anon_mkdir_write_enable=NO

anon_other_write_enable=NO

3 创建sql中的数据

MariaDB [(none)]> CREATEDATABASE vsftpd;
MariaDB [(none)]>use vsftpd;
MariaDB [vsftpd]> create table user(name char(30),password char(50));
MariaDB [vsftpd]> INSERT INTO vsftpd.user(name,password) VALUES (‘tom‘,PASSWORD(‘lxq‘)),(‘jerry‘,PASSWORD(‘lxq‘));
MariaDB [(none)]>create user [email protected] identified by ‘centos‘
MariaDB [(none)]>grant all privileges on vsftp.user to [email protected] identified by ‘centos‘;
MariaDB [(none)]>FLUSHPRIVILEGES;

4测试
登陆tom

随便上传一个文件

登陆jerry,上传失败

详述iptables五链

四表五链概念

filter表——过滤数据包
Nat表——用于网络地址转换(IP、端口)
Mangle表——修改数据包的服务类型、TTL、并且可以配置路由实现QOS
Raw表——决定数据包是否被状态跟踪机制处理

INPUT链——进来的数据包应用此规则链中的策略
OUTPUT链——外出的数据包应用此规则链中的策略
FORWARD链——转发数据包时应用此规则链中的策略
PREROUTING链——对数据包作路由选择前应用此链中的规则(所有的数据包进来的时侯都先由这个链处理)
POSTROUTING链——对数据包作路由选择后应用此链中的规则(所有的数据包出去的时侯都先由这个链处理
        #清空iptables规则
[[email protected] ~]# iptables -F
[[email protected] ~]# iptables -vnL
Chain INPUT (policy ACCEPT 6 packets, 348 bytes)
 pkts bytes target     prot opt in     out     source               destination

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination

Chain OUTPUT (policy ACCEPT 5 packets, 380 bytes)
 pkts bytes target     prot opt in     out     source               destination

#安装所需软件
[[email protected] ~]#  yum -y install httpd telnet-server samba tftp-server vsftpd mariadb-server

#设置服务器输入和输出默认策略为DROP
[[email protected] ~]# iptables -P INPUT DROP
[[email protected] ~]# iptables -P OUTPUT DROP

(1)多端口匹配

#接收流经22和80端口的报文,即可以正常使用ssh和httpd服务
[[email protected] ~]# iptables -I INPUT  -d 192.168.186.131 -p tcp -m multiport --dports 22,80 -j ACCEPT
[[email protected] ~]# iptables -I OUTPUT  -s 192.168.186.131 -p tcp -m multiport --sports 22,80 -j ACCEPT 

(2)连接追踪

#允许指定范围的ip地址连接23端口
[[email protected] ~]# iptables -I INPUT 3 -d 192.168.186.131 -p tcp --dport 23 -m iprange --src-range 192.168.186.130-192.168.186.135 -j ACCEPT
[[email protected] ~]# iptables -I OUTPUT 3 -s 192.168.186.131 -p tcp --sport 23 -m iprange --dst-range 192.168.186.130-192.168.186.135 -j ACCEPT

(3)字符串匹配

#将默认策略改回ACCEPT
[[email protected] ~]# iptables -P INPUT ACCEPT
[[email protected] ~]# iptables -P OUTPUT ACCEPT

#当数据报文中出现"gaain"就不发送
[[email protected] ~]# iptables -I OUTPUT -s 192.168.186.131 -m string --algo kmp --string "gaain" -j REJECT 

(4)时间匹配

#开放同步时间服务端口
[[email protected] ~]# iptables -I OUTPUT -s 192.168.186.131 -p udp -m multiport --dports 123,323 -j ACCEPT
[[email protected] ~]# iptables -I INPUT -d 192.168.186.131 -p udp -m multiport --sports 123,323 -j ACCEPT

#添加规则
#指定ip在每天16点~23点可以连接23端口
[[email protected] ~]# iptables -I INPUT -d 192.168.186.131 -p tcp --dport 23 -m iprange --src-range 192.168.186.130-192.168.186.135 -m time --timestart 12:00:00 --timestop 23:00:00  -j ACCEPT
[[email protected] ~]# iptables -I OUTPUT -s 192.168.186.131 -p tcp --sport 23 -m iprange --dst-range 192.168.186.130-192.168.186.135 -m time --timestart 12:00:00 --timestop 23:00:00  -j ACCEPT

(5)并发连接限制

[[email protected] ~]# systemctl start mariadb.service
[[email protected] ~]# mysql
MariaDB [(none)]> CREATE USER ‘test‘@‘192.168.186.%‘ IDENTIFIED BY ‘123‘;
MariaDB [(none)]> FLUSH PRIVILEGES;
MariaDB [(none)]> exit

[[email protected] ~]# vim /etc/my.cnf.d/server.cnf
[mysqld]
skip_name_resolve=ON

[[email protected] ~]# systemctl restart mariadb.service

#给指定服务器和客户端开放3306端口
[[email protected] ~]# iptables -I INPUT -s 192.168.186.0/24 -d 192.168.186.131 -p tcp --dport 3306 -j ACCEPT
[[email protected] ~]# iptables -I OUTPUT -d 192.168.186.0/24 -s 192.168.1186.131 -p tcp --sport 3306 -j ACCEPT

#限制流入报文,同一IP并发连接数据库不能超过2
[[email protected] ~]# iptables -R INPUT 1 -s 192.168.10.0/24 -d 192.168.10.10 -p tcp --dport 3306 -m connlimit --connlimit-upto 2 -j ACCEPT

(6)速率匹配(报文的发包速率限制)

#每3秒处理一个请求(可用其他主机使用ping测试)
[[email protected] ~]# iptables -I INPUT  -d 192.168.186.131 -p icmp --icmp-type 8 -m limit --limit-burst 5 --limit 20/minute -j ACCEPT
[[email protected] ~]# iptables -I OUTPUT  -s 192.168.186.131 -p icmp --icmp-type 0 -j ACCEPT

(7)报文状态匹配

报文的五种状态:

NEW: 新连接请求;
ESTABLISHED:已建立的连接;
INVALID:无法识别的连接;
RELATED:相关联的连接,当前连接是一个新请求,但附属于某个已存在的连接;
UNTRACKED:未追踪的连接;

#允许NEW请求
[[email protected] ~]# iptables -I INPUT -d 192.168.186.131 -p tcp -m multiport --dports 22:23,80,139,445,3306 -m state --state NEW -j ACCEPT

#允许ESTABLISHED请求
[[email protected] ~]# iptables -I INPUT -d 192.168.186.131 -m state --state ESTABLISHED -j ACCEPT

#允许ESTABLISHED请求
[[email protected] ~]# iptables -I OUTPUT -s 192.168.186.131 -m state --state ESTABLISHED -j ACCEPT

3、举例实现iptables之SNAT源地址修改及DNAT目标地址修改和PNAT端口修改等应用
一、SNAT源地址修改

在路由器后(POSTROUTING)将内网的ip地址修改为外网网卡的ip地址

#iptables -t nat -I POSTROUTING -o 外网网卡 -s 内网网段 -j SNAT --to-source 外网ip地址  #适用于外网ip地址固定场景
[[email protected] g513452987]# iptables -t nat -A POSTROUTING -s 172.16.0.0/16 -o ens32 -j SNAT --to-source 10.23.15.57

二、DNAT目标地址修改

在路由前(PREROUTING)将来自外网访问网关公网ip及对应端口的目的ip及端口修改为内部服务器的ip及端口

#iptables -t nat -I PREROUTING -i 外网网卡 -d 外网ip tcp --dport 发布的端口 -j DNAT --to-destination 内网服务ip:端口
[[email protected] g513452987]# iptables -t nat A PREROUING -d 172.16.0.254 -p tcp --dport 80 -j DNAT --to-destination 10.23.12.235

三、PNAT端口修改

REDIRECT:端口映射

iptables -A PREROUTING -t nat -d 内网ip -p 服务 --doprt 发布的端口 -j REDIRECT --to-ports 映射的端口
[[email protected] g513452987]# iptables -A PREROUTING -t nat -d 10.23.12.235 -p tcp --dport 80 -j REDIRECT --to-ports8080   #80端口映射到8080端口

原文地址:https://blog.51cto.com/14414023/2438183

时间: 2024-10-12 15:56:03

vsftp基于mysql的虚拟用户,iptables的用法的相关文章

创建vsftpd服务器基于mysql的虚拟用户认证

简单罗列基础命令,只分享我的想法! 一.目的 要求:配置允许虚拟用户访问的vsftpd服务器,虚拟用户存储在另一台MySQL的服务器上面,虚拟用户账号有两个分别是tom和jerry,密码是tom和jerry,要求对这两个账户的权限做一下限制(根据实际的要求,自己调节). 环境:MySQL服务器(172.16.49.1),CentOS 6.6和MariaDB-5.5.43.另一台是通过yum安装vsftpd(192.168.0.22),OS是CentOS 6.6. MySQL是通用二进制格式安装,

vsftpd基于mysql做虚拟用户认证

虚拟用户: 用户账号存储于何处? 文件,MySQL,Redis, ... vsftpd的认证功能托管给pam: Pluggable Authencate Module,认证框架,认证库: 通过模块完成认证功能:/usr/lib64/security/ pam_mysql模块: 下载pam_mysql的源码包官方下载http://prdownloads.sourceforge.net/pam-mysql/pam_mysql-0.7RC1.tar.gz (1)准备编译安装环境 [[email pro

vsftpd的基于pam_mysql的虚拟用户机制

虚拟用户:是ftp中常用的一种策略,因为ftp服务古老而且不安全,使用匿名用户不能有效的控制权限,而本地用户可以登录操作系统,极为不安全,所以引入了虚拟用户的概念,其只是将多个虚拟用户映射为一个本地用户,此用户可以设置不允许登录,从而加强了系统的安全性,本问主要介绍基于mysql的虚拟用户 配置pam_mysql 下载地址:pam-mysql.sourceforge.net # yum -y  groupinstall  "Development Tools" "Server

Linux上FTP部署:基于mariadb管理虚拟用户

FTP原理 FTP 采用 Internet 标准文件传输协议 FTP 的用户界面, 向用户提供了一组用来管理计算机之间文件传输的应用程序.图1 FTP 的基本模型 FTP 是基于客户---服务器(C/S)模型而设计的,在客户端与 FTP 服务器之间建立两个连接. 开发任何基于 FTP 的客户端软件都必须遵循 FTP 的工作原理,FTP 的独特的优势同时也是与其它客户服务器程序最大的不同点就在于它在两台通信的主机之间使用了两条 TCP 连接,一条是数据连接,用于数据传送:另一条是控制连接,用于传送

vsftpd基于pam_mysql的虚拟用户认证

1.ftp用户 匿名用户:映射到某一个固定的系统用户,例如(ftp,vsftp,/var/ftp) 本地用户:系统用户,root及系统用户(0-999) 虚拟用户:nsswitch: name services switch  名称服务转换 PAM: Plugabl Plugable Authentication Modules  插入式认证模块本文主要讲解vsftpd基于pam_mysql的虚拟用户认证步骤. 2.准备环境 操作系统 主机名 IP地址 环境描述 CentOS 7.1 ch7 1

VSftpd使用MySQL存储虚拟用户进行认证

VSftpd使用MySQL存储虚拟用户进行认证 前言 周一的时候做这个实验失败了,当时以为是pam_mysql模块的问题,今天晚上随便试试,没想到竟然成功了,遂写一篇博客来分享一下 实验拓扑 实验环境 主机 IP 作用 server1.anyisalin.com 172.16.1.2 提供ftp服务 server2.anyisalin.com 172.16.1.3 使用存储vsftpd虚拟用户 注意:本实验所有操作都在SElinux和iptables关闭的前提下进行 实验步骤 安装vsftpd并

创建vsftpd的基于pam_mysql的虚拟用户机制

在centos7系统上实现搭建vsftp服务,基于pam_mysql的虚拟用户机制: 编译安装pam_mysql 准备环境: ]# yum -y groupinstall "Development Tools" "server Platform Development" ]# yum -y install pam-devel openssl-devel mariadb-devel mariadb-server ]# yum -y install vsftpd 解压p

19、vftpd基于PAM_MYSQL进行虚拟用户的认证且每个用户有自己的独立目录及不同的访问权限

1.vsftp相关介绍FTP 是File Transfer Protocol(文件传输协议)的英文简称 两个连接:命令连接.数据连接(相对服务器来讲)FTP连接支持两种模式:主动模式(Port模式).被动模式(Passive模式)主动模式:服务器端通过20端口主动连接客户端,客户端监听在与服务器端建立命令连接的端口+1上,服务器工作在TCP/20被动模式:客户端使用自己与服务器端建立命令连接的端口+1上连接服务器端的随机端口,该随机端口在建立命令连接的时候已发给客户端 vsftp的用户有三种类型

通过MySQL实现虚拟用户访问vsftpd服务器

声明 作者:昨夜星辰 博客:http://yestreenstars.blog.51cto.com/ 本文由本人创作,如需转载,请注明出处,谢谢合作! 目的 通过MySQL实现虚拟用户访问FTP服务器. 配置 # 安装本次实验所用到的所有软件包 yum -y install vsftpd mysql-server mysql-devel pam-devel gcc-c++ make wget # 启动mysqld服务 service mysqld start # 初始化数据库管理员密码 mysq