1、搭建vsftpd,并实现虚拟用户
一、安装
1. 查看是否安装vsftpd
rpm -qa | grep vsftpd
2. 安装
yum -y install vsftpd
3. 设置开机启用
ckconfig vsftpd on
二、配置vsftpd
打开vsftpd配置文件
# vi /etc/vsftpd/vftpd.conf
#设定不允许匿名访问
anonymous_enable=NO
#设定本地用户可以访问。注:如使用虚拟宿主用户,在该项目设定为NO的情况下所有虚拟用户将无法访问
local_enable=YES
write_enable=YES
local_umask=022
dirmessage_enable=YES
#记录上传下载文件的日志
xferlog_enable=YES
connect_from_port_20=YES
chown_uploads=YES
chown_username=ftp
#日志记录文件位置
xferlog_file=/var/log/vsftpd.log
#格式化日志
xferlog_std_format=YES
#设定支持ASCII模式的上传和下载功能
ascii_upload_enable=YES
ascii_download_enable=YES
//使用户不能离开主目录
chroot_list_enable=YES
#chroot_list_file=/etc/vsftpd/chroot_list
ls_recurse_enable=YES
#监听IPv4 sockets
listen=YES
#注释IPv6 sockets监听
#listen_ipv6=YES
#PAM认证文件名。PAM将根据/etc/pam.d/vsftpd进行认证 //已下三个请在配置文件中手动添加
pam_service_name=vsftpd
userlist_enable=YES
userlist_deny=YES
#/etc/vsftpd/user_list中的用户禁止登录ftp
#如果只配置userlist_enable=YES,有可能出现错误 “530 Permission denied”,因此加上如下配置
userlist_file=/etc/vsftpd/user_list
tcp_wrappers=YES
#设定启用虚拟用户功能
guest_enable=YES
//指定虚拟用户的宿主用户,CentOS中已经有内置的ftp用户了
guest_username=ftp
#设定虚拟用户个人vsftp的CentOS FTP服务文件存放路径。存放虚拟用户个性的CentOS FTP服务文件(配置文件名=虚拟用户名)
user_config_dir=/etc/vsftpd/vuser_conf
pasv_min_port=61001 (被动模式开放端口)
pasv_max_port=62000
#文件上传下载权限设置
allow_writeable_chroot=YES
anon_umask=022
file_open_mode=777
#虚拟用户和本地用户有相同的权限
virtual_use_local_privs=YES
三、创建chroot list,将vftpd.conf配置文件中的guest_username加入其中:
# touch /etc/vsftpd/chroot_list
# echo ftp >> /etc/vsftpd/chroot_list
四、创建用户密码文件
# touch /etc/vsftpd/vuser_passwd.txt
##注意奇行是用户名,偶行是密码
test
111222
五、生成虚拟用户认证的db文件
如果没有db4需要先进行安装。安装Berkeley DB工具:
# yum install db4 db4-utils
生成虚拟用户认证的db文件:
# db_load -T -t hash -f /etc/vsftpd/vuser_passwd.txt /etc/vsftpd/vuser_passwd.db
六、编辑认证文件:
# vi /etc/pam.d/vsftpd
全部注释掉原来语句再增加以下两句:
##查看系统版本号
# getconf LONG_BIT
#系统为32位的
auth required pam_userdb.so db=/etc/vsftpd/vuser_passwd
account required pam_userdb.so db=/etc/vsftpd/vuser_passwd
#系统为64位的
auth required /lib64/security/pam_userdb.so db=/etc/vsftpd/vuser_passwd
account required /lib64/security/pam_userdb.so db=/etc/vsftpd/vuser_passwd
七、创建虚拟用户配置文件
# mkdir /etc/vsftpd/vuser_conf/
#文件名等于vuser_passwd.txt里面的账户名,否则下面设置无效
# vi /etc/vsftpd/vuser_conf/test
##内容如下:
#虚拟用户根目录,根据实际情况修改(如果没有需要创建)。该目录必须要有读写权限 chmod -R 777 目录。
local_root=/var/ftp/upload
#可写
write_enable=YES
#掩码
anon_umask=022
anon_world_readable_only=NO
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
八、设置防火墙
打开防火墙设置:
# vi /etc/sysconfig/iptables
注释其他,新加如下
# -A INPUT –m state --state NEW –m tcp –p tcp –dport 22 –j ACCEPT
# -A INPUT -m state --state NEW -m tcp -p tcp --dport 21 -j ACCEPT
# -A INPUT -m state --state NEW -m tcp -p tcp --dport 10060:10090 -j ACCEPT (被动模式开放端口)
然后保存,并关闭该文件,在终端内运行下面的命令,刷新防火墙配置:
# systemctl restart firewalld.service
2、简述iptales四表五链及详细介绍iptables命令使用方法
Linux系统上的防火墙是由iptables/netfilter组成,其中iptables是规则的制定工具,工作在用户空间,它制定的规则送到内核空间,netfilter在内核协议框架中定义了5个位置通过钩子函数对进出的数据包进行过滤。iptables四表为filter , nat ,mangle , raw 。默认表是flter,表的处理优先级为:raw ,mangle,nat,filter。filter:一般的过滤功能;nat: 用于nat功能(地址转换、映射、端口映射等)mangle:用于对特定数据包的修改(使用情况少)raw: 一般是为了不再让iptables做数据包的链接跟踪处理,从而提高性能。五个链分别是:INPUT: 通过路由表判断后目的地是本机,然后进入本机内部资源OUTPUT: 由本机产生的数据向外部转发FORWARD:通过路由表判断后目的地不是本机,然后通过路由转发到其他地方PREROUTING:流入的数据包进入路由表之前POSTROUTING:传出的数据包到达网卡出口前四个表对应的链分别为:filter: INPUT , OUTPUT , FORWARDnat: PREROUTING , POSTROUTING FORWARDmangle: INPUT OUTPUT PREROUTING , POSTROUTING FORWARDraw: PREROUTING OUTPUT
iptables的语法格式:iptables [-t TABLE ] COMMAND CHAIN [-m matchname [per-match-options]] -j targetname [per-target-options]-t TABLE: 默认为filter ,可以是filter ,nat ,mangle, rawCOMMAND有以下几种: (1)查看:-L list列出指定链上所有的规则,有以下几条子选项 -n : numberic 以数字格式显示地址与端口号,例如任意地址不加-n显示为anywhere 加-n显示为0.0.0.0/0 -v : verbose显示详细信息 , -vv -vvv显示的信息更为详细 -x: 显示计数器结果的精确值,不加的话显示四舍五入的值,但是更有可读性 --line-numbers: 显示规则的序号 (2)链管理: -N: new,定义一台新的自定义规则链 -X:delete 删除一条自定义规则链(仅能删除自定义的 引用计数为0的 空的 链) -E: 重命名自定义链(仅能重命名引用计数为0的自定义链) -P:policy 设置默认策略,对于filter表中的链来说,以三种策略:ACCEPT / DROP / REJECT (3)规则管理 -A: append 在最后一条规则之后,追加规则 -I: insert 插入规则,要指定位置,不指定位置则在第一条前插入规则 -D: delete 删除规则,指定规则序号或规则本身来进行删除 -R: replace 替换规则,替换指定链上的指定规则 -F: flush 清空指定链上的规则 -Z: zero 计数器置零,每条规则对匹配的报文个数和报文的大小之和进行统计。CHAIN 就是链,参考之前的链与表的关系匹配条件: 基本匹配条件:无需加载任何模块,由iptables/netfilter来提供 [!] -s: 检查报文中的源IP地址是否符合对应IP或网络地址范围 ,前加“!"表示条件取反(下同) 如:0.0.0.0/0表示所有地址,其他地址网段可以用CIDR方式书写 [!] -d: 检查报文中的目标IP地址是否符合对应IP或网络地址范围 [!] -p: 网络协议,常见的有tcp / udp /icmp [!] -i :数据报文流入的接口(即哪张网卡),只能应用于 INPUT PREROUTING , FORWARD 链 [!] -o :数据报文流出的接口(即哪张网卡),只能应用于OUTPUT POSTROUTING FORWARD链 扩展匹配条件: 隐式扩展:使用-p指定了协议后,隐式包含了一些扩展选项 tcp协议: [!] --source-port 或 --sport port[:port] 匹配报文的源端口,可以是端口范围两个port之间用“:”隔开 [!] --destination-port 或 --dport port[:port] 匹配报文的目标端口,可以是端口范围 [!] --tcp-flags 检查的标志位列表 必须为1的标志位列表 用于匹配报文的标志位,如果标志位出现在第一列表中,而没有出现在第二列表中,则必须为0。第二列表是第一列表的子集。 [!] --syn 用于匹配第一次握手,相当于"--tcp-flags SYN,ACK,FIN,RST SYN" udp协议: [!] --source-port 或 --sport port[:port] 匹配报文的源端口,可以是端口范围两个port之间用“:”隔开 [!] --destination-port 或 --dport port[:port] 匹配报文的目标端口,可以是端口范围 icmp协议: [!] --icmp-type {type[/code]| typename} echo-request : 8 echo-replay : 0 显式扩展:使用-m来指明要调用的扩展模块, -m 模块名 模块对应选项,常用的模块名举例如下: multiport: 以离散方式来指定端口号列表 [!] --source-port 或 --sport port,port,port ....指定多个源端口 [!] --destination-port 或 --dport port,port,port ..指定多个目标端口 iprange:指定IP地址范围 [!} --src-range fromIP[-toIP] 来源IP范围 [!} --dst-range fromIP[-toIP] 目标IP范围 time: 指定日期时间范围 --timestart hh:mm[:ss] 开始时间 --timestop hh:mm[:ss] 结束时间 [!] --weekdays day,day..... 周几 [!] --monthdays day,day,.... 每月内的几日 --datestart YYYY[-MM[-DD[Thh[:mm[:ss]]]]] 开始日期和时间 --datestop YYYY[-MM[-DD[Thh[:mm[:ss]]]]] 结束日期和时间 --kerneltz 使用内核配置的时区,而不是默认的UTC string: 匹配报文中的字符串 --algo {bm|kmp} 必选项 指定匹配字符串的算法 [!] --string 模式字符串 [!] --hex-string 16进制编码的模式字符串 --from offset 指定开始检查的位置 --to offset 指定结束检查的位置 connlimit :单IP的并发连接数限制 --connlimit-upto n 连接数小于等于n --connlimit-above n 连接数大于等于n limit :使用令牌桶过滤器,指定令牌生成速率 --limit-burst n 令牌桶的大小 --limit n[/second|/minute|/hour|/day] 限制每秒多少个包(每分钟/小时/天多少个包) state: 连接追踪记录,在并发访问量大的主机不要开启 追踪到的连接:/proc/net/nf_conntrack 调整可记录的连接数量最大值:/proc/sys/net/nf_conntrack_max 超时时长:/proc/sys/net/netfilter/* timeout * [!] --state 状态 这里的状态可以为以下几种: NEW:新连接请求 ESTABLISHED:已建立的连接 INVALID:未识别的连接 RELATED:相关联连接,附属于某个已存在连接的新请求 UNTRACKED:未追踪的连接-j targetname 跳转的目标或处理动作: 基本处理动作: ACCEPT:接受 DROP: 丢弃 扩展处理动作: REJECT:拒绝 --reject-with type 定义拒绝类型 LOG 日志记录,默认保存在/var/log/messages文件中, --log-level 日志级别 --log-prefix 日志前缀 RETURN 从自定义链返回原链继续检查规则 自定义链名作为目标 自定义链中的规则如果都不匹配时,再返回原链继续检查原链上的规则
其它命令iptables-save > filename 保存iptables内容到某一文件中iptables-restore <filename 从某文件中恢复iptables规则(无法恢复加载模块的内容) -n 不清除原有规则 -t :仅检查分析生成的规则集是否有语法错误
在centos6中 保存规则service iptables save 会将保存到/etc/sysconfig/iptables文件中覆盖保存 重载文件中的规则:service iptables restart