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 端口
来源: http://www.bubuko.com/infodetail-3200060.html