2015年11月8日-11月17日

环境介绍:

   目标机(服务器)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

image

  • 配置常用端口

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

image

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

clip_image002

测试登陆正常

clip_image003

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端口 无法访问

clip_image002[4]

 

针对响应报文,通过tcp/ip协议判断这里源端判断状态是RELATED,ESTABLISHED

iptables -I OUTPUT 3 -m state --state RELATED,ESTABLISHED -j ACCEPT

clip_image002[7]

测试访问正常:

clip_image004

 

 2、在工作时间,即周一到周五的8:30-18:00,开放本机的ftp服务给172.16.0.0网络中

的主机访问;数据下载请求的次数每分钟不得超过5个;

启动vsftpd服务(利用vsftpd)

默认登陆测试:

clip_image003[4]

 

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

clip_image002[14]

利用ftp匿名用户anonymous登陆

clip_image004[7]

 

 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正常使用

clip_image002[19]

 

  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

clip_image002[25]

 

  5、允许本机ping别的主机;但不开放别的主机ping本机;

iptables -I OUTPUT 1 -p icmp -s 192.168.6.148 -j ACCEPT

clip_image001

iptables -I INPUT 1 -p icmp -d 192.168.6.148 -j DROP

clip_image003

测试修改策略为允许其它ping本机正常

wKioL1ZMNSnz4kgGAABeacDcCx8820.jpg

 

 

  二、控制vsftpd仅允许172.16.0.0/255.255.0.0网络中的主机访问,但172.16.100.3除外;

对所被被拒绝的访问尝试都记录在/var/log/tcp_wrapper.log日志文件中;

步骤1:启动service vsftpd start

Ss �Ctnlp确定进程启动

wKioL1ZMNSngv4ABAABEPz7Y7lw593.jpg

步骤2:确定vsftpd是否接受tcp_wrap控制

ldd `which vsftpd`

wKiom1ZMNNayPDRuAABZZQrOEOs901.jpg

步骤3:修改/etc/hosts.allow和/etc/hosts.deny文件

vsftpd: 192.168.6.0 EXCEPT 192.168.6.119

wKioL1ZMNSqA9hhpAAA13P06Vu0562.png

vsftpd: ALL : spawn /bin/echo `date` login attempt from %c to %s, %d >> /var/log/tcp_wrapper.log

wKioL1ZMNSrSngo0AABHVdgRM8I548.jpg

步骤3:测试验证

wKioL1ZMNSrD5YycAAAUVXL6JDQ001.png

查看日志

clip_image010

 

  三、脚本编程类(数组练习)

  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

输出:

wKiom1ZMOJzzi_3fAACc_SfHUVw874.jpg

 

    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

wKiom1ZMNNjiO2XfAAAnWFqKKXs352.jpg

测试:上部分为随机输出,下部分为比较后输出

wKioL1ZMNSuhntnyAAAdljQD7XA693.png

 

 

 

 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 "========================"

clip_image001[16]

测试:测试用户cc,输入数字3,输出3个数组元素

clip_image002

 


  四、sudo练习

1、授权centos用户可以运行fdisk命令完成磁盘管理,以及使用mkfs或mke2fs实现文件系统管理;

2、授权gentoo用户可以运行逻辑卷管理的相关命令

测试使用centos用户

步骤1:修改vim /etc/sudoers文件

授权gentoo用户可以运行逻辑卷管理的相关命令

/sbin/lvm

wKioL1ZMNS2y3GfMAAAN1DEiDb4321.png

sudo /sbin/lvm

wKiom1ZMNNui2ThGAAAN1LjzARo723.png

编辑添加权限后

wKioL1ZMNS7wO45PAAAQyk036EM447.png

再次运行sudo 命令

wKioL1ZMNS7ypcQuAAAPw25khkk635.png

 

五、vsftpd及pam类

1、实现基于虚拟用户认证的vsftpd功能;

2、虚拟用户的账号及密码信息存储在mysql当中。

第一步 yum 安装

yum -y install vsftpd mysql-server mysql-devel pam_mysql

第二步 登陆mysql数据库创建vxftpd数据库,并授权创建vxftpd查询

image  

验证:

mysql -uvsftpd �Cp

用show databases显示创建的数据库

image  

第三步:创建字段

利用user vsftpd修改默认数据库,再利用create table等命令创建表

image  

第四步:insert插入记录

insert into users(name,password) values('tom',password('password'));

其中password()这个为内置函数,密码password将加密显示

image  

第五:配置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

#用于检查用有效性

image  

这里如果主机为远程mysql需要指定ip地址

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

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

# useradd -s /sbin/nologin -d /var/ftproot vuser

其中-r为系统用户,-d表示家目录 后面/var/ftproot vuser可指定(

# chmod go+rx /var/ftproot

#路径要与上述一致

image

 

编辑完成后重新启动服务

同时查/var/log/secure日志

image  

 

第六步:客户端登陆验证

分别通过tom,jerry用户登陆,这里二个用户以匿名用户的方式访问

wKioL1ZMOTWQlxOgAACUmcD3uQM537.jpg

 

 

  六、高级应用类(中级班选做,高级班必做)

 1、一共3台服务器,请合理安排资源分配;

 

 2、通过Nginx的反向代理实现LNMP架构的负载均衡,后端服务内容为wordpress论坛,要求访问

任何一台后端web服务器,都能获取一致的最新数据;

 

 3、后端nginx和php分离。

你可能感兴趣的:(服务器,客户端,IP地址)