分类 Linux 下的文章

网上lnmp/nginx防盗链完整设置方法总结

Ps:防盗链的意义就是保证自己的版权,不免网站的流量流失,为他人做嫁衣。下面是网上看到的三种方法:

  • 修改 /usr/local/nginx/conf/nginx.conf 这个配置文件。
    找到

`location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
{
expires 30d;
}`
修改成:
location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
{
valid_referers none blocked *.jannn.com jannn.com;
if($invalid_referer) {
rewrite ^/ https://blog.pcwuyu.com/404.jpg;
#return404;
}
expires 30d;
}
第一行: location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
其中“gif|jpg|jpeg|png|bmp|swf”设置防盗链文件类型,自行修改,每个后缀用“|”符号分开!
第三行:valid_referers none blocked *.pcwuyu.com pcwuyu.com;
就是白名单,允许文件链出的域名白名单,自行修改成您的域名!*.pcwuyu.com这个指的是子域名,域名与域名之间使用空格隔开!
第五行:rewrite ^/ http://www.jannn.com/404.jpg;
这个图片是盗链返回的图片,也就是替换盗链网站所有盗链的图片。这个图片要放在没有设置防盗链的网站上,因为防盗链的作用,这个图片如果也放在防盗链网站上就会被当作防盗链显示不出来了,盗链者的网站所盗链图片会显示X符号。
这样设置差不多就可以起到防盗链作用了,上面说了,这样并不是彻底地实现真正意义上的防盗链!
我们来看第三行:valid_referers none blocked *.jannn.com jannn.com;
valid_referers 里多了“none blocked
我们把“none blocked”删掉,改成
valid_referers *.pcwuyu.com pcwuyu.com;
nginx彻底地实现真正意义上的防盗链完整的代码应该是这样的:
location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
{
valid_referers *.jannn.com jannn.com;
if($invalid_referer) {
rewrite ^/ http://www.jannn.com/404.jpg;
#return404;
}
expires 30d;
这样您在浏览器直接输入图片地址就不会再显示图片出来了,也不可能会再右键另存什么的。
第五行:rewrite ^/ http://www.jannn.com/404.jpg;
这个是给图片防盗链设置的防盗链返回图片,如果我们是文件需要防盗链下载,把第五行:
rewrite ^/ http://www.jannn.com/404.jpg;
改成一个链接,可以是您主站的链接,比如把第五行改成小简博客主页:
rewrite ^/ http://www.jannn.com;
这样,当别人输入文件下载地址,由于防盗链下载的作用就会跳转到您设置的这个链接!
最后,配置文件设置完成别忘记重启nginx生效!
平滑重启nginx

`/etc/init.d/nginx reload`
  • 后面几种方法:
    一般常用的方法是在server或者location段中加入!

valid_referers none blocked www.pcwuyue.com pcwuyu.com;
详见下面的例子

  • 一、针对不同的文件类型
    上面那篇文章详细且经过本人的实践,却是可行,网上大都说是

location ~* \.(gif|jpg|jpeg|png|bmp|txt|zip|jar|swf)$ {
valid_referers none blocked *.mynginx.com;
if ($invalid_referer) {
rewrite ^/ http://www.mynginx.com/daolian.gif;
#return 403;
}
将这段代码添加到server段,但是其实后面还有
location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
{
expires 30d;
}
必须将这两段代码合成为一段,否则,防盗链并不会生效。有点奇怪的是,我开放到防盗链开始几天都是没出现资金的防盗链图片,过了几天后才出现的,不知道为什么,知道的也可以告诉我。

  • 二、针对不同的目录
    location /img/ {

root /data/img/;
valid_referers none blocked *.yiibase.com yiibase.com;
if($invalid_referer) {
rewrite ^/ http://www.yiibase.com/images/error.gif;
#return403;
}
}
以上是nginx自带的防盗链功能。

  • 三、nginx 的第三方模块ngx_http_accesskey_module 来实现下载文件的防盗链
    安装Nginx和nginx-http-access模块

tar zxvf nginx-0.7.61.tar.gz
cd nginx-0.7.61/
tar xvfz nginx-accesskey-2.0.3.tar.gz
cd nginx-accesskey-2.0.3
vi config
把HTTP_MODULES="$HTTP_MODULES $HTTP_ACCESSKEY_MODULE"修改成HTTP_MODULES="$HTTP_MODULESngx_http_accesskey_module(这是此模块的一个bug)
./configure --user=www --group=www \
--prefix=/usr/local/nginx --with-http_stub_status_module \
--with-http_ssl_module --add-module=/root/nginx-accesskey-2.0.3
server{
.....
location /download {
accesskey on;
accesskey_hashmethod md5;
accesskey_arg "key";
accesskey_signature "mypass$remote_addr";
}
}
/download 为你下载的目录。
前台php产生的下载路径格式是:
http://*****.com/download/1.zip?key=<?php echo md5('mypass'.$_SERVER["REMOTE_ADDR"]);?>
这样,当访问没有跟参数一样时,其他用户打开时,就出现:403

NginxHttpAccessKeyModule第三方模块,实现方法如下:
1.下载Nginx HttpAccessKeyModule模块文件:Nginx-accesskey-2.0.3.tar.gz;
2.解压此文件后,找到nginx-accesskey-2.0.3下的config文件。编辑此文件:替换其中的"$HTTP_ACCESSKEY_MODULE"为"ngx_http_accesskey_module";
3.用一下参数重新编译nginx:
./configure --add-module=path/to/nginx-accesskey
4.修改nginx的conf文件,添加以下几行:
location /download {
accesskey on;
accesskey_hashmethod md5;
accesskey_arg "key";
accesskey_signature "mypass$remote_addr";
}
其中:
accesskey为模块开关;
accesskey_hashmethod为加密方式MD5或者SHA-1;
accesskey_arg为url中的关键字参数;
accesskey_signature为加密值,此处为mypass和访问IP构成的字符串。
访问测试脚本download.php:
<?php
$ipkey= md5("mypass".$_SERVER['REMOTE_ADDR']);
$output_add_key="<a `href=http://www.example.cn/download/G3200507120520LM.rar?key=".$ipkey.">`
download_add_key</a>";
$output_org_url="<a href=http://www.example.cn/download
/G3200507120520LM.rar>download_org_path</a>";
echo$output_add_key;
echo$output_org_url;
?>
访问第一个download_add_key链接可以正常下载,第二个链接download_org_path会返回403 Forbidden错误。
如果不怕麻烦,有条件实现的话,推荐使用Nginx HttpAccessKeyModule这个东西。
他的运行方式是:如我的download 目录下有一个 file.zip 的文件。对应的URI 是http://www.yiibase.com/download/file.zip
使用ngx_http_accesskey_module 模块后http://www.yiibase.com/download/file.zip?key=09093abeac094. 只有给定的key值正确了,才能够下载download目录下的file.zip。而且 key 值是根据用户的IP有关的,这样就可以避免被盗链了。
据说Nginx HttpAccessKeyModule现在连迅雷都可以防了,可以尝试一下。
下载:
Nginx 0.8.51 稳定版下载:nginx-0.8.51,nginx/Windows-0.8.51
HttpAccessKeyModule第三方模块下载:http://wiki.nginx.org/images/5/51/Nginx-accesskey-2.0.3.tar.gz

lnmp 网站从根目录迁移子目录和防跨站

因为以后vps上可能会挂上几个网站,所以为了安全考虑,打算升级到php5.3.6,减少lnmp下跨站攻击问题。apache在这方面感觉做的不错,权限限制的很好 。

估计是人品差,在测试环境下升级没有任何问题,到了在线就无法启动php-fpm了,说是没有找到该文件和命令,一看就知道是升级失败了,编译安装失败,压根就没装上php。于是只好再次编译安装了,花了不长的时间,编译完成,成功启动,但是又提示两个警告,只好重新编译memcache 和pdo_mysql,把这两个也一起给整了。折腾完了,没有了该死的warning。感觉世界是如此美好。

顺便把根目录下的wordpress网站也迁移到了子目录里,方便以后管理。方法也容易:
nginx.conf里的server_name 修改为一个随便的二级域名,我修改为no.pcwuyu.com,然后自己放了张ff7的高分辨率大图,习惯用这个做测试了,看着都爽呀。

然后添加虚拟机,这里虚拟机配置文件为ksharp.conf,里面添加上server_namewww.pcwuyu.com,接着添加自己写的rewrite规则和nginx下的防盗链规则,保存后放到vhost文件夹下,vhost文件夹保存在nginxconf目录里,再次修改nginx.conf,在server段添加include vhost/*.conf,这里用“*”表示vhost下的所有虚拟机配置文件,因为以后可能还要添加多个网站,省的每次都该。保存好后,重启nginx

接着给网站目录分配权限,在php.ini最后添加:
[HOST=www.pcwuyu.com]
open_basedir=/home/wwwroot/pcwuyu/:/tmp/:/proc/
[PATH=/home/wwwroot/pcwuyu]
open_basedir=/home/wwwroot/pcwuyu/:/tmp/:/proc/

接着重启hp-fpm,就行了,多个网站按照这个模板添加多个,目录和hostname改成对应的就行了。

出处

增强VPS SSH账号安全:改端口,禁用Root,密钥登录,Denyhosts防暴力攻击

VPS SSH账号是我们日常管理VPS的主要登入方式,尤其是Root账号,对Linux系统安全至关重要。以前好多站长喜欢用Putty中文版,这实际是别人修改官方Putty汉化而来,这些软件被植入了后门,导致好几个有名的站点信息泄露,损失惨重。

如何知道自己的VPS账号正在遭受坏人的扫描和暴力破解呢?简单的方法就是查看日志:cat /var/log/auth.log。如何来增强VPS SSH账号的安全性呢?除了养成使用正规软件的好习惯外,还要从VPS本身来加强VPS SSH账号的安全性。

默认的SSH端口都是22,通过修改自己的VPS的端口先为扫描者增加一道端口门槛,VPS默认的账号是Root,如果我们禁用了Root,那么要攻破账号又得先暴力猜测VPS的账号,难度又增加几分。如果还不放心,我们可以直接禁用密码登录验证VPS的方式,改用密钥登录,这样安全系数是相当高了。

Linux还有一个自动统计VPS登录错误工具:Denyhosts,一旦登录VPS账号错误次数超过了Denyhosts安全设置,Denyhosts就会将该IP记录下来,同时将其放入黑名单当中,禁止该IP在某一段时间内继续访问VPS,通过Denyhosts可以实现自动封锁恶意IP。

VPS主机和网站安全优化是一个持久的问题,没有一劳永逸的“安全设置”,道高一尺,魔高一丈,我们只有不断地发现问题,才能最大限度地保护自己网站和VPS安全:

  • 一、增强VPS SSH账号安全方法一:修改SSH登录端口

    • 1、用下面命令进入配置文件。
      vi /etc/ssh/sshd_config

    • 2、找到#port 22,将前面的#去掉,然后修改端口 port 123(自己设定)。

    • 3、然后重启ssh服务。
      /etc/init.d/ssh restart

  • 二、增强VPS SSH账号安全方法二:使用密钥登录SSH

    • 1、SSH登录方式有账号+密码和密钥两种形式,为了阻止暴力破解VPS的账号和密码,我们可以放弃密码验证的方式,改用密钥文件验证。

    • 2、执行以下命令在VPS上生成密钥文件。
      ssh-keygen -t rsa

    • 3、生成密钥时会询问你密钥保存的位置,默认即可,还有你可以为你的密钥还设置一个密码,默认为空。

    • 4、密钥生成后,进入密钥存放的目录中,执行以下命令,将公钥生成一个新的文件。
      cat id_rsa.pub >> authorized_keys

    • 5、将id-rsa这个私钥文件下载到本地,打开PuTTYGen软件,执行Conversions->Import Key,导入这个私钥文件。

    • 6、Putty使用密钥登录SSH方法:如果你要使用Putty,在PuTTYGen中选择Save private key,这时会在本地生成一个PPK文件。

    • 7、然后在Putty中填入服务器名,在SSH授权方式中选择密钥,导入刚刚保存的PPK文件。

    • 8、使用Xshell通过密钥登录VPS方法:如果要使用Xshell,请在PuTTYGen的Conversions中选择Export Open#SSH Key,设置一个名称保存。

    • 9、然后启用Xshell,填入服务器IP,在用户身份验证中选择“Public Key”,然后浏览导入刚刚你保存的Key文件。

    • 10、导入了Key后,你就可以直接打开登录VPS了,不需要输入密码,即可进入VPS。

    • 11、有了密钥登录VPS,我们就可以禁止用密码登录这种验证方式了,还是编辑配置:vim /etc/ssh/sshd_config,添加一行:PasswordAuthentication no,如果有了这一行,请把yes改成no,保存,重启SSH服务,生效。

  • 三、增强VPS SSH账号安全方法三:禁用Root账号

    • 1、如果你已经设置SSH密钥登录的方式,就可以禁用Root账号了,或者你可以新建一个VPS账号。执行以下命令:
      useradd freehao123 #添加用户名

passwd freehao123 #为freehao123用户名设置密码

    • 2、然后编辑进入配置:vim /etc/ssh/sshd_config,找到PermitRootLogin yes,然后后面的Yes改no,如果没有这一行命令,直接将PermitRootLogin no 加进去。

    • 3、保存后,重启SSH服务,生效。

    • 四、增强VPS SSH账号安全方法四:Denyhosts防暴力攻击

      • 1、Linux各平台现在基本上都可以直接安装Denyhosts了,执行以下命令:
        ×Debian/Ubuntu:

    sudo apt-get install denyhosts
    ×RedHat/CentOS
    yum install denyhosts
    ×Archlinux
    yaourt denyhosts
    ×Gentoo
    emerge -av denyhosts

    • 2、安装好了Denyhosts,默认的配置基本上就可以防御一定的暴力攻击了,/etc/hosts.deny 文件里保存了被屏蔽的记录。

    • 3、如果你要自定义Denyhosts的相关配置,执行:vim /etc/denyhosts.conf,以下是相关参数的说明:
      SECURE_LOG = /var/log/auth.log #ssh 日志文件,它是根据这个文件来判断的。

    HOSTS_DENY = /etc/hosts.deny #控制用户登陆的文件
    PURGE_DENY = #过多久后清除已经禁止的,空表示永远不解禁
    BLOCK_SERVICE = sshd #禁止的服务名,如还要添加其他服务,只需添加逗号跟上相应的服务即可
    DENY_THRESHOLD_INVALID = 5 #允许无效用户失败的次数
    DENY_THRESHOLD_VALID = 10 #允许普通用户登陆失败的次数
    DENY_THRESHOLD_ROOT = 1 #允许root登陆失败的次数
    DENY_THRESHOLD_RESTRICTED = 1
    WORK_DIR = /var/lib/denyhosts #运行目录
    SUSPICIOUS_LOGIN_REPORT_ALLOWED_HOSTS=YES
    HOSTNAME_LOOKUP=YES #是否进行域名反解析
    LOCK_FILE = /var/run/denyhosts.pid #程序的进程ID
    ADMIN_EMAIL = [email protected] #管理员邮件地址,它会给管理员发邮件
    SMTP_HOST = localhost
    SMTP_PORT = 25
    SMTP_FROM = DenyHosts
    SMTP_SUBJECT = DenyHosts Report
    AGE_RESET_VALID=5d #用户的登录失败计数会在多久以后重置为0,(h表示小时,d表示天,m表示月,w表示周,y表示年)
    AGE_RESET_ROOT=25d
    AGE_RESET_RESTRICTED=25d
    AGE_RESET_INVALID=10d
    RESET_ON_SUCCESS = yes #如果一个ip登陆成功后,失败的登陆计数是否重置为0

    • 五、增强VPS SSH账号小结

      • 1、上面讲到了四个方法来增强VPS SSH账号的安全性,那么如何得知自己的VPS曾经或正在遭受账号暴力破解登录呢?执行以下命令,查询出来的结果中包含了“ip地址=数量”就是攻击者信息。
        cat /var/log/secure|awk '/Failed/{print $(NF-3)}'|sort|uniq -c|awk '{print $2"="$1;}'

      • 2、目前在Putty官网上没有看到中文版本的Putty,所以网上流行的一些汉化版本的Putty很有可能被植入了后门,大家在使用时一定要特别留心。Xshell官网直接提供了多国语言,包括中文在内。

    Ubuntu下挂载可读写exFat格式分区

    现在exFat文件系筒用作FLASH存储设备的格式也变得普遍起来了,可是Ubuntu自身并没有支持这种格式,需要另外安装软件。

    sudo apt-get install subversion scons libfuse-dev gcc
    
    cd ~
    
    svn co http://exfat.googlecode.com/svn/trunk/ exfat-read-only
    
    cd exfat-read-only   
    
    scons   
    
    sudo scons install
    
    cd ..   
    
    rm –rf exfat-read-only

    最新文章

    最近回复

    • 测试: 评论测试内容
    • 袅残烟: [嘻嘻]万网域名也降价了
    • yxy: 以后,我会经常来逛的。
    • 袅残烟: LXDE可以搭配xf...
    • Fooleap: 从好几年前用 Lub...

    分类

  • 默认分类 (25)
  • 运维 (53)
  • docker (1)
  • 动漫 (19)
  • 科普知识 (15)
  • 苍白边缘 (17)
  • 资源 (12)
  • Linux (58)
  • Arch Linux (19)
  • 计算机 (18)
  • 编程 (3)
  • Java (4)
  • python (0)
  • php (0)
  • 前端 (1)
  • 公告 (1)
  • 归档




      其它