BlueXIII's Blog

热爱技术,持续学习

0%

下载PandoraBox固件

http://downloads.pandorabox.com.cn/pandorabox/

小米路由刷ROM

mtd -r write /tmp/PandoraBox-ralink-xiaomi-mini-r355-20150114.bin firmware

设置时间

date -s “2016-11-11 19:52:00”

配置opkg源及兼容性

vi /etc/opkg.conf
src/gz pandorabox http://downloads.openwrt.org.cn/PandoraBox/ralink/mt7620/packages
dest root /
dest ram /tmp
lists_dir ext /var/opkg-lists
option overlay_root /overlay
arch all 100
arch noarch 200
arch ralink 300
arch ramips_24kec 400

查看连接主机

cat /proc/net/arp
cat /tmp/dhcp.leases

查看连接数

netstat -na|grep ESTABLISHED|wc -l
netstat -na|grep 192.168.32.142|wc -l

开机自启脚本

/etc/rc.local

限制MAC地址

iptables -A INPUT -m mac –mac-source 00:0F:EA:91:04:08 -j DROP

配置ChinaDNS

https://github.com/clowwindy/ChinaDNS

配置RedSocks

https://github.com/darkk/redsocks

这是个什么东西?

简单来说,我们要做一台比较特别的”路由器”

什么是树莓派?

Raspberry Pi,中文名为“树莓派”,可以认为是一个功能强大的ARM单片机开发板,也可以认为是一台只有信用卡大小的电脑。因为可以安装嵌入式Linux,所以扩展性极强。

这里是树莓派的官网

这里是树莓派的WIKI

这里是树莓派在知乎上的问答

外观大概是这个样子,只是一块电路版,但是麻雀虽小,五脏俱全:
外观

下面是3代ModelB的硬件配置,可以用奢侈来形容了:
硬件配置

树莓派因为有强大的硬件做为支撑,还提供了CPIO、摄像头等丰富的接口,我们可以随意发挥想像力去折腾了。
和外部硬件的结合也很方便,只需要用Python就可以控制CPIO引脚的电平,从而控制外围硬件,再也不用像51单片机时代一样去写汇编或者C了。

树莓派可以这样玩:

玩法1

也可以这样玩:

玩法2

还可以这样玩:

玩法3

什么是SOCKS5透明网关?

还是先扔几个名词解释出来:

  • 代理服务器:ProxyServer,其功能就是代理用户去取得网络信息,它是网络信息的中转站。按类型分,有HTTP、HTTPS、FTP、SOCKS等。我们使用浏览器在内网环境中上网时,大概都会接触到它,应该并不陌生。
  • SOCKS代理:SOCKS是”SOCKetS”的缩写。它是一种网络传输协议,主要用于客户端与外网服务器之间通讯的中间传递。当防火墙后的客户端要访问外部的服务器时,就跟SOCKS代理服务器连接。这个代理服务器控制客户端访问外网的资格,允许的话,就将客户端的请求发往外部的服务器。它分SOCKS4和SOCKS5两种类型,SOCKS4只支持TCP协议而SOCKS5支持TCP/UDP协议,还支持各种身份验证机制等协议。其标准端口为1080。但这里注意一下,SOCKS5仍然是不支持ICMP的,这就意味着我们接下来做的网关有一个硬伤:没办法ping了。。。不过还好影响不大。
  • 透明网关: 透明网关,也可以叫透明代理,它的意思是客户端根本不需要知道有代理服务器的存在,你只需要把网关的IP改成它的IP,对客户端来说,它就是一台路由器。

所以综合来说,我们如果想要在内网环境中,以直连的方式访问Internet,但又不想在每个客户端上手工配置SOCKS5代理的话,就需要搭建这样一台透明网关,它把SOCKS5变得透明化,从而让客户端们意识不到是在使用代理服务器在上网。

其实,如果把这个工作(代理透明化)放在客户端(PC/Mac)上来做的话,办法还是很多的,例如像Proxifier这样的商业软件,还有Linux下的proxychains这样的小工具。
但现在我们要制做一台”路由器”,使其下的所有设备,包括PC、也包括手机、iPad等移动设备,无须设置,就可以直连上网。

搞这么麻烦,目的是什么?

因为在山东联通办公区的DCN内网中,正常来说,是无法连接到Internet的,唯一合法的途径是使用一台已知的代理服务器(非法途径也有很多,暂且不表)。
我们目前的营销助手项目中,有两个APP客户端,经常需要安装到手机中进行真机调试,而调试是需要直连Internet的。
在开发资源有限,局方不提供WIFI的情况下,使用我们自已的SIM卡流量费用太高负担不起,所以搭建一台合法的透明网关几乎成了唯一的选择。

实现思路

  • 使用iptables,将本机所有TCP流量转发到RedSocks的端口
  • RedSocks将所有流量转发到内网的SOCKS5代理服务器
  • 使用dnsmasq对外提供DNS服务

还有其它的方案吗?

有。其实之前已经使用小米路由器mini,将固件刷成OpenWrt(PandoraBox),配置了一台透明网关,里面跑了一个RedSocks。
但无奈路由器的性能太差,CPU常常跑满,连接设备过多的时候会进程还会挂掉。
正好手头有一个树莓派,顺势折腾一下吧。因为有Raspbian系统,比起OpenWrt来还是要简单不少的。

正式开始,首先,你需要购买一台树莓派

在马云家搜索树莓派即可,最新的型号是3代ModelB,价格大约200RMB左右。
另外需要买一张TF卡,或者用以前淘汰下来的卡也行,容量不用太大,8G以上就可以。
电源基本上不用另配,使用普通的手机充电器。另外买一个亚克力的盒子,稍微保护一下电路版即可。
因为3代的SOC发热量比较大,夏天可以考虑加装一个风扇,可以在CPIO口上取5V的电。

点亮树莓派

树莓派的官方支持非常好,目前已经有多个Linux系统可以选,官方主推的是Raspbian,一个基于Debian的发行版。
如果之前玩过Ubuntu的话,上手应该非常容易了。如果之前常用RedHat/CentOS/Fedora的话,大概要适应一会儿,毕竟是不同派系。

这里是Raspbian的NOOBS的下载地址

这个NOOBS是一个傻瓜版的安装镜像,将它放到SD卡的根目录(SD卡可以使用FAT32格式化),记得接上鼠标和键盘,用HDMI连接显示器。
然后,开机,自动运行安装程序,图形界面点两下鼠标,不能再简单。这也是树莓派比其它类似产品,比如香蕉派好的地方:官方良好的支持,还有非常活跃的社区,出了问题很容易找到答案。

安装过程大概是这个样子,10分钟左右就结束了:
安装过程

运行系统设置工具

进入系统之后,第一件事当然是运行sudo raspi-config,进行一些基本的设置,例如初始化密码,设置时区等
raspi-config界面

在这里可以顺便改改runlevel,选第一项。修改/etc/inittab,也可以达到同样目的。
cli

另外建议将语言改为英文,因为你会发现中文报错才是真心看不懂,而且出了问题不方便在社区或google中搜索。

配置网络连接

vi /etc/network/interfaces

1
2
3
4
5
6
auto eth0
iface eth0 inet static
address xxx.xxx.xxx.xxx
netmask 255.255.xxx.xxx
gateway xxx.xxx.xxx.xxx
dns-nameservers xxx.xxx.xxx.xxx

记得一定加上auto eth0,否则重启后,网卡不会自动启动,如果没有接显示器就麻烦了。

手工启动网卡:

1
sudo ifup eth0

手工重启网络服务:

1
sudo /etc/init.d/networking restart

配置好网络后,终于可以将显示器、键盘鼠标拨掉了。从现在开始,可以把树莓派单独扔到一个小角落里,用SSH远程连接了。

SSH远程连接

默认用户名是pi

1
ssh pi@xxx.xxx.xxx.xxx

另外还可以建立信任关系,免密码登录

1
2
ssh-keygen -t rsa
ssh-copy-id -i pi@xxx.xxx.xxx.xxx

还可以建一个别外,SSH连IP都不用输了,直接ssh raspi登录
vi ~/.ssh/config

1
2
3
Host raspi
HostName xxx.xxx.xxx.xxx
User pi

修复ping权限

目前最新版本的Raspbian中,有一个BUG,非ROOT用户无法使用ping,通过chmod改下权限即可

1
2
ls -lsa /bin/ping
sudo chmod 4711 /bin/ping

设置代理服务器

由于我们的PI目前是处在内网环境的,如果想连网更新软件包,或者wget下载的话,就需要先设置代理

  • 设置环境变量:
    sudo vi /etc/environment
    1
    2
    export http_proxy="http://xxx.xxx.xxx.xxx:xxxx"
    export https_proxy="http://xxx.xxx.xxx.xxx:xxxx"
  • 设置apt代理:
    1
    2
    3
    sudo vi /etc/apt/apt.conf.d/10proxy
    Acquire::http::Proxy "http://xxx.xxx.xxx.xxx:xxxx/";
    Acquire::https::Proxy "http://xxx.xxx.xxx.xxx:xxxx/";
    从现在开始,我们就可以愉快的使用apt-get下载安装软件包了。

apt-get使用阿里云镜像

因为国情关系,我们访问apt源时总会被各种干扰,DNS污染和一定概率的丢包等。
这里可以把apt源的地址指向阿里云的镜像,阿里云速度还是很快的,同步也很及时。感谢阿里为开源社区所做的贡献。

sudo vi /etc/apt/sources.list

1
2
deb http://mirrors.aliyun.com/raspbian/raspbian/ wheezy main non-free contrib
deb-src http://mirrors.aliyun.com/raspbian/raspbian/ wheezy main non-free contrib

用apt安装一些常用工具吧

这里推荐一下oh-my-zsh,来替代bash,可以让接下来操作酸爽无比。

1
2
sudo apt-get install zsh git wget
wget --no-check-certificate https://github.com/robbyrussell/oh-my-zsh/raw/master/tools/install.sh -O - | sh

其它的,比如build-essential,pip,node之类的按需安装即可。

开启IPV4转发

Linux系统实现路由功能简单的很,内核默认就支持,只要开启路由转发功能可以了。

临时修改:sudo echo "1" > /proc/sys/net/ipv4/ip_forward

永久修改:sudo vi /etc/sysctl.conf
添加一行:net.ipv4.ip_forward=1
使其生效:sysctl -p /etc/sysctl.conf

编译安装redsocks

接下来终于轮到我们这次实现透明网关的主角:redsocks
这里是redsocks的GitHub主页
直接贴简介,懒得翻译了:
This tool allows you to redirect any TCP connection to SOCKS or HTTPS
proxy using your firewall, so redirection is system-wide.

PI上的apt源里的redsocks版本可能比较老,最好不要通过apt安装,可以直接在github上下载源码编译安装。

  • 首先将源码克隆到本地:
    git clone https://github.com/darkk/redsocks
  • 编译
    没有configure,直接make即可。如果缺少依赖的话,使用apt安装即可。
  • 安装
    将编译出来的redsocks二进制文件扔到/usr/local/bin下
  • 配置
    sudo vi /etc/redsocks.conf
    下面是一个最简配置,注意一下local_port = 3128是在本机开的端口,接下来配置iptables时要用到
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    base {
    log_debug = off;
    log_info = on;
    log = "file:/home/pi/redsocks/logs/redsocks.log";
    daemon = off;
    redirector = iptables;
    }
    redsocks {
    local_ip = xxx.xxx.xxx.xxx;
    local_port = 3128;
    ip = xxx.xxx.xxx.xxx;
    port = 1080;
    type = socks5;
    }

    将redsocks做成系统服务

    可以顺便写一下init.d脚本,将redsocks做成系统服务。配置成开机自启就可以了。
    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
    #!/bin/sh

    ### BEGIN INIT INFO
    # Provides: redsocks
    # Required-Start: $network
    # Required-Stop: $network
    # Default-Start: 2 3 4 5
    # Default-Stop: 0 1 6
    # Short-Description: Start redsocks daemon.
    ### END INIT INFO

    SERVICE_NAME=redsocks
    SERVICE_PATH=/usr/local/bin/redsocks
    SERVICE_PARAM="-c /etc/redsocks.conf"
    SERVICE_HOME=/home/pi
    SERVICE_USER=pi
    SERVICE_PID_FILE=/var/run/${SERVICE_NAME}.pid

    start() {
    start-stop-daemon --start \
    --chdir "${SERVICE_HOME}" \
    --chuid "${SERVICE_USER}" \
    --user "${SERVICE_USER}" \
    -b -m -p "${SERVICE_PID_FILE}" \
    --exec ${SERVICE_PATH} -- ${SERVICE_PARAM}
    }

    stop() {
    start-stop-daemon --stop \
    --chdir "${SERVICE_HOME}" \
    --chuid "${SERVICE_USER}" \
    --user "${SERVICE_USER}" \
    -p "${SERVICE_PID_FILE}"
    }

    case "$1" in
    start)
    start
    ;;
    stop)
    stop
    ;;
    restart)
    stop
    start
    ;;
    status)
    # code to check status of app comes here
    # example: status program_name
    ;;
    *)
    echo "Usage: $0 {start|stop|status|restart}"
    esac

    exit 0

    配置iptables规则

    然后是iptables实现NAT的配置。
    iptables的东西太多太复杂了,好多东西我都是一知半解。
    下面贴一下最简配置吧:
    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
    iptables -F
    iptables -X
    iptables -Z

    iptables -P INPUT DROP
    iptables -P OUTPUT ACCEPT
    iptables -P FORWARD ACCEPT

    iptables -A INPUT -m state --state NEW,ESTABLISHED -j ACCEPT
    iptables -A INPUT -p icmp -j ACCEPT
    iptables -A INPUT -p tcp --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT
    iptables -A INPUT -p tcp --dport 3128 -m state --state NEW,ESTABLISHED -j ACCEPT

    iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -j MASQUERADE
    iptables -t nat -N REDSOCKS

    iptables -t nat -A REDSOCKS -d 127.0.0.1 -j RETURN
    iptables -t nat -A REDSOCKS -d 10.0.0.0/8 -j RETURN
    iptables -t nat -A REDSOCKS -d 172.0.0.0/8 -j RETURN
    iptables -t nat -A REDSOCKS -d 192.168.0.0/16 -j RETURN
    iptables -t nat -A REDSOCKS -d 132.0.0.0/8 -j RETURN
    iptables -t nat -A REDSOCKS -d 134.0.0.0/8 -j RETURN

    iptables -t nat -A SS -p tcp -j REDIRECT --to-port 3128

    iptables -t nat -A PREROUTING -p tcp -j SS
    iptables -t nat -A OUTPUT -p tcp -j SS
    注意:
  • 使用iptables -t nat -A REDSOCKS -d 134.0.0.0/8 -j RETURN,将不需要走代理的网段剔除
  • 使用iptables -t nat -A SS -p tcp -j REDIRECT --to-port 3128,将TCP包指向刚才redsocks的3128端口
  • 尽量不要在rc.local中使用iptables-restore方式自动执行,做成shell脚本手工启动比较保险。如果是在没有外接显示器的路由器openwrt中,配错了iptables,就等于变砖了,只能重刷。

使用dnsmasq架设DNS服务器

额外想提供一下DNS服务的话,装一个dnsmasq即可。

1
sudo apt install dnsmasq

如果想翻填,对付GFW的污染,dnsmasq具体配置还是比较麻烦的。但现在只需要向上级DNS转发即可,不需要配置,装好后直接启服务。

大功告成

接下来,把我们自已的PC上的网关,改为树莓派的IP,就可以透明上网了。
类似的,可以将无线路由器的WAN口配置成static,网关IP填成树莓派的IP,手机就可以使用WIFI了。

接下来还能玩什么

  • 使用openvpn并配置iptables规则,不需要在PC上使用VPN客户端拨号,直接连入公司172.X内网。
  • 使用shadowsocks客户端,并配合国外VPS上的搭建的服务端翻墙。加入iptables规则后,可以只针对国外IP段,有选择性的翻墙。
  • 使用chinadns配合dnsmasq解决GFW的DNS污染问题。
  • 使用ssh隧道进行内网渗透,绕过4A平台限制(这个貌似非法,暂不尝试了)
  • 使用ngrok实现内网穿透(这个风险太大,千万不要尝试)

参考文献

Raspberry Pi入门指南

TCP/IP入门经典

关于作者

BlueXIII,一枚喜欢折腾软硬件的小Geek,ACG死宅,懂点汽车驾驶以及摩托车维修,能写代码,会修电脑。
GitHub
简书

通用操作

后台批杀进程

1
ps -ef|grep java|grep webapp|grep -v grep|awk '{print $2}'|xargs kill

简单环境变量

1
2
3
4
export LANG=C
export PS1='[\u@\H $PWD]\$'
stty erase ^H
stty erase ^?

注意:LANG=C在HP主机上可以解决乱码文件导致的server无法stage的启动问题,但Linux下似乎无效。

生产环境分布式部署

  1. 仅在管理Machine上建立Domain,有且只有一个AdminServer
  2. 被管Machine上不需要新建Domain,但需要启动NodeManager并nmEnroll()到AdminServer
  3. Deployment方式,因为有文件乱码,选择第3项 I will make the deployment accessible from the following location。但正式部署时建议选择第二项Copy this application onto every target for me!方便版本发布。

Linux主机需优化启动参数配置

  1. commEnv.sh
    1
    2
    3
    4
    vi /bea/weblogic/wlserver_10.3/common/bin/commEnv.sh  
    约180行,在export JAVA_VM MEM_ARGS JAVA_OPTIONS前新增两行
    MEM_ARGS="-Xms32m -Xmx200m -XX:MaxPermSize=128m"
    JAVA_OPTIONS="${JAVA_OPTIONS} -Djava.security.egd=file:/dev/zero"
  2. startNodeManager.sh
    1
    2
    3
    4
    5
    vi /bea/weblogic/wlserver_10.3/server/bin/startNodeManager.sh  
    约80行,新增以下内容
    MEM_ARGS="-Xms512m -Xmx512m -XX:MaxPermSize=200m"
    JAVA_OPTIONS="${JAVA_OPTIONS} -Djava.security.egd=file:/dev/zero"
    export MEM_ARGS JAVA_OPTIONS
  3. setDomainEnv.sh
    1
    2
    3
    4
    vi /ngbss/webapp/domains/BSSTST/bin/setDomainEnv.sh  
    约375行 进行修改
    JAVA_OPTIONS="${JAVA_OPTIONS} -Djava.security.egd=file:/dev/zero"
    export JAVA_OPTIONS

    管理Machine上操作

    建立domain

    1
    /bea/weblogic/wlserver_10.3/common/bin/config.sh
    注意:将最新的boss.flds上传到domain下!

启动AdminServer

1
2
3
cat>start.sh
nohup ./startWebLogic.sh>start.log 2>&1 &
^C

修改AdminServer启动参数

1
2
3
-server -Xms1024m -Xmx1024m -XX:MaxPermSize=256m -Djava.awt.headless=true -Dcharset=GBK -Dfile.encoding=GBK -Djava.security.egd=file:/dev/zero
注意:AdminServer中,Configuration->SSL->Advanced->Hostname Verification:None,否则报错:
<Nov 8, 2011 11:56:28 PM CST> <Warning> <Security> <BEA-090504> <Certificate chain received from 132.77.138.144 - 132.77.138.144 failed hostname verification check. Certificate contained bssweb2 but check expected 132.77.138.144>

注意:Automatically Acquire Lock and Activate Changes勾掉

建立Machine

注意:端口与nodemanger.properties中的设置一致,一般为5556

建立cluster

IP一般设为224.0.0.1~239.255.255.255
多播端口测试:
cd /bea/weblogic/wlserver_10.3/server/lib

1
java -cp weblogic.jar  utils.MulticastTest -N server100 -A 224.0.0.110 -P 48001

建立server

注意:多网卡的主机上需绑定IP,否则远程启动server时启动参数中adminServer会与实际IP不一致

部署deploy

注意:最后一步一般选择第3项 I will make the deployment accessible from the following location,需分别上传代码至每台主机,但会避免因乱码文件引起的server无法启动问题。
第2项:Copy this application onto every target for me,可以只在Admin主机上放置代码,Sever启动时自动上传部署。但如果有乱码文件则无法正常启动。
注意:根据application中UploadPath,建立相应上传目录

JDBC配置

注意:勾选Test Connection On Reserve,断开后自动连接

配置控制台用户

通常为了weblogic console安全考虑,需要新建多个用户,区分不同的权限:
A.管理员:所有权限,主要是进行配置修改时使用
B.操作员:可以启停所有服务,主要是日常监控和更新程序使用
C.查看者:可以查看所有配合和服务情况,主要是日常监控和巡检使用
D.服务调用用户:只能发送T3消息,timerapp和ejb接口使用
建立3个用户:
administrator:Administrators password:administrator 所有权限
operator:Operators password:operator 可以启停不能修改
monitor:Monitors password:monitormonitor 只能查看,不能修改、启停

在被管Machine上操作

复制nodemanager启动脚本

1
2
3
4
5
cp /bea/weblogic/wlserver_10.3/server/bin/startNodeManager.sh ~
cd ~
mkdir nodemanager
vi startNodeManager.sh
NODEMGR_HOME="/ngbss/webapp/nodemanager"

生成nodemanager.domains

启动AdminServer后

1
2
3
4
/bea/weblogic/wlserver_10.3/common/bin/wlst.sh
connect('weblogic','password','t3://xxx.xxx.xxx.xxx:6010')
nmEnroll('/ngbss/bpsapp/domains/BpsDom','/ngbss/bpsapp/nodemanager')
exit()

其它

应用发布

  1. 版本发布不需要重启server,直接在Deployment界面update一下即可,或通过命令行方式java weblogic.Deployer操作,或通过WLST发布。
  2. 如果StageMode=stage,server启动时会报Failed to initialize the application ‘examples’ due to error weblogic.management.DeploymentException: Exception occured while downloading files,原因不明,此时需要再手工update一下。
  3. 脚本发布工具
    1
    2
    3
    4
    5
    6
    帮助:  
    java -cp /bea/weblogic/wlserver_10.3/server/lib/weblogic.jar weblogic.Deployer -help
    重新发布:
    java -cp /bea/weblogic/wlserver_10.3/server/lib/weblogic.jar weblogic.Deployer -adminurl t3://xxx.xxx.xxx.xxx:57001 -username weblogic -password password -name examples -targets testserver1 -redeploy
    重新发布部分页面:
    java -cp /bea/weblogic/wlserver_10.3/server/lib/weblogic.jar weblogic.Deployer -adminurl t3://xxx.xxx.xxx.xxx:57001 -username weblogic -password password -name examples -targets testserver1 -redeploy /ngbss/webapp/deployTST/examples/xxx.html
  4. WLST发布工具
    1
    2
    3
    /bea/weblogic/wlserver_10.3/common/bin/wlst.sh
    connect('weblogic','password','t3://xxx.xxx.xxx.xxx:57001')
    redeploy('exmples','/ngbss/webapp/deployTST/examples/',targets='testserver1',stageMode='stage');

    3DES加密

    1
    java  -cp /bea/weblogic/wlserver_10.3/server/lib/weblogic.jar weblogic.security.Encrypt test123456

    WLST启停

    1
    2
    3
    connect('weblogic','password','t3://xxx.xxx.xxx.xxx:6001')
    start('PROXY_CLUSTER', 'Cluster', block='false')
    start('proxy_t_13', 'Server', block='false')

安装下载好的本地.deb

sudo dpkg -i /path/to/deb/file ,然后 sudo apt-get install -f 修复依赖关系

Chrome设置临时代理

google-chrome –proxy-server=”socks5://127.0.0.1:1080”

ExFat格式U盘支持

sudo apt-get install exfat-fuse exfat-utils

安装fcitx五笔拼音输入法

sudo apt-get install fcitx-table-wbpy

sublime中文输入法问题

参考
http://qiushao.net/2015/07/01/sublimetext-linux%E4%B8%8B%E8%BE%93%E5%85%A5%E4%B8%AD%E6%96%87/
https://github.com/lyfeyaj/sublime-text-imfix.git

openvpn安装及配置

sudo apt install openvpn
解决DNS问题:
vi xxx.opvn
script-security 2
up /etc/openvpn/update-resolv-conf
down /etc/openvpn/update-resolv-conf

openvpn GUI安装

sudo apt-get install -y network-manager-openvpn network-manager-openvpn-gnome

shadowsocks安装

apt-get install python-pip
pip install shadowsocks

shadowsocks启动

vi shadow.json
{
“server”:”IP”,
“server_port”:Port,
“local_port”:1080,
“password”:”password”,
“timeout”:600,
“method”:”rc4-md5”
}
vi startss.sh
sslocal -c shadow.json

proxychains强制应用走代理

安装:
sudo apt-get install proxychains
配置:
sudo vi /etc/proxychains.conf
socks5 IP PORT
使用:
proxychains <程序名>

ssh隧道

ssh -N -v svn@xxx.xxx.xxx.xxx -pxxx -D 127.0.0.1:1080

手工下载必备工具

atom-amd64.deb
google-chrome-stable_current_amd64.deb
nautilus_nutstore_amd64.deb
sublime-text_build-3126_amd64.deb
virtualbox-5.1_5.1.8-111374Ubuntuxenial_amd64.deb
wine-qqintl.zip

APT安装其它工具

sudo apt install unity-tweak-tool
sudo apt install aria2
sudo apt install vlc
sudo apt install tmux
sudo apt install sshpass
sudo apt install aria2c
sudo apt install rsync
sudo apt install nodejs
sudo apt install maven
sudo apt install gradle
sudo apt install build-essential
sudo apt install unrar

gradle下载安装

https://gradle.org/gradle-download/
export GRADLE_HOME=/opt/gradle
export PATH=$GRADLE_HOME/bin:$PATH

PPA方式安装Oracle JDK

sudo apt-add-repository ppa:webupd8team/java
sudo apt-get update
sudo apt-get install oracle-java8-installer
export JAVA_HOME=/usr/lib/jvm/java-8-oracle

IntelliJ IDEA安装

sudo mv idea-IU-162.2228.15 /opt/
sudo vi /usr/share/applications/idea.desktop
[Desktop Entry]
Encoding=UTF-8
Name=IntelliJ IDEA
Comment=IntelliJ IDEA
Exec=/opt/idea-IU-162.2228.15/bin/idea.sh
Icon=/opt/idea-IU-162.2228.15/bin/idea.png
Terminal=false
StartupNotify=true
Type=Application

grub等待时间配置

sudo vi /etc/default/grub
sudo update-grub

Flatabulous主题

https://github.com/anmoljagetia/Flatabulous

WPS

http://linux.wps.cn/

zsh

sudo apt-get install zsh git wget
wget –no-check-certificate https://github.com/robbyrussell/oh-my-zsh/raw/master/tools/install.sh -O - | sh

使用ssh_config进行连接

vi ~/.ssh/config
Host root@104.224.162.238
HostName 104.224.162.238
User root
Port p28259
ssh-keygen -t rsa
ssh-copy-id -i root@104.224.162.238 -p28259

雅黑字体

sudo mkdir -p /usr/share/fonts/msyh
sudo mkfontscale && sudo mkfontdir && sudo fc-cache -fv
再运行unity-tweak-tool指定字体

查看tuxedo版本:

tmadmin -v

tmboot/tmshutdown:

-A 只启动/停止Tuxedo管理服务,如BBL
-S 所有服务被启动/停止
-g grpname 只启动/停止属于制定组名的服务
-i svrid 只启动/停止制定ServID的服务
-s svrname 只启动/停止制定服务名的服务

CMDTUX_CAT:1668: WARN: Cannot shutdown BBL:

tmshutdown -c -y

tmloadcf/dmloadcf只做语法检查

tmloadcf –n ubb
dmloadcf –n dm

反编译tuxconfig/dmxconfig

tmunloadcf>ubb.tmp
dmunloadcf>dm.tmp

加载DBB

tmshutdown -s DMADM
tmshutdown -s GWADM
tmshutdown -s GWTDOMAIN
dmloadcf -y dbb
tmboot -s DMADM
tmboot -s GWADM
tmboot -s GWTDOMAIN

查看最小资源

tmloadcf -c ubb

清除IPC资源

ipcs | grep logname | awk ‘{print “ipcrm -“$1,$2}’ |sh -x

进程强杀

ps -ef|grep logname|grep -v grep|grep -v sh|awk ‘{print $2}’|xargs kill -9
ps -ef|grep $LOGNAME|awk ‘{if($3==”1”) print “kill -9 “$2}’|sh

锁用户

alter user UCR_CEN1 ACCOUNT LOCK;
alter user UCR_CEN1 ACCOUNT UNLOCK;

输错密码无限制

alter profile default limit failed_login_attempts unlimited;
select * from DBA_PROFILES where resource_name=’FAILED_LOGIN_ATTEMPTS’;

用户密码重试次数

select name, lcount from sys.user$ where name like ‘U%’;

重置密码

alter user scott identified by 123456;

查看当前用户具有哪些系统权限

select * from user_sys_privs;

查看当前用户具有哪些对象权限

select * frm user_tab_privs;

查看当前用户具有哪些控制到列的权限

select * from user_col_privs;

用户赋权

grant create table,unlimited tablespace to public
grant all on mywangwu to public

查看用户清单

select user_id,USERNAME,ACCOUNT_STATUS,CREATED from dba_users order by CREATED

DROP用户下所有对象

drop user UOP_UIF2 cascade;

用户视图

select * from all_users; –查看所用用户
select * from all_tables; –查看所有表
select * from user_tables; –查看当前用户下有那些 表
select * from user_views; –查看当前用户下有那些 试图
select constraint_name,table_name from user_constraints; –查看当前用户下有那些 约束,已经所对应的表
select * from dictionary where table_name like ‘USER%’;
select * from user_sys_privs; –查看当前用户具有哪些系统权限
select * from user_tab_privs; –查看当前用户具有哪些对象权限
select * from user_col_privs; –查看当前用户具有哪些控制到列的权限

查看表权限

select * from dba_tab_privs where owner=’UCR_CEN1’;

导入前准备

建立导入用户

CREATE USER YYBS_IMP
IDENTIFIED BY YYBS_IMP
DEFAULT TABLESPACE USERS
TEMPORARY TABLESPACE TEMP
PROFILE DEFAULT
ACCOUNT UNLOCK;
GRANT RESOURCE TO YYBS_IMP;
GRANT CONNECT TO YYBS_IMP;
GRANT IMP_FULL_DATABASE TO YYBS_IMP;
ALTER USER YYBS_IMP DEFAULT ROLE ALL;
GRANT UNLIMITED TABLESPACE TO YYBS_IMP;

确认数据库

tnsping stakfdb
export ORACLE_SID=stakfdb
sqlplus / as sysdba
select name,log_mode from v$database; –确认SID
select utl_inaddr.get_host_address from dual; –确认IP地址

杀进程

select sid,serial#,username,status,osuser,machine,terminal,program from v$session;
alter system kill session ‘861,21309’;
强杀进程:
select spid, osuser, s.program from v$session s,v$process p where s.paddr=p.addr and s.sid=144
kill -9 spid
锁用户:
select ‘alter user ‘||USERNAME||’ account lock;’ from dba_users where username like ‘U%’ and created>to_date(‘20110926’,’yyyymmdd’) order by CREATED;
DEMO:alter user UCR_CEN1 ACCOUNT LOCK;

清库

select user_id,USERNAME,ACCOUNT_STATUS,CREATED from dba_users order by CREATED;
select ‘drop user ‘||USERNAME||’ cascade;’ from dba_users where username like ‘U%’ and created>to_date(‘20110926’,’yyyymmdd’) order by CREATED;
demo:drop user UOP_UIF2 cascade;

建立Directory

sqlplus system/oracle@STAKFDB
CREATE OR REPLACE DIRECTORY imp930sta_dir AS ‘/app/imp930/sta’;
sqlplus system/oracle@CRMKFDB
CREATE OR REPLACE DIRECTORY imp930crm_dir AS ‘/app/imp930/crm’;
CREATE OR REPLACE DIRECTORY imp930cen_dir AS ‘/app/imp930/center’;
CREATE OR REPLACE DIRECTORY imp930oth_dir AS ‘/app/imp930/other’;

导入脚本

impdp system/oracle@csngstat831 dumpfile=Usta_full.dump logfile=Usta_full.log job_name=Usta_full full=y directory=imp930sta_dir TABLE_EXISTS_ACTION=replace parallel=1
impdp system/oracle@csngstat831 dumpfile=sUCR_STA4.dump logfile=sUCR_STA4.log job_name=sUCR_STA4 schemas=UCR_STA4 directory=imp930sta_dir TABLE_EXISTS_ACTION=replace parallel=1

导入过程监控

监控主机性能

nmon
vmstat
iostat

查看导入进度

select count(0) from all_objects where CREATED > sysdate-1;
select * from tab where tname like ‘CRM_FULL’;

查看IMPDP进度

select * from dba_datapump_jobs;
impdp system/oracle@crmkfdb attach=UCR_CRM3
help
status
start_jo
stop_job
kill_job
parallel=4

导入后工作

重置密码

select ‘alter user ‘||USERNAME||’ identified by test123456;’ from dba_users where username like ‘U%’ and created>to_date(‘20110926’,’yyyymmdd’) order by CREATED;
alter user uif_act1_sta1 identified by test123456;

解锁用户:

alter user UCR_CEN1 ACCOUNT UNLOCK;

安全策略修改

select * from dba_profiles WHERE profile = ‘DEFAULT’ AND resource_type = ‘PASSWORD’;
alter profile DEFAULT limit password_verify_function null;
alter profile DEFAULT limit FAILED_LOGIN_ATTEMPTS UNLIMITED;
alter user XXXX profile DEFAULT;

其它

重新导入同义词

table_exists_action=skip content=metadata_only
impdp system/oracle@csngcrm831 dumpfile=cUCR_CRM3.dump logfile=cUCR_CRM3.log job_name=cUCR_CRM3 schemas=UCR_CRM3 directory=imp930crm_dir TABLE_EXISTS_ACTION=skip content=metadata_only parallel=1

重建同义词:

select ‘create or replace synonym UCR_CRM3.’||synonym_name||’ for UCR_CEN1.’||table_name||’;’
from dba_synonyms where table_owner=’UCR_CEN1’ and owner=’UCR_CRM4’;

查看更改表空间

select tablespace_name, file_id, file_name,
round(bytes/(1024*1024),0) total_space
from dba_data_files
where tablespace_name like ‘TBS_CRM_DUSR3’
order by tablespace_name; –查看表空间

CREATE TABLESPACE TBS_ACT_DEF
DATAFILE ‘/csoradata/csngcrm/TBS_ACT_DEF.dbf’ SIZE 1024M
UNIFORM SIZE 128k; –建立表空间

CREATE TABLESPACE “TBS_ACT_HIACT07” DATAFILE ‘/oradata/ngcrm/TBS_ACT_HIACT07.dbf’ SIZE 10485760 AUTOEXTEND ON NEXT 10485760 MAXSIZE 32767M LOGGING ONLINE PERMANENT BLOCKSIZE 8192 EXTENT MANAGEMENT LOCAL AUTOALLOCATE SEGMENT SPACE MANAGEMENT AUTO; –建立表空间2

ALTER TABLESPACE “TBS_CRM_IUSR5” ADD DATAFILE ‘/oradata/ngbil/crm/TBS_CRM_IUSR5_2.dbf’ SIZE 10485760 AUTOEXTEND ON NEXT 10485760 MAXSIZE 32767M ; –增加表空间文件

ALTER DATABASE DATAFILE ‘/csoradata/csngcrm/TBS_ACT_DEF.dbf’
AUTOEXTEND ON NEXT 100M
MAXSIZE 24576M; –设定自动扩展

CREATE TEMPORARY TABLESPACE temp_data
TEMPFILE ‘/oracle/oradata/db/TEMP_DATA.dbf’ SIZE 50M –建立临时表空间

ALTER DATABASE DATAFILE ‘/oradata/ngcrm/TBS_CRM_DUSR3.dbf’
RESIZE 12288M; –调表空间
ALTER DATABASE TEMPFILE ‘/oradata/ngcrm/temp1.dbf’
RESIZE 12288M; –调临时表空间

移动表空间:
alter tablespace TBS_ACT_DEF offline;
alter tablespace TBS_ACT_DEF rename datafile ‘/oradata/ngbil/crm/TBS_ACT_DEF_2.dbf’ to ‘/oradata/ngcrm/TBS_ACT_DEF_2.dbf’;
alter tablespace TBS_ACT_DEF online;
select * from dba_tablespaces where tablespace_name=’TBS_ACT_DEF’;
select * from dba_data_files where tablespace_name=’TBS_CRM_DUSR1’;

查锁

select * from v$locked_object
select * from dba_objects where object_id=286655
select * from v$session where sid=822;
alter system kill session ‘822,94’;

编译安装

下载全部源码
./configure –prefix=/path/to/nginx
–with-zlib=../zlib-1.2.8
–with-pcre=../pcre-8.39
–with-openssl=../openssl-1.1.0b
–with-http_ssl_module

生成证书

cd /usr/local/nginx/conf
openssl genrsa -des3 -out server.key 1024
openssl req -new -key server.key -out server.csr
openssl rsa -in server.key -out server_nopwd.key
openssl x509 -req -days 365 -in server.csr -signkey server_nopwd.key -out server.crt

配置nginx.conf

server {
listen 443;
ssl on;
ssl_certificate /usr/local/nginx/conf/server.crt;
ssl_certificate_key /usr/local/nginx/conf/server_nopwd.key;
}

新建用户

useradd -d/home/jenkins jenkins
passwd jenkins

内网环境中安装polipo将socks5代理转HTTP

安装:
https://www.irif.fr/~jch/software/polipo/
rpm -i polipo-1.1.1-1.el6.x86_64.rpm
配置:
vi /etc/polipo/config
socksParentProxy = “IP:PORT”
socksProxyType = socks5
proxyPort = LOCALPORT
启动:
service polipo start

##开防火墙
lokkit -p 9090:tcp

启动

java -jar jenkins.war –httpPort=9090

WEB控制台

http://134.32.51.31:9090

自动发布

SSH认证

ssh-keygen -t rsa
ssh-copy-id -i user@xxx.xxx.xxx.xxx

Jenkins主机发布脚本

vi deploy-woegotv-admin-api.sh

1
2
3
4
5
6
7
8
9
10
11
echo 'stop process...'
ssh user@xxx.xxx.xxx.xxx '~/deploy/stopadmin.sh'
sleep 3
echo 'delete files...'
ssh user@xxx.xxx.xxx.xxx 'rm -f ~/deploy/woegotv-admin-api-1.0-SNAPSHOT.jar'
sleep 3
echo 'copy files...'
scp /home/jenkins/.jenkins/workspace/woegotv/admin-api/build/libs/woegotv-admin-api-1.0-SNAPSHOT.jar user@xxx.xxx.xxx.xxx:~/deploy/
echo 'start process...'
ssh user@xxx.xxx.xxx.xxx '~/deploy/startadmin.sh'
echo 'done'

应用主机启停脚本

vi startadmin.sh

1
2
3
export JAVA_HOME=/usr/jdk1.8.0_74
export PATH=$JAVA_HOME/bin:$PATH:$HOME/bin
nohup java -jar ~/deploy/woegotv-admin-api-1.0-SNAPSHOT.jar --spring.profiles.active=tst,druid,security >~/deploy/logs/woegotv.out 2>&1 &

vi stopadmin.sh

1
ps -fu`id -u`|grep woegotv-admin-api-1.0-SNAPSHOT.jar|grep -v grep|awk '{print $2}'|xargs kill -9

配置GitLab的WebHook

URL填写为Jenkins中GitLab插件生成的的http://xxx.xxx.xxx.xxx:9090/project/projectname