首页 文章 精选 留言 我的

精选列表

搜索[快速],共10000篇文章
优秀的个人博客,低调大师

201703深圳云栖大会Workshop-云盾WAF快速入门

目标 熟悉Web应用防火墙的架构 配置目标站点接入WAF 测试精准防护和日志检索功能 WAF的接入和防护架构 WAF采用反向代理的接入架构,通过修改防护域名的DNS解析到WAF而将流量牵引到WAF,通过各种防护模块过滤掉恶意流量后,再把正常请求转发回源站。 配置接入WAF 登录阿里云控制台,找到云盾->Web应用防火墙->域名配置,输入相关的域名及源站信息,并点击“添加域名”按钮: 注意事项: 支持配置泛域名,如*.aliyundemo.cn,可以匹配相关的二级域名。当同时配置泛域名和精确域名时,转发和防护策略匹配顺序以精确域名优先 如果有HTTPS站点,务必勾选HTTPS,同时建议勾选HTTP,以应对HTTP跳转等问题,同时需要在稍后上传源站证书和密钥(实验中我们只勾选HTTP) 源站IP可以支持最多20个,WAF会做负载均衡和健康检查,详情见“源站IP负载均衡” 如WAF前面还有CDN、高防等七层代理,务必勾选“是否已使用代理”,这样才能取到客户端真实IP,不然看到的都是上一级代理的IP 添加好域名后,会弹出选择解析方式的弹窗,为了更好的演示接入原理,这里选择手动修改: 配置好域名后,WAF会自动分配给当前域名一个CNAME,可点击域名信息来查看: 接下来我们登录万网控制台,找到对应域名的“域名解析”->“解析设置”,正常情况下会有已经存在的一些解析,如下图: 接下来需要将记录类型改成CNAME,记录值改成WAF控制台提供的CNAME,如下图: 开启日志检索 在刚配置好的域名->业务状态中,找到日志检索并打开: 配置并体验精准防护规则 精准访问控制规则允许用户基于HTTP头部的各个字段自由组合各种访问控制规则: 找到防护域名,点击“防护配置”,进入“精准访问控制规则”即可配置。您可以自由尝试各种条件,匹配的内容大小写不敏感,匹配按照从上到下的优先级。详细的配置方式请参考这里:https://help.aliyun.com/document_detail/42780.html 配置好后一般3分钟内即可生效,您可以手动构造一些请求来验证防护效果,如果匹配中拦截,预期访问会被WAF拦截并弹出405拦截页面: 同时,您也可以在日志检索中看一下拦截的具体请求,以及匹配中访问控制规则的情况: 以上是基本配置和功能演示,您可以结合自身业务特征,尝试更多的防护功能,欢迎随时与我们交流:https://help.aliyun.com/knowledge_detail/44036.html

优秀的个人博客,低调大师

使用mail.rc快速配置linux发邮件服务

1.系统环境。 [root@web02~]#cat/etc/redhat-release CentOSrelease6.8(Final) [root@web02~]#uname-r 2.6.32-642.el6.x86_64 [root@web02~]#uname-m x86_64 2.通过修改配置文件/etc/mail.rc可以使用外部SMTP服务器,轻松实现linux发邮件功能。 [root@web02~]#tail/etc/mail.rc #ForLinuxandBSD,thisshouldbeset. setbsdcompat #sendmailconfig setfrom=user@foxmail.com setsmtp=smtp.qq.com setsmtp-auth-user=user@foxmail.com setsmtp-auth-password=xxxxxxxxxxxxxxx setsmtp-auth=login 注意:目前大部分的外部邮件服务使用第三方客户端时,都需要使用授权码,上面的smtp-auth-password使用的就是授权码,而不是邮件帐号的密码。 3.相关命令和选项的作用。 -s<邮件主题>:指定邮件的主题; -c<地址>:添加邮件抄送人,多个人时用逗号隔开; -b<地址>:添加邮件暗送人; -a<附件>:添加附件Attachthegivenfiletothemessage. (1)方法一:正文内容重定向输入。 [root@web02~]#mail-s"标题"-a/etc/hosts-cuser1@163.com,user2@163.comuser@foxmail.com</etc/hosts #当主送和抄送有多个人时,请使用逗号隔开。 (2)方法二:正文内容通过echo命令输入。 [root@web02~]#echo"正文"|mail-s"标题"-a/etc/hosts-cuser1@163.com,user2@163.comuser@foxmail.com 4.启动postfix服务 [root@web02~]#/etc/init.d/postfixstart Startingpostfix:[OK] [root@mysql01~]#chkconfig--level3postfixon [root@mysql01~]#chkconfig|greppostfix postfix0:off1:off2:off3:on4:off5:off6:off 到此为止,发邮件配置完毕。可以正常测试。

优秀的个人博客,低调大师

Android小技巧之最快速简单的悬浮TAB

先看效果图吧 image 原理 其实实现这样的效果是十分的简单的,继承ScrollView,监听onScrollChanged,根据滑动的距离,不断的layout需要悬浮的tab的位置。这只是一个简单的demo,主要提供的是一种思路,利用到实际中还是有点距离。 编码 继承ScrollView,暴露一个外接口,重写onScrollChanged方法,向接口提供scrollY位置。 getViewTreeObserver().addOnGlobalLayoutListener,通过添加视图观察者监听来初始化tab的位置。 public class ScrollLevitateTabView extends ScrollView { private OnScrollLintener onScrollLintener; public void setOnScrollLintener(OnScrollLintener onScrollLintener) { this.onScrollLintener = onScrollLintener; } public ScrollLevitateTabView(Context context) { this(context,null); } public ScrollLevitateTabView(Context context, AttributeSet attrs) { this(context, attrs,0); } public ScrollLevitateTabView(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); init(); } private void init() { //增加视图监听 在整个视图树绘制完成后会回调 getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() { @Override public void onGlobalLayout() { onScrollLintener.onScroll(getScrollY()); } }); } @Override protected void onScrollChanged(int l, int t, int oldl, int oldt) { super.onScrollChanged(l, t, oldl, oldt); if (onScrollLintener != null) { onScrollLintener.onScroll(t); } } public interface OnScrollLintener{ void onScroll(int scrollY); } } 布局中使用 直接将ScrollLevitateTabView作为根布局,嵌套一个FrameLayout方便更改tab的位置。FrameLayout中放真正的tab,嵌套的其它ViewGroup中正常布局,必须留有一个TAB的占位View <?xml version="1.0" encoding="utf-8"?> <aohanyao.com.scolltabview.ScrollLevitateTabView xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/sltv" android:layout_width="match_parent" android:layout_height="match_parent"> <FrameLayout android:layout_width="match_parent" android:layout_height="wrap_content"> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="vertical"> ................放自己的View <!--占位的Tab--> <TextView android:id="@+id/flow_tab2" android:layout_width="match_parent" android:layout_height="48dp" android:textColor="#fff" android:textSize="20sp" /> <!--占位的Tab--> ................放自己的View </LinearLayout> <!--真正的Tab--> <TextView android:id="@+id/flow_tab" android:layout_width="match_parent" android:layout_height="48dp" android:background="#03a9f4" android:gravity="center" android:text="这里是悬浮的TAB" android:textColor="#fff" android:textSize="20sp" /> <!--真正的Tab--> </FrameLayout> </aohanyao.com.scolltabview.ScrollLevitateTabView> MainActivity 没什么代码量,FVB和设置滑动监听,然后在回调方法中不断的layout真正tab的位置 public class MainActivity extends AppCompatActivity implements ScrollLevitateTabView.OnScrollLintener { //外层的ScrollView private ScrollLevitateTabView sltv; //真正的Tab private TextView flow_tab; //占位的Tab private TextView flow_tab2; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); flow_tab = (TextView) findViewById(R.id.flow_tab); flow_tab2 = (TextView) findViewById(R.id.flow_tab2); sltv = (ScrollLevitateTabView) findViewById(R.id.sltv); //设置监听 sltv.setOnScrollLintener(this); } @Override public void onScroll(int scrollY) { //layout Tab的位置 int top = Math.max(scrollY, flow_tab2.getTop()); flow_tab.layout(0, top, flow_tab.getWidth(), top + flow_tab.getHeight()); } } 最终就能达到效果了。 源码地址

优秀的个人博客,低调大师

小黑的日常折腾-快速建立私有CA的shell脚本

小黑又开始折腾新的东西了,上周刚学习完openssl建设私有CA,周六就花了点时间写了这个脚本,时间仓促,搞完就去撸DNS了,如果有啥BUG请见谅,本脚本纯属练习,用来练openssl、awk、sed等知识点。 先来介绍下建设私有CA的简单步骤(以下路劲为默认安装路径): (1) 生成私钥; ~]# (umask 077; openssl genrsa -out /etc/pki/CA/private/cakey.pem 4096) (2) 生成自签证书; ~]# openssl req -new -x509 -key /etc/pki/CA/private/cakey.pem -out /etc/pki/CA/cacert.pem -days 3655 -new:生成新证书签署请求; -x509:生成自签格式证书,专用于创建私有CA时; -key:生成请求时用到的私有文件路径; -out:生成的请求文件路径;如果自签操作将直接生成签署过的证书; -days:证书的有效时长,单位是day; (3) 为CA提供所需的目录及文件; ~]# mkdir -pv /etc/pki/CA/{certs,crl,newcerts} ~]# touch /etc/pki/CA/{serial,index.txt} ~]# echo 01 > /etc/pki/CA/serial 本脚本通过分析openssl.conf文件来得到相关路径,再通过命令建设私有CA,自签证书的相关信息通过数组保存通过echo命令传给生成自签证书的命令。具体的脚本内容如下: #!/bin/bash #Program: #ThisprogramisusedtocreatCA #History: #2016/4/9xiaoheiv1.0 #blog:http://zww577593841.blog.51cto.com/6145493/1750689 # #私有CA存放目录 #dir #已颁发的证书的存放目录 #certs #已吊销的证书的存放目录 #crl_dir #新证书的存放目录 #new_certs_dir #当前证书的序列号保存文件 #serial #已颁发证书的索引文件 #database #CA的自签证书 #certificate #CA的私钥 #private_key #openssl.conf配置文件的位置 declareconffile=/etc/pki/tls/openssl.cnf #定义一个数组保存CA配置文件中需要保存的一些属性名称 declare-avar var=("dir""certs""crl_dir""new_certs_dir""serial""database""certificate""private_key") #临时文件和目录 declare-atempfile tempfile=("./ca_default.txt""./ca_value.txt") #必要的文件和目录 declare-acreatfile declare-acreatdir creatfile=("serial""database") creatdir=("certs""crl_dir""new_certs_dir") #openssl.conf关于CA的相关属性 declare-Aca #自签证书需要填写的信息:国家(大写的两个字母);省;市;公司;部门;主机名;邮箱(可选) cainfo=("CN""Beijing""Beijing""blackboy""ops""ca.blackboy.com""blackboy@163.com") #信号捕捉 trap'mytrap'INT mytrap(){ clean_temp echo-e"\033[31mexit\033[0m" exit } #清理临时文件和变量及数组 clean_temp(){ for((i=0;i<${#tempfile[*]};i++));do mv-f${tempfile[$i]}/tmp/ done unset-vconffile unset-vvar unset-vtempfile unset-vca unset-vcreatfile unset-vcreatdir unset-vcainfo } #分析文件或者目录是否存在 analyse_file_dir(){ if[-f"$1"];then echo-e"\033[32mfile$1exist\033[0m" return0 elif[-d"$1"];then echo-e"\033[32m$1isexist\033[0m" return0 else echo-e"\033[31m$1isnotexist\033[0m" return1 fi } #创建需要的文件 creat_file(){ touch"$1" analyse_file_dir"$1"&>/dev/null&&echo-e"\033[32mcreat$1successful\033[0m"||return1 return0 } #创建需要的目录 creat_dir(){ mkdir-pv"$1" analyse_file_dir"$1"&>/dev/null&&echo-e"\033[33mcreat$1successful\033[0m"||return1 return0 } #分析并获得conffile变量保存的路径所指的openssl.conf文件的一些信息 analyse_conf(){ analyse_file_dir$1||exit1 #通过sed获得配置文件自己需要的部分的内容 sed-n'/\[CA_default/,/##/s@[#].*@@gp'$1|sed's/=/=/g'>${tempfile[0]} #通过awk格式化上步得到内容并保存到临时文件中 awk'/^[^[:space:]]/{a[$1]=$3}END{for(iina){printf""i"=%s\n",a[i]};}'${tempfile[0]}>${tempfile[1]} #定义局部变量保存dir项的路径 localdir=$(sed-n's/^dir=//p'${tempfile[1]}) #配置文件中$dir代替了dir的路径,还原为其真实路径,并保存在临时文件中 sed-i"s@[$]dir@$dir@g"${tempfile[1]} echo"ThecurrentOpenSSLconfiguration" cat./ca_value.txt echo"#################################" #把配置文件中查找到的属性信息保存到关联数组中 for((i=0;i<${#var[*]};i++));do ca["${var[$i]}"]=$(awk-F"="'{if($1~/^'${var[$i]}'$/){print$2}}'${tempfile[1]}) done } #创建私钥 creat_private_key(){ #取文件所在目录名,如果目录不存在则创建 analyse_file_dir${1%/*}||creat_dir${1%/*}||return1 #创建私钥,大小为4096,并将创建的私钥文件的权限设置为只有当前用户可读写 (umask077;opensslgenrsa-out$14096) #分析私钥是否创建完成 analyse_file_dir$1&>/dev/null&&echo-e"\033[32mcreatprivatekeysuccessful\033[0m"||return1 echo"ok" return0 } #生成自签证书 creat_cacert(){ localinfo #生成签发证书时要填写的信息 for((i=0;i<${#cainfo[*]};i++));do info="$info${cainfo[$i]}\n" done #签发证书 echo-e"$info"|opensslreq-new-x509-key$1-out$2-days3655 #分析证书是否正常生成 analyse_file_dir$2&>/dev/null&&echo-e"\033[32mcreatcacertsuccessful\033[0m"||return1 } #如果openssl.conf文件不存在直接退出 analyse_conf$conffile||exit1 #创建必要的文件和目录,如果创建失败则退出 for((i=0;i<${#creatfile[*]};i++));do analyse_file_dir${ca[${creatfile[$i]}]}||creat_file${ca[${creatfile[$i]}]}||exit1 done for((i=0;i<${#creatdir[*]};i++));do analyse_file_dir${ca[${creatdir[$i]}]}||creat_dir${ca[${creatdir[$i]}]}||exit1 done #向证书编号文件serial中添加编号 echo"01>>>>>${ca[serial]}" echo"01">${ca[serial]} #调用函数创建CA的私钥 creat_private_key${ca[private_key]}||exit1 #创建CA自签证书 creat_cacert${ca[private_key]}${ca[certificate]}||exit1 #查看证书内容 opensslx509-in${ca[certificate]}-noout-serial-subject #清理安装过程中生成的变量、数组、和临时文件 clean_temp 脚本的运行结果如下: 时间仓促,未解释的部分,请见谅。

资源下载

更多资源
优质分享App

优质分享App

近一个月的开发和优化,本站点的第一个app全新上线。该app采用极致压缩,本体才4.36MB。系统里面做了大量数据访问、缓存优化。方便用户在手机上查看文章。后续会推出HarmonyOS的适配版本。

Nacos

Nacos

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service 的首字母简称,一个易于构建 AI Agent 应用的动态服务发现、配置管理和AI智能体管理平台。Nacos 致力于帮助您发现、配置和管理微服务及AI智能体应用。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据、流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。

Spring

Spring

Spring框架(Spring Framework)是由Rod Johnson于2002年提出的开源Java企业级应用框架,旨在通过使用JavaBean替代传统EJB实现方式降低企业级编程开发的复杂性。该框架基于简单性、可测试性和松耦合性设计理念,提供核心容器、应用上下文、数据访问集成等模块,支持整合Hibernate、Struts等第三方框架,其适用范围不仅限于服务器端开发,绝大多数Java应用均可从中受益。

Sublime Text

Sublime Text

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。

用户登录
用户注册