作业(练习)内容:
----------------------------------------------------------------------------------------------------
一、iptables类作业
前提:INPUT和OUTPUT默认策略为DROP;
1、限制本地主机的web服务器在周一不允许访问;新请求的速率不能超过100个每秒;web服务器包含了admin字符串的页面不允许访问;web服务器仅允许响应报文离开本机;
把filter表的INPUT和OUPUT默认策略设为DROP:
# iptables -t filter -P OUTPUT DROP
# iptables -t filter -P INPUT DROP
限制本机的Web服务器在周一不允许访问:
# iptables -t filter -I INPUT -d 172.16.2.24 -p tcp --dport 80 -m time ! --weekdays Mon -j ACCEPT
在客户机验证:
修改系统时间,再次验证:
[root@rhel6 ~]# date 111711282015
Tue Nov 17 11:28:00 CST 2015
[root@rhel6 ~]#
新请求的速率不能超过100个每秒:
# iptables -t filter -R INPUT 1 -d 172.16.2.24 -p tcp --dport 80 -m connlimit ! --connlimit-above 100 -m time ! --weekdays Mon -j ACCEPT
web服务器包含了admin字符串的页面不允许访问;
# iptables -t filter -I OUTPUT 1 -s 172.16.2.24 -p tcp --sport 80 -m string --string "admin" --algo kmp -j REJECT
查看当前链上所有规则:
# iptables -L -n
Chain INPUT (policy DROP)
target prot opt source destination
ACCEPT tcp -- 0.0.0.0/0 172.16.2.24 tcp dpt:80 #conn/32 <= 100 TIME on Tue,Wed,Thu,Fri,Sat,Sun
ACCEPT all -- 0.0.0.0/0 172.16.2.24 state RELATED,ESTABLISHED
Chain FORWARD (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy DROP)
target prot opt source destination
REJECT tcp -- 172.16.2.24 0.0.0.0/0 tcp spt:80 STRING match "admin" ALGO name kmp TO 65535 reject-with icmp-port-unreachable
ACCEPT all -- 172.16.2.24 0.0.0.0/0 state ESTABLISHED
2、在工作时间,即周一到周五的8:30-18:00,开放本机的ftp服务给172.16.2.0网络中的主机访问;数据下载请求的次数每分钟不得超过5个;
# iptables -I INPUT 3 -s 172.16.2.0/24 -d 172.16.2.24 -p tcp --dport 21 -m limit --limit 5/minute -m time --timestart 08:30 --timestop 18:00 ! --weekdays 6,7 -j ACCEPT
3、开放本机的ssh服务给172.16.2.1-172.16.2.100中的主机,新请求建立的速率一分钟不得超过2个;仅允许响应报文通过其服务端口离开本机;
# iptables -I INPUT 4 -d 172.16.2.24 -p tcp --dport 22 -m iprange --src-range 172.16.2.1-172.16.2.100 -m limit --limit 2/minute -j ACCEPT
4、拒绝TCP标志位全部为1及全部为0的报文访问本机;
# iptables -I INPUT 1 -p tcp --tcp-flags ALL ALL -j DROP
# iptables -I INPUT 2 -p tcp --tcp-flags ALL NONE -j DROP
5、允许本机ping别的主机;但不开放别的主机ping本机;
# iptables -A OUTPUT -s 172.16.2.24 -p icmp --icmp-type 8 -jACCEPT
# iptables -A INPUT -d 172.16.2.24 -p icmp --icmp-type 0 -jACCEPT
查看当前链上所有规则:
# iptables -L -n
Chain INPUT (policy DROP)
target prot optsource destination
DROP tcp -- 0.0.0.0/0 0.0.0.0/0 tcp flags:0x3F/0x3F
DROP tcp -- 0.0.0.0/0 0.0.0.0/0 tcp flags:0x3F/0x00
ACCEPT tcp -- 0.0.0.0/0 172.16.2.24 tcp spt:53
ACCEPT udp -- 0.0.0.0/0 172.16.2.24 udp spt:53
ACCEPT tcp -- 172.16.2.0/24 172.16.2.24 tcp dpt:21 limit: avg 5/min burst 5TIME from 08:30:00 to 18:00:00 on Mon,Tue,Wed,Thu,Fri
ACCEPT tcp -- 0.0.0.0/0 172.16.2.24 tcp dpt:22 source IP range172.16.2.1-172.16.2.100 limit: avg 2/min burst 5
ACCEPT tcp -- 0.0.0.0/0 172.16.2.24 tcp dpt:80 #conn/32 <= 100 TIME onTue,Wed,Thu,Fri,Sat,Sun
ACCEPT all -- 0.0.0.0/0 172.16.2.24 stateRELATED,ESTABLISHED
ACCEPT icmp -- 0.0.0.0/0 172.16.2.24 icmp type 0
Chain FORWARD (policy ACCEPT)
target prot optsource destination
Chain OUTPUT (policy DROP)
target prot optsource destination
ACCEPT tcp -- 172.16.2.24 0.0.0.0/0 tcp dpt:53
ACCEPT udp -- 172.16.2.24 0.0.0.0/0 udp dpt:53
REJECT tcp -- 172.16.2.24 0.0.0.0/0 tcp spt:80 STRING match"admin" ALGO name kmp TO 65535 reject-with icmp-port-unreachable
ACCEPT tcp -- 172.16.2.24 0.0.0.0/0 tcp dpt:80state NEW
ACCEPT all -- 172.16.2.24 0.0.0.0/0 stateESTABLISHED
ACCEPT icmp -- 172.16.2.24 0.0.0.0/0 icmp type 8
二、控制vsftpd仅允许172.16.0.0/255.255.0.0网络中的主机访问,但172.16.100.3除外;对所被被拒绝的访问尝试都记录在/var/log/tcp_wrapper.log日志文件中;
# vim /etc/hosts.all
添加一行:
vsftpd: 172.16. EXCEPT 172.16.100.3
# vim /etc/hosts.deny
添加一行:
vsftpd: ALL : spawn /bin/echo `date` login attempt from %c to%s, %d >> /var/log/tcp_wrapper.log
三、脚本编程类(数组练习)
1、写一个脚本:定义一个数组,数组元素为/var/log目录下所有以.log结尾的文件的名字;显示每个文件的行数;
# vim count.sh
#!//bash
declare -a logs
logs=(/var/log/*.log)
for i in `seq 0 $[${#logs[*]}-1]`;
do wc -l${logs[$i]}
done
# bash count.sh
86 /var/log/anaconda.ifcfg.log
287 /var/log/anaconda.log
428 /var/log/anaconda.program.log
2020 /var/log/anaconda.storage.log
608 /var/log/anaconda.yum.log
37 /var/log/boot.log
1721 /var/log/dracut.log
2、写一个脚本,生成10个随机数,并按从小到大进行排序;
for i in `seq 1 10`;do echo $RANDOM ;done | sort -n
3、写一个脚本,能从所有同学中随机挑选一个同学回答问题;进一步地:可接受一个参数,做为要挑选的同学的个数;
四、sudo练习
1、授权centos用户可以运行fdisk命令完成磁盘管理,以及使用mkfs或mke2fs实现文件系统管理;
2、授权gentoo用户可以运行逻辑卷管理的相关命令
#使用visudo 编辑sudo的配置文件,添加以下几行:
centos ALL=(root) /sbin/fdisk, /sbin/mkfs, /sbin/mke2fs
Cmnd_Alias LVGCOMMANDS= /sbin/pvs, /sbin/vgs, /sbin/lvs,/sbin/pvscan, /sbin/vgscan, /sbin/lvscan, /sbin/pvcreate, /sbin/vgcreate,/sbin/lvcreate
gentoo ALL=(root) LVGCOMMANDS
验证:
[root@client1 ~]# su - centos
[centos@client1 ~]$ sudo -l
User centos may run the following commands on this host:
(root) /sbin/fdisk, (root) /sbin/mkfs,(root) /sbin/mke2fs
[centos@client1 ~]$
[centos@client1 ~]$ su - gentoo
Password:
[gentoo@client1 ~]$
[gentoo@client1 ~]$ sudo -l
User gentoo may run the following commands on this host:
(root) /sbin/pvs, /sbin/vgs, /sbin/lvs,/sbin/pvscan, /sbin/vgscan, /sbin/lvscan,
/sbin/pvcreate, /sbin/vgcreate,/sbin/lvcreate
五、vsftpd及pam类
1、实现基于虚拟用户认证的vsftpd功能;
2、虚拟用户的账号及密码信息存储在mysql当中。
请查阅另一篇博文:
vsftpd Server