1、解决DOS生产案例:根据web日志或者或者网络连接数,监控当某个IP 并发连接数或者短时内PV达到100,即调用防火墙命令封掉对应的IP,监控频 率每隔5分钟。防火墙命令为:iptables -A INPUT -s IP -j REJECT

用while true做这个很合适,可以逐行送进循环,下面取出的ip统计后,前面是ip个数,后面是ip,分别赋值给count和ip,这个别看不懂哦。

#第一种方法
[root@centos-7 ~]#cat check_link.sh 
#!/bin/bash
#
#********************************************************************
#Author:		jiangmin
#QQ: 			1461918614
#Date: 			2021-08-18
#FileName:		check_link.sh
#Description:		The test script
#Copyright (C): 	2021 All rights reserved
#********************************************************************
WARNING=100
touch deny_hosts.txt
while true;do
	ss -nt | sed  -nr '1!s#.* ([0-9.]+):[0-9]+ *#\1#p'|sort |uniq -c|sort | while read count ip;do
		if [ $count -gt $WARNING ];then
			echo $ip is deny
			grep -q "$ip" deny_hosts.txt || { echo $ip >> deny_hosts.txt; iptables -A INPUT -s $ip -j REJECT; }
		fi
	done
	sleep 300
done



#第二种方法
[root@centos-7 ~]#cat deny_dos.sh 
#!/bin/bash
#
#********************************************************************
#Author:		jiangmin
#QQ: 			1461918614
#Date: 			2021-08-18
#FileName:		deny_dos.sh
#Description:		The test script
#Copyright (C): 	2021 All rights reserved
#********************************************************************
LINK=100
while true;do
	ss -nt|awk -F"[[:space:]]+|:" '/^ESTAB/{print $(NF-2)}'|sort|uniq -c |sort -nr|while read count ip;do
		if [ $count -gt $LINK ];then
			iptables -A INPUT -s $ip -j REJECT
		fi
	done
done

[root@centos-7 ~]#chmod +x /root/deny_dos.sh 
[root@centos-7 ~]#crontab -e
[root@centos-7 ~]#crontab -l
*/5 * * * *   /root/deny_dos.sh
2、使用awk以冒号分隔获取/ettc/passwd文件第一列
#第一种方法
[root@centos-7 ~]#awk -F: '{print $1}' < /etc/passwd
root
bin
daemon
adm
lp
sync
shutdown
halt
mail
operator
games
ftp
nobody
systemd-network
dbus
polkitd
sshd
postfix
nginx


#第二种方法
[root@centos-7 ~]#awk -v FS=":"  '{print $1}' < /etc/passwd
root
bin
daemon
adm
lp
sync
shutdown
halt
mail
operator
games
ftp
nobody
systemd-network
dbus
polkitd
sshd
postfix
nginx