环境介绍:
目标机(服务器)IP地址192.168.6.148
客户端:192.168.6.119
web使用nginx
I.作业(练习)内容:
一、iptables类作业
前提:INPUT和OUTPUT默认策略为DROP;
iptables -F #清除现有策略
修改默认策略:
iptables -P INPUT DROP
iptables -P OUTPUT DROP
配置常用端口
iptables -I INPUT -d 192.168.6.148 -p tcp -m multiport --dport 22,80,443,8080 -j ACCEPT
iptables -I OUTPUT -s 192.168.6.148 -p tcp -m multiport --sports 22,80,443,8080 -j ACCEPT
1、限制本地主机的web服务器在周一不允许访问;新请求的速率不能超过100个每秒;
web服务器包含了admin字符串的页面不允许访问;web服务器仅允许响应报文离开本机;
A:8080端口禁止在周一访问
iptables -I INPUT -d 192.168.6.148 -p tcp --dport 8080 -m time --weekdays Mon -j REJECT
B:并发限制
iptables -I INPUT 2 -d 192.168.6.148 -p tcp --dport 8080 -m connlimit --connlimit-above 100 -j REJECT
iptables -R INPUT 1 -d 192.168.6.148 -p tcp --dport 8080 -m time --weekdays Tue -j REJECT
测试登陆正常
C:admin子符串限制
添加关键字策略
iptables -I OUTPUT 1 -s 192.168.6.148 -p tcp --sport 8080 -m string --string "admin" --algo kmp -j REJECT
测试后:192.168.6.148:8080端口 无法访问
针对响应报文,通过tcp/ip协议判断这里源端判断状态是RELATED,ESTABLISHED
iptables -I OUTPUT 3 -m state --state RELATED,ESTABLISHED -j ACCEPT
测试访问正常:
2、在工作时间,即周一到周五的8:30-18:00,开放本机的ftp服务给172.16.0.0网络中
的主机访问;数据下载请求的次数每分钟不得超过5个;
启动vsftpd服务(利用vsftpd)
默认登陆测试:
Iptables脚本如下:
iptables -I INPUT 1 -s 192.168.6.0/24 -d 192.168.6.148 -p tcp -m multiport --dports 20,21 -m time --weekdays Mon,Web,Tur,Thu,Fri, -m limit --limit 5/min -j ACCEPT
利用ftp匿名用户anonymous登陆
3、开放本机的ssh服务给172.16.x.1-172.16.x.100中的主机,x为你的座位号,新请求建
立的速率一分钟不得超过2个;仅允许响应报文通过其服务端口离开本机;
iptables -I INPUT 1 -s 192.168.6.119 -d 192.168.6.148 -p tcp --dport 22 -m limit --limit 2/min -j ACCEPT
iptables -I OUTPUT 1 -m state --state RELATED,ESTABLISHED -j ACCEPT
测试ssh正常使用
4、拒绝TCP标志位全部为1及全部为0的报文访问本机;
iptables -I INPUT 1 -d 192.168.6.148 -p tcp --tcp-flags ALL ALL -j DROP
iptables -I INPUT 1 -d 192.168.6.148 -p tcp --tcp-flags ALL NONE -j DROP
5、允许本机ping别的主机;但不开放别的主机ping本机;
iptables -I OUTPUT 1 -p icmp -s 192.168.6.148 -j ACCEPT
iptables -I INPUT 1 -p icmp -d 192.168.6.148 -j DROP
测试修改策略为允许其它ping本机正常
二、控制vsftpd仅允许172.16.0.0/255.255.0.0网络中的主机访问,但172.16.100.3除外;
对所被被拒绝的访问尝试都记录在/var/log/tcp_wrapper.log日志文件中;
步骤1:启动service vsftpd start
Ss �Ctnlp确定进程启动
步骤2:确定vsftpd是否接受tcp_wrap控制
ldd `which vsftpd`
步骤3:修改/etc/hosts.allow和/etc/hosts.deny文件
vsftpd: 192.168.6.0 EXCEPT 192.168.6.119
vsftpd: ALL : spawn /bin/echo `date` login attempt from %c to %s, %d >> /var/log/tcp_wrapper.log
步骤3:测试验证
查看日志
三、脚本编程类(数组练习)
1、写一个脚本:定义一个数组,数组元素为/var/log目录下所有以.log结尾的文件的名字;
显示每个文件的行数;
#!/bin/bash # declare -a files #声明数组files files=(/var/log/*.log) for i in `seq 0 $[${#files[*]}-1]`; do #元素个数减1 wc -l ${files[$i]}
done
输出:
2、写一个脚本,生成10个随机数,并按从小到大进行排序;
#
!/bin/bash # for ((i=0;i<10;i++)); do rand[$i]=$RANDOM echo ${rand[$i]} done echo "========================" #取随机机 for ((i=9;i>0;i--));do for ((j=0;j<i;j++));do if [ ${rand[j]} -gt ${rand[j+1] } ];then #判断二个数大小 tmp=${rand[j]} rand[j]=${rand[j+1]} rand[j+1]=$tmp #如果大于进行数据交换 fi done done
测试:上部分为随机输出,下部分为比较后输出
3、写一个脚本,能从所有同学中随机挑选一个同学回答问题;进一步地:可接受一个参数,
做为要挑选的同学的个数;
定义数组,包括三个人员,然后选择人员【读取人员名称】,再输入人员个数,最后再
输出相应个数的人员
#!/bin/bash # declare -A namelist namelist=([1]="aa" [2]="bb" [3]="cc" [4]="dd") #定义数组 read -p "Please enter username " -t 5 username #输入用户名 for ((i=1;i<=4;i++)); do if [[ ${namelist[$i]} == $username ]]; then #判断是否存在用户 echo "user is exits" read -p "please enter usernum " -t 10 usernum #如果存在输入数字 for ((i=1;i<=${usernum};i++)); do #输出相应数据的用户 echo ${namelist[$i]} done break fi done echo "========================"
测试:测试用户cc,输入数字3,输出3个数组元素
四、sudo练习
1、授权centos用户可以运行fdisk命令完成磁盘管理,以及使用mkfs或mke2fs实现文件系统管理;
2、授权gentoo用户可以运行逻辑卷管理的相关命令
测试使用centos用户
步骤1:修改vim /etc/sudoers文件
授权gentoo用户可以运行逻辑卷管理的相关命令
/sbin/lvm
sudo /sbin/lvm
编辑添加权限后
再次运行sudo 命令
五、vsftpd及pam类
1、实现基于虚拟用户认证的vsftpd功能;
2、虚拟用户的账号及密码信息存储在mysql当中。
第一步 yum 安装
yum -y install vsftpd mysql-server mysql-devel pam_mysql
第二步 登陆mysql数据库创建vxftpd数据库,并授权创建vxftpd查询
验证:
mysql -uvsftpd �Cp
用show databases显示创建的数据库
第三步:创建字段
利用user vsftpd修改默认数据库,再利用create table等命令创建表
第四步:insert插入记录
insert into users(name,password) values('tom',password('password'));
其中password()这个为内置函数,密码password将加密显示
第五:配置vsftpd
首先:建立pam认证所需文件
#vi /etc/pam.d/vsftpd.mysql(新建)
添加如下两行
auth required /lib64/security/pam_mysql.so user=vsftpd passwd=password host=localhost db=vsftpd table=users usercolumn=name passwdcolumn=password crypt=2
#用于认证,use和密码为链接mysql用户名和密码,crypt为加密方式
account required /lib64/security/pam_mysql.so user=vsftpd passwd=password host=localhost db=vsftpd table=users usercolumn=name passwdcolumn=password crypt=0
#用于检查用有效性
这里如果主机为远程mysql需要指定ip地址
其次:修改vsftpd的配置文件,使其适应mysql认证
建立虚拟用户映射的系统用户及对应的目录
# useradd -s /sbin/nologin -d /var/ftproot vuser
其中-r为系统用户,-d表示家目录 后面/var/ftproot vuser可指定(
# chmod go+rx /var/ftproot
#路径要与上述一致
编辑完成后重新启动服务
同时查/var/log/secure日志
第六步:客户端登陆验证
分别通过tom,jerry用户登陆,这里二个用户以匿名用户的方式访问
六、高级应用类(中级班选做,高级班必做)
1、一共3台服务器,请合理安排资源分配;
2、通过Nginx的反向代理实现LNMP架构的负载均衡,后端服务内容为wordpress论坛,要求访问
任何一台后端web服务器,都能获取一致的最新数据;
3、后端nginx和php分离。