Kali渗透测试演练Metasploitable靶机(附详细word文档+乌云_vmware_201606) Linux

Kali渗透测试演练Metasploitable靶机

准备工作:

VM虚拟机(http://www.vmware.com/cn.html

Kalihttps://www.offensive-security.com/kali-linux-vmware-virtualbox-image-download/

Metasploitable靶机(https://sourceforge.net/projects/metasploitable/

要求Kali和靶机在同一个Lan

在开始工作前都确认一一下是否在同一个Lan段,分别登录Kali和靶机使用ifconfig 命令查看

注意:Metasploitable的默认账号、密码是:msfadmin:msfadminKali的默认是root:toor

1.png
第一阶段:扫描阶段,工具 namp 

命令:隐蔽扫描:nmap -sS 192.168.209.138


端口爆破:FTPSSH

工具:Hydra

备用字典:

爆破FTP

hydra -L  /root/Desktop/user.txt  -P  /root/Desktop/pass.txt ftp://192.168.209.138

爆破ssh

hydra -L  /root/Desktop/user.txt  -P  /root/Desktop/pass.txt 192.168.209.138 ssh

通过23端口telnet登录进系统

图片过多,我就不一一上传了,都在文档里面,主要包括以下的测试列表,初学者可以测试体验:

  • 端口爆破:FTP、SSH等
  • 利用metasploit进行端口渗透等
  • 8180——-Apache Tomcat弱口令等

Kali渗透测试演练Metasploitable靶机.docx 

百度网盘链接: https://pan.baidu.com/s/1o8HcuAA 有什么问题的可以留言或者是邮件

乌云_vmware_201606点击查看原图


admin 发布于  2017-1-28 10:18 

破解shc加密过的二进制脚本,此处以破解一个云免脚本为例 技术文章

首先简单的介绍一下shc:

shc是一个专业的加密shell脚本的工具.它的作用是把shell脚本转换为一个可执行的二进制文件,这个办法很好的解决了脚本中含有IP、密码等不希望公开的问题.

今天逛一个博客看见了他的一篇文章说的关于破解云免脚本的,评论里面很多人说破解不了骚逼汪的云免脚本,我就是试试而已.哈哈

Google一下就找到了在youtube上的一个视频: UnSHc - decrypt shc *.sh.x bash script

然后在作者的博客和github找到了:Unshc脚本.一键破解,很方便,在此记录一下:

首先未破解时是二进制打开是这样:2017-01-23-32.jpg

然后克隆Unshc脚本到本地:clone.jpg

然后赋予脚本的执行权限后就可以看到相应使用方法:unshc-use.jpg

直接破解:2017-01-23-23.png

破解后的:decrypt.jpg

Unshc 作者github和博客:

https://github.com/yanncam/UnSHc

https://www.asafety.fr/unshc-the-shc-decrypter/

利用好搜索.事半功倍! 下回见!


admin 发布于  2017-1-23 20:23 

利用 iptables 折腾安全的服务器环境 Linux

0x00 概述

iptables 是 Linux 内核集成一套包过滤系统,并且可以实现状态防火墙,建立精细的包过滤列表,功能十分强大,所以选择折腾 iptables 来实现防火墙。

iptables 一共有 4 个表:filter,nat,mangle,raw,5 个链:INPUT,OUTPUT,FORWARD,POSTROUTING,PREROUTING

功能

  • filter:实现防火墙一般的数据包过滤功能。(默认表)
    • Chain: INPUT,OUTPUT,FORWARD
  • nat:网络地址转换。
    • Chain: PREROUTING,POSTROUTING
  • mangle:修改数据包。
    • Chain: INPUT,OUTPUT,FORWARD,POSTROUTING,PREROUTING
  • raw:不让 iptables 做数据包链接跟踪,提高性能。
    • Chain: PREROUTING,OUTPUT

0x01 简单应用

iptables 有基础的命令还有可选的模块,在 Terminal 中直接可以使用man iptables查看 iptables 的 man page (Online)。

清除现有 iptables 规则:iptables -F or iptables --flush(清除 Chain 中的所有规则,可以加上 -t or --table 指定某个表,不指定则清除所有)。iptables -X or iptables --delete-chain(删除所有用户自定义的 Chain ,即通过 -n or --new-chain 增加的 Chain )。iptables -Z or iptables --zero(清空封包计数器)。

设定默认策略:不符合任何一条规则的时候,按照设定好的默认策略处理,最安全的就是全部 DROP ,再单独添加例外,添加 DROP 的默认策略必须在 Console 下,不然 Terminal 会掉。

iptables -p INPUT DROP iptables -p OUTPUT DROP iptables -p FORWARD DROP 

-p or --policy是为 Chain 添加默认策略。iptables 默认都是 ACCPET 的,如果需要删除此限制,改回 ACCPET 即可。

设置了 DROP 的默认策略之后,必须添加允许回环!

iptables -A INPUT -i lo -p all -j ACCEPT
iptables -A OUTPUT -o lo -p all -j ACCEPT 

-i or --in-interface 是定义入网 NIC 的,表示数据包从何进入,可以使用加号+作为通配符,比如 eth+ 表示所有的 eth,也可以用感叹号 ! 进行排除匹配。

部分版本的 Linux 需要重启 iptables 服务才能生效(server iptables restart or/etc/init.d/iptables restart),我使用的是 Debian,现在 Debian 已经是实时生效 iptables 的了,不需要重启服务。也可以使用iptables-save > /home/iptables.rule导出 iptables 规则,到时候再使用 iptables-restore 恢复。

开启允许通过的端口:如果刚刚上面设置了默认 DROP 策略,现在就要来设置例外规则了,不然任何流量出入都会被丢弃了。现在来开个 SSH(22)端口。

iptables -A INPUT -p tcp --dport 22 -j ACCEPT iptables -A INPUT -p tcp --sport 22 -j ACCEPT 

-A or --append 新增一条规则,默认是最后一条规则,如果需要插入优先级别更高的可以使用 -I or --insert-p or --protocol 是指定协议,常见协议有:tcp,udp,icmp,igmp等,可以使用 all 匹配所有协议,在协议名称前加感叹号 !表示排除此协议,如 !tcp 表示除了 tcp 协议以外的协议。--dport or --destination-port 是目的端口,限制要访问的目的端口,可以用 : 号表示范围,比如 1:100 表示 1 - 100 端口。--sport or --source-port 是来源端口,使用方法和目的端口一致。-j or--jump 代表了处理动作,常见处理动作有:ACCEPT,REJECT,DROP,REDIRECT,MASQUERADE,LOG,DNAT,SNAT,MIRROR,QUEUE,RETURN,MARK等,ACCPET 代表放行,REJECT 代表拒绝,DROP 代表丢弃,其他更多的说明请参考 man page。

如果要限制允许访问的 IP 来源地址,可以用 -s or --src or --source 来限制。

iptables -A INPUT -s 8.8.8.8 -p tcp --dport 22 -j ACCEPT iptables -A INPUT -m iprange --src-range 8.8.8.1-8.8.8.10 -p tcp --dport 22 -j ACCEPT 

来源地址可以是单个 IP 地址,也可以是地址段 8.8.8.0/24 这种格式,如果要限定范围就需要用 -m iprange --src-range 加范围限制,地址也可以使用感叹号 ! 进行排除匹配。

要开放常用端口,也可以使用 -m multiport --dport 参数。

iptables -A INPUT -m multiport --dport 21,22,80,3306,8000:8999 -p tcp -j ACCPET 

禁止 ping:ping 是基于 ICMP 协议的,所以禁掉 ICMP 包就 OK 了。

iptables -A INPUT -p icmp -j DROP iptables -A OUTPUT -p icmp -j DROP 

但是,用这种方式禁用掉 ICMP 协议,服务器就不可以发起 ping 请求,我们可以利用状态防火墙的特性,根据状态来过滤。先删除旧的策略。

iptables -D INPUT -p icmp -j DROP iptables -D OUTPUT -p icmp -j DROP 

-D or --delete 是用于删除规则,输入完整的策略即可删除。

iptables -A INPUT -p icmp --icmp-type Echo-Request -j DROP iptables -A INPUT -p icmp --icmp-type Echo-Reply -j ACCEPT iptables -A INPUT -p icmp --icmp-type destination-Unreachable -j ACCEPT 

--icmp-type是用于定位 ICMP 数据包的类型,可以使用 iptables -p icmp --help 查看详细定义或者在 man page 中查看。这里选择 DROP 掉请求,但是允许返回报文通过。

丢弃状态为 INVALID 的 HTTP 数据包:状态为 INVALID 的都是无效的包,直接 DROP。

iptables -A INPUT -m state --state INVALID -j DROP iptables -A OUTPUT -m state --state INVALID -j DROP iptables -A FORWARD -m state --state INVALID -j DROP 

-m state --state 是用来识别连接状态的,常见的有 4 种状态,NEW,INVALID,ESTABLISHED,RELATED

丢弃外网的私网源地址请求:服务器是公网的,没有内网互联机器,源地址是私网地址的基本都是 IP 欺骗,直接 DROP。

iptables -A INPUT -i eth0 -s 10.0.0.0/8 -j DROP iptables -A INPUT -i eth0 -s 172.16.0.0/12 -j DROP iptables -A INPUT -i eth0 -s 192.168.0.0/16 -j DROP 

0x02 高级应用

防止 DDOS 和 CC 攻击:可以通过 iptables 记录访问过频,然后禁止掉过频密的请求。

iptables -A INPUT -p tcp --dport 80 --syn -m recent --name web_viewer --rcheck --seconds 60 --hitcount 10 -j LOG --log-prefix 'CC_ATTACK:' --log-ip-options iptables -A INPUT -p tcp --dport 80 --syn -m recent --name web_viewer --rcheck --seconds 60 --hitcount 10 -j DROP iptables -A INPUT -p tcp --dport 80 --syn -m recent --name web_viewer --set -j ACCEPT 

每 60 秒只允许建立 10 个新连接,超出则丢弃。

防止 SSH 爆破:公网服务器总会被人爬到然后爆破 SSH 密码,直接用 iptables 中的 recent 模块将爆破的禁掉。

iptables -A INPUT -p tcp --dport 22 -m recent --name SSH_Brute --rcheck --seconds 300 --hitcount 3 -j DROP iptables -A INPUT -p tcp --dport 22 -m recent --name SSH_Brute --set -j ACCEPT 

这里的流程就是,第一次发出 SSH 连接的时候,会先检查 SSH_Brute 列表中有无记录,并且是否满足 3 次,如果满足则丢弃,生存期是 5 分钟(300 秒),如果是第一次连接,自然不会符合第一条规则,所以就跳到第二条,将当前用户的 IP 添加到 SSH_Brute 表中,并允许此次通过。这样就可以限制了,5 分钟内,只能尝试 3 次,超出这个次数就会被 DROP。

但这样还是存在一个问题,就是每隔5分钟之后还是可以爆破,但我们又不能将时间设置得太长,不然我们自己管理都被 DROP 了请求,所以这里可以用 update 标签来代替 rcheck 标签。两者作用其实大致相同,只是处理流程不一样, rcheck 是从接受到数据包就开始计算时间,但是 update是从最近的 DROP 数据包开始计算时间的,等于在一定时间内允许你发起 X 次连接,但一旦超出了,就开始 DROP 你的请求一定的时间。这样的过滤更加严格。

iptables -A INPUT -p tcp --dport 22 -m recent --name SSH_Brute --update --seconds 3600 --hitcount 3 -j DROP iptables -A INPUT -p tcp --dport 22 -m recent --name SSH_Brute --set -j ACCPET 

与上面其实就是换成了 update ,作用是一旦发起了超过 3 次连接就禁止一个小时。

未完待续

原文地址:https://bobylive.com/static/1937069


admin 发布于  2016-4-2 10:04 

CENTOS/UBUNTU一键安装IPSEC/IKEV2 VPN服务器 翻墙技巧

用法很简单:

总结成一句话就是:除了类型要选对以外,其他的一路回车就好了23333

具体如下:
1.下载脚本:

wget https://raw.githubusercontent.com/quericy/one-key-ikev2-vpn/master/one-key-ikev2.sh

2.运行(如果有需要使用自己已有的根证书,请将私钥命名为ca.cert,将根证书命名为ca.cert.pem,放到脚本的相同目录下再运行该脚本,没有证书的话将自动生成自签名证书咯):



chmod +x one-key-ikev2.sh
bash one-key-ikev2.sh

3.等待自动配置部分内容后,选择vps类型(OpenVZ还是Xen、KVM),选错将无法成功连接,请务必核实服务器的类型。输入服务器ip或者绑定的域名(连接vpn时服务器地址将需要与此保持一致),以及证书的相关信息(C,O,CN),使用自己的根证书的话,C,O,CN的值需要与根证书一致,为空将使用默认值(default value),确认无误后按任意键继续


one-key-install-ikev2-vpn.jpg

4.输入两次pkcs12证书的密码(可以为空)

input_cert_password.jpg

5.看到install success字样即表示安装成功。默认用户名密码将以黄字显示,可根据提示自行修改文件中的用户名密码。(WindowsPhone8.1的用户请将用户名myUserNames修改为%any ,否则可能会由于域的问题无法连接,具体参见这篇文章中的说明)

6.将提示信息中的证书文件ca.cert.pem拷贝到客户端,修改后缀名为.cer后导入。ios设备使用Ikev1无需导入证书,而是需要在连接时输入共享密钥,共享密钥即是提示信息中的黄字PSK.ikev2_VPN_install.jpg

PS:

服务器重启后默认ipsec不会自启动,请自行添加,或使用命令手动开启:

1 ipsec start

连上服务器后无法链接外网:

1 vim /etc/sysctl.conf

修改net.ipv4.ip_forward=1后保存并关闭文件 然后使用以下指令刷新sysctl:

1 sysctl -p

如遇报错信息,请重新打开/etc/syctl并将报错的那些代码用#号注释,保存后再刷新sysctl直至不会报错为止。

PS2:

脚本代码可访问github查看和下载:
GitHub

如需Debian系统的IKEV2一键安装脚本,可参考magic282童鞋的一键脚本:
https://github.com/magic282/One-Key-L2TP-IKEV2-Setup

PS3:

若需要优化TCP加速可参考本人的另一篇文章:更换Linux内核优化锐速,为shadowsocks和IkeV2加速

原文地址:https://quericy.me/blog/699



admin 发布于  2016-3-28 08:30 

linux执行shell脚本的方式及一些区别 Linux

假设shell脚本文件为hello.sh
放在/root目录下。下面介绍几种在终端执行shell脚本的方法:

[root@localhost home]# cd /root/

[root@localhost ~]#vim hello.sh

#!  /bin/bash

cd /tmp

echo "hello guys!"

echo "welcome to my Blog:linuxboy.org!"

 

1.切换到shell脚本所在的目录,执行:

[root@localhost ~]# ./hello.sh

-bash: ./ hello.sh权限不够

 

2.以绝对路径的方式执行:

[root@localhost ~]# /root/Desktop/hello.sh

-bash: /root/Desktop/ hello.sh: 权限不够

 

3.直接用bashsh执行:

[root@localhost ~]# bash hello.sh

hello guys!

welcome to my Blog:linuxboy.org!

[root@localhost ~]# pwd

/root

 

[root@localhost ~]# sh hello.sh

hello guys!

welcome to my Blog:linuxboy.org!

[root@localhost ~]# pwd

/root

注意:用以上三种方法执行shell脚本,现行的shell会开启一个子shell环境,去执行shell脚本,前两种必须要有执行权限才能够执行

 

也可以让shell脚本在现行的shell中执行:

4.现行的shell中执行

[root@localhost ~]# . hello.sh

hello guys!

welcome to my Blog:linuxboy.org!

[root@localhost tmp]# pwd

/tmp

 

 

[root@localhost ~]# source hello.sh

hello guys!

welcome to my Blog:linuxboy.org!

[root@localhost tmp]# pwd

/tmp

 

对于第4种不会创建子进程,而是在父进程中直接执行

上面的差异是因为子进程不能改变父进程的执行环境,所以CD(内建命令,只有内建命令才可以改变shell 的执行环境)没有成功,但是第4种没有子进程,所以CD成功

本文出处:http://4554480.blog.51cto.com/4544480/837006


admin 发布于  2016-3-28 08:27 

CentOS设置程序开机自启动的方法 Linux

在CentOS系统下,主要有两种方法设置自己安装的程序开机启动。

1、把启动程序的命令添加到/etc/rc.d/rc.local文件中,比如下面的是设置开机启动httpd。

#!/bin/sh
#
# This script will be executed *after* all the other init scripts.
# You can put your own initialization stuff in here if you don't
# want to do the full Sys V style init stuff.

touch /var/lock/subsys/local
/usr/local/apache/bin/apachectl start

2、把写好的启动脚本添加到目录/etc/rc.d/init.d/,然后使用命令chkconfig设置开机启动。

例如:我们把httpd的脚本写好后放进/etc/rc.d/init.d/目录,使用

chkconfig --add httpd
chkconfig httpd on

命令即设置好了开机启动。



admin 发布于  2016-3-25 19:16 

Linux VPS/服务器上用Crontab定时执行脚本/命令来实现VPS自动化 Linux

VPS或者服务器上经常会需要VPS或者服务器上经常会需要定时备份数据、定时执行重启某个服务或定时执行某个程序等等,一般在Linux使用Crontab,Windows下面是用计划任务(Win的都是图形界面设置比较简单),下面主要介绍Linux VPS/服务器上Crontab的安装及使用。

Crontab是一个Unix/Linux系统下的常用的定时执行工具,可以在无需人工干预的情况下运行指定作业。

一、Crontab的安装

1、CentOS下面安装Crontab

yum install vixie-cron crontabs      //安装Crontab
chkconfig crond on                //设为开机自启动
service crond start                 //启动

说明:vixie-cron软件包是cron的主程序;crontabs软件包是用来安装、卸装、 或列举用来驱动 cron 守护进程的表格的程序。

2、Debian下面安装Crontab

apt-get install cron             //大部分情况下Debian都已安装。
/etc/init.d/cron restart    //重启Crontab
二、Crontab使用方法

1、查看crontab定时执行任务列表
crontab -l

2、添加crontab定时执行任务

crontab -e

crontab-e-nano.jpg

输入crontab任务命令时可能会因为crontab默认编辑器的不同。

如上图所示为nano编辑器,使用比较简单,直接在文件末尾按crontab命令格式输入即可,Ctrl+x退出,再输y 回车保存。

另外一种是vi编辑器,首先按i键,在文件末尾按crontab命令格式输入,再按ESC键,再输入:wq 回车即可。

3、crontab 任务命令书写格式

格式: minute hour dayofmonth month dayofweek command
解释: 分钟 小时 日期 月付 命令
范围: 0-59 0~23 1~31 1~12 0~7,0和7都代表周日

在crontab中我们会经常用到* ,   -  /n 这4个符号,好吧还是再画个表格,更清楚些:

000093-2015-11-08.jpg


下面举一些例子来加深理解:

每天凌晨3:00执行备份程序:0 3 * * * /root/backup.sh

每周日8点30分执行日志清理程序:30 8 * * 7 /root/clear.sh

每周1周5 0点整执行test程序:0 0 * * 1,5 test

每年的5月12日14点执行wenchuan程序:0 14 12 5 * /root/wenchuan

每晚18点到23点每15分钟重启一次php-fpm:*/15 18-23 * * * /etc/init.d/php-fpm

其他一些命令:

/sbin/service crond start //启动服务
/sbin/service crond stop //关闭服务
/sbin/service crond restart //重启服务
/sbin/service crond reload //重新载入配置
service crond status //查看crontab服务状态
service crond start //手动启动crontab服务

4,设置定时任务:【语  法:crontab [-u <用户名称>][配置文件] 或crontab [-u <用户名称>][-elr]】

5,参  数:

-e  编辑该用户的计时器设置。

-l  列出该用户的计时器设置。

-r  删除该用户的计时器设置。

-u<用户名称>  指定要设定计时器的用户名称。

6,格式:分 时 日 月 周  命令

7,列举,比如我要每天的23点50重启nginx服务,那么,我就输入如下命令:

crontab -e

然后打开一个编辑窗口,按下 insert 按键或者是i,输入:

50 23 * * * /etc/init.d/nginx restart


1,crontab命令

功能说明:设置计时器。

语  法:crontab [-u <用户名称>][配置文件] 或 crontab [-u <用户名称>][-elr]

补充说明:cron是一个常驻服务,它提供计时器的功能,让用户在特定的时间得以执行预设的指令或程序。只要用户会编辑计时器的配置文件,就可以使 用计时器的功能。其配置文件格式如下:

Minute Hour Day Month DayOFWeek Command

参  数:

-e  编辑该用户的计时器设置。

-l  列出该用户的计时器设置。

-r  删除该用户的计时器设置。

-u<用户名称>  指定要设定计时器的用户名称。

2,crontab 格式

基本格式 :

* *  *  *  *  command

分 时 日 月 周  命令

第1列表示分钟1~59 每分钟用*或者 */1表示

第2列表示小时1~23(0表示0点)

第3列表示日期1~31

第4列 表示月份1~12

第5列标识号星期0~6(0表示星期天)

第6列要运行的命令

# Use the hash sign to prefix a comment

# +—————- minute (0 – 59)

# | +————- hour (0 – 23)

# | | +———- day of month (1 – 31)

# | | | +——- month (1 – 12)

# | | | | +—- day of week (0 – 7) (Sunday=0 or 7)

# | | | | |

# * * * * * command to be executed

crontab文件的一些例子:

30 21 * * * /etc/init.d/nginx restart

每晚的21:30重启 nginx。

45 4 1,10,22 * * /etc/init.d/nginx restart

每月1、 10、22日的4 : 45重启nginx。

10 1 * * 6,0 /etc/init.d/nginx restart

每周六、周日的1 : 10重启nginx。

0,30 18-23 * * * /etc/init.d/nginx restart

每天18 : 00至23 : 00之间每隔30分钟重启nginx。

0 23 * * 6 /etc/init.d/nginx restart

每星期六的11 : 00 pm重启nginx。

* */1 * * * /etc/init.d/nginx restart

每一小时重启nginx

* 23-7/1 * * * /etc/init.d/nginx restart

晚上11点到早上7点之间,每 隔一小时重启nginx

0 11 4 * mon-wed /etc/init.d/nginx restart

每月的4号与每周一到周三 的11点重启nginx

0 4 1 jan * /etc/init.d/nginx restart

一月一号的4点重启nginx

*/30 * * * * /usr/sbin/ntpdate 210.72.145.20

每半小时同步一下时间

如果需要根据centos vps内存大小来判断然后重启,看以参考这篇文章:

Linux脚本:根据CPU负载及内存使用率自动重启服务进程



admin 发布于  2015-11-8 10:40 

php加密-使用php_screw 1.5加密PHP文件的安装与使用 PHP

php文件通常以文本格式存贮在服务器端, 很容易被别人读到源代码, 为了对源代码进行保护, 可以采用对源代码进行加密的方式.要实现该功能需要两部分:

一是加密程序,实现对PHP文件的加密. 另一个就是对加密过的PHP文件进行解析, 以得到运行结果. 前者的实现比较简单, 就是一程序而已. 后者的实现大部分都是通过php module的形式来实现的.

php_screw(螺丝钉)可以实现以上的功能.最新版本是1.5,可以在sourceforge上下载.

安装:

安装的目的其实就是产生两个文件:一个是用于加密PHP文件的screw, 另一个就是php加载的解析模块php_screw.so


0.先下载php_screw http://sourceforge.net/projects/php-screw/files/ 或者是 http://jaist.dl.sourceforge.net/project/php-screw/php-screw/1.5/php_screw-1.5.tar.gz


解压,更改my_screw.h,里面的几个数字就是SEED,相当于密码,可以随意更改、增加

#tar -xzvf php_screw_1.5.tar.gz 
#cd php_screw_1.5 
#/opt/php/bin/phpize 
#./configure --with-php-config=/opt/php/bin/php-config 
#vi my_screw.h     (这个是密码文件,用户自己设置加密码的密码) 
#make   (make的作用是生成php_screw.so文件,这个文件是php用来解释加密码php文件的,生成的文件在./modules目录下. 
#cp ./modules/php_screw.so /opt/php/lib/php/extensions (php的扩展目录) 
#cd tools 
#make (make 生成screw 这个可执行文件,它用来加密码php文件,生成加密码后的.php文件)  
OK,编译完成 



或者是下面的方法:


1.将源代码包展开, 并进入该入目录:

2. 执行phpize, 就会在该目录下产生一个configure

3. 然后,运行configure

4. 再make

这样, 解析用的php_screw.so就生成了. 接下来要得到加密用的screw

1. 进入源码的tools目录

2. make

这样就生成了screw了. 如果要加密一个lx.php文件, 则: screw lx.php, lx.php就变成加密的了, 原来明文的lx.php被改名为lx.php.screw

接下来的任务就应该是加载php_screw.so模块了,

首先, 将该文件COPY到module目录下, 具体是哪个目录,可以参见/etc/php.ini配置文件中的extension_dir项,RHEL 5中为/usr/lib/php/modules

方法一:可以在/etc/php.d目录下新建一个screw.ini文件(文件是可以任意取的),其内容是一句话extension=php_screw.so

方法二:通过修改php.ini文件, 增加了一句extension=php_screw.so, 重启apache后就成功了.

重要说明:
编译的.so文件理论上跟你当前的php版本是相关的,也就是说,如果你是在php 5.1下编译的,就不能拿到php 5.2下去用,因为php的可加载模块总是与其版本相关的.而加密用的screw可执行文件理论上讲无所谓,只有他跟screw.so属于同一个版本就可以

测试:

编写一个hello, world程序,文件名为hello.php如下:

<?php
echo "Hello,world";
?>

用php  hello.php测试程序是否能成功显示, 成功显示后, 用screw对其进行加密(screw  helllo.php), 然后cat一下该php文件, 发现已经不是文本的了, 变成了许多乱字符, 说明加秘成功, 然后再php  hello.php, 如果能正常显示hello,world, 则说明加密的解析也没有问题了, 一切就算OK了.否则, 就说明还有不对的地方, 需要再仔细检查.

安装过程中遇到的问题:

1.找不到phpize

    phpize是属于php-develp的一个工具, (具体作用请自行解决) 因此, 必须要安装php-develp包. 中间有一些依赖, 如下:

[root@localhost Server]# rpm -ivh php-devel-5.1.6-5.el5.i386.rpm 
warning: php-devel-5.1.6-5.el5.i386.rpm: Header V3 DSA signature: NOKEY, key ID 37017186
error: Failed dependencies:
        autoconf is needed by php-devel-5.1.6-5.el5.i386
        automake is needed by php-devel-5.1.6-5.el5.i386
[root@localhost Server]# rpm -ivh autoconf
autoconf213-2.13-12.1.noarch.rpm  autoconf-2.59-12.noarch.rpm       
[root@localhost Server]# rpm -ivh autoconf-2.59-12.noarch.rpm 
warning: autoconf-2.59-12.noarch.rpm: Header V3 DSA signature: NOKEY, key ID 37017186
error: Failed dependencies:
        imake is needed by autoconf-2.59-12.noarch
[root@localhost Server]# rpm -ivh imake-1.0.2-3.i386.rpm 
warning: imake-1.0.2-3.i386.rpm: Header V3 DSA signature: NOKEY, key ID 37017186
Preparing...                ########################################### [100%]
   1:imake                  ########################################### [100%]
[root@localhost Server]# rpm -ivh autoconf-2.59-12.noarch.rpm 
warning: autoconf-2.59-12.noarch.rpm: Header V3 DSA signature: NOKEY, key ID 37017186
Preparing...                ########################################### [100%]
   1:autoconf               ########################################### [100%]
[root@localhost Server]# rpm -ivh automake
automake14-1.4p6-13.noarch.rpm  automake16-1.6.3-8.noarch.rpm   automake-1.9.6-2.1.noarch.rpm   
automake15-1.5-16.noarch.rpm    automake17-1.7.9-7.noarch.rpm   
[root@localhost Server]# rpm -ivh automake-1.9.6-2.1.noarch.rpm 
warning: automake-1.9.6-2.1.noarch.rpm: Header V3 DSA signature: NOKEY, key ID 37017186
Preparing...                ########################################### [100%]
   1:automake               ########################################### [100%]
[root@localhost Server]# rpm -ivh php-devel-5.1.6-5.el5.i386.rpm 
warning: php-devel-5.1.6-5.el5.i386.rpm: Header V3 DSA signature: NOKEY, key ID 37017186
Preparing...                ########################################### [100%]
   1:php-devel              ########################################### [100%]

2.每个加密的文件头部都一个很明显的字符串PM9SCREW, 这样很容易被人猜到是用screw加密的.

   这个问题的解决需要在安装的第一步就开始. 该标识串在源码的php_screw.h中. 在编译之前, 可以更改这个字符串, 例如,更改为PeterHu, 相应的下面的长度就不再是10了, 而是\tPeterHu\t,一共7个了.

#define PM9SCREW        "\tPM9SCREW\t"
#define PM9SCREW_LEN     10

网上看了好多PHP_SCREW安装文章.也看过好几次源码报里的READEME.
真折腾,要么脚本方式执行不了,要么网页无法显示.经过不屈不挠的折腾终于折腾出来了......分享以下方法...若有大虾知道具体原因不妨指点一二.
PS:CentOS release 5.8 (Final),php5.2.x
下载php-screw-1.5,若是php4用php-screw-1.3
源码包:http://sourceforge.net/projects/php-screw/files/latest/download?source=files
源码包放到/usr/local下,开始安装咯
1.tar -zxvf php_screw-1.5.tar.gz(出来permission之类错误就加sudo)
2.cd php_screw_1.5
3.phpize(执行不了就写phpize的绝对路径,装好了的前提下)
4.vi my_screw.h(里面是密码,想改就改,最好不要超过5位数,若改了要记好,因为重新编译时要用)
5.vi php_screw.h(里面是加密字符串,默认是PM9SCREW,最好改成别的字符串,字符串变了下面长度也要跟着变,改成LOVE的话长度就是6了,字符串要记下)
6. ./configure
7. make && make install
成功了会输出:Installing shared extensions:     /usr/lib64/php/modules/(这个目录是/etc下php.ini里extension_dir指定的目录).php_screw.so文件就在这里,当然编译目录的modules下也有.
8. cd tools/
9. make
 这样生成了加密用的程序screw了
10. cp screw /usr/bin下
这样加密的时候可以直接screw 文件名了,不用写screw的路径
11.修改ini
cd /etc/php.d(这里是php.ini加载的各种扩展可以在这写,打开别的文件看看就知道了)
vi php_screw.ini
里面写上extension=php_screw.so保存退出
12.重启apache
在根目录下创建hello.php 
<?echo 'hello';?>
php hello.php
输出:hello
screw hello.php
输出:Success Crypting(hello.php),说明加密成功,目录下会多出一个文件hello.php.screw,现在的hello.php已经是加密过的了,而多出的则是源文件的备份.
cat hello.php显示乱码.
php hello.php 输出hello.脚本方式解析加密文件成功了.
在根目录下建立phpinfo,里面若有php_screw扩展相关信息就说明可以通过浏览器访问加密的文件了.不用继续往下看了.我是有两个php.ini,网页跟脚本方式调用的ini不同.
接下来要重新编译一次了,为了可以在网页里正常显示.
1.去编译目录
make clean
然后把目录给删了.
2.tar -zxvf php_screw.1.5.tar.gz重新解压
3. phpize
4. myscrew.h跟php_screw.h里的密码跟字符串记得要跟之前的一样
5. ./configure --with-php-config=php-config路径(php安装目录下有)
6.make && make install
输出:Installing shared extensions:     /var/www/php5/lib/php/extensions/no-debug-non-zts-20060613/
(这次php_screw.so在这个目录下咯)
7.php_screw.so复制到phpinfo里extension_dir指定的目录,我的是/var/www/modules下
8.修改php.ini(php安装目录下的,phpinfo里会显示载入的是哪个ini,就改那个)
 在最下方添加extension=php_scrw.so
9.重启apache
10.在phpinfo里看看有木有php_screw相关信息,有的话就ok了~
至此,安装结束了,虽然有点点头绪,但我还是没太搞明白为什么得这样编译两次才行......

PS:编译过程中碰见的几个问题如下(解决方法)

1。 /root/php_screw-1.5/php_screw.c: In function ‘pm9screw_compile_file’:

解决方法:

需要修改php_screw.c

把第78,84,93行的org_compile_file(file_handle, type);
修改为:
org_compile_file(file_handle, type TSRMLS_CC);

然后再make就成功了。

2. /opt/soft/php_screw-1.5/php_screw.c: In function ‘zm_startup_php_screw’:/opt/soft/php_screw-1.5/php_screw.c:124: 错误:‘zend_compiler_globals’ 没有名为 ‘extended_info’ 的成员/opt/soft/php_screw-1.5/php_screw.c: In function ‘zm_shutdown_php_screw’:/opt/soft/php_screw-1.5/php_screw.c:133: 错误:‘zend_compiler_globals’ 没有名为 ‘extended_info’ 的成员make: *** [php_screw.lo] 错误 1

解决方法:
需要修改php_screw.c

把CG(extended_info) = 1;
修改为:
CG(compiler_options) |= ZEND_COMPILE_EXTENDED_INFO;


php_screw如何对当前目录下,对目录下包含的文件,以及包含目录下的文件进行整体加密

find ./ -name "*.php" -print|xargs -n1 screw //加密所有的.php文件

find ./ -name "*.screw" -print/xargs -n1 rm //删除所有的.php源文件的备份文件

命令都实验过成功的.........应该没什么再补充的咯....



admin 发布于  2015-10-19 20:17 

CentOS下安装netspeeder加速 技术文章

1、作者项目主页,https://code.google.com/p/net-speeder/ 

已经迁移到github了:https://github.com/snooda/net-speeder (作者主页也有教程)

安装步骤如下:

安装脚本

获得安装包: wget http://linux.linzhihao.cn/shell/netspeeder.sh

运行安装包:sh netspeeder.sh

然后再看看进程,如果能找到net_speeder ,说明它正在运行,安装就成功了


使用方法(需要root权限启动):

参数:./net_speeder 网卡名 加速规则(bpf规则)

最简单用法: # ./net_speeder venet0 "ip" 加速所有ip协议数据

关闭net_speeder方法:killall net_speeder

2、net-speeder是一个由snooda.com博主写的Linux脚本程序,主要目的是为了解决丢包问题,实现TCP双倍发送,即同一份数据包发送两份。这样的话在服务器带宽充足情况下,丢包率会平方级降低。

3、net-speeder对于不加速就可以跑满带宽的类型来讲(多线程下载),开启后反而由于多出来的无效流量,导致速度减半,性能开销稍大和自由度有损失。所以,如果你的VPS连接国内速度一切正常,请不要启用net-speeder。

4、安装net-speeder的方法也很简单,这里提供由lazyzhu.com博主写的net-speeder一键安装包。执行以下命令:

 wget --no-check-certificate https://gist.github.com/LazyZhu/dc3f2f84c336a08fd6a5/raw/d8aa4bcf955409e28a262ccf52921a65fe49da99/net_speeder_lazyinstall.sh
sh net_speeder_lazyinstall.sh

       00.gif


5、日后如果一键安装脚本下载链接失效了,这里给出脚本的具体内容,大家可以将将它保存为.sh文件,然后就可以执行了。

#!/bin/sh

# Set Linux PATH Environment Variables
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin
export PATH

# Check If You Are Root
if [ $(id -u) != "0" ]; then
    clear
    echo -e "\033[31m Error: You must be root to run this script! \033[0m"
    exit 1
fi

if [ $(arch) == x86_64 ]; then
    OSB=x86_64
elif [ $(arch) == i686 ]; then
    OSB=i386
else
    echo "\033[31m Error: Unable to Determine OS Bit. \033[0m"
    exit 1
fi
if egrep -q "5.*" /etc/issue; then
    OST=5
    wget http://dl.fedoraproject.org/pub/epel/5/${OSB}/epel-release-5-4.noarch.rpm
elif egrep -q "6.*" /etc/issue; then
    OST=6
    wget http://dl.fedoraproject.org/pub/epel/6/${OSB}/epel-release-6-8.noarch.rpm
else
    echo "\033[31m Error: Unable to Determine OS Version. \033[0m"
    exit 1
fi

rpm -Uvh epel-release*rpm
yum install -y libnet libnet-devel libpcap libpcap-devel gcc

wget http://net-speeder.googlecode.com/files/net_speeder-v0.1.tar.gz -O -|tar xz
cd net_speeder
if [ -f /proc/user_beancounters ] || [ -d /proc/bc ]; then
    sh build.sh -DCOOKED
    INTERFACE=venet0
else
    sh build.sh
    INTERFACE=eth0
fi

NS_PATH=/usr/local/net_speeder
mkdir -p $NS_PATH
cp -Rf net_speeder $NS_PATH

echo -e "\033[36m net_speeder installed. \033[0m"
echo -e "\033[36m Usage: nohup ${NS_PATH}/net_speeder $INTERFACE \"ip\" >/dev/null 2>&1 & \033[0m"



5、安装完成后,会给出脚本用法,最简单的就是开启所有IP协议加速。执行以下命令:

nohup /usr/local/net_speeder/net_speeder venet0 "ip" >/dev/null 2>&1 &

6、net-speeder对于VPS速度有没有优化?就我自己的测试来看,速度和ping值都有所提升,但是流量也是双倍呀!所以对于流量吃紧的童鞋们来说,就别尝试了。。。当然,流量多的就无视。


admin 发布于  2015-10-18 22:47 

设置Sysctl.conf用以提高Linux的性能(最完整的sysctl.conf优化方案) 技术文章

Sysctl是一个允许您改变正在运行中的Linux系统的接口。它包含一些 TCP/IP 堆栈和虚拟内存系统的高级选项, 这可以让有经验的管理员提高引人注目的系统性能。用sysctl可以读取设置超过五百个系统变量。基于这点,sysctl(8) 提供两个功能:读取和修改系统设置。

查看所有可读变量:

% sysctl -a

读一个指定的变量,例如 kern.maxproc:


% sysctl kern.maxproc kern.maxproc: 1044

要设置一个指定的变量,直接用 variable=value 这样的语法:

# sysctl kern.maxfiles=5000

kern.maxfiles: 2088 -> 5000

您可以使用sysctl修改系统变量,也可以通过编辑sysctl.conf文件来修改系统变量。sysctl.conf 看起来很像 rc.conf。它用 variable=value 的形式来设定值。指定的值在系统进入多用户模式之后被设定。并不是所有的变量都可以在这个模式下设定。

sysctl 变量的设置通常是字符串、数字或者布尔型。 (布尔型用 1 来表示’yes’,用 0 来表示’no’)。

sysctl -w kernel.sysrq=0

sysctl -w kernel.core_uses_pid=1

sysctl -w net.ipv4.conf.default.accept_redirects=0

sysctl -w net.ipv4.conf.default.accept_source_route=0

sysctl -w net.ipv4.conf.default.rp_filter=1

sysctl -w net.ipv4.tcp_syncookies=1

sysctl -w net.ipv4.tcp_max_syn_backlog=2048

sysctl -w net.ipv4.tcp_fin_timeout=30

sysctl -w net.ipv4.tcp_synack_retries=2

sysctl -w net.ipv4.tcp_keepalive_time=3600

sysctl -w net.ipv4.tcp_window_scaling=1

sysctl -w net.ipv4.tcp_sack=1

配置sysctl

编辑此文件:

vi /etc/sysctl.conf

如果该文件为空,则输入以下内容,否则请根据情况自己做调整:


# Controls source route verification
# Default should work for all interfaces
net.ipv4.conf.default.rp_filter = 1
# net.ipv4.conf.all.rp_filter = 1
# net.ipv4.conf.lo.rp_filter = 1
# net.ipv4.conf.eth0.rp_filter = 1
# Disables IP source routing
# Default should work for all interfaces
net.ipv4.conf.default.accept_source_route = 0
# net.ipv4.conf.all.accept_source_route = 0
# net.ipv4.conf.lo.accept_source_route = 0
# net.ipv4.conf.eth0.accept_source_route = 0
# Controls the System Request debugging functionality of the kernel
kernel.sysrq = 0
# Controls whether core dumps will append the PID to the core filename.
# Useful for debugging multi-threaded applications.
kernel.core_uses_pid = 1
# Increase maximum amount of memory allocated to shm
# Only uncomment if needed!
# kernel.shmmax = 67108864
# Disable ICMP Redirect Acceptance
# Default should work for all interfaces
net.ipv4.conf.default.accept_redirects = 0
# net.ipv4.conf.all.accept_redirects = 0
# net.ipv4.conf.lo.accept_redirects = 0
# net.ipv4.conf.eth0.accept_redirects = 0
# Enable Log Spoofed Packets, Source Routed Packets, Redirect Packets
# Default should work for all interfaces
net.ipv4.conf.default.log_martians = 1
# net.ipv4.conf.all.log_martians = 1
# net.ipv4.conf.lo.log_martians = 1
# net.ipv4.conf.eth0.log_martians = 1
# Decrease the time default value for tcp_fin_timeout connection
net.ipv4.tcp_fin_timeout = 25
# Decrease the time default value for tcp_keepalive_time connection
net.ipv4.tcp_keepalive_time = 1200
# Turn on the tcp_window_scaling
net.ipv4.tcp_window_scaling = 1
# Turn on the tcp_sack
net.ipv4.tcp_sack = 1
# tcp_fack should be on because of sack
net.ipv4.tcp_fack = 1
# Turn on the tcp_timestamps
net.ipv4.tcp_timestamps = 1
# Enable TCP SYN Cookie Protection
net.ipv4.tcp_syncookies = 1
# Enable ignoring broadcasts request
net.ipv4.icmp_echo_ignore_broadcasts = 1
# Enable bad error message Protection
net.ipv4.icmp_ignore_bogus_error_responses = 1
# Make more local ports available
# net.ipv4.ip_local_port_range = 1024 65000
# Set TCP Re-Ordering value in kernel to ‘5′
net.ipv4.tcp_reordering = 5
# Lower syn retry rates
net.ipv4.tcp_synack_retries = 2
net.ipv4.tcp_syn_retries = 3
# Set Max SYN Backlog to ‘2048′
net.ipv4.tcp_max_syn_backlog = 2048
# Various Settings
net.core.netdev_max_backlog = 1024
# Increase the maximum number of skb-heads to be cached
net.core.hot_list_length = 256
# Increase the tcp-time-wait buckets pool size
net.ipv4.tcp_max_tw_buckets = 360000
# This will increase the amount of memory available for socket input/output queues
net.core.rmem_default = 65535
net.core.rmem_max = 8388608
net.ipv4.tcp_rmem = 4096 87380 8388608
net.core.wmem_default = 65535
net.core.wmem_max = 8388608
net.ipv4.tcp_wmem = 4096 65535 8388608
net.ipv4.tcp_mem = 8388608 8388608 8388608
net.core.optmem_max = 40960

如果希望屏蔽别人 ping 你的主机,则加入以下代码:

# Disable ping requests

net.ipv4.icmp_echo_ignore_all = 1

编辑完成后,请执行以下命令使变动立即生效:

/sbin/sysctl -p

/sbin/sysctl -w net.ipv4.route.flush=1

 

################### 

所有rfc相关的选项都是默认启用的,因此网上的那些还自己写rfc支持的都可以扔掉了:) 

############################### 



net.inet.ip.sourceroute=0 

net.inet.ip.accept_sourceroute=0 

############################# 

通过源路由,攻击者可以尝试到达内部IP地址 --包括RFC1918中的地址,所以 

不接受源路由信息包可以防止你的内部网络被探测。 

################################# 



net.inet.tcp.drop_synfin=1 

################################### 

安全参数,编译内核的时候加了options TCP_DROP_SYNFIN才可以用,可以阻止某些OS探测。 

################################## 



kern.maxvnodes=8446 

#################http://www.bsdlover.cn#########&nbsp;

vnode 是对文件或目录的一种内部表达。 因此, 增加可以被操作系统利用的 vnode 数量将降低磁盘的 I/O。 

一般而言, 这是由操作系统自行完成的,也不需要加以修改。但在某些时候磁盘 I/O 会成为瓶颈, 

而系统的 vnode 不足, 则这一配置应被增加。此时需要考虑是非活跃和空闲内存的数量。 

要查看当前在用的 vnode 数量: 

# sysctl vfs.numvnodes 

vfs.numvnodes: 91349 

要查看最大可用的 vnode 数量: 

# sysctl kern.maxvnodes 

kern.maxvnodes: 100000 

如果当前的 vnode 用量接近最大值,则将 kern.maxvnodes 值增大 1,000 可能是个好主意。 

您应继续查看 vfs.numvnodes 的数值, 如果它再次攀升到接近最大值的程度, 

仍需继续提高 kern.maxvnodes。 在 top(1) 中显示的内存用量应有显著变化, 

更多内存会处于活跃 (active) 状态。 

#################################### 





kern.maxproc: 964 

#################http://www.bsdlover.cn#########&nbsp;

Maximum number of processes 

#################################### 

kern.maxprocperuid: 867 

#################http://www.bsdlover.cn#########&nbsp;

Maximum processes allowed per userid 

#################################### 

因为我的maxusers设置的是256,20+16maxusers=4116。 

maxprocperuid至少要比maxproc少1,因为init(8) 这个系统程序绝对要保持在运作状态。 

我给它设置的2068。 





kern.maxfiles: 1928 

#################http://www.bsdlover.cn#########&nbsp;

系统中支持最多同时开启的文件数量,如果你在运行数据库或大的很吃描述符的进程,那么应该设置在20000以上, 

比如kde这样的桌面环境,它同时要用的文件非常多。 

一般推荐设置为32768或者65536。 

#################################### 



kern.argmax: 262144 

#################http://www.bsdlover.cn#########&nbsp;

maximum number of bytes (or characters) in an argument list. 

命令行下最多支持的参数,比如你在用find命令来批量删除一些文件的时候 

find . -name "
.old" -delete,如果文件数超过了这个数字,那么会提示你数字太多的。 

可以利用find . -name "*.old" -ok rm {} \;来删除。 

默认的参数已经足够多了,因此不建议再做修改。 

#################################### 



kern.securelevel: -1 

#################http://www.bsdlover.cn#########&nbsp;

-1:这是系统默认级别,没有提供任何内核的保护错误;  

0:基本上作用不多,当你的系统刚启动就是0级别的,当进入多用户模式的时候就自动变成1级了。  

1:在这个级别上,有如下几个限制:  

a. 不能通过kldload或者kldunload加载或者卸载可加载内核模块;  

b. 应用程序不能通过/dev/mem或者/dev/kmem直接写内存;  

c. 不能直接往已经装在(mounted)的磁盘写东西,也就是不能格式化磁盘,但是可以通过标准的内核接口执行写操作;  

d. 不能启动X-windows,同时不能使用chflags来修改文件属性;  

2:在 1 级别的基础上还不能写没装载的磁盘,而且不能在1秒之内制造多次警告,这个是防止DoS控制台的;  

3:在 2 级别的级别上不允许修改IPFW防火墙的规则。  

如果你已经装了防火墙,并且把规则设好了,不轻易改动,那么建议使用3级别,如果你没有装防火墙,而且还准备装防火墙的话,不建议使用。 

我们这里推荐使用 2 级别,能够避免比较多对内核攻击。 

#################################### 



kern.maxfilesperproc: 1735 

#################http://www.bsdlover.cn#########&nbsp;

每个进程能够同时打开的最大文件数量,网上很多资料写的是32768 

除非用异步I/O或大量线程,打开这么多的文件恐怕是不太正常的。 

我个人建议不做修改,保留默认。 

#################################### 





kern.ipc.maxsockbuf: 262144 

#################http://www.bsdlover.cn#########&nbsp;

最大的套接字缓冲区,网上有建议设置为2097152(2M)、8388608(8M)的。 

我个人倒是建议不做修改,保持默认的256K即可,缓冲区大了可能造成碎片、阻塞或者丢包。 

#################################### 





kern.ipc.somaxconn: 128 

#################http://www.bsdlover.cn#########&nbsp;

最大的等待连接完成的套接字队列大小,即并发连接数。 

高负载服务器和受到Dos攻击的系统也许会因为这个队列被塞满而不能提供正常服务。 

默认为128,推荐在1024-4096之间,根据机器和实际情况需要改动,数字越大占用内存也越大。 

#################################### 





kern.ipc.nmbclusters: 4800 

#################http://www.bsdlover.cn#########&nbsp;

这个值用来调整系统在开机后所要分配给网络 mbufs 的 cluster 数量, 

由于每个 cluster 大小为 2K,所以当这个值为 1024 时,也是会用到 2MB 的核心内存空间。 

假设我们的网页同时约有 1000 个联机,而 TCP 传送及接收的暂存区大小都是 16K, 

则最糟的情况下,我们会需要 (16K+16K) * 1024,也就是 32MB 的空间, 

然而所需的 mbufs 大概是这个空间的二倍,也就是 64MB,所以所需的 cluster 数量为 64MB/2K,也就是 32768。 

对于内存有限的机器,建议值是 1024 到 4096 之间,而当拥有海量存储器空间时,我们可以将它设定为 4096 到 32768 之间。 

我们可以使用 netstat 这个指令并加上参数 -m 来查看目前所使用的 mbufs 数量。 

要修改这个值必须在一开机就修改,所以只能在 /boot/loader.conf 中加入修改的设定 

kern.ipc.nmbclusters=32768 

#################################### 





kern.ipc.shmmax: 33554432 

#################http://www.bsdlover.cn#########&nbsp;

共享内存和信号灯("System VIPC")如果这些过小的话,有些大型的软件将无法启动 

安装xine和mplayer提示的设置为67108864,即64M, 

如果内存多的话,可以设置为134217728,即128M 

#################################### 





kern.ipc.shmall: 8192 

#################http://www.bsdlover.cn#########&nbsp;

共享内存和信号灯("System VIPC")如果这些过小的话,有些大型的软件将无法启动 

安装xine和mplayer提示的设置为32768 

#################################### 



kern.ipc.shm_use_phys: 0 

#################http://www.bsdlover.cn#########&nbsp;

如果我们将它设成 1,则所有 System V 共享内存 (share memory,一种程序间沟通的方式)部份都会被留在实体的内存 (physical memory) 中,

而不会被放到硬盘上的 swap 空间。我们知道物理内存的存取速度比硬盘快许多,而当物理内存空间不足时, 

部份数据会被放到虚拟的内存上,从物理内存和虚拟内存之间移转的动作就叫作 swap。如果时常做 swap 的动作, 

则需要一直对硬盘作 I/O,速度会很慢。因此,如果我们有大量的程序 (数百个) 需要共同分享一个小的共享内存空间, 

或者是共享内存空间很大时,我们可以将这个值打开。 

这一项,我个人建议不做修改,除非你的内存非常大。 

#################################### 





kern.ipc.shm_allow_removed: 0 

#################http://www.bsdlover.cn#########&nbsp;

共享内存是否允许移除?这项似乎是在fb下装vmware需要设置为1的,否则会有加载SVGA出错的提示 

作为服务器,这项不动也罢。 

#################################### 



kern.ipc.numopensockets: 12 

#################http://www.bsdlover.cn#########&nbsp;

已经开启的socket数目,可以在最繁忙的时候看看它是多少,然后就可以知道maxsockets应该设置成多少了。 

#################################### 



kern.ipc.maxsockets: 1928 

#################http://www.bsdlover.cn#########&nbsp;

这是用来设定系统最大可以开启的 socket 数目。如果您的服务器会提供大量的 FTP 服务, 

而且常快速的传输一些小档案,您也许会发现常传输到一半就中断。因为 FTP 在传输档案时, 

每一个档案都必须开启一个 socket 来传输,但关闭 socket 需要一段时间,如果传输速度很快, 

而档案又多,则同一时间所开启的 socket 会超过原本系统所许可的值,这时我们就必须把这个值调大一点。 

除了 FTP 外,也许有其它网络程序也会有这种问题。 

然而,这个值必须在系统一开机就设定好,所以如果要修改这项设定,我们必须修改 /boot/loader.conf 才行 

kern.ipc.maxsockets="16424" 

#################################### 



kern.ipc.nsfbufs: 1456 

#################http://www.bsdlover.cn#########&nbsp;

经常使用 sendfile(2) 系统调用的繁忙的服务器,  

有必要通过 NSFBUFS 内核选项或者在 /boot/loader.conf (查看 loader(8) 以获得更多细节) 中设置它的值来调节 sendfile(2) 缓存数量。

这个参数需要调节的普通原因是在进程中看到 sfbufa 状态。sysctl kern.ipc.nsfbufs 变量在内核配置变量中是只读的。  

这个参数是由 kern.maxusers 决定的,然而它可能有必要因此而调整。 

在/boot/loader.conf里加入 

kern.ipc.nsfbufs="2496" 

#################################### 





kern.maxusers: 59 

#################http://www.bsdlover.cn#########&nbsp;

maxusers 的值决定了处理程序所容许的最大值,20+16*maxusers 就是你将得到的所容许处理程序。 

系统一开机就必须要有 18 个处理程序 (process),即便是简单的执行指令 man 又会产生 9 个 process, 

所以将这个值设为 64 应该是一个合理的数目。 

如果你的系统会出现 proc table full 的讯息的话,可以就把它设大一点,例如 128。 

除非您的系统会需要同时开启很多档案,否则请不要设定超过 256。 



可以在 /boot/loader.conf 中加入该选项的设定, 

kern.maxusers=256 

#################################### 



kern.coredump: 1 

#################http://www.bsdlover.cn#########&nbsp;

如果设置为0,则程序异常退出时不会生成core文件,作为服务器,不建议这样。 

#################################### 



kern.corefile: %N.core 

#################http://www.bsdlover.cn#########&nbsp;

可设置为kern.corefile="/data/coredump/%U-%P-%N.core" 

其中 %U是UID,%P是进程ID,%N是进程名,当然/data/coredump必须是一个实际存在的目录 

#################################### 





vm.swap_idle_enabled: 0 

vm.swap_idle_threshold1: 2 

vm.swap_idle_threshold2: 10 

######################### 

在有很多用户进入、离开系统和有很多空闲进程的大的多用户系统中很有用。 

可以让进程更快地进入内存,但它会吃掉更多的交换和磁盘带宽。 

系统默认的页面调度算法已经很好了,最好不要更改。 

######################## 





vfs.ufs.dirhash_maxmem: 2097152 

######################### 

默认的dirhash最大内存,默认2M 

增加它有助于改善单目录超过100K个文件时的反复读目录时的性能 

建议修改为33554432(32M) 

############################# 





vfs.vmiodirenable: 1 

################# 

这个变量控制目录是否被系统缓存。大多数目录是小的,在系统中只使用单个片断(典型的是1K)并且在缓存中使用的更小 (典型的是512字节)。 

当这个变量设置为关闭 (0) 时,缓存器仅仅缓存固定数量的目录,即使您有很大的内存。  

而将其开启 (设置为1) 时,则允许缓存器用 VM 页面缓存来缓存这些目录,让所有可用内存来缓存目录。 

不利的是最小的用来缓存目录的核心内存是大于 512 字节的物理页面大小(通常是 4k)。 

我们建议如果您在运行任何操作大量文件的程序时保持这个选项打开的默认值。  

这些服务包括 web 缓存,大容量邮件系统和新闻系统。 

尽管可能会浪费一些内存,但打开这个选项通常不会降低性能。但还是应该检验一下。 

#################### 





vfs.hirunningspace: 1048576 

############################ 

这个值决定了系统可以将多少数据放在写入储存设备的等候区。通常使用默认值即可, 

但当我们有多颗硬盘时,我们可以将它调大为 4MB 或 5MB。 

注意这个设置成很高的值(超过缓存器的写极限)会导致坏的性能。 

不要盲目的把它设置太高!高的数值会导致同时发生的读操作的迟延。 

############################# 





vfs.write_behind: 1 

######################### 

这个选项预设为 1,也就是打开的状态。在打开时,在系统需要写入数据在硬盘或其它储存设备上时, 

它会等到收集了一个 cluster 单位的数据后再一次写入,否则会在一个暂存区空间有写入需求时就立即写到硬盘上。 

这个选项打开时,对于一个大的连续的文件写入速度非常有帮助。但如果您遇到有很多行程延滞在等待写入动作时,您可能必须关闭这个功能。 

############################ 



net.local.stream.sendspace: 8192 

################################## 

本地套接字连接的数据发送空间 

建议设置为65536 

################################### 

net.local.stream.recvspace: 8192 

################################## 

本地套接字连接的数据接收空间 

建议设置为65536 

################################### 





net.inet.ip.portrange.lowfirst: 1023 

net.inet.ip.portrange.lowlast: 600 

net.inet.ip.portrange.first: 49152 

net.inet.ip.portrange.last: 65535 

net.inet.ip.portrange.hifirst: 49152 

net.inet.ip.portrange.hilast: 65535 

################### 

以上六项是用来控制TCP及UDP所使用的port范围,这个范围被分成三个部份,低范围、预设范围、及高范围。 

这些是你的服务器主动发起连接时的临时端口的范围,预设的已经1万多了,一般的应用就足够了。 

如果是比较忙碌的FTP server,一般也不会同时提供给1万多人访问的, 

当然如果很不幸,你的服务器就要提供很多,那么可以修改first的值,比如直接用1024开始 

######################### 





net.inet.ip.redirect: 1 

######################### 

设置为0,屏蔽ip重定向功能 

########################### 



net.inet.ip.rtexpire: 3600 

net.inet.ip.rtminexpire: 10 

######################## 

很多apache产生的CLOSE_WAIT状态,这种状态是等待客户端关闭,但是客户端那边并没有正常的关闭,于是留下很多这样的东东。 

建议都修改为2 

######################### 





net.inet.ip.intr_queue_maxlen: 50 

######################## 

Maximum size of the IP input queue,如果下面的net.inet.ip.intr_queue_drops一直在增加, 

那就说明你的队列空间不足了,那么可以考虑增加该值。 

########################## 

net.inet.ip.intr_queue_drops: 0 

#################### 

Number of packets dropped from the IP input queue,如果你sysctl它一直在增加, 

那么增加net.inet.ip.intr_queue_maxlen的值。 

####################### 





net.inet.ip.fastforwarding: 0 

############################# 

如果打开的话每个目标地址一次转发成功以后它的数据都将被记录进路由表和arp数据表,节约路由的计算时间 

但会需要大量的内核内存空间来保存路由表。 

如果内存够大,打开吧,呵呵 

############################# 





net.inet.ip.random_id: 0 

##################### 

默认情况下,ip包的id号是连续的,而这些可能会被攻击者利用,比如可以知道你nat后面带了多少主机。 

如果设置成1,则这个id号是随机的,嘿嘿。 

##################### 



net.inet.icmp.maskrepl: 0 

############################ 

防止广播风暴,关闭其他广播探测的响应。默认即是,无须修改。 

############################### 



net.inet.icmp.icmplim: 200 

############################## 

限制系统发送ICMP速率,改为100吧,或者保留也可,并不会给系统带来太大的压力。 

########################### 

net.inet.icmp.icmplim_output: 1 

################################### 

如果设置成0,就不会看到提示说Limiting icmp unreach response from 214 to 200 packets per second 等等了

不过禁止输出容易让我们忽视攻击的存在。这个自己看着办吧。 

###################################### 



net.inet.icmp.drop_redirect: 0 

net.inet.icmp.log_redirect: 0 

################################### 

设置为1,屏蔽ICMP重定向功能 

################################### 

net.inet.icmp.bmcastecho: 0 

############################ 

防止广播风暴,关闭广播ECHO响应,默认即是,无须修改。 

############################### 





net.inet.tcp.mssdflt: 512 

net.inet.tcp.minmss: 216 

############################### 

数据包数据段最小值,以上两个选项最好不动!或者只修改mssdflt为1460,minmss不动。 

原因详见http://www.bsdlover.cn/security/2007/1211/article_4.html 

############################# 





net.inet.tcp.keepidle: 7200000 

###################### 

TCP的套接字的空闲时间,默认时间太长,可以改为600000(10分钟)。 

########################## 



net.inet.tcp.sendspace: 32768 

#################http://www.bsdlover.cn#########&nbsp;

最大的待发送TCP数据缓冲区空间,应用程序将数据放到这里就认为发送成功了,系统TCP堆栈保证数据的正常发送。 

#################################### 

net.inet.tcp.recvspace: 65536 

################################### 

最大的接受TCP缓冲区空间,系统从这里将数据分发给不同的套接字,增大该空间可提高系统瞬间接受数据的能力以提高性能。 

################################### 

这二个选项分别控制了网络 TCP 联机所使用的传送及接收暂存区的大小。预设的传送暂存区为 32K,而接收暂存区为 64K。 

如果需要加速 TCP 的传输,可以将这二个值调大一点,但缺点是太大的值会造成系统核心占用太多的内存。 

如果我们的机器会同时服务数百或数千个网络联机,那么这二个选项最好维持默认值,否则会造成系统核心内存不足。 

但如果我们使用的是 gigabite 的网络,将这二个值调大会有明显效能的提升。 

传送及接收的暂存区大小可以分开调整, 

例如,假设我们的系统主要做为网页服务器,我们可以将接收的暂存区调小一点,并将传送的暂存区调大,如此一来,我们就可以避免占去太多的核心内存空间。 



net.inet.udp.maxdgram: 9216 

######################### 

最大的发送UDP数据缓冲区大小,网上的资料大多都是65536,我个人认为没多大必要, 

如果要调整,可以试试24576。 

############################## 

net.inet.udp.recvspace: 42080 

################## 

最大的接受UDP缓冲区大小,网上的资料大多都是65536,我个人认为没多大必要, 

如果要调整,可以试试49152。 

####################### 

以上四项配置通常不会导致问题,一般说来网络流量是不对称的,因此应该根据实际情况调整,并观察其效果。 

如果我们将传送或接收的暂存区设为大于 65535,除非服务器本身及客户端所使用的操作系统都支持 TCP 协议的 windows scaling extension (请参考 RFC 1323 文件)。

FreeBSD默认已支持 rfs1323 (即 sysctl 的 net.inet.tcp.rfc1323 选项)。 

################################################### 





net.inet.tcp.log_in_vain: 0 

################## 

记录下任何TCP连接,这个一般情况下不应该更改。 

#################### 



net.inet.tcp.blackhole: 0 

################################## 

建议设置为2,接收到一个已经关闭的端口发来的所有包,直接drop,如果设置为1则是只针对TCP包 

##################################### 



net.inet.tcp.delayed_ack: 1 

########################### 

当一台计算机发起TCP连接请求时,系统会回应ACK应答数据包。 

该选项设置是否延迟ACK应答数据包,把它和包含数据的数据包一起发送。 

在高速网络和低负载的情况下会略微提高性能,但在网络连接较差的时候, 

对方计算机得不到应答会持续发起连接请求,反而会让网络更加拥堵,降低性能。 

因此这个值我建议您看情况而定,如果您的网速不是问题,可以将封包数量减少一半 

如果网络不是特别好,那么就设置为0,有请求就先回应,这样其实浪费的网通、电信的带宽速率而不是你的处理时间:) 

############################ 





net.inet.tcp.inflight.enable: 1 

net.inet.tcp.inflight.debug: 0 

net.inet.tcp.inflight.rttthresh: 10 

net.inet.tcp.inflight.min: 6144 

net.inet.tcp.inflight.max: 1073725440 

net.inet.tcp.inflight.stab: 20 

########################### 

限制 TCP 带宽延迟积和 NetBSD 的 TCP/Vegas 类似。  

它可以通过将 sysctl 变量 net.inet.tcp.inflight.enable 设置成 1 来启用。  

系统将尝试计算每一个连接的带宽延迟积,并将排队的数据量限制在恰好能保持最优吞吐量的水平上。 

这一特性在您的服务器同时向使用普通调制解调器,千兆以太网,乃至更高速度的光与网络连接 (或其他带宽延迟积很大的连接) 的时候尤为重要, 

特别是当您同时使用滑动窗缩放,或使用了大的发送窗口的时候。  

如果启用了这个选项,您还应该把 net.inet.tcp.inflight.debug 设置为 0 (禁用调试), 

对于生产环境而言, 将 net.inet.tcp.inflight.min 设置成至少 6144 会很有好处。  

然而, 需要注意的是,这个值设置过大事实上相当于禁用了连接带宽延迟积限制功能。 

这个限制特性减少了在路由和交换包队列的堵塞数据数量,也减少了在本地主机接口队列阻塞的数据的数量。 

在少数的等候队列中、交互式连接,尤其是通过慢速的调制解调器,也能用低的 往返时间操作。 

但是,注意这只影响到数据发送 (上载/服务端)。对数据接收(下载)没有效果。 

调整 net.inet.tcp.inflight.stab 是 不 推荐的。 

这个参数的默认值是 20,表示把 2 个最大包加入到带宽延迟积窗口的计算中。  

额外的窗口似的算法更为稳定,并改善对于多变网络环境的相应能力,  

但也会导致慢速连接下的 ping 时间增长 (尽管还是会比没有使用 inflight 算法低许多)。  

对于这些情形, 您可能会希望把这个参数减少到 15, 10, 或 5;  

并可能因此而不得不减少 net.inet.tcp.inflight.min (比如说, 3500) 来得到希望的效果。 

减少这些参数的值, 只应作为最后不得已时的手段来使用。 

############################ 



net.inet.tcp.syncookies: 1 

######################### 

SYN cookies是一种用于通过选择加密的初始化TCP序列号,可以对回应的包做验证来降低SYN'洪水'攻击的影响的技术。 

默认即是,不需修改 

######################## 





net.inet.tcp.msl: 30000 

####################### 

这个值网上很多文章都推荐的7500, 

还可以改的更小一些(如2000或2500),这样可以加快不正常连接的释放过程(三次握手2秒、FIN_WAIT4秒)。 

######################### 

net.inet.tcp.always_keepalive: 1 

########################### 

帮助系统清除没有正常断开的TCP连接,这增加了一些网络带宽的使用,但是一些死掉的连接最终能被识别并清除。 

死的TCP连接是被拨号用户存取的系统的一个特别的问题,因为用户经常断开modem而不正确的关闭活动的连接。 

############################# 



net.inet.udp.checksum: 1 

######################### 

防止不正确的udp包的攻击,默认即是,不需修改 

############################## 



net.inet.udp.log_in_vain: 0 

####################### 

记录下任何UDP连接,这个一般情况下不应该修改。 

####################### 



net.inet.udp.blackhole: 0 

#################### 

建议设置为1,接收到一个已经关闭的端口发来的所有UDP包直接drop 

####################### 





net.inet.raw.maxdgram: 8192 

######################### 

Maximum outgoing raw IP datagram size 

很多文章建议设置为65536,好像没多大必要。 

###################################### 

net.inet.raw.recvspace: 8192 

###################### 

Maximum incoming raw IP datagram size 

很多文章建议设置为65536,好像没多大必要。 

####################### 



net.link.ether.inet.max_age: 1200 

#################### 

调整ARP清理的时间,通过向IP路由缓冲填充伪造的ARP条目可以让恶意用户产生资源耗竭和性能减低攻击。 

这项似乎大家都未做改动,我建议不动或者稍微减少,比如300(HP-UX默认的5分钟) 

####################### 



net.inet6.ip6.redirect: 1 

############################### 

设置为0,屏蔽ipv6重定向功能 

########################### 





net.isr.direct: 0 

#################http://www.bsdlover.cn#########&nbsp;

所有MPSAFE的网络ISR对包做立即响应,提高网卡性能,设置为1。 

#################################### 





hw.ata.wc: 1 

##################### 

这个选项用来打开 IDE 硬盘快取。当打开时,如果有数据要写入硬盘时,硬盘会假装已完成写入,并将数据快取起来。 

这种作法会加速硬盘的存取速度,但当系统异常关机时,比较容易造成数据遗失。 

不过由于关闭这个功能所带来的速度差异实在太大,建议还是保留原本打开的状态吧,不做修改。 

################### 





security.bsd.see_other_uids: 1 

security.bsd.see_other_gids: 1 

##################### 

不允许用户看到其他用户的进程,因此应该改成0, 

#######################

写得很好,自己亲自实践了,效果不错,感谢作者!原文地址:http://blog.csdn.net/21aspnet/article/details/6584792


admin 发布于  2015-10-18 22:39