作者: 8bto

  • 禁止显示或发送Apache版本号(设置ServerTokens)

    默认地,服务器HTTP响应头会包含apache和php版本号。像下面的,这是有危害的,因为这会让黑客通过知道详细的版本号而发起已知该版本的漏洞攻击。

    1.Server: Apache/2.2.17 (Unix) PHP/5.3.5

    为了阻止这个,需要在httpd.conf设置ServerTokens为Prod,这会在响应头中显示“Server:Apache”而不包含任何的版本信息。

    1.# vi httpd.conf

    2.ServerTokens Prod

    下面是ServerTokens的一些可能的赋值:

    ServerTokens Prod 显示“Server: Apache”

    ServerTokens Major 显示 “Server: Apache/2″

    ServerTokens Minor 显示“Server: Apache/2.2″

    ServerTokens Min 显示“Server: Apache/2.2.17″

    ServerTokens OS 显示 “Server: Apache/2.2.17 (Unix)”

    ServerTokens Full 显示 “Server: Apache/2.2.17 (Unix) PHP/5.3.5″ (如果你这指定任何的值,这个是默认的返回信息)

  • freebsd enter full pathname of shell or return ro /bin/sh

    解决方法:

     

    开机后进入单机模式,选择4

     

    或者是输入#boot -s

     

    然后执行

     

    /sbin/fsck

     

    /sbin/mount -a

     

    重新启动ok

  • WGet使用指南

    wget是一个从网络上自动下载文件的自由工具。它支持HTTP,HTTPS和FTP协议,可以使用HTTP代理.

     

    所谓的自动下载是指,wget可以在用户退出系统的之后在后台执行。这意味这你可以登录系统,启动一个wget下载任务,然后退出系统,wget将在后台执行直到任务完成,相对于其它大部分浏览器在下载大量数据时需要用户一直的参与,这省去了极大的麻烦。

     

    wget可以跟踪HTML页面上的链接依次下载来创建远程服务器的本地版本,完全重建原始站点的目录结构。这又常被称作”递归下载”。在递归下载的时候,wget遵循Robot Exclusion标准(/robots.txt). wget可以在下载的同时,将链接转换成指向本地文件,以方便离线浏览。

     

    wget非常稳定,它在带宽很窄的情况下和不稳定网络中有很强的适应性.如果是由于网络的原因下载失败,wget会不断的尝试,直到整个文件下载完 毕。如果是服务器打断下载过程,它会再次联到服务器上从停止的地方继续下载。这对从那些限定了链接时间的服务器上下载大文件非常有用。

     

    wget的常见用法

    wget的使用格式

     

    Usage: wget [OPTION]… [URL]…

    用wget做站点镜像:

    wget -r -p -np -k http://dsec.pku.edu.cn/~usr_name/

    # 或者

    wget -m http://www.tldp.org/LDP/abs/html/

    在不稳定的网络上下载一个部分下载的文件,以及在空闲时段下载

    wget -t 0 -w 31 -c http://dsec.pku.edu.cn/BBC.avi -o down.log &

    # 或者从filelist读入要下载的文件列表

    wget -t 0 -w 31 -c -B ftp://dsec.pku.edu.cn/linuxsoft -i filelist.txt -o down.log &

    上面的代码还可以用来在网络比较空闲的时段进行下载。我的用法是:在mozilla中将不方便当时下载的URL链接拷贝到内存中然后粘贴到文件filelist.txt中,在晚上要出去系统前执行上面代码的第二条。

     

    使用代理下载

    wget -Y on -p -k https://sourceforge.net/projects/wvware/

    代理可以在环境变量或wgetrc文件中设定

     

    # 在环境变量中设定代理

    export PROXY=http://211.90.168.94:8080/

    # 在~/.wgetrc中设定代理

    http_proxy = http://proxy.yoyodyne.com:18023/

    ftp_proxy = http://proxy.yoyodyne.com:18023/

    wget各种选项分类列表

    启动

    -V, –version 显示wget的版本后退出

    -h, –help 打印语法帮助

    -b, –background 启动后转入后台执行

    -e, –execute=COMMAND 执行`.wgetrc’格式的命令,wgetrc格式参见/etc/wgetrc或~/.wgetrc

    记录和输入文件

    -o, –output-file=FILE 把记录写到FILE文件中

    -a, –append-output=FILE 把记录追加到FILE文件中

    -d, –debug 打印调试输出

    -q, –quiet 安静模式(没有输出)

    -v, –verbose 冗长模式(这是缺省设置)

    -nv, –non-verbose 关掉冗长模式,但不是安静模式

    -i, –input-file=FILE 下载在FILE文件中出现的URLs

    -F, –force-html 把输入文件当作HTML格式文件对待

    -B, –base=URL 将URL作为在-F -i参数指定的文件中出现的相对链接的前缀

    –sslcertfile=FILE 可选客户端证书

    –sslcertkey=KEYFILE 可选客户端证书的KEYFILE

    –egd-file=FILE 指定EGD socket的文件名

    下载

    –bind-address=ADDRESS 指定本地使用地址(主机名或IP,当本地有多个IP或名字时使用)

    -t, –tries=NUMBER 设定最大尝试链接次数(0 表示无限制).

    -O –output-document=FILE 把文档写到FILE文件中

    -nc, –no-clobber 不要覆盖存在的文件或使用.#前缀

    -c, –continue 接着下载没下载完的文件

    –progress=TYPE 设定进程条标记

    -N, –timestamping 不要重新下载文件除非比本地文件新

    -S, –server-response 打印服务器的回应

    –spider 不下载任何东西

    -T, –timeout=SECONDS 设定响应超时的秒数

    -w, –wait=SECONDS 两次尝试之间间隔SECONDS秒

    –waitretry=SECONDS 在重新链接之间等待1…SECONDS秒

    –random-wait 在下载之间等待0…2*WAIT秒

    -Y, –proxy=on/off 打开或关闭代理

    -Q, –quota=NUMBER 设置下载的容量限制

    –limit-rate=RATE 限定下载输率

    目录

    -nd –no-directories 不创建目录

    -x, –force-directories 强制创建目录

    -nH, –no-host-directories 不创建主机目录

    -P, –directory-prefix=PREFIX 将文件保存到目录 PREFIX/…

    –cut-dirs=NUMBER 忽略 NUMBER层远程目录

    HTTP 选项

    –http-user=USER 设定HTTP用户名为 USER.

    –http-passwd=PASS 设定http密码为 PASS.

    -C, –cache=on/off 允许/不允许服务器端的数据缓存 (一般情况下允许).

    -E, –html-extension 将所有text/html文档以.html扩展名保存

    –ignore-length 忽略 `Content-Length’头域

    –header=STRING 在headers中插入字符串 STRING

    –proxy-user=USER 设定代理的用户名为 USER

    –proxy-passwd=PASS 设定代理的密码为 PASS

    –referer=URL 在HTTP请求中包含 `Referer: URL’头

    -s, –save-headers 保存HTTP头到文件

    -U, –user-agent=AGENT 设定代理的名称为 AGENT而不是 Wget/VERSION.

    –no-http-keep-alive 关闭 HTTP活动链接 (永远链接).

    –cookies=off 不使用 cookies.

    –load-cookies=FILE 在开始会话前从文件 FILE中加载cookie

    –save-cookies=FILE 在会话结束后将 cookies保存到 FILE文件中

    FTP 选项

    -nr, –dont-remove-listing 不移走 `.listing’文件

    -g, –glob=on/off 打开或关闭文件名的 globbing机制

    –passive-ftp 使用被动传输模式 (缺省值).

    –active-ftp 使用主动传输模式

    –retr-symlinks 在递归的时候,将链接指向文件(而不是目录)

    递归下载

    -r, –recursive 递归下载--慎用!

    -l, –level=NUMBER 最大递归深度 (inf 或 0 代表无穷).

    –delete-after 在现在完毕后局部删除文件

    -k, –convert-links 转换非相对链接为相对链接

    -K, –backup-converted 在转换文件X之前,将之备份为 X.orig

    -m, –mirror 等价于 -r -N -l inf -nr.

    -p, –page-requisites 下载显示HTML文件的所有图片

    递归下载中的包含和不包含(accept/reject)

    -A, –accept=LIST 分号分隔的被接受扩展名的列表

    -R, –reject=LIST 分号分隔的不被接受的扩展名的列表

    -D, –domains=LIST 分号分隔的被接受域的列表

    –exclude-domains=LIST 分号分隔的不被接受的域的列表

    –follow-ftp 跟踪HTML文档中的FTP链接

    –follow-tags=LIST 分号分隔的被跟踪的HTML标签的列表

    -G, –ignore-tags=LIST 分号分隔的被忽略的HTML标签的列表

    -H, –span-hosts 当递归时转到外部主机

    -L, –relative 仅仅跟踪相对链接

    -I, –include-directories=LIST 允许目录的列表

    -X, –exclude-directories=LIST 不被包含目录的列表

    -np, –no-parent 不要追溯到父目录

  • Linux定时执行任务命令概述:at和crontab

    在Linux下要定时执行任务,可以有两种方法实现:at命令和crontab。如果我们只是想要让特定任务运行一次,则可以使用at监控程序;如果是无人作业的情况,那么可以使用cron服务。

     

    AD:

     

    本文介绍在Linux下的两种定时执行任务的方法:at命令,以及crontab服务。

     

    (1)at命令

     

    假如我们只是想要让特定任务运行一次,那么,这时候就要用到at监控程序了。

     

    设置at命令很简单,指示定运行的时间,那么就会在哪个时候运行。at类似打印 进程,会把任务放到/var/spool/at目录中,到指定时间运行它 。at命令相当于另一个shell,运行at time命令时,它发送一个个命令,可以输入任意命令或者程序。at now + time命令可以在指示任务。

     

    假设处理一个大型数据库,要在别人不用系统时去处理数据,比如凌晨3点10分。那么我们就应该先建立/home/kyle/do_job脚本管理数据库,计划处理/home/kyle/do_job文件中的结果。正常方式是这样启动下列命令:

     

    # at 2:05 tomorrow

    at>/home/kyle/do_job

    at> Ctrl+D

    AT Time中的时间表示方法

     

    ———————————————————————–

    时 间 例子 说明

    ———————————————————————–

    Minuteat now + 5 minutes任务在5分钟后运行

    Hour at now + 1 hour 任务在1小时后运行

    Days at now + 3 days 任务在3天后运行

    Weeks at now + 2 weeks 任务在两周后运行

    Fixed at midnight 任务在午夜运行

    Fixed at 10:30pm任务在晚上10点30分

    注意:一定要检查一下atq的服务是否启 动,有些操作系统未必是默认启动的,linux默认为不启动,而ubuntu默认为启动的。检查是否启动,用service atd检查语法,用service atd status检查atd的状态,用service atd start启动atd服务。

     

    查看at执行的具体内容:一般位于/var/spool/at目录下面, 用vi打开,在最后一部分就是你的执行程序

     

    (2)crontab

     

    cron是一个linux下 的定时执行工具,可以在无需人工干预的情况下运行作业。由于Cron 是Linux的内置服务,但它不自动起来,可以用以下的方法启动、关闭这个服务:

     

    /sbin/service crond start//启动服务

    /sbin/service crond stop //关闭服务

    /sbin/service crond restart //重启服务

    /sbin/service crond reload//重新载入配置

    /sbin/service crond status//查看服务状态

    你也可以将这个服务在系统启 动的时候自动启动:

     

    在/etc/rc.d/rc.local这个脚本的末尾加上:

     

    /sbin/service crond start

    现在Cron这个服务已经在进程里面了,我们就可以用这个服务了,Cron服务提供以下几种接口供大家使用:

     

    1、直接用crontab命令编辑

     

    cron服务提供 crontab命令来设定cron服务的,以下是这个命令的一些参数与说明:

     

    crontab -u //设定某个用户的cron服务,一般root用户在执行这个命令的时候需要此参数

    crontab -l //列出某个用户cron服务的详细内容

    crontab -r //删除某个用户的cron服务

    crontab -e //编辑某个用户的cron服务

    比如说root查看自己的cron设置:crontab -u root -l

     

    再例如,root想删除fred的cron设置:crontab -u fred -r

     

    基本格式 :

     

    *****command

    分  时  日  月  周  命令

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

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

    第3列表示日期1~31

    第4列表示月份1~12

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

    第6列要运行的命令

    crontab文件的一些例子:

     

    #每晚的21:30重启apache。

    30 21 * * * /usr/local/etc/rc.d/lighttpd restart

     

    #每月1、10、22日

    45 4 1,10,22 * * /usr/local/etc/rc.d/lighttpd restart

     

    #每天早上6点10分

    10 6 * * * date

     

    #每两个小时

    0 */2 * * * date

     

    #晚上11点到早上8点之间每两个小时,早上8点

    0 23-7/2,8 * * * date

     

    #每个月的4号和每个礼拜的礼拜一到礼拜三的早上11点

    0 11 4 * mon-wed date

     

    #1月份日早上4点

    0 4 1 jan * date

  • /bin/false and /usr/sbin/nologin

    要拒绝系统用户登录,可以将其shell设置为/usr/sbin/nologin或者/bin/false

     

    # usermod -s | –shell /usr/sbin/nologin username

    或者

     

    # usermod -s | -shell /bin/false username

    /bin/false

     

    /bin/false什么也不做只是返回一个错误状态,然后立即退出。将用户的shell设置为/bin/false,用户会无法登录,并且不会有任何提示。

     

    /usr/sbin/nologin

     

    nologin会礼貌的向用户显示一条信息,并拒绝用户登录:

     

    This account is currently not available.

     

    有一些软件,比如一些ftp服务器软件,对于本地非虚拟账户,只有用户有有效的shell才能使用ftp服务。这时候就可以使用nologin使用户即不能登录系统,还能使用一些系统服务,比如ftp服务。/bin/false则不行,这是二者的重要区别之一。

     

    /etc/nologin

     

    如果存在/etc/nologin文件,则系统只允许root用户登录,其他用户全部被拒绝登录,并向他们显示/etc/nologin文件的内容。

     

    锁定用户账户

     

    # passwd -l | –lock username

    #解锁用户账户

     

    # passwd -u | –unlock username

    删除用户密码

     

    # passwd -d | –delete username

    ===

  • putty中文乱码问题解决

    ###putty中文乱码问题解决

     

    用putty从windows xp连接ubuntu server或者FreeBSD系统,其中中文部分乱码,经常遇到这个问题的时候,会觉得很郁闷。现共享一些解决这个问题的方法。

     

     

    ###方法一:

    打开putty主程序,选择window-〉Appearance-〉Font settings-〉Change Settings,选择Fixedsys字体,字符集选择CHINESE_GB2312。

    在window-〉Appearance-〉 Translation中,Received data assumed to be in which character set 中,把Use font encoding改为UTF-8

    如果经常使用,把这些设置保存在session里面.

    保存方法:再做完以上操作的同时选中以下两项:

    在window-〉Appearance-〉 Translation中,选中:TReat CJK ambiguous characters as wide和Caps Lock acts as Cyrillic switch即可。

     

    ###方法二:

    编辑/etc/sysconfig/i18n

     

    把第1句“LANG=”zh_CN.UTF-8″”改为“LANG=”zh_CN.GB18030″”,完成后保存重新登录即可。

     

    ##方法三:

    打开putty,登录成功后,在shell中输入

    # export LC_ALL= ‘zh_CN.utf8′

     

    # vi ~/.bash_profile

     

    LANG=zh_CN.GB18030

     

    LANGUAGE=zh_CN.GB18030:zh_CN.GB2312:zh_CN

     

    export LANG LANGUAGE

  • 查询域名目前的DNS服务器

    提供两种方法:

    1、在使用的操作系统里进入MS-DOS(命令提示行)界面

    输入 nslookup 回车

    输入 set type=ns 回车

    输入域名(不带WWW的),如:nihao.net 回车

    看到列出至少一个 nameserver = x.x.x.x

    那就是域名现在使用的DNS服务器了。

    2、可以在网站里查询:

    英文国际:http://www.registernames.net/whois.shtml

    英文国内:http://www.cnnic.net.cn/registration/domain.shtml

  • freebsd 统计连接数查看外部IP

    服务器上的一些统计数据:

     

    1)统计80端口连接数

     

    netstat -nat|grep -i “80”|wc -l

     

    1

     

    2)统计httpd协议连接数

     

    ps -ef|grep httpd|wc -l

     

    1

     

    3)、统计已连接上的,状态为“established’

     

    netstat -na|grep ESTABLISHED|wc -l

     

    2

     

    4)、查出哪个IP地址连接最多,将其封了.

     

     

    netstat -na|grep ESTABLISHED|awk ‘{print $5}’|awk -F: ‘{print $1}’|sort|uniq -c|sort -r +0n

    netstat -na|grep SYN|awk ‘{print $5}’|awk -F: ‘{print $1}’|sort|uniq -c|sort -r +0n

     

     

    netstat快速查看一下TCP连接情况

    netstat -n | awk ‘/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}’

    通过man netstat可以了解SYN_RCVD的意义。SYN_RCVD表示当前未完成的TCP SYN队列

     

    用命令:

     

    # netstat -an | grep SYN | wc -l

     

    $netstat -an | grep SYN_RECV | wc

    97 582 7857

    $netstat -an | grep 80 | wc

    916 5500 74164

  • Debian下OpenVPN的搭建

    apt-get install openvpn
    cp -R /usr/share/doc/openvpn/examples/easy-rsa /etc/openvpn
    cd /etc/openvpn/easy-rsa/2.0
    source vars
    ./clean-all
    ./build-ca
    ./build-key-server server
    ./build-key client1
    ./build-dh
    注意:上面操作全部直接回车即可,如果有选择Y/N的 全部选择Y即可。

    OpenVPN需要tun和iptables_nat模块支持,所以先检查你的VPS支持不支持。
    SSH登陆VPS后输入
    cat /dev/net/tun
    若返回信息为:cat: /dev/net/tun: File descriptor in bad state 说明tun/tap已经可以使用;
    如果返回:cat: /dev/net/tun: No such device 或其他则说明tun/tap没有被正确配置,发TK联系客服申请开通tun/tap。
    apt-get install iptables #如已安装跳过
    如果你的VPS是Xen或KVM的请输入:(eth0要根据具体的网卡标识来,可以通过ifconfig查看)
    iptables -t nat -A POSTROUTING -s 10.0.0.0/8 -o eth0 -j MASQUERADE
    如果是OpenVZ的请输入:(11.22.33.44是你VPS的IP)
    iptables -t nat -A POSTROUTING -s 10.0.0.0/8 -j SNAT –to-source 11.22.33.44
    iptables -t nat -A POSTROUTING -s 10.0.0.0/8 -o venet0 -j SNAT –to 11.22.33.44 //注意如果是venet0
    修改vi /etc/sysctl.conf net.ipv4.ip_forward=1 用sysctl –p使其生效
    然后用
    iptables -t nat -L
    查看iptables转发状态,如果显示以下类似的结果则说明转发成功:
    target prot opt source destination
    SNAT all — 10.0.0.0/8 anywhere to:11.22.33.44

    配置OpenVPN服务器端文件
    dev tap
    proto tcp
    port 1194
    ca /etc/openvpn/easy-rsa/2.0/keys/ca.crt
    cert /etc/openvpn/easy-rsa/2.0/keys/server.crt
    key /etc/openvpn/easy-rsa/2.0/keys/server.key
    dh /etc/openvpn/easy-rsa/2.0/keys/dh1024.pem
    user nobody
    group nogroup
    server 10.8.0.0 255.255.255.0
    persist-key
    persist-tun
    #status openvpn-status.log
    #verb 3
    client-to-client
    push “redirect-gateway def1”
    push “dhcp-option DNS 8.8.8.8”
    push “dhcp-option DNS 4.2.2.4”
    comp-lzo

    重启/etc/init.d/openvpn restart
    用FTP将
    /etc/openvpn/easy-rsa/2.0/keys/ca.crt
    /etc/openvpn/easy-rsa/2.0/keys/client1.crt
    /etc/openvpn/easy-rsa/2.0/keys/client1.key
    三个文件下载到本地并保存在OpenVPN的config目录,然后添加client.ovpn客户端文件,内容如下:
    client
    dev tap
    proto tcp

    # The hostname/IP and port of the server.
    # CHANGE THIS TO YOUR VPS IP ADDRESS
    remote 11.22.33.44 1194

    resolv-retry infinite
    nobind

    persist-key
    persist-tun

    ca ca.crt
    cert client1.crt
    key client1.key

    comp-lzo
    verb 3

    重启一下VPS基本上可以连接了。

    总结:

    最后可能遇到的问题
    1、Wed Oct 13 21:57:57 2010 us=250000 TCP: connect to 2**.*3*.*1*.1**:23 failed, will try again in 5 seconds: Connection refused (WSAECONNREFUSED)

    检查dev  将dev tun 改 dev tap 或反之 就OK了

    2、有可能无法连接ROUTE: route addition failed using CreateIpForwardEntry: 拒绝访问。
    这是无法添加路由,在windows7中想用route add 或相关route等命令需要以管理员身份运行,如果windows7下面没有以管理身份运行那么添加路由时候route命令后提示:请求的操作需要提升!
    解决方法:更改OpenVPN GUI兼容性

    h201188161431

    [download id=”5″]

  • FreeBSD中绑定多IP

    vi /etc/rc.conf

    以下是我在虚拟机中的一个绑定多IP示例:

     

    # Created: Sat Apr 10 17:06:56 2010

    # Enable network daemons for user convenience.

    # Please make all changes to this file, not to /etc/defaults/rc.conf.

    # This file now contains just the overrides from /etc/defaults/rc.conf.

    # — sysinstall generated deltas —

    ifconfig_em0=”inet 192.168.245.11 netmask 255.255.255.0″

    gateway_enable=”NO”

    defaultrouter=”192.168.245.2″

    hostname=”192.168.245.11″

    ifconfig_em0=”inet 192.168.245.14 netmask 255.255.255.0″

    ifconfig_em0_alias0=”inet 192.168.245.15 netmask 255.255.255.0″

    ifconfig_em0_alias1=”inet 192.168.245.16 netmask 255.255.255.0″

    ifconfig_em0_alias2=”inet 192.168.245.17 netmask 255.255.255.0″

    defaultrouter=”192.168.245.2″

    hostname=”192.168.245.11″

    sshd_enable=”yes”

     

    最后执行如下命令,让rc.conf立即生效

    # sh /etc/rc