海运的博客

Nginx安装配置防盗链模块nginx-accesskey

发布时间:April 13, 2012 // 分类:Nginx // No Comments

之前有介绍通过Nginx通过referer防盗链,此方法设置简单,不过referer信息可以伪造,不能达到完全防盗链的目的。
为追求完美可以使用nginx-accesskey模块防盗链,nginx-accesskey会根据不同的请求IP生成不同的key,拒绝无效的请求,经测试可防迅雷盗链。
安装需重新编译Nginx增加nginx-accesskey模块,Lnmp请参考Lnmp平滑升级及修改Nginx版本号
下载Nginx和nginx-accesskey

wget http://nginx.org/download/nginx-1.0.15.tar.gz
tar zxvf nginx-1.0.15.tar.gz 
cd nginx-1.0.15
wget http://wiki.nginx.org/images/5/51/Nginx-accesskey-2.0.3.tar.gz
tar zxvf Nginx-accesskey-2.0.3.tar.gz 

修改Nginx-accesskey配置文件:

vim nginx-accesskey-2.0.3/config 
#修改$HTTP_ACCESSKEY_MODULE为ngx_http_accesskey_module
USE_MD5=YES
USE_SHA1=YES
ngx_addon_name=ngx_http_accesskey_module
HTTP_MODULES="$HTTP_MODULES ngx_http_accesskey_module"
NGX_ADDON_SRCS="$NGX_ADDON_SRCS $ngx_addon_dir/ngx_http_accesskey_module.c"

编译安装Nginx:

 ./configure --user=www --group=www --prefix=/usr/local/nginx --with-http_stub_status_module \
--with-http_ssl_module --with-http_gzip_static_module --with-ipv6 --add-module=./nginx-accesskey-2.0.3/
make 
make install

编辑Nginx配置文件,添加:

#location / {       #限制相应目录
location ~ .*\.(7z|iso|msi|tar|zip|rar|gz|exe)$ {        #或限制相应文件
accesskey             on;
accesskey_hashmethod  md5;
accesskey_arg         "key";
accesskey_signature   "pass$remote_addr";      #pass为干扰码,可自定义修改
}

Nginx防盗链应用测试:

<?
$ipkey= md5("pass".$_SERVER['REMOTE_ADDR']);
echo "<a href=file.rar>file</a><br />";
echo "<a href=file.rar?key=".$ipkey.">file.rar?key=".$ipkey.">file</a><br />";
?>

Lnmp平滑升级及修改Nginx版本号

发布时间:April 13, 2012 // 分类:Nginx // No Comments

首先下载官方stable稳定版,当前最新stable版是1.0.15。

cd /usr/local/src/
wget http://nginx.org/download/nginx-1.0.15.tar.gz
tar zxvf nginx-1.0.15.tar.gz
cd nginx-1.0.15

修改源码,更改nginx版本信息。

vim src/core/nginx.h
#define NGINX_VERSION      "1.0.15" #版本号可自定义修改
#define NGINX_VER          "nginx/" NGINX_VERSION #nginx可自定义修改

例如修改为:

vim src/core/nginx.h
#define NGINX_VERSION      "1.0.0" 
#define NGINX_VER          "ows/" NGINX_VERSION 

修改:

vim src/http/ngx_http_header_filter_module.c
static char ngx_http_server_string[] = "Server: nginx" CRLF;

修改:

vim src/http/ngx_http_special_response.c
"<hr><center>nginx</center>" CRLF  

优化编译,去除DEBUG。

vim auto/cc/gcc
# debug
CFLAGS="$CFLAGS -g" #注释此行或删除

升级编译最好以原来编译的参数编译,查看原先编译的参数:

/usr/local/nginx/sbin/nginx -V

编译安装:

./configure --user=www --group=www --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module --with-http_gzip_static_module --with-ipv6
make #make后先不要make install
mv /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginx.old #备份旧程序
cp objs/nginx /usr/local/nginx/sbin/nginx #复制新程序至程序目录
/usr/local/nginx/sbin/nginx -t #测试是否有问题
make upgrade  #完成升级
/usr/local/nginx/sbin/nginx -v #查看升级后的版本号

Nginx/Apache/Lnmp网站常用日记统计命令

发布时间:April 13, 2012 // 分类:日记分析 // No Comments

Nginx配置日记格式为Apache日志格式,便于分析。
1.访问次数最多的前10个IP。

awk '{print $1}' www.haiyun.me.log|sort|uniq -c|sort -rn|head -n 10

2.访问次数最多的10个页面。

awk '{print $7}' www.haiyun.me.log|sort|uniq -c|sort -rn|head -n 10

3.访问最多的时间,取前十个。

awk '{print $4}' www.haiyun.me.log|cut -c 14-18|sort|uniq -c|sort -rn|head -n10

4.查看下载次数最多的文件,显示前10个。

awk '{print $7}' www.haiyun.me.log|awk -F '/' '{print $NF}'|sort|uniq -c|sort -rn|head -n 10
#如统计请求链接去除awk -F '/' '{print $NF}'|sort|

5.统计网站流量,以M为单位。

awk '{sum+=$10} END {print sum/1024/1024}' www.haiyun.me.log

6.统计IP平均流量、总流量。

awk 'BEGIN {print"ip average total"}{a[$1]+=$10;b[$1]++}END{for(i in a)print i,a[i]/1024/1024/b[i]"MB",\
a[i]/1024/1024"MB"}' www.haiyun.me.log |column -t

7.用sed统计特定时间内日志,配合以上使用awk分析。

sed -n '/10\/Feb\/2012:18:[0-9][0-9]:[0-9][0-9]/,$p' www.haiyun.me.log
#截取二月10号18点后所有日志
sed -n '/10\/Feb\/2012:18:[0-9][0-9]:[0-9][0-9]/,/10\/Feb\/2012:20:[0-9][0-9]:[0-9][0-9]/p' \
www.haiyun.me.log
#截取二月10号18点到20点之间日志

8.统计404或403最多的网址。

awk '$9 ~ /403/ {print $7}' www.haiyun.me.log|sort|uniq -c|sort -rn|head -n 80
awk '$9 ~ /404/ {print $7}' www.haiyun.me.log|sort|uniq -c|sort -rn|head -n 80

Linux下常用查看网络连接命令

发布时间:April 13, 2012 // 分类:Linux基础 // 1 Comment

查看所有80端口的连接数

netstat -nat|grep -i  "80" |wc -l

对连接的IP按连接数量进行排序

netstat -ntu | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -n

查看TCP连接状态

netstat -nat |awk '{print $6}'|sort|uniq -c|sort -rn
netstat -an | awk '/^tcp/ {++S[$NF]};END {for(a in S) print a, S[a]}'
netstat -an | awk '/^tcp/ {++state[$NF]}; END {for(key in state) print key,"\t",state[key]}'
netstat -an | awk '/^tcp/ {++arr[$NF]};END {for(k in arr) print k,"\t",arr[k]}'
netstat -an |awk '/^tcp/ {print $NF}'|sort|uniq -c|sort -rn
netstat -ant | awk '{print $NF}' | grep -v '[a-z]' | sort | uniq -c

查看80端口连接数最多的20个IP

netstat -anlp|grep 80|grep tcp|awk '{print $5}'|awk -F: '{print $1}'|sort|uniq -c|sort -nr|head -n20
netstat -ant |awk '/:80/{split($5,ip,":");++A[ip[1]]}END{for(i in A) print A[i],i}' |sort -rn|head -n20

用tcpdump嗅探80端口的访问看看谁最高

tcpdump -i eth0 -tnn dst port 80 -c 1000

查找较多time_wait连接

netstat -n|grep TIME_WAIT|awk '{print $5}'|sort|uniq -c|sort -rn|head -n20

查找较多的SYN连接

netstat -an | grep SYN | awk '{print $5}' | awk -F: '{print $1}' | sort | uniq -c | sort -nr | more

Linux/Centos/ubuntu下安装配置vsftpd

发布时间:April 12, 2012 // 分类:备份存储 // No Comments

首先安装Vsftpd,本文以Yum方式安装,当然也可以源码方式编译安装Vsftpd,感觉没那个必要。

yum -y install vsftpd

备份默认配置文件

cd /etc/vsftpd
cp vsftpd.conf vsftpd.conf.back
vim vsftpd.conf

添加如下配置:

listen=YES
hide_ids=YES
tcp_wrappers=NO
dirmessage_enable=NO
utf8_filesystem=YES
use_localtime=YES
xferlog_enable=YES
xferlog_std_format=YES
xferlog_file=/run/log/xferlog 
dual_log_enable=YES
vsftpd_log_file=/run/log/vsftpd.log
log_ftp_protocol=YES
#pam认证配置/etc/pam.d/vsftpd_db
pam_service_name=vsftpd_db
#处理ftp读写任务的vsftpd子进程运行用户
nopriv_user=www-data
#开启被动模式
pasv_enable=YES
pasv_min_port=65400
pasv_max_port=65410

#ubuntu使用本地用户shell为/usr/sbin/nologin时要将/usr/sbin/nologin添加到/etc/shells
#或去除/etc/pam.d/vsftpd内auth    required        pam_shells.so
local_umask=022
local_enable=YES
write_enable=YES
chroot_local_user=YES
chroot_list_enable=NO
allow_writeable_chroot=YES
userlist_enable=YES
userlist_deny=NO
#可登录的本地用户或虚拟用户列表
userlist_file=/etc/vsftpd/allow_user
#非匿名用户使用宿主用户
guest_enable=YES
#读写文件宿主用户
guest_username=www-data
#虚拟用户使用宿主用户权限
virtual_use_local_privs=YES
local_root=/webdav/
#user_sub_token=$USER
#local_root=/webdav/$USER
#虚拟用户配置文件目录,如user1配置文件/etc/vsftpd/vusers/user1
#user_config_dir=/etc/gfw/vsftpd/vusers

#如同时开启local和userlist_enable白名单,要将anonymous用户添加进去,不然不能匿名登录
anonymous_enable=YES
no_anon_password=YES
#匿名访问目录
anon_root=/mnt/
#匿名用户上传/删除/重命名权限
anon_upload_enable=NO
anon_mkdir_write_enable=NO
anon_other_write_enable=NO
anon_umask=022

虚拟用户密码使用db5格式:

apt install db-util
cat >> /etc/vsftpd/user.txt << EOF
testuser
password
EOF
db_load -T -t hash -f user.txt user.db
cat >> /etc/pam.d/vsftpd_db << EOF
#注意user文件不带后缀.db,不然会提示找不到文件
auth       required     pam_userdb.so db=/etc/vsftpd/user
account    required     pam_userdb.so db=/etc/vsftpd/user
session    required     pam_loginuid.so
EOF

使用htpasswd验证密码:

#使用openssl生成密码:echo 123456|openssl passwd -6 -in -
apt install htpasswd libpam-pwdfile
htpasswd -b -d /etc/gfw/vsftpd/user.htpasswd testuser password
cat >> /etc/pam.d/vsftpd_db << EOF
auth required pam_pwdfile.so pwdfile /etc/vsftpd/user.htpasswd
account required pam_permit.so
EOF

如有开启iptalbes防火墙,放行Vsftpd端口:

iptables -A INPUT -p tcp   --dport 21 -j ACCEPT
iptables -A INPUT -p tcp   --dport 65400:65410 -j ACCEPT

启动Vsftpd,配置为开机自启动。

/etc/init.d/vsftpd start
chkconfig vsftpd on

添加用户:

adduser test -s /sbin/nologin -d /home/test
passwd test
分类
最新文章
最近回复
  • 海运: 恩山有很多。
  • swsend: 大佬可以分享一下固件吗,谢谢。
  • Jimmy: 方法一 nghtp3步骤需要改成如下才能编译成功: git clone https://git...
  • 海运: 地址格式和udpxy一样,udpxy和msd_lite能用这个就能用。
  • 1: 怎么用 编译后的程序在家里路由器内任意一台设备上运行就可以吗?比如笔记本电脑 m参数是笔记本的...
  • 孤狼: ups_status_set: seems that UPS [BK650M2-CH] is ...
  • 孤狼: 擦。。。。apcupsd会失联 nut在冲到到100的时候会ONBATT进入关机状态,我想想办...
  • 海运: 网络,找到相应的url编辑重发请求,firefox有此功能,其它未知。
  • knetxp: 用浏览器F12网络拦截或监听后编辑重发请求,修改url中的set为set_super,将POS...
  • Albert: 啊啊啊啊啊啊啊啊啊 我太激动了,终于好了英文区搜索了半天,翻遍了 pve 论坛没找到好方法,博...
归档