分类 运维 下的文章

Apache&nginx rewrite规则学习总结

几个配置实例:

1、wordpress安装在子目录时nginx重定向的写法
LINK

a域名指向目录A,b域名指向目录B,并且B目录是A目录的子目录,即 “/目录A/目录B/ ”这样的目录结构,如果把B目录里安装的wordpress固定链接结构改成/archive/12/这样的话,就会出现404错误,而且404指向的是为a域名配置的404页面。

解决方法是,在域名a的server块里面添加如下代码:

        location /目录B/ { 
        rewrite ^index\.php$ - last;

        if ( !-e $request_filename ) { 
                rewrite . /目录B/index.php last; 
        } 
        }

添加后代码应该类似于这样:

server
{
	listen       80;
	server_name 域名A;
	index index.html index.htm index.php default.html default.htm default.php;

  location /目录B/ { rewrite ^index\.php$ - last;

      if ( !-e $request_filename ) { rewrite . /目录B/index.php last; } }

.................

}

重启nginx或者/etc/initd./nginx reload即可生效。

2、domain.com/bluewolf/tag/linux 跳转到 blog.b1uew01f.net/tag/linux

    location /bluewolf {
        if (!-f $request_filename){
                        rewrite ^/bluewolf/(.*)$ http://blog.b1uew01f.net/$1 permanent;
                }
        }

3、目录对换 /123456/xxxx ====> /xxxx?id=123456

rewrite ^/(\d )/(. )/  /$2?id=$1 last; 

4、禁止访问以/data开头的文件
location ~ ^/data{deny all;}

禁止访问以.sh,.flv,.mp3为文件后缀名的文件
location ~ .*\.(sh|flv|mp3)${return 403;}

5、将多级目录下的文件转成一个文件,增强seo效果
/job-123-456-789.html 指向 /job/123/456/789.html

rewrite ^/job-([0-9] )-([0-9] )-([0-9] )\.html$ /job/$1/$2/jobshow_$3.html last;

6、文件和目录不存在的时候重定向:

if (!-e $request_filename) {proxy_pass http://127.0.0.1;}

7、Apache .htaccess Rewrite解决问号匹配的写法

如news.asp?id=123 需要把它定向到 news/123.html,这个用 RewriteRule 怎么写?
RewriteRule ^news\.asp\?id=(\d+)$ news/$1.html [L] 这个不行。

可以使用:

RewriteCond %{QUERY_STRING} ^id=(.+) 
RewriteRule news\.php$ news/$1.html [L]

RewriteRule 不会去匹配 ? 后面的字符串,需要用RewriteCond来匹配

参考资料:
Nginx配置及Rewrite规则 http://bbs.aliyun.com/read/137857.html

超详细的 NGINX URL重写实例讲解 http://www.jbxue.com/article/2187.html

windows 135 137 138 139 445端口介绍及关闭方法

135端口

端口说明:135端口主要用于使用RPC(Remote Procedure Call,远程过程调用)协议并提供DCOM(分布式组件对象模型)服务,通过RPC可以保证在一台计算机上运行的程序可以顺利地执行远程计算机上的代码;使用DCOM可以通过网络直接进行通信,能够跨包括HTTP协议在内的多种网络传输。
端口漏洞:相信去年很多Windows 2000和Windows XP用户都中了“冲击波”病毒,该病毒就是利用RPC漏洞来攻击计算机的。RPC本身在处理通过TCP/IP的消息交换部分有一个漏洞,该漏洞是由于错误地处理格式不正确的消息造成的。该漏洞会影响到RPC与DCOM之间的一个接口,该接口侦听的端口就是135。
操作建议:为了避免“冲击波”病毒的攻击,建议关闭该端口。
在许多“网管”眼里,135端口是最让人捉摸不透的端口,因为他们中的大多数都无法明确地了解到135端口的真正作用,也不清楚该端口到底会有哪些潜在的危险。直到一种名为“IEen”的专业远程控制工具出现,人们才清楚135端口究竟会有什么样的潜在安全威胁。 IEen工具能够借助135端口轻松连接到Internet上的其他工作站,并远程控制该工作站的IE浏览器。例如,在浏览器中执行的任何操作,包括浏览页面内容、输入帐号密码、输入搜索关键字等,都会被IEen工具监控到。甚至在网上银行中输入的各种密码信息,都能被IEen工具清楚地获得。除了可以对远程工作站上的IE浏览器进行操作、控制外,IEen工具通过135端口几乎可以对所有的借助DCOM开发技术设计出来的应用程序进行远程控制,例如IEen工具也能轻松进入到正在运行Excel的计算机中,直接对Excel进行各种编辑操作。 怎么样?135端口对外开放是不是很危险呀?当然,这种危险毕竟是理论上的,要想真正地通过135端口入侵其他系统,还必须提前知道对方计算机的IP地址、系统登录名和密码等。只要你严格保密好这些信息,你的计算机被IEen工具攻击的可能性几乎不存在。 为什么IEen工具能利用135端口攻击其他计算机呢?原来该工具采用了一种DCOM技术,可以直接对其他工作站的DCOM程序进行远程控制。DCOM技术与对方计算机进行通信时,会自动调用目标主机中的RPC服务,而RPC服务将自动询问目标主机中的135端口,当前有哪些端口可以被用来通信。如此一来,目标主机就会提供一个可用的服务端口作为数据传输通道使用。在这一通信过程中,135端口的作用其实就是为RPC通信提供一种服务端口的映射功能。说简单一点,135端口就是RPC通信中的桥梁。

137端口

137端口的主要作用是在局域网中提供计算机的名字或IP地址查询服务,一般安装了NetBIOS协议后,该端口会自动处于开放状态。 要是非法入侵者知道目标主机的IP地址,并向该地址的137端口发送一个连接请求时,就可能获得目标主机的相关名称信息。例如目标主机的计算机名称,注册该目标主机的用户信息,目标主机本次开机、关机时间等。此外非法入侵者还能知道目标主机是否是作为文件服务器或主域控制器来使用。

138端口

137、138端口都属于UDP端口,它们在局域网中相互传输文件信息时,就会发生作用。而138端口的主要作用就是提供NetBIOS环境下的计算机名浏览功能。 非法入侵者要是与目标主机的138端口建立连接请求的话,就能轻松获得目标主机所处的局域网网络名称以及目标主机的计算机名称。有了计算机名称,其对应的IP地址也就能轻松获得。如此一来,就为黑客进一步攻击系统带来了便利。

139端口

139端口是一种TCP端口,该端口在你通过网上邻居访问局域网中的共享文件或共享打印机时就能发挥作用。 139端口一旦被Internet上的某个攻击者利用的话,就能成为一个危害极大的安全漏洞。因为黑客要是与目标主机的139端口建立连接的话,就很有可能浏览到指定网段内所有工作站中的全部共享信息,甚至可以对目标主机中的共享文件夹进行各种编辑、删除操作,倘若攻击者还知道目标主机的IP地址和登录帐号的话,还能轻而易举地查看到目标主机中的隐藏共享信息。
端口说明:139端口是为“NetBIOS Session Service”提供的,主要用于提供Windows文件和打印机共享以及Unix中的Samba服务。在Windows中要在局域网中进行文件的共享,必须使用该服务。比如在Windows 98中,可以打开“控制面板”,双击“网络”图标,在“配置”选项卡中单击“文件及打印共享”按钮选中相应的设置就可以安装启用该服务;在Windows 2000/XP中,可以打开“控制面板”,双击“网络连接”图标,打开本地连接属性;接着,在属性窗口的“常规”选项卡中选择“Internet协议(TCP/IP)”,单击“属性”按钮;然后在打开的窗口中,单击“高级”按钮;在“高级TCP/IP设置”窗口中选择“WINS”选项卡,在“NetBIOS设置”区域中启用TCP/IP上的NetBIOS。
端口漏洞:开启139端口虽然可以提供共享服务,但是常常被攻击者所利用进行攻击,比如使用流光、SuperScan等端口扫描工具,可以扫描目标计算机的139端口,如果发现有漏洞,可以试图获取用户名和密码,这是非常危险的。
操作建议:如果不需要提供文件和打印机共享,建议关闭该端口。

445端口

445端口也是一种TCP端口,该端口在Windows 2000 Server或Windows Server 2003系统中发挥的作用与139端口是完全相同的。具体地说,它也是提供局域网中文件或打印机共享服务。不过该端口是基于CIFS协议(Common Internet File System)工作的,而139端口是基于SMB协议(服务器协议族)对外提供共享服务。同样地,攻击者与445端口建立请求连接,也能获得指定局域网内的各种共享信息。445端口是一个毁誉参半的端口,有了它我们可以在局域网中轻松访问各种共享文件夹或共享打印机,但也正是因为有了它,黑客们才有了可乘之机,他们能通过该端口偷偷共享你的硬盘,甚至会在悄无声息中将你的硬盘格式化掉!我们所能做的就是想办法不让黑客有机可乘,封堵住445端口漏洞 到了这里,相信你对各端口开放时存在的安全威胁早已是恐慌不已了。毕竟,对这些端口放任不管的话,随时都可能引来“飞来横祸”。

一键关闭危险端口(135 137 138 139 445 593 1025 3389)批处理bat文件:

@echo off 
color 1f 
title 关闭常见的危险端口 
echo. 
echo. 
echo 本批处理用于启动XP系统的防火墙并关闭常见的危险端口 
echo. 
echo 请确认您正在使用的是XP系统 并且未安装其他防火墙 
echo. 
echo 以避免与XP系统的防火墙发生冲突 
echo. 
echo. 
echo. 
pause 
cls 
echo 正在启动防火墙 请稍候… 
sc config SharedAccess start= auto > nul 
net start SharedAccess > nul 
echo 防火墙已经成功启动 
echo. 
echo 正在关闭常见的危险端口 请稍候… 
echo. 
echo 正在关闭135端口 请稍候… 
netsh firewall set portopening protocol = ALL port = 135 name = 135 mode = DISABLE scope = ALL profile = ALL 
echo 正在关闭137端口 请稍候… 
netsh firewall set portopening protocol = ALL port = 137 name = 137 mode = DISABLE scope = ALL profile = ALL 
echo 正在关闭138端口 请稍候… 
netsh firewall set portopening protocol = ALL port = 138 name = 138 mode = DISABLE scope = ALL profile = ALL 
echo 正在关闭139端口 请稍候… 
netsh firewall set portopening protocol = ALL port = 139 name = 139 mode = DISABLE scope = ALL profile = ALL 
echo 正在关闭445端口 请稍候… 
netsh firewall set portopening protocol = ALL port = 445 name = 445 mode = DISABLE scope = ALL profile = ALL 
echo 正在关闭593端口 请稍候… 
netsh firewall set portopening protocol = TCP port = 593 name = 593 mode = DISABLE scope = ALL profile = ALL 
echo 正在关闭1025端口 请稍候… 
netsh firewall set portopening protocol = TCP port = 1025 name = 1024 mode = DISABLE scope = ALL profile = ALL 
echo 正在关闭3389端口 请稍候… 
netsh firewall set portopening protocol = ALL port = 3389 name = 3389 mode = DISABLE scope = ALL profile = ALL 
cls 
echo. 
echo. 
echo. 
echo 常见的危险端口已经关闭 
echo. 
echo. 
echo. 
echo. 
echo 
echo. 
echo. 
echo. 
echo 按任意键退出 
pause>nul

参考资料:

http://www.jb51.net/article/30493.htm

Windows server 2012安全加固与web环境配置优化

这周给团队服务器做升级优化,系统重装为Windows server 2012,以下是一些安全配置和web环境配置优化笔记。

一、查看系统信息

一些基础命令

查看主机名:hostname

查看网络配置:ipconfig /all

查看路由表:route print

查看开放端口:netstat -ano

二、系统帐号管理

2.1 帐号管理

“Win+R”键调出“运行”->输入compmgmt.msc->打开"计算机管理",点击左侧“本地用户和组”,查看是否有不用的账号,系统账号所属组是否正确以及 guest账号是否锁定。

右击administrator账户,选择“重命名”,更改为较复杂的名字;

右击Guest账户,选择“属性”,确保已勾选“账户已禁用”。

在CMD下可用“net user”查看用户情况,“net user 用户名 /del”删除用户,“net user 用户名 /active:no”禁用用户。

2.2 设置安全策略

WIN+R 打开“运行”,输入"secpol.msc"打开 本地安全策略,修改以下安全策略设置。

1,账户策略->密码策略
密码必须符合复杂性要求:启用
密码长度最小值:7 个字符
密码最短使用期限:0 天
密码最长使用期限:90 天
强制密码历史:1 个记住密码
用可还原的加密来存储密码:已禁用
2,账户设置->账户锁定策略
帐户锁定时间:30 分钟
帐户锁定阀值:5 次无效登录
重置帐户锁定计数器:30 分钟
3,本地策略->安全选项
交互式登录:不显示最后的用户名:启用

三、网络服务优化

3.1 系统服务

“Win+R”键调出“运行”,输入“services.msc”打开系统服务控制台。
建议将以下服务停止,并将启动方式修改为手动:

Background Intelligent Transfer Service
DHCP Client
Remote Registry
Print Spooler
Server(不使用文件共享可以关闭)
Simple TCP/IP Service
Simple Mail Transport Protocol (SMTP)
SNMP Service
Task Schedule
TCP/IP NetBIOS Helper

3.1 关闭IPC共享

打开运行,输入“cmd.exe”,在命令提示符中敲入“net share”查看系统共享情况,使用命令“net share 共享名 /del”删除共享,例如:net share IPC$ /del

“Win+R”键调出“运行”,输入regedit打开注册表编辑器,找到HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\lanmanserver\parameters,在右侧空白处,右击》新建》DWORD项,名称为 AutoShareServer,键值为 0。

3.1 网络限制

WIN+R 打开“运行”,输入"secpol.msc"打开 安全设置->本地策略->安全选项,修改以下安全策略设置。

网络访问: 不允许 SAM 帐户的匿名枚举:已启用
网络访问: 不允许 SAM 帐户和共享的匿名枚举:已启用
网络访问: 将 Everyone 权限应用于匿名用户:已禁用
帐户: 使用空密码的本地帐户只允许进行控制台登录:已启用

mysql “The InnoDB memory heap is disabled ”报错解决办法

今天在启动myql时候突然报了一个这个错误,感觉非常的奇怪,想起我唯一做了的改变就是把系统临时文件夹改了到了我用内存虚拟出来的硬盘分区里面,估计和这个是有关系的,
121113 10:52:30 [Note] Plugin ‘FEDERATED’ is disabled.
121113 10:52:30 InnoDB: The InnoDB memory heap is disabled
121113 10:52:30 InnoDB: Mutexes and rw_locks use Windows interlocked functions
121113 10:52:30 InnoDB: Compressed tables use zlib 1.2.3
处理办法:1:打开my.ini文件
2:添加一句 tmpdir = e:/mysqltem 你的临时文件夹 重启mysql 搞定了

转载:
阿唐博客:http://blog.csdn.net/jsbba/article/details/8847633

Linux服务器安全配置之IPtables+fail2ban

《Linux服务器安全配置》系列
Linux服务器安全配置之MySQL
Linux服务器安全配置之用户管理
Linux服务器安全配置之SSH


Iptables能够提供数据包过滤、网络地址转换(NAT)等功能。配合fail2ban自动管理iptables配置,过滤非法ip。

一、IPtables安装配置

1、首先确定你的系统已经安装Iptables.打开SSH终端,输入

whereis iptables

如果能看到如下类似信息,说明你已经安装了iptables

iptables: /sbin/iptables /usr/share/iptables /usr/share/man/man8/iptables.8.gz

如果不是这个提示,或者没有任何提示,那你的Debian上可能没有安装iptables。请使用如下命令安装:

sudo apt-get install iptables

注意:本文所有命令在普通帐号下完成,本普通帐号使用sudo具有root权限,不建议直接使用root用户

2、查看Iptables目前的配置信息

可以使用如下命令查看

sudo iptables -L

如果你是第一次安装配置iptables,你可能会看到如下结果:

Chain INPUT (policy ACCEPT)
target     prot opt source               destination
Chain FORWARD (policy ACCEPT)
target     prot opt source               destination
Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination

这个结果,也就是防火墙充许所有的请求,就如没有设置防火墙一样.

3、配置Iptables

我们先把一个基本的Iptables的规则文章保存起来,这个规则文章做为测试用

sudo vi /etc/iptables.test.rules

然后在这个文章中输入如下规则内容,这个内容是debian官方给出的基本配置

*filter
 
# Allows all loopback (lo0) traffic and drop all traffic to 127/8 that doesn't use lo0
-A INPUT -i lo -j ACCEPT
-A INPUT -i ! lo -d 127.0.0.0/8 -j REJECT
 
# Accepts all established inbound connections
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
 
# Allows all outbound traffic
# You could modify this to only allow certain traffic
-A OUTPUT -j ACCEPT
 
# Allows HTTP and HTTPS connections from anywhere (the normal ports for websites)
-A INPUT -p tcp --dport 80 -j ACCEPT
-A INPUT -p tcp --dport 443 -j ACCEPT
 
# Allows SSH connections for script kiddies
# THE -dport NUMBER IS THE SAME ONE YOU SET UP IN THE SSHD_CONFIG FILE
-A INPUT -p tcp -m state --state NEW --dport 22 -j ACCEPT
 
# Now you should read up on iptables rules and consider whether ssh access
# for everyone is really desired. Most likely you will only allow access from certain IPs.
 
# Allow ping
-A INPUT -p icmp -m icmp --icmp-type 8 -j ACCEPT
 
# log iptables denied calls (access via 'dmesg' command)
-A INPUT -m limit --limit 5/min -j LOG --log-prefix "iptables denied: " --log-level 7
 
# Reject all other inbound - default deny unless explicitly allowed policy:
-A INPUT -j REJECT
-A FORWARD -j REJECT

COMMIT

保存本文件,然后把本规则加载,使之生效,注意,iptables不需要重启,加载一次规则就成了

sudo iptables-apply /etc/iptables.test.rules

然后再查看最新的配置,应该所有的设置都生效了.

sudo iptables -L

4、保存生效的配置,让系统重启的时候自动加载有效配置
iptables提供了保存当前运行的规则功能

iptables-save > /etc/iptables.up.rules

注意,如果当前用户不是root,即使使用了sudo,也会提示你没有权限,无法保存,所以执行本命令,你必须使用root用户.可以使用sudo -i快速转到root,使用完成,请及时使用su username切换到普通帐户.

为了重启服务器后,规则自动加载,我们创建如下文件:

vi /etc/network/if-pre-up.d/iptables

内容如下:

#!/bin/bash
/sbin/iptables-restore < /etc/iptables.up.rules

最后,设置本文章具体可执行仅限

chmod +x /etc/network/if-pre-up.d/iptables

二、fail2ban安装配置

sudo apt-get install fail2ban

1、配置fail2ban日志轮循

vi /etc/logrotate.d/fail2ban

写入:

/var/log/fail2ban.log {
    weekly
    rotate 7
    missingok
    compress
    postrotate
      /etc/init.d/fail2ban restart 1>/dev/null || true
    endscript
}

2、修改配置文件

/etc/fail2ban/
目录action.d下的文件指定满足条件时执行的一些动作,比如使用iptables禁止ip访问。
目录filter.d下的文件定义匹配日志的正则表达式。
fail2ban.conf文件是配置fail2ban-server程序启动的一些参数
jail.conf文件包含filter及action的指定。
每个conf文件可被local文件覆盖,conf文件第一个被读取,接着是读取local文件,所以local文件中定义的参数会覆盖conf中的参数。所以我们不需要添加所有的内容到local文件,只需要添加conf文件中你想覆盖的部分参数就好。

$ vi /etc/fail2ban/jail.local

[vsftpd-iptables]
enabled = true
filter = vsftpd
action = iptables[name=VSFTPD, port=ftp, protocol=tcp]
sendmail-whois[name=VSFTPD, dest=you@mail.com]
logpath = /var/log/secure
maxretry = 3
[ssh-iptables]
enabled  = true
filter   = sshd
action   = iptables[name=SSH, port=ssh, protocol=tcp]
           sendmail-whois[name=SSH, dest=you@example.com, sender=fail2ban@example.com]
logpath  = /var/log/secure.log
maxretry = 5

enabled:可选值false,true
filter:指定/etc/fail2ban/filter.d/目录下的正则文件,如filter = sshd则是指定/etc/fail2ban/filter.d/sshd.conf。
action:指定执行的动作,具体动作文件在/etc/fail2ban/action.d目录下。
logpath:指定监控日志的路径。
maxretry:执行action匹配的次数。

接着重启fail2ban

$ sudo service fail2ban restart

[ ok ] Restarting authentication failure monitor: fail2ban.

查看iptables更新

$ sudo iptables -L

Chain INPUT (policy ACCEPT)
target     prot opt source               destination
fail2ban-SSH  tcp  --  anywhere             anywhere             tcp dpt:ssh
fail2ban-VSFTPD  tcp  --  anywhere             anywhere             tcp dpt:ftp
fail2ban-ssh-ddos  tcp  --  anywhere             anywhere             multiport dports ssh
fail2ban-ssh  tcp  --  anywhere             anywhere             multiport dports ssh

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination

Chain fail2ban-SSH (1 references)
target     prot opt source               destination
RETURN     all  --  anywhere             anywhere

Chain fail2ban-VSFTPD (1 references)
target     prot opt source               destination
RETURN     all  --  anywhere             anywhere

Chain fail2ban-ssh (1 references)
target     prot opt source               destination
RETURN     all  --  anywhere             anywhere

Chain fail2ban-ssh-ddos (1 references)
target     prot opt source               destination
RETURN     all  --  anywhere             anywhere

三、IPtables+fail2ban过滤web扫描

常用语法摘录

过滤检查语法测试

fail2ban-regex /var/log/secure /etc/fail2ban/filter.d/vsftpd.conf

通过iptables命令查看被封掉的IP

iptables -L -nv

也可以通过下在的命令查看

fail2ban-client status vsftpd-iptables
Status for the jail: vsftpd-iptables
|- filter
| |- File list: /var/log/secure
| |- Currently failed: 0
|- Total failed: 6- action
|- Currently banned: 1
|- IP list: IP
|- Total banned: 1

注:如果重启了iptables 记得一定还要重启fail2ban,不然他就不能生效,fail2ban的过滤表是在iptables 启动后在加入的。

在/etc/fail2ban/filter.d/目录下建立nginx-Scan.conf文件保存

[Definition]
failregex = <HOST> -.*- .*HTTP/1.* 404 .*$
ignoreregex =

过滤原理是通过查找一定时期内访问结果为404 的所有IP,并通过定义下面的条件,找出符合该规则的IP。

打开/etc/fail2ban/jail.local配置文件,在其最后加入下面的内容:

[nginx-Scan]
enabled = true
port = http,https
filter = nginx-Scan //对应上面过滤规则中我们新建的nginx.conf文件
logpath = /logs/nginx/scan.access.log //日志文件位置
maxretry = 20 //失败多少次后就封掉IP
findtime = 60 //在多少时间内,查找符合规则的IP
bantime = 3600 //禁止该IP多长时间
action = iptables[name=HTTP, port=http, protocol=tcp]
ignoreip = 192.168.1.2 //白名单中的IP

通过fail2ban-regex命令,查看符合规则的IP :

fail2ban-regex /logs/nginx/scan.access.log /etc/fail2ban/filter.d/nginx-Scan.conf

注:以上结果是从日志中批配nginx.conf规则的数,并未对jail.local文件中的规则进行匹配 。

查看被封IP列表

fail2ban-client status nginx-get-dos
或 iptables -nL

参考文章

夜空Blog

securing-a-linux-server

使用fail2ban防止暴力破解ssh及vsftpd密码

http://www.dedmeet.com/software-projects-mainmenu-12/fail2ban-to-limit-ddos-attacks-on-webserver.html

http://www.361way.com/fail2ban-nginx/1825.html

http://beeznest.wordpress.com/2012/06/08/anti-nginx-dos-filter-for-fail2ban-4/

http://snippets.aktagon.com/snippets/554-how-to-secure-an-nginx-server-with-fail2ban