Nginx client_max_body_size 不生效的奇怪问题

最近在配置 Nginx 的 client_max_body_size 的时候遇到了一个非常奇怪的现象,明明配置了这个设置但是却并没有生效。具体配置是这样的:

http {
    client_max_body_size 8k;
    #...
    server {
        location /a {
            proxy_pass http://a.b.c.d:aaaa;
        }
        location /a/upload {
            client_max_body_size 20m;
            proxy_pass http://a.b.c.d:aaaa;
        }
        #...
    }
    #...
    proxy_intercept_errors on;
    error_page 400 404 405 406 /error_page.html;
    error_page 500 501 502 503 504 /error_page.html;
    location /error_page.html {
        internal;
        #...
    }
}

在实际测试中发现,/a/upload 这个接口上传文件还是会失败,而且大小确实是符合限制的。为了确认不是文件大小的问题,这里还尝试了使用了 client_max_body_size 0; 直接关掉限制,可是还是不起作用。查了很多日志都没找到问题,唯一比较奇怪的是,在错误日志中记录的 request method 与实际不符,日志中 $request_method  记录的是 GET,但是客户端上送的确实是标准的 POST,$request  变量打出来的也是 ‘POST /a/upload’。

万般无奈之下只好上 debug 日志,果然找到了问题的根本原因:

[debug] 4593#0: *1685438 http special response: 500, "/a/upload"
[debug] 4593#0: *1685438 internal redirect: "/error_page.html?"

这里可以在 debug 日志中看到,上传接口其实是调用了后端服务的,但是后端返回了 http 500 状态码。这时候,由于 proxy_intercept_errors  和 error_page  的设置,该请求被内部转发到了 /error_page.html  ,但是这个 location 并没有特别配置 client_max_body_size  ,所以使用的是 http 层的设置 8k。而请求中的文件大小显然是大于 8k 的,于是在这里返回了 413 错误。

找到问题之后就很好解决了,只需要在 /error_page.html  这个 location 中也配置 client_max_body_size  就可以了。

这里也体现出了 nginx 一个比较麻烦的问题,就是内部的 error_page 的处理。要记住的一点就是,在不特殊配置的情况下,error_page 也会继承 http 层的各种配置。也就是说,会有很多蛋疼的情况出现:

  1. http 层配置了 ip 白名单限制,但是又不想用默认的 403 页面,于是自定义了 403 的 error_page,发现不生效。原因就是自定义的 error_page 也继承 http 层的白名单限制,导致不在白名单的用户访问这个 403 页面也被拒绝了。解决方法是单独给 403 页面配置 allow all。
  2. 其他的很多参数配置,比如 client_max_body_size 之类会带来 4xx 错误的配置,都有可能由于 error_page 继承 http 层配置,导致奇怪的问题。

Synergy 配置 SSL 失败的解决方法

在激活了 Synergy Pro 之后,会自动生成 SSL 证书并开启 SSL 加密。但是由于某个暂时还未知的 Bug,在 Mac 上第一次自动生成的证书总是不能用的,会报这样的错误:

[2017-01-25T09:57:03] INFO: OpenSSL 1.0.2 22 Jan 2015
[2017-01-25T09:57:18] ERROR: ssl error occurred (system call failure)
[2017-01-25T09:57:18] ERROR: eof violates ssl protocol
[2017-01-25T09:57:18] ERROR: failed to accept secure socket
[2017-01-25T09:57:18] INFO: client connection may not be secure

需要这样解决:

  1. 在 Synergy Pro 的设置中取消勾选使用 SSL
  2. 关闭当前的 Synergy Pro
  3. 打开终端,进入 `~/Library/Synergy/SSL`
  4. 删除目录下的所有文件
  5. 重新打开 Synergy Pro,在设置中勾选使用 SSL,软件会重新生成证书
  6. 停止原先的客户端,重新连接,在弹框中信任证书,问题解决。

如果在客户端连接的时候出现这样的问题:

[2017-01-25T09:59:13] ERROR: ssl error occurred (generic failure)
[2017-01-25T09:59:13] ERROR: error:140770FC:SSL routines:SSL23_GET_SERVER_HELLO:unknown protocol
[2017-01-25T09:59:13] ERROR: failed to connect secure socket

说明客户端和服务端有某一方没有启用 SSL。请检查所有服务端和客户端,必须全部启用 SSL 或全部不启用。绝不可以只有某些启用。

曝光一个无良 IDC 商家

之前在 VPS 推荐网站上看到了一个比较便宜的香港独服的推荐,于是就试了一下。一开始用了几个月还不错,于是就一直在用。

结果上个月的时候出现了问题,我的机器被重复售卖给了另一个用户,导致机器被格式化,数据全丢。

然而商家在我反复索要赔偿之后直接再也不回我的消息,直接玩失踪了。所以只好在这曝光一下,希望不要再有人被骗。

竞越互联

www.firstprioritydc.com

QQ:2659488672 2980215596

姓名:苏启耀

银行卡号:6217582000016453151 中国银行

Bash Readline常用快捷键

Ctrl+p shell中上一个命令,或者 文本中移动到上一行
Ctrl+n shell中下一个命令,或者 文本中移动到下一行
Ctrl+r 往后搜索历史命令
Ctrl+s 往前搜索历史命令
Ctrl+f 光标前移
Ctrl+b 光标后退
Ctrl+a 到行首
Ctrl+e 到行尾
Ctrl+d 删除一个字符,删除一个字符,相当于通常的Delete键
Ctrl+h 退格删除一个字符,相当于通常的Backspace键
Ctrl+u 删除到行首
Ctrl+k 删除到行尾
Ctrl+l 类似 clear 命令效果
Ctrl+y 粘贴

这些按键在Mac OS X的几乎所有文本输入框中都可以使用哦=。=

跟创智主机合作的香港合租计划终于开通

因为我个人比较喜欢折腾服务器,而手里又有比较多的服务器,所以决定折腾一下弄个廉价的合租给大家。

之前使用盗版DA做过一次尝试,但是效果非常不好,所以这几天用正版DA重新配置了一下。这次经过测试,运行WordPress已经完全木有问题了~演示站点:http://hk.wzx.me(暂时关闭)

因为是方便大家的,所以定价很低,¥8一个月,一个服10个用户,刚好够这台服务器的费用。基本不限流量,空间只有500M,不过放个网站足够了。因为小水管所以也不建议放大文件下载。

欢迎有需要的或者想弄个廉价的自己挂个Blog什么的亲前来选购。话说禁止放置任何类型的代理程序,被发现一律禁用账号不退款=。=

购买地址:http://host.ichuangzhi.com/cart.php?a=add&pid=74

csgoserver: Counter Strike: Global Offensive Linux Server Manager

http://danielgibbs.co.uk/scripts/csgoserver/

About csgoserver

csgoserver is a command line tool for quick, simple deployment and management of a Counter Strike: Global Offensive Linux dedicated server.

Current Version: 251213

Main features

  • Server installer (SteamCMD)
  • Start/Stop/Restart server
  • Server updater (SteamCMD)
  • Server monitor (including email notification)
  • Server backup
  • Server console

Compatibility

The Linux Server Manager is tested to work on the following Linux systems.

  • Debian based distros (Ubuntu, Mint etc.)
  • Redhat based distros (CentOS, Fedora etc.)

The scripts are written in BASH and Python and would probably work with other distros.

Installation

The installer will automatically download and configure a Counter Strike: Global Offensive server.

Prerequisites

Before installing, please ensure you have all the dependencies required to run the script.

Ubuntu

Ubuntu 32-bit

apt-get install gdb mailutils postfix

Ubuntu 64-bit

apt-get install gdb mailutils postfix lib32gcc1

Debian

Debian 32-bit

apt-get install gdb mailutils postfix tmux ca-certificates

Debian 64-bit

dpkg --add-architecture i386
apt-get update
apt-get install gdb mailutils postfix tmux ca-certificates lib32gcc1

RHEL 6/CentOS 6

Note: EPEL repository or equivalent is required.
http://fedoraproject.org/wiki/EPEL

RHEL 6/CentOS 6 32-bit

yum install gdb mailx wget nano tmux

RHEL 6/CentOS 6 64-bit

yum install gdb mailx wget nano tmux glibc.i686 libstdc++.i686

Install

1. Create a user and login

adduser csgoserver
passwd csgoserver
su - csgoserver

2. Download the script

wget https://raw.github.com/dgibbs64/linuxgameservers/master/CounterStrikeGlobalOffensive/csgoserver

3. Make it executable

chmod +x csgoserver

4. Run the installer and follow the instructions

./csgoserver install

Usage

Running the server

Start the server

./csgoserver start

Stop the server

./csgoserver stop

Restart the server

./csgoserver restart

Updating the server

The server can be updated automatically using SteamCMD. The update option will stop the server, run the SteamCMD update and start the server again.

./csgoserver update

Monitoring the server

The script can monitor the server to ensure it is online. Should the server go offline, the monitor will attempt to start it again.

./csgoserver monitor

Note: see Automation on how to get monitor to run automatically.

Game Server Query Plugin

The Game Server Query plugin adds improved monitoring over the standard monitoring feature.

gsquery.py query’s the server to see if it responds with its server details. If it fails to respond the server will be restarted.

This is particularly useful for if a server has locked or frozen but the server instance/process is still running.

Install Game Server Query Plugin

Download gsquery.py to the same directory as the main script.

wget https://raw.github.com/dgibbs64/linuxgameservers/master/GameServerQuery/gsquery.py

Make it executable

chmod +x gsquery.py

To test is works run monitor and it will state that gsquery.py was detected.

Email notification

Monitoring can send you an email, should the server go offline, and report details of the issue. See example email below:

Capture1

Enable email notification

nano csgoserver
# Notification Email
# (on|off)
emailnotification="on"
email="email@example.com"

Test email notification

You can test email notifications are working without restarting the server.

./csgoserver email-test

Debug mode

Use debug mode to help you if you are having issues with the server. Debug allows you to see the output of the server directly to your terminal allowing you to diagnose any problems the server might be having.

./csgoserver debug

Server Details

If you need to get all main server details you can use the following command.
You will be given the following details if applicable to your server:

  • Server Name
  • Server Ports
  • Rcon Password
  • WebAdmin Username
  • WebAdmin Password

This can be very useful if you have forgotten your servers details.

./cgsoserver details

Console mode

Console allows you to view the live console of a server as it is running and allow you to enter commands to it.

./csgoserver console

To exit the console press “CTRL+b d”
Note: pressing “CTRL+c” will terminate the server

Backup

Backup will allow you to create a complete gzip archive of the whole server.

This is designed to allow you to backup before making changes to the server just in case there is a problem.

Note: this is not designed to be an automated backup solution

./csgoserver backup

Automation

You can use cronjobs to automate the process of updating and monitoring the server. You can either run the cronjob as root or as the csgoserver user.

Server update

Update the server at 5am daily.

Root Cronjob

crontab -e
0       5       *       *       *  su – csgoserver -c ‘/home/csgoserver/csgoserver update’ > /dev/null 2>&1

csgoserver Cronjob

crontab -e
0       5       *       *       *  /home/csgoserver/csgoserver update > /dev/null 2>&1

Server Monitor

Check every 5 mins is the server is online.

Root Cronjob

crontab -e
*/5       *       *       *       *  su - csgoserver -c '/home/csgoserver/csgoserver monitor' > /dev/null 2>&1

csgoserver Cronjob

crontab -e
*/5       *       *       *       *  /home/csgoserver/csgoserver monitor > /dev/null 2>&1

Configuration

Start parameters

If you need to adjust the start parameters you can edit the ‘parms’ variable under ‘Start vars’ in the script.

parms="-game csgo -console -usercon +game_type 0 +game_mode 0 +mapgroup mg_bomb +map ${defaultmap}"

See this link for all available start parameters.
https://developer.valvesoftware.com/wiki/Command_Line_Options#Source_Dedicated_Server

Config File

The server has a default config file that will allow you to edit many different settings.

To find the config file use the details command.

./csgoserver details

Default ports

Gameport (Inbound): 27015 UDP
Source TV (Inbound): 27020 UDP
Client Port (Outbound): 27005 UDP

Should you need to change the port edit the start variables and amend the port to meet your requirements.

port="27015"
sourcetvport="27020"
clientport="27005"

Multiple Servers

It is possible to run multiple server instances.

I recommend repeating the installation however create a second user account and change the default ports.

Running as root

The script will not run as root and will error if you try. This is for security and to stop permissions issues. For example, if you run update as root any changed files are then owned by root. This means the csgoserver user will be unable to access the updated files causing the server to fail.

Useful Resources

Here are some useful resources that will help with management and configuration of your server.

Server wiki article: https://developer.valvesoftware.com/wiki/Counter-Strike:_Global_Offensive_Dedicated_Servers
CLI options wiki article: https://developer.valvesoftware.com/wiki/Command_Line_Options
SteamCMD wiki article: https://developer.valvesoftware.com/wiki/SteamCMD

Issues and troubleshooting

If you find a bug or have a suggestion please submit a bug report on GitHub .

https://github.com/dgibbs64/linuxgameservers/issues

If you have a question about the server that is not related to the script please check the games official website.

http://steampowered.com

If you are having issues getting the script to work you probably haven’t followed the instructions correctly. If you are sure you have then please leave a comment below.

GitHub

This script is developed using GitHub you can view the full project here:

https://github.com/dgibbs64/linuxgameservers

Further notes

This script is free to use and you are welcome to customise and change it. I hope the script makes it easier to manage a Counter Strike: Global Offensive server.

Donate

Found my work helpful? Show your appreciation. Please consider donating and help cover my server costs.

PayPal: me@danielgibbs.co.uk

Spread the Word

You can help by spreading the word by letting people know about this script.
Tell your friends, Tweet, Facebook, post on forums or write a blog post.

Also I am interested to know if you are using using this script tweet me.

@dangibbsuk

如何用彩虹表破解MD5、LM Hash等复杂加密密码

一、什么是彩虹表?
彩虹表(Rainbow Tables)就是一个庞大的、针对各种可能的字母组合预先计算好的哈希值的集合,不一定是针对MD5算法的,各种算法的都有,有了它可以快速的破解各类密码。越是复杂的密码,需要的彩虹表就越大,现在主流的彩虹表都是100G以上。

二、上哪找彩虹表去?
现在有很多大牛已经把自己的彩虹表共享出来了,所以你可以去下载。还有一种方法就是自己通过工具生成。
不过自己生成有点不切合实际,生成小的彩虹表吧数据少,可以破解密码的位数少(复杂程度低),而且费时费力,4核4GB内存的机器,生成2GB彩虹表,需要花费7天时间,而7天按1MB的带宽(160K/S左右)几乎可以下载30GB左右。
生成的工具可以用RainbowCrack也可以用Cain。网上很容易搜索到下载地址的。

下载彩虹表:

1、MD5的彩虹表
工具推荐:Free Rainbow Tables
ftp:
ftp://tbhost.eu/
user:download
pass:Tx50AbsBHq7Nya7n9weW
http:
http://tbhost.eu/rt.php
http://freerainbowtables.mirror.garr.it/mirrors/freerainbowtables/
提供了多种类型的彩虹表下载,LM、NTLM、MD5、SHA1等。千万别把人家法语字符的表也下了,对国人来说,几乎没什么用,不过如果你有特殊需要,那就下吧……这里提供的都是.rti格式的,有别于传统的.ri格式,.rti比.rt的多了一个目录.index文件,据说遍列速度比.rt的更快(未曾对比过,无法确定是否属实)。把你想要用的那个表下载下来,然后下载读取彩虹表的工具:rcracki_mt.exe
把此工具及相关的dll文件复制到彩虹表所在目录,然后运行命令“F:\MD5>rcracki_mt.exe -h 3787795aeee01c9ab7267f252c932572 *.rti”就会开始破解(只能是32位密文)。漏洞之家http://bbs.3344.eu

2、LM-HASH的彩虹表(Windows登录密码)
工具推荐:ophcrack
http://ophcrack.sourceforge.net/download.php
这个是Ophcrack XP Special Tables。一般非Vista的密码Hash,用它能破绝大部分,但在使用过程中也有发现有小部分Hash正确,但无法破解的。
这是Ophcrack Vista Special NTHASH的。官方是收费的表,不过国外共享了,也就可以免费得到了。如果这些表都跑不出来,而你又确定你的Hash没有搞错的话,那么只能找LC5出马了,LC5是一定能破的,只是时间有点久!
其他工具还有一些,大家自己找找吧。不过这两个是经典的常用彩虹表。CMD5,或者Xmd5网站都开始收费了。大家还是自己拿机器跑吧!

sshd_config配置 详解

最近,一直再捣鼓LNMP已经Shell脚本方面、以及自动化方面的东西,整理一下发在这里。

# 1. 关于 SSH Server 的整体设定,包含使用的 port 啦,以及使用的密码演算方式
Port 22          # SSH 预设使用 22 这个 port,您也可以使用多的 port !
# 亦即重复使用 port 这个设定项目即可!
Protocol 2,1        # 选择的 SSH 协议版本,可以是 1 也可以是 2 ,
# 如果要同时支持两者,就必须要使用 2,1 这个分隔了!
#ListenAddress 0.0.0.0   # 监听的主机适配卡!举个例子来说,如果您有两个 IP,
# 分别是 192.168.0.100 及 192.168.2.20 ,那么只想要
# 开放 192.168.0.100 时,就可以写如同下面的样式:
ListenAddress 192.168.0.100          # 只监听来自 192.168.0.100 这个 IP 的SSH联机。
# 如果不使用设定的话,则预设所有接口均接受 SSH
PidFile /var/run/sshd.pid      # 可以放置 SSHD 这个 PID 的档案!左列为默认值
LoginGraceTime 600     # 当使用者连上 SSH server 之后,会出现输入密码的画面,
# 在该画面中,在多久时间内没有成功连上 SSH server ,
# 就断线!时间为秒!
Compression yes      # 是否可以使用压缩指令?当然可以啰!
# 2. 说明主机的 Private Key 放置的档案,预设使用下面的档案即可!
HostKey /etc/ssh/ssh_host_key    # SSH version 1 使用的私钥
HostKey /etc/ssh/ssh_host_rsa_key  # SSH version 2 使用的 RSA 私钥
HostKey /etc/ssh/ssh_host_dsa_key  # SSH version 2 使用的 DSA 私钥
# 2.1 关于 version 1 的一些设定! KeyRegenerationInterval 3600     # 由前面联机的说明可以知道, version 1 会使用 # server 的 Public Key ,那么如果这个 Public # Key 被偷的话,岂不完蛋?所以需要每隔一段时间 # 来重新建立一次!这里的时间为秒! ServerKeyBits 768           # 没错!这个就是 Server key 的长度!
# 3. 关于登录文件的讯息数据放置与 daemon 的名称! SyslogFacility AUTH         # 当有人使用 SSH 登入系统的时候,SSH会记录资 # 讯,这个信息要记录在什么 daemon name 底下? # 预设是以 AUTH 来设定的,即是 /var/log/secure # 里面!什么?忘记了!回到 Linux 基础去翻一下 # 其它可用的 daemon name 为:DAEMON,USER,AUTH, # LOCAL0,LOCAL1,LOCAL2,LOCAL3,LOCAL4,LOCAL5, LogLevel INFO            # 登录记录的等级!嘿嘿!任何讯息! # 同样的,忘记了就回去参考!
# 4. 安全设定项目!极重要! # 4.1 登入设定部分 PermitRootLogin no     # 是否允许 root 登入!预设是允许的,但是建议设定成 no! UserLogin no        # 在 SSH 底下本来就不接受 login 这个程序的登入! StrictModes yes      # 当使用者的 host key 改变之后,Server 就不接受联机, # 可以抵挡部分的木马程序! #RSAAuthentication yes   # 是否使用纯的 RSA 认证!?仅针对 version 1 ! PubkeyAuthentication yes  # 是否允许 Public Key ?当然允许啦!只有 version 2 AuthorizedKeysFile      .ssh/authorized_keys # 上面这个在设定若要使用不需要密码登入的账号时,那么那个 # 账号的存放档案所在档名! # 4.2 认证部分 RhostsAuthentication no  # 本机系统不止使用 .rhosts ,因为仅使用 .rhosts 太 # 不安全了,所以这里一定要设定为 no ! IgnoreRhosts yes      # 是否取消使用 ~/.ssh/.rhosts 来做为认证!当然是! RhostsRSAAuthentication no # 这个选项是专门给 version 1 用的,使用 rhosts 档案在 # /etc/hosts.equiv配合 RSA 演算方式来进行认证!不要使用 HostbasedAuthentication no # 这个项目与上面的项目类似,不过是给 version 2 使用的! IgnoreUserKnownHosts no  # 是否忽略家目录内的 ~/.ssh/known_hosts 这个档案所记录 # 的主机内容?当然不要忽略,所以这里就是 no 啦! PasswordAuthentication yes # 密码验证当然是需要的!所以这里写 yes 啰! PermitEmptyPasswords no  # 若上面那一项如果设定为 yes 的话,这一项就最好设定 # 为 no ,这个项目在是否允许以空的密码登入!当然不许! ChallengeResponseAuthentication yes  # 挑战任何的密码认证!所以,任何 login.conf # 规定的认证方式,均可适用! #PAMAuthenticationViaKbdInt yes      # 是否启用其它的 PAM 模块!启用这个模块将会 # 导致 PasswordAuthentication 设定失效!# 4.3 与 Kerberos 有关的参数设定!因为我们没有 Kerberos 主机,所以底下不用设定! #KerberosAuthentication no #KerberosOrLocalPasswd yes #KerberosTicketCleanup yes #KerberosTgtPassing no # 4.4 底下是有关在 X-Window 底下使用的相关设定! X11Forwarding yes #X11DisplayOffset 10 #X11UseLocalhost yes
# 4.5 登入后的项目: PrintMotd no              # 登入后是否显示出一些信息呢?例如上次登入的时间、地点等 # 等,预设是 yes ,但是,如果为了安全,可以考虑改为 no ! PrintLastLog yes     # 显示上次登入的信息!可以啊!预设也是 yes ! KeepAlive yes       # 一般而言,如果设定这项目的话,那么 SSH Server 会传送 # KeepAlive 的讯息给 Client 端,以确保两者的联机正常! # 在这个情况下,任何一端死掉后, SSH 可以立刻知道!而不会 # 有僵尸程序的发生! UsePrivilegeSeparation yes # 使用者的权限设定项目!就设定为 yes 吧! MaxStartups 10      # 同时允许几个尚未登入的联机画面?当我们连上 SSH , # 但是尚未输入密码时,这个时候就是我们所谓的联机画面啦! # 在这个联机画面中,为了保护主机,所以需要设定最大值, # 预设最多十个联机画面,而已经建立联机的不计算在这十个当中
# 4.6 关于使用者抵挡的设定项目: DenyUsers *        # 设定受抵挡的使用者名称,如果是全部的使用者,那就是全部 # 挡吧!若是部分使用者,可以将该账号填入!例如下列! DenyUsers test DenyGroups test      # 与 DenyUsers 相同!仅抵挡几个群组而已!
# 5. 关于 SFTP 服务的设定项目! Subsystem       sftp    /usr/lib/ssh/sftp-server

基本上,在您的系统中,『除非有必要,否则请不要更改 /etc/ssh/sshd_config 这个档案的设定值!』因为预设的情况下通常都是最严密的 SSH 保护了,因此,可以不需要更动他!上面的说明仅是在让大家了解每个细项的一些基本内容而已!需要注意的是最后一项,如果您不愿意开放 SFTP 的话,将最后一行批注掉即可!

另外,如果您修改过上面这个档案(/etc/ssh/sshd_config),那么就必需要重新启动一次 sshd 这个 daemon 才行!亦即是:
/etc/rc.d/init.d/sshd restart

另外自己在网上找了几个doc:http://doc.licess.org/openssh/sshd_config.html 方便以后查阅。