全局变量定义 USER="user" PASSWORD="password" SMTPSERVER="smtp.163.com:465" MAILFROM="user@163.com" MAILCC= 阅读全文
标签: Shell
密码保护:Linux 系统检查用
PoiPlayer播放器音乐列表提取脚本
- 脚本部分命令可以合2为1,本人分开用于查看命令导出的数据信息便于脚本更新。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 |
# !/bin/bash # 该脚本用于生成兼容PoiPlayer插件的网易云音乐电台播放列表 # 更新日期:2017-12-9 # For PoiPlayer v2.0.7 #拉取网页源代码,改成主播电台的链接地址 curl https://music.163.com/djradio?id=350021167 > vol1 curl https://music.163.com/djradio?id=349307397 > vol2 curl https://music.163.com/djradio?id=350161529 > vol3 curl https://music.163.com/djradio?id=350458185 > vol4 #删除上次历史数据 rm -rf mp3list title_id #循环语句,生成音乐属性 for vol in vol{1..4} do #生成专辑名称变量 album=$(cat $vol | grep '<br>' | sed 's/<br>//g' | head -n 1) #生成音乐标题文件 cat $vol | grep 'div class="tt f-thide"' >> title_html awk -F'"' '{print $6}' title_html >> title rm -f title_html #生成音乐ID文件 cat $vol | grep songlist >> songlist awk '{print $2}' songlist | cut -c 14-22 >> id rm -f songlist #合并标题及ID paste -d ':' title id | sed -r "s/$/:$album/g" >> titleid rm -f title id #按标题进行排序 #awk '{printf("%02d %s\n", NR, $0)}' titleid | sort -r | cut -c 4- >> title_id sed -r 's/^/:/g' titleid | awk '{printf("%02d %s\n", NR, $0)}' | sort -r >> title_id rm -f titleid done #循环语句,生成音乐列表;下面的mid是歌曲的ID、pid是专辑封面的ID。 while read line do title=$(echo $line | awk -F":" '{print $2}') id=$(echo $line | awk -F":" '{print $3}') album=$(echo $line | awk -F":" '{print $4}') echo { >> mp3list echo " \"album\":\"$album\"," >> mp3list echo " \"title\":\"$title\"," >> mp3list echo " \"artist\":\"FLAC无损转码\"," >> mp3list echo " \"pid\":\"19093019416587651\"," >> mp3list echo " \"mid\":\"$id\"," >> mp3list echo "}," >> mp3list done < title_id |
Nginx错误日志分析及防护脚本
- 关于iptables定时策略、crontab设置请自行去了解,建议使用"nohup"方式执行crontab任务;
- 对于nginx error日志可以做大小限制进行截断以减少脚本读取日志文件耗时;
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 |
# !/bin/bash # 脚本用于nginx错误URL访问检测 # 若指定时间内来源IP地址错误URL超出合理范围, 则视为URL嗅探源并通过防火墙阻止访问 # 说明: 函数内部变量使用小写字母, 脚本头部变量使用大写字母 # 变量引用:${}可以拼接字符且兼容unix,$不可以拼接字符 # sh -x ngx_err_block.sh 进行跟踪调试 # 清理3分钟前的旧日志文件, 保留iptables备份的".lst"文件 for TYPE in {log,run} do find /data/shell/ -type f -name "*ngx*.$TYPE" -mmin +6 -exec rm -f {} \; done # 定义程序、日志相关变量, 日志路径可以参考以下示例自行设置 # error_page 400 403 404 500 502 504 /404.html; # location = /404.html { # access_log /data/nginx/log/error_request.log main; # } BINGIPTAB="/sbin/iptables" NGXLOG="/data/nginx/log/error_request.log" NGX00="/data/shell/$(date +%Y%m%d)_ngx00_$.log" NGX30="/data/shell/$(date +%Y%m%d)_ngx30_$.log" NGX60="/data/shell/$(date +%Y%m%d)_ngx60_$.log" IPTABLST="/data/shell/$(date +%Y%m%d)_ngx_$.lst" RUNLOG="/data/shell/$(date +%Y%m%d)_ngx_$.run" CHAIN_NM="IN_NGXBLOCK" PORTS="80,443" GREP_VWORD="127.0.0.1|^$" GREP_VCODE="200|304|503" # 定义函数: 统计一段时间内某个IP地址访问出错的次数 function errsum(){ # 读取IP地址 IPADDR=$(echo ${line} | awk -F" " '{print $2}') # 读取IP首次汇总数据中访问失败的次数, 最小值计 0 NUMS=$(grep -w ${IPADDR} ${NGX00} | awk -F" " '{print $1}') if [ "$NUMS" = "" ]; then NUMS=0 fi # 读取IP此次汇总数据中访问失败的次数 NUME=$(echo ${line} | awk -F" " '{print $1}') # 一段时间内的IP总计访问失败的次数 NUMC=$(expr ${NUME} - ${NUMS}) # 将汇总数据中每个IP访问失败的次数进行记录 echo $IPADDR $NUME $NUMS $NUMC >> $RUNLOG } # 定义函数: 将访问失败过高的IP地址加入防火墙规则 function addrule(){ # 主判断:IP一段时间内访问失败的次数是否大于命令第一个参数值, 如果值为真则执行 # 注意:if [] 内的两个值要么都加"", 要么都不加, 避免报错(integer expression expected) if [ $NUMC -gt $1 ]; then # 检索系统当前防火墙规则中是否存在$CHAIN_NM链 $BINGIPTAB -nL $CHAIN_NM if [ $? -ne 0 ]; then # 如果规则链不存在, 则新建规则链并应用到INPUT链首行 $BINGIPTAB -N $CHAIN_NM $BINGIPTAB -I INPUT 1 -j $CHAIN_NM fi # 规则链存在, 判断链中条目数量是否超过200条 chain_sum=$(${BINGIPTAB} --line-numbers -nvL ${CHAIN_NM} | tail -n 1 | cut -d' ' -f 1) # 规则链存在但是列表为空, 则赋值为0 if [ "$chain_sum" = "num" ]; then chain_sum=0 fi if [ $chain_sum -gt 200 ]; then # 如果链中规则数量大于200条, 则删除末行规则 $BINGIPTAB -D $CHAIN_NM $chain_sum fi # 检查现有规则中是否存在将要阻止的IP地址 if [ "$(${BINGIPTAB} -nL ${CHAIN_NM} | grep -w ${IPADDR} | grep DROP)" ]; then # 如果要阻止的IP地址已经在现有规则中, 查询行号并删除旧规则, 确保每个IP在链中只有一个条目 # 建议:如果有其他应用检测脚本要调用iptables, 请使用不同的链名称 # 说明:--kerneltz 在 RHEL/CentOS 6.x 中应替换为 --localtz 参数, 检查系统时间和时区设置 chain_num=$(${BINGIPTAB} --line-numbers -nL ${CHAIN_NM} | grep -w $(echo ${IPADDR}) | grep DROP | cut -d' ' -f 1) $BINGIPTAB -D $CHAIN_NM $chain_num # 插入新规则到链首行, 多次被block的IP将阻止15min内访问, 不指定日期则截止至 2038-01-19 $BINGIPTAB -I $CHAIN_TME 1 -s $IPADDR -p tcp -m multiport --dports $PORTS \ -m time --timestart $(date +%H:%M) --timestop $(date -d '+15 min' +%H:%M) \ --datestop $(date +%Y-%m-%dT23:59:59) --kerneltz -j DROP else # 如果要阻止的IP地址不在现有规则中, 插入新规则到链首行 # 首次被block的IP将阻止10min内访问, 不指定日期则截止至 2038-01-19 $BINGIPTAB -I $CHAIN_TME 1 -s $IPADDR -p tcp -m multiport --dports $PORTS \ -m time --timestart $(date +%H:%M) --timestop $(date -d '+10 min' +%H:%M) \ --datestop $(date +%Y-%m-%dT23:59:59) --kerneltz -j DROP fi # 保存防火墙规则列表, 如果主判断为真且有多个IP地址被添加到规则中, 则以下命令会多次执行 "${BINGIPTAB}-save" > $IPTABLST fi } # 执行第一次NGINX访问错误信息汇总 grep -ahvE "${GREP_VWORD}" $NGXLOG | cut -d'"' -f 1,3 | awk '{print $1,$7}' | grep -vE "${GREP_VCODE}" | \ awk '{sum[$1]++} END {for (i in sum) {print sum[i],i | "sort -nr -k 1"}}' | awk '{if ($1 > 5) print $0}' > $NGX00 # 执行第二次NGINX访问错误信息汇总 sleep 30 grep -ahvE "${GREP_VWORD}" $NGXLOG | cut -d'"' -f 1,3 | awk '{print $1,$7}' | grep -vE "${GREP_VCODE}" | \ awk '{sum[$1]++} END {for (i in sum) {print sum[i],i | "sort -nr -k 1"}}' | awk '{if ($1 > 5) print $0}' > $NGX30 #检索30秒钟内访问出错次数超过6次的IP地址加入防火墙策略 cat $NGX30 | while read line do errsum addrule 6 done # 执行第三次NGINX访问错误信息汇总 sleep 30 grep -ahvE "${GREP_VWORD}" $NGXLOG | cut -d'"' -f 1,3 | awk '{print $1,$7}' | grep -vE "${GREP_VCODE}" | \ awk '{sum[$1]++} END {for (i in sum) {print sum[i],i | "sort -nr -k 1"}}' | awk '{if ($1 > 5) print $0}' > $NGX60 #检索60秒钟内访问出错次数超过10次的IP地址加入防火墙策略 cat $NGX60 | while read line do errsum addrule 10 done |
Shell 脚本加密解密
gzexe加密解密 gzexe是Linux系统集成的工具,执行命令即可使用。 # 加密Shell脚本,源文件会改名为backup.sh~ [root@WEB1 ~]# gzexe ~/shell/ba 阅读全文