[Linux] 解决secureCRT 登录 Rocky Linux 9.1 报错 No compatible hostkey. The server supports these methods: rsa-sha2-512,rsa-sha2-256,ecdsa-sha2-nistp256,ssh-ed25519
- Key exchange failed. No compatible key exchange method. The server supports these methods: curve25519-sha256,curve25519-sha256@libssh.org,ecdh-sha2-nistp256,ecdh-sha2-nistp384,ecdh-sha2-nistp521,diffie-hellman-group-exchange-sha256,diffie-hellman-group14-sha256,diffie-hellman-group16-sha512,diffie-hellman-group18-sha512
- No compatible hostkey. The server supports these methods: rsa-sha2-512,rsa-sha2-256,ecdsa-sha2-nistp256,ssh-ed25519
1、通过web管理终端登录系统
编辑/etc/ssh/sshd_config
在最下面新增
- KexAlgorithms diffie-hellman-group1-sha1,diffie-hellman-group14-sha1,diffie-hellman-group-exchange-sha1,diffie-hellman-group-exchange-sha256,ecdh-sha2-nistp256,ecdh-sha2-nistp384,ecdh-sha2-nistp521,diffie-hellman-group1-sha1,curve25519-sha256@libssh.org
Rocky Linux-8.6 Docker安装
- yum install -y yum-utils device-mapper-persistent-data lvm2
- yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
- yum install docker-ce -y --allowerasing
- systemctl start docker
- systemctl enable docker
Nodejs搭建简单的websocket服务
一款移动端页面自适应布局解决方案
安装命令:npm install flexlibs -D
===============
以Vue3.0 为例,在mian.js中引入:
- // 设自适应插件库
- import 'flexible'
安装docker成功后,启动docker报错,解决方法
安装了docker 因服务器从公网(192.168.50.60)机房迁移到内网(192.168.190.60),更改了IP地址,环境就运行不起来了~
启动docker后执行 systemctl status docker 出现了异常,具体如下:
[root@joinApp2 ~]# systemctl status docker.service
● docker.service - Docker Application Container Engine
Loaded: loaded (/usr/lib/systemd/system/docker.service; enabled; vendor preset: disabled)
Active: failed (Result: start-limit) since Thu 2016-02-25 17:26:11 CST; 16s ago
Docs:
http://docs.docker.com Process: 16384 ExecStart=/usr/bin/docker daemon $OPTIONS $DOCKER_STORAGE_OPTIONS $DOCKER_NETWORK_OPTIONS $ADD_REGISTRY $BLOCK_REGISTRY $INSECURE_REGISTRY (code=exited, status=1/FAILURE)
Main PID: 16384 (code=exited, status=1/FAILURE)
Feb 25 17:26:10 joinApp2 systemd[1]: Failed to start Docker Application Container Engine.
Feb 25 17:26:10 joinApp2 systemd[1]: Unit docker.service entered failed state.
Feb 25 17:26:10 joinApp2 systemd[1]: docker.service failed.
Feb 25 17:26:11 joinApp2 systemd[1]: docker.service holdoff time over, scheduling restart.
Feb 25 17:26:11 joinApp2 systemd[1]: start request repeated too quickly for docker.service
Feb 25 17:26:11 joinApp2 systemd[1]: Failed to start Docker Application Container Engine.
Feb 25 17:26:11 joinApp2 systemd[1]: Unit docker.service entered failed state.
Feb 25 17:26:11 joinApp2 systemd[1]: docker.service failed.
当时问题没解决搁置了。
今天重新google , 解决了问题,现在贴下解决办法
vi /etc/sysconfig/selinux
把selinux后面的改为disabled,重启一波机器,再重启docker就可以了
解决方法二:
===================
CentOS简单配置防御ddos攻击
DDOS这种攻击的目的就是在短时间内制造数量巨大的并发连接,从而使用服务器down机或消耗掉网络带宽和系统资源导致正常用户无法正常访问浏览网站。
DoS Deflate 是一个轻量级阻止拒绝服务攻击的bash shell脚本。我们可以通过安装他并且简单配置来防御DDOS攻击。
首先安装命令:
- wget http://www.inetbase.com/scripts/ddos/install.sh
- chmod 700 install.sh
- ./install.sh
然后会自动进行安装,完成后会有一段版权提示与说明,按q键退出即可。
卸载命令:
- wget http://www.inetbase.com/scripts/ddos/uninstall.ddos
- chmod 700 uninstall.ddos
- ./uninstall.ddos
安装完成之后就可以通过简单配置来进行DDOS防御,我是用的是CentOS7操作系统配置文件目录是/usr/local/ddos/ddos.conf
或者也可以通过命令更改 vi /usr/local/ddos/ddos.conf 编辑完成后:wq保存退出
下面介绍一下ddos.conf的基本配置#为注释部分不用理会关键配置项有:
- PROGDIR="/usr/local/ddos" #文件存放目录
- PROG="/usr/local/ddos/ddos.sh" #主要功能脚本
- IGNORE_IP_LIST="/usr/local/ddos/ignore.ip.list" #可以设置IP白名单
- CRON="/etc/cron.d/ddos.cron" #crond定时任务脚本
- APF="/etc/apf/apf" #这两项应该分别对应使用APF或者iptables配置目录不过笔者
- IPT="/sbin/iptables" #尝试打开文件里边是乱码,有哪位大牛知道是干嘛的欢迎留言
- FREQ=1 #间隔多久检查一次,默认1分钟
- NO_OF_CONNECTIONS=150 #最大连接数设置,超过这个数字的IP就会被屏蔽
- APF_BAN=0 #1:使用APF,0:使用iptables,推荐使用iptables
- KILL=1 #是否屏蔽IP 1:屏蔽,0:不屏蔽
- EMAIL_TO="root" #发送电子邮件报警的邮箱地址,换成自己使用的邮箱
- BAN_PERIOD=600 #禁用IP时间,可根据情况调整,默认单位:秒
如果/usr/local/ddos/ddos.sh 统计不正确,可能是启用ipv6的缘故
vi /usr/local/ddos/ddos.sh 修改/usr/local/ddos/ddos.sh
117行的内容是这样的netstat -ntu | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -nr > $BAD_IP_LIST
修改为以下代码即可!
- netstat -ntu | awk '{print $5}' | cut -d: -f1 | sed -n '/[0-9]/p' | sort | uniq -c | sort -nr > $BAD_IP_LIST
CentOS7默认为Firewall为了配合使用DoS Deflate建议停用Firewall启用iptables,不会用iptables的朋友,百度一下有很多
查看最近已登录的是连接到服务器的最大数量的IP的列表
如何确认是否受到DDOS攻击?
登录到你的服务器以root用户执行下面的命令,使用它你可以检查你的服务器是在DDOS攻击与否:
- netstat -ntu | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -n
执行后,将会显示服务器上所有的每个IP多少个连接数。每个IP几个、十几个或几十个连接数都还算比较正常,如果像上面成百上千肯定就不正常了,该命令将显示已登录的是连接到服务器的最大数量的IP的列表。
另外还有其他情况,使DDOS变得更为复杂,因为攻击者在使用更少的连接,更多数量IP的攻击服务器的情况下,你得到的连接数量较少,即使你的服务器被攻击了。有一点很重要,你应该检查当前你的服务器活跃的连接信息,执行以下命令:
- netstat -n | grep :80 |wc –l
上面的命令将显示所有打开你的服务器的活跃连接。
您也可以使用如下命令:
- netstat -n | grep :80 | grep SYN |wc –l
从第一个命令有效连接的结果会有所不同,但如果它显示连接超过500,那么将肯定有问题。
如果第二个命令的结果是100或以上,那么服务器可能被同步攻击。
一旦你获得了攻击你的服务器的IP列表,你可以很容易地阻止它。
php json 处理gbk转码utf-8问题( json_encode转换数组,值为null)
遇到个很幼稚的问题,用json_encode把数组转换为json时,发现转化的值为null。怎么回事呢?查找手册:发现了下面的话:
- function encodeConvert($str,$fromCode,$toCode)
- {
- if (strtoupper($toCode) == strtoupper($fromCode)) return $str;
- if (is_string($str)) {
- if (function_exists('mb_convert_encoding')) {
- return mb_convert_encoding($str, $toCode, $fromCode);
- } else {
- return iconv($fromCode, $toCode, $str);
- }
- } elseif (is_array($str)) {
- foreach ($str as $k => $v) {
- $str[$k] = encodeConvert($v, $fromCode, $toCode);
- }
- return $str;
- }
- return $str;
- }
- $json_api=json_encode(encodeConvert($json_api,'gb2312','utf-8'));
- $json_api=json_decode(json_decode($json_api));
今天数组json_encode转json的时候,输出一片空白,难道是数据量太大了?导致输出空白了?
后来检查下php程序似乎没有出错,就是json_encode的时候出现了问题,那到底是什么问题呢?
我们先来说下json_encode这个函数
- (PHP 5 >= 5.2.0, PECL json >= 1.2.0, PHP 7)
- json_encode — 对变量进行 JSON 编码
- 说明
- -----------------------------------------------------------
- string json_encode ( mixed $value [, int $options = 0 [, int $depth = 512 ]] )
- 参数
- -----------------------------------------------------------
- value
- 待编码的 value ,除了resource 类型之外,可以为任何数据类型。
- 所有字符串数据的编码必须是 UTF-8。
- options
- 由以下常量组成的二进制掩码: JSON_HEX_QUOT, JSON_HEX_TAG, JSON_HEX_AMP, JSON_HEX_APOS, JSON_NUMERIC_CHECK, JSON_PRETTY_PRINT, JSON_UNESCAPED_SLASHES, JSON_FORCE_OBJECT, JSON_PRESERVE_ZERO_FRACTION, JSON_UNESCAPED_UNICODE, JSON_PARTIAL_OUTPUT_ON_ERROR。
- depth
- 设置最大深度。 必须大于0。
- 返回值
- -----------------------------------------------------------
- 成功则返回 JSON 编码的 string 或者在失败时返回 FALSE 。
注意:上面对参数明确说明(所有字符串数据的编码必须是 UTF-8)
可能正是因为这一点导致我输出错误,但是我怎么知道,会是这个错误呢?因为我发现有一个这个函数json_last_error
我们看下这个函数
- (PHP 5 >= 5.3.0, PHP 7)
- json_last_error — 返回最后发生的错误
- 说明
- -----------------------------------------------------------
- int json_last_error ( void )
- 如果有,返回 JSON 编码解码时最后发生的错误。
- 参数
- -----------------------------------------------------------
- 此函数没有参数。
- 返回值
- -----------------------------------------------------------
- 返回一个整型(integer),这个值会是以下的常量之一:
- 例如:
- echo json_encode(array('error' => '0', 'message' => '没有错误'));
- var_dump(json_last_error());
- //这里也可以是json_decode
- //错误码对照
- 0 JSON_ERROR_NONE
- 1 JSON_ERROR_DEPTH
- 2 JSON_ERROR_STATE_MISMATCH
- 3 JSON_ERROR_CTRL_CHAR
- 4 JSON_ERROR_SYNTAX
- 5 JSON_ERROR_UTF8
- 6 JSON_ERROR_RECURSION
- 7 JSON_ERROR_INF_OR_NAN
- 8 JSON_ERROR_UNSUPPORTED_TYPE
我返回的是 int 5,对照返回错误码,自然而然就是(异常的 UTF-8 字符,也许是因为不正确的编码)这个错误了,知道错误后,然后检查你要返回的数据,再做下处理就OK了。
快速对字符转义,避免跨站攻击XSS
XSS已经成为非常流行的网站攻击方式,为了安全起见,尽量避免用户的输入。可是有些情况下不仅不避免,反而要求鼓励输入,比如写博客。博客园开放性很高,可以运行手写的JS。之前比较著名的例子就是,凡是看到某一篇文章的,都自动关注他。
如果避免跨站攻击的话,我们就得对用户的输入,进行转义。例如<script type='text/javascript'>alert('hello world')</script>。如果直接保存这个字符串的话,然后再输出的话,就会运行JS了。我们需要将这个字符串转义成"<script type='text/javascript'>alert('hello world')</script>"。
转义,就是一个个字符的匹配,然后转换。看着不难,但是需要转义的字符也不少。另外当字符数量大的时候,效率成为一个问题。下面我写一个函数,让浏览器底层帮我们做到。
- function stringEncode(str){
- var div=document.createElement('div');
- if(div.innerText){
- div.innerText=str;
- }else{
- div.textContent=str;//Support firefox
- }
- return div.innerHTML;
- }
xss漏洞以及防御实现
XSS三种类型
- 存储型XSS:数据库中存在XSS攻击的数据,若数据未经过任何转义,返回给客户端。被浏览器渲染,就可能导致XSS攻击
- 反射型XSS:将用户输入的存在XSS攻击的数据,发送给服务端,服务端并未对数据进行存储,也未经过任何转义,直接返回给客户端。被浏览器渲染。就可能导致XSS攻击
- 纯粹发生在客户端的XSS攻击
XSS攻击演示
假设用户输入的参数为:
- <script>alert(xss)</script>
如果后台没有对该数据做任何过滤直接显示到前端<div>标签中的话,源代码就变成了这样:
- <div><script>alert(xss)</script><div>
那么在前端显示出来的是一个写着xss的弹窗,就发生了xss攻击
防御方案
我在项目中的主要的防御方案是对数据的过滤,对于数据中的危险字符进行相应的转义:
- &----->&
- <-----><
- >----->>
- "----->"
- '----->'
- /----->/