linux運維實戰練習

1、iptables類做業php

前提:INPUT和OUTPUT默認策略爲DROP,只容許SSH;node

iptables -P INPUT DROP
iptables -P OUTPUT DROP
iptables -P FORWARD DROP
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
iptables -A OUTPUT -p tcp --sport 22 -j ACCEPT

一、限制本地主機的web服務器在週一不容許訪問;新請求的速率不能超過100個每秒;web服務器包含了admin字符串的頁面不容許訪問;web服務器僅容許響應報文離開本機;mysql

只能限制URL 帶admin 頁面內帶admin沒法限制nginx

a.web

iptables -I INPUT 1 -p tcp --dport 80 -m string --string "admin" --algo kmp -j REJECT
iptables -A INPUT -p tcp --dport 80 -m limit --limit 100/second -j ACCEPT
iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

b. 另外一種方法sql

修改默認值,默認值爲20  /sys/module/xt_recent/parameters/ip_pkt_list_tot編程

iptables -A INPUT -p tcp --dport 80 -m recent --name DENY_100 --update --seconds 1 --hitcount 20 -j REJECT
iptables -A INPUT -p tcp --dport 80 -m recent --name DENY_100 --set -m time ! --weekdays Mon -j ACCEPT

 二、在工做時間,即週一到週五的8:30-18:00,開放本機的ftp服務給10.10.10.0網絡中的主機訪問;數據下載請求的次數每分鐘不得超過5個;vim

iptables -A INPUT -s 10.10.10.0/24 -p tcp --dport 21 -m limit --limit 5/min -m time --weekdays Mon,Tus,Wed,Thu,Fri --timestart 08:00:00 --timestop 18:00:00 -j ACCEPT

iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

 

三、開放本機的ssh服務給172.16.x.1-172.16.x.100中的主機,x爲你的座位號,新請求創建的速率一分鐘不得超過2個;僅容許響應報文經過其服務端口離開本機;後端

iptables -A INPUT -p tcp --dport 22 -m iprange --src-range 10.10.10.50-10.10.10.100 -m limit --limit 2/minute -j ACCEPT

iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

四、拒絕TCP標誌位所有爲1及所有爲0的報文訪問本機;centos

iptables -A INPUT  -p tcp --tcp-flags ALL ALL -j DROP

iptables -A INPUT  -p tcp --tcp-flags ALL -j DROP

五、容許本機ping別的主機;但不開放別的主機ping本機;

iptables -A INPUT -p icmp --icmp-type 0 -j ACCEPT
iptables -A OUTPUT -p icmp --icmp--type 8 -j ACCEPT


2、控制vsftpd僅容許10.10.10.0/255.255.255.0網絡中的主機訪問,但10.10.10.50除外;對所被被拒絕的訪問嘗試都記錄在/var/log/tcp_wrapper.log日誌文件中;

vim /etc/hosts.allow
vsftpd: 10.10.10. EXCEPT 10.10.10.50
vim /etc/hosts.deny
vsftpd: ALL : spawn /bin/echo `date`  %a %c %u access %s deny  >> /var/log/tcp_wrapper.log

3、腳本編程類(數組練習)

一、寫一個腳本:定義一個數組,數組元素爲/var/log目錄下全部以.log結尾的文件的名字;顯示每一個文件的行數;

#!/bin/bash
declare -a files
files=(/var/log/*.log)
for i in `seq 0 $[${#files[@]}-1]`;
    do wc -l ${files[$i]}
done
[root@node6 ~]# ./log.sh 
86 /var/log/anaconda.ifcfg.log
345 /var/log/anaconda.log
1331 /var/log/anaconda.program.log
3281 /var/log/anaconda.storage.log
599 /var/log/anaconda.yum.log
45 /var/log/boot.log
1927 /var/log/dracut.log
1 /var/log/tcp_wrapper.log
6 /var/log/yum.log

二、寫一個腳本,生成10個隨機數,並按從小到大進行排序;

#!/bin/bash 
read -p "Generate a sequence of random numbers,how many you want:" number
for ((i=0;i<number;i++));do
    arr[$i]=$RANDOM
done
for (( i=0 ; i<${#arr[@]} ; i++ ))
do
  for (( j=${#arr[@]} - 1 ; j>i ; j-- ))
  do
    if  [[ ${arr[j]} -lt ${arr[j-1]} ]]
    then
       t=${arr[j]}
       arr[j]=${arr[j-1]}
       arr[j-1]=$t
    fi
  done
done
echo ${arr[@]}
 [root@node6 ~]# ./random.sh  

Generate a sequence of random numbers,how many you want:10

4021 4245 5137 6827 15479 16179 18317 22632 24913 27785

三、寫一個腳本,能從全部同窗中隨機挑選一個同窗回答問題;進一步地:可接受一個參數,作爲要挑選的同窗的個數;

#!/bin/bash 
function  duplicate() {   #判斷是否重複選擇,若是重複在選一次,直到不重複
for ((j=$[${#student[@]}-2];j>=0;j--));do
            if [ ${student[$j]} -eq ${student[$i]} ] 
            then
            student[$i]=$(($RANDOM % $a))
            duplicate
            fi
        done
}
read -p  "input the total student number,the first student no. is 0:" a
total=($(seq 0 $[$a-1]))
read -p "input how many student pick:" b
if [ $b -gt $a ]
then 
    echo "pick tpo more student"
elif [ $a -eq $b ]
then
    echo "pick every student"
else
    for ((i=0;i<$b;i++));do
        student[$i]=$(($RANDOM % $a))
        duplicate
        echo ${student[$i]}
    done
fi
[root@node6 ~]# ./pick.sh
input the total student number,the first student no. is 0:10
input how many student pick:4
7
1
9
2
[root@node6 ~]# ./pick.sh
input the total student number,the first student no. is 0:10
input how many student pick:9
4
5
3
7
1
0
8
2
9

4、sudo練習

一、受權centos用戶能夠運行fdisk命令完成磁盤管理,以及使用mkfs或mke2fs實現文件系統管理;

visudo
User_Alias   DISK_ADMINS = centos
Cmnd_Alias   DISK_COMMAND = /sbin/fdisk, /sbin/mkfs, /sbin/mke2fs
DISK_ADMINS  ALL=(root) NOPASSWD: DISK_COMMAND

二、受權gentoo用戶能夠運行邏輯卷管理的相關命令

visudo
User_Alias  LVM_ADMINS = gentoo
Cmnd_Alias  LVM_COMMAND = /sbin/pv*, /sbin/vg*, /sbin/lv*
LVM_ADMINS  ALL=(root) NOPASSWD: LVM_COMMAND
useradd centos
echo "centos" | passwd --stdin centos
useradd gentoo
echo "gentoo" | passwd --stdin gentoo
[centos@node6 ~]$ sudo -l
用戶 centos 能夠在該主機上運行如下命令:
    (root) NOPASSWD: /sbin/fdisk, /sbin/mkfs, /sbin/mke2fs
[gentoo@node6 ~]$ sudo -l
用戶 gentoo 能夠在該主機上運行如下命令:
    (root) NOPASSWD: /sbin/pv*, /sbin/vg*, /sbin/vl*


5、vsftpd及pam類

一、實現基於虛擬用戶認證的vsftpd功能;

二、虛擬用戶的帳號及密碼信息存儲在mysql當中。

   正在總結,後補


6、高級應用類(中級班選作,高級班必作)

一、一共3臺服務器,請合理安排資源分配;

二、經過Nginx的反向代理實現LNMP架構的負載均衡,後端服務內容爲wordpress論壇,要求訪問任何一臺後端web服務器,都能獲取一致的最新數據;

三、後端nginx和php分離。

nginx+mysql雙主+keepalived

相關文章
相關標籤/搜索