分类 Linux 下的文章

apache开启.htaccess及.htaccess的使用方法_给服务器添加配置


如何让的本地APACHE器.htaccess

如何让的本地APACHE器.htaccess呢?其实只要简朴修改一下apache的httpd.conf设置就让APACHE.htaccess了,来看看操作

打开httpd.conf(在那里? APACHE目录的CONF目录里面),用文本编纂器打开后,查找
(1)
Options FollowSymLinks
AllowOverride None

改为
Options FollowSymLinks
AllowOverride All

htaccess 写法

  Apache中的.htaccess(或者”分布式配置”了针对目录改变配置的方法,即,在特定的文档目录中放置包含或多个指令的,以作用于此目录及其子目录。作为,所能的命令受到限制。*Apache的AllowOverride指令来设置。

子目录中的指令会笼盖更高级目录或者主器配置中的指令。

.htaccess必需以ASCII模式上传,最好将其权限设置为644。

错误文档的定位

常用的客户端哀求错误返回代码:
401 Authorization Required
403 Forbidden
404 Not Found
405 Method Not Allowed
408 Request Timed Out
411 Content Length Required
412 Precondition Failed
413 Request Entity Too Long
414 Request URI Too Long
415 Unsupported Media Type

  常见的器错误返回代码:
  500 Internal Server Error

利用.htaccess指定事先制作好的错误提醒页面。一般下,人们专门设立目录,例如errors放置页面。然后再.htaccess中,加入如下的指令:

ErrorDocument 404 /errors/notfound.html
ErrorDocument 500 /errors/internalerror.html

一条指令一行。上述第一条指令的意思是对于404,也找到所的文档的得显示页面为/errors目录下的notfound.html页面。不难看出语法格局为:

ErrorDocument 错误代码 /目录名/名.扩展名

所提示的很少的话,不必专门制作页面,直接在指令中HTML号了,例如下面例子:

ErrorDocument 401 “你权限访问该页面,请抛却!”

文档访问的密码保护

要利用.htaccess对某个目录下的文档设定访问和对应的密码,首先要做的是生成.htpasswd的文本文档,例如:

zheng:y4E7Ep8e7EYV

这里密码经由加密,找些工具将密码加密成.htaccess的编码。该文档最好不要放在www目录下,建议放在www根目录文档之外,这样更为安全些。

有了授权文档,在.htaccess中加入如下指令了:

AuthUserFile .htpasswd的器目录
AuthGroupFile /dev/null (授权访问的目录)
AuthName EnterPassword
AuthType Basic (授权类型)

是的主人,应该处处为着想。 —— 雷锋
require user wsabstract (允许访问的,但愿表中都允许, require valid-user)

注,括号部门为学习添加的注释

拒绝来自某个IP的访问

我不想某个政府部门访问到站点的,那.htaccess中加入该部门的IP而将它们拒绝在外。

例如:

order allow,deny
deny from 210.10.56.32
deny from 219.5.45.
allow from all

第二行拒绝某个IP,第三行拒绝某个IP段,也219.5.45.0~219.2.45.255

想要拒绝人?用deny from all好了。不止用IP,也用域名来设定。

  保护.htaccess文档

在.htaccess来设置目录的密码保护时,它包含了密码的路径。从安全考虑,有必要把.htaccess也保护起来,不让别人看到其中的。虽然用其他做到这点,好比文档的权限。不外,.htaccess本身也能做到,只需加入如下的指令:

order allow,deny
deny from all

URL转向

可能对重新规划,将文档了迁移,或者更改了目录。这,来自搜索引擎或者其他链接过来的访问就可能犯错。这种下,如下指令来完成旧的URL自动转向到新的:

Redirect /旧目录/旧文档名 新文档的

或者整个目录的转向:

Redirect 旧目录 新目录

改变缺省的首页

一般下缺省的首页名有default、index等。不外,有些目录中没出缺省,而是某个特定的名,好比在pmwiki中是 pmwiki.php。这种下,要记住名来访问很麻烦。在.htaccess中等闲的设置新的缺省名:

DirectoryIndex 新的缺省名

也列出多个,顺序表明它们之间的优先级别,例如:

DirectoryIndex filename.html index.cgi index.pl default.htm

防止盗链

不喜欢别人在的网页上连接的、文档的话,也htaccess的指令来做到。

所的指令如下:

RewriteEngine on
RewriteCond %{ HTTP_REFERER } !^$
RewriteCond %{ HTTP_REFERER } !^http://(www.)?mydomain.com/.*$ [NC]
RewriteRule .(gif&line;jpg)$ - [F]

觉得让别人的页面开个天窗不好看,那用一张来代替:

RewriteEngine on
RewriteCond %{ HTTP_REFERER } !^$
RewriteCond %{ HTTP_REFERER } !^http://(www.)?mydomain.com/.*$ [NC]
RewriteRule .(gif&line;jpg)$ http://www.mydomain.com/替代名 [R,L]

其它补充:

在给出如何配置Apache支持.htaccess文件之前,首先申明一下:使用.htaccess文件,会降低httpd服务器的一点性能。

配置方法

找到Apache的httpd.conf配置文件,编辑器打开。

//找到
<Directory />
Options FollowSymLinks
AllowOverride None
</Directory>

//修改为

<Directory />
Options FollowSymLinks
AllowOverride All
</Directory>

//就可以了

/*
如果需要使用.htaccess以外的其他文件名,可以用AccessFileName指令来改变。
例如,需要使用.config ,则可以在服务器配置文件中按以下方法配置:
*/
AccessFileName .config  通常,.htaccess文件使用的配置语法和主配置文件一样。AllowOverride指令按类别决定了.htaccess文件中哪些指令才是有效的。

(不)使用.htaccess文件的场合
一般情况下,不应该使用.htaccess文件,除非你对主配置文件没有访问权限。有一种很常见的误解,认为用户认证只能通过.htaccess文件实现,其实并不是这样,把用户认证写在主配置文件中是完全可行的,而且是一种很好的方法。
.htaccess文件应该被用在内容提供者需要针对特定目录改变服务器的配置而又没有root权限的情况下。如果服务器管理员不愿意频繁修改配置,则可以允许用户通过.htaccess文件自己修改配置,尤其是ISP在同一个机器上运行了多个用户站点,而又希望用户可以自己改变配置的情况下。
虽然如此,一般都应该尽可能地避免使用.htaccess文件。任何希望放在.htaccess文件中的配置,都可以放在主配置文件的段中,而且更高效。
避免使用.htaccess文件有两个主要原因。
首先是性能。如果AllowOverride启用了.htaccess文件,则Apache需要在每个目录中查找.htaccess文件,因此,无论是否真正用到,启用.htaccess都会导致性能的下降。另外,对每一个请求,都需要读取一次.htaccess文件。
还有,Apache必须在所有上级的目录中查找.htaccess文件,以使所有有效的指令都起作用,所以,如果请求/ctusky/ctu/sky中的页面,Apache必须查找以下文件:

/.htaccess
/ctusky/.htaccess
/ctusky/ctu/.htaccess
/ctusky/ctu/sky/.htaccess  一共就要访问4个额外的文件,就算这些文件都不存在,这也是本文开始说会影响服务器的一点性能的原因。
其次是安全。这样会允许用户自己修改服务器的配置,这可能会导致某些意想不到的修改,所以请认真考虑是否应当给予用户这样的特权。


Apache Direcotry Indexes目录列表显示样式定制


<Directory>
Indexes 使目录内的文件或子目录以列表方式显示
Options Indexes

#This turns on fancy indexing of directories.
IndexOptions FancyIndexing

#果目录中含有HTML文件,则Apache会自动读取HTML文件的<title>......</title>部分
#用 HTML文件的标题作为Description(描述)显示在列表目录中的Description部分。。(注意:加载该指令会加大CPU的负荷!)
IndexOptions ScanHTMLTitles

#指定目录列表可以显示最长为25字节的文件/目录名,如果使用*来做值,会自适应到最长文件名
IndexOptions NameWidth=128

#指定目录列表可以显示最长为256字节的文件/目录描述内容
IndexOptions DescriptionWidth=256

#允许HTML格式
IndexOptions HTMLTable

#如果目录中含有同一文件的不同版本,则Apache会对该文件按照版本号自动排序
IndexOptions VersionSort

#最先列出文件夹会使显示效果
IndexOptions FoldersFirst

#忽略大小写
IndexOptions IgnoreCase

#默认显示字符集
IndexOptions Charset=GBK

#默认以文件或目录名升序排列
IndexOrderDefault Ascending Name

#给文件lua-5.1.3.tar.gz添加注释
    #AddDescription "Lua ... "     lua-5.1.3.tar.gz

#不显示apache版本及服务器信息
ServerSignature Off

AllowOverride None
Order allow,deny
Allow from all
</Directory>

Parrot(Kali)安装Tor并且代理戴套上网


1.下载并安装Tor

在Parrot中或Kali中直接用apt安装

apt-get update && apt-get install tor

2.下载并安装obfs4

apt-get install obfs4proxy

3.配置Tor Bridges

在Parrot中的配置文件:

SocksPort 9050
SocksListenAddress 127.0.0.1:9050  #为SOCKS代理地址
ClientOnly 1
#VirtualAddrNetwork 10.192.0.0/10
DNSPort 53
DNSListenAddress 127.0.0.1
AutomapHostsOnResolve 1
AutomapHostsSuffixes .onion,.exit
TransPort 9040
TransListenAddress 127.0.0.1
Log notice file /var/log/tor/notices.log
RunAsDaemon 1
ClientTransportPlugin obfs4 exec /usr/bin/obfs4proxy managed
UseBridges 1
Bridge obfs4 194.132.208.5:30581 7ED2B054B0E265BC10E3E277F4C0093455E87181 cert=Jm5OAs3DNqSsrsKBFAZzbaq/c7fq9M8+mxJXAO4ohUp0xFeImzxuEJmiT1mk0hAicTw0KA iat-mode=0
Bridge obfs4 155.94.238.154:443 F90B999AF1B4A0F5EEDA2E7E131A892609D7243D cert=NRCBE4aF9XCyRs3T5f8g5gzDV+Mj4oEFHx2prmSrz6vOni4H9BIxGSMIH6KK6H1SMATCEw iat-mode=0
Bridge obfs4 209.141.35.221:33965 A5BE53F078FC472002791D8C037D189EDEB6DE06 cert=jlzZIUA1z7ILTpUsgliL4ulissYmolqKxufObRQiObe0wPDYtPsDxuRrlr/r/QLwrgg+Vw iat-mode=0

其中网桥需要bridges@torproject.org发送邮件申请,其主题和内容为get transport obfs4,obfs4可换成其他类型网桥。

4.重启Tor

service tor restart

成功连接网桥之后可看到notices.log中有详细的信息:

Jun 18 23:02:15.000 [notice] Interrupt: exiting cleanly.
Jun 18 23:02:16.000 [notice] Tor 0.2.9.11 (git-572f4570e1771890) opening log file.
Jun 18 23:02:16.225 [warn] OpenSSL version from headers does not match the version we're running with. If you get weird crashes, that might be why. (Compiled with 1010006f: OpenSSL 1.1.0f  25 May 2017; running with 1010005f: OpenSSL 1.1.0e  16 Feb 2017).
Jun 18 23:02:16.242 [notice] Tor 0.2.9.11 (git-572f4570e1771890) running on Linux with Libevent 2.0.21-stable, OpenSSL 1.1.0e and Zlib 1.2.8.
Jun 18 23:02:16.242 [notice] Tor can't help you if you use it wrong! Learn how to be safe at https://www.torproject.org/download/download#warning
Jun 18 23:02:16.242 [notice] Read configuration file "/usr/share/tor/tor-service-defaults-torrc".
Jun 18 23:02:16.242 [notice] Read configuration file "/etc/tor/torrc".
Jun 18 23:02:16.245 [warn] The SocksListenAddress option is deprecated, and will most likely be removed in a future version of Tor. Use SocksPort instead. (If you think this is a mistake, please let us know!)
Jun 18 23:02:16.245 [warn] The DNSListenAddress option is deprecated, and will most likely be removed in a future version of Tor. Use DNSPort instead. (If you think this is a mistake, please let us know!)
Jun 18 23:02:16.245 [warn] The TransListenAddress option is deprecated, and will most likely be removed in a future version of Tor. Use TransPort instead. (If you think this is a mistake, please let us know!)
Jun 18 23:02:16.245 [notice] Opening Socks listener on 127.0.0.1:9050
Jun 18 23:02:16.245 [notice] Opening DNS listener on 127.0.0.1:53
Jun 18 23:02:16.245 [notice] Opening Transparent pf/netfilter listener on 127.0.0.1:9040
Jun 18 23:02:16.000 [notice] Parsing GEOIP IPv4 file /usr/share/tor/geoip.
Jun 18 23:02:16.000 [notice] Parsing GEOIP IPv6 file /usr/share/tor/geoip6.
Jun 18 23:02:16.000 [notice] Bootstrapped 0%: Starting
Jun 18 23:02:16.000 [notice] Delaying directory fetches: No running bridges
Jun 18 23:02:16.000 [notice] Signaled readiness to systemd
Jun 18 23:02:17.000 [notice] Opening Control listener on /var/run/tor/control
Jun 18 23:02:18.000 [notice] Bootstrapped 5%: Connecting to directory server
Jun 18 23:02:18.000 [notice] Bootstrapped 10%: Finishing handshake with directory server
Jun 18 23:02:19.000 [notice] Bootstrapped 15%: Establishing an encrypted directory connection
Jun 18 23:02:19.000 [notice] Bootstrapped 20%: Asking for networkstatus consensus
Jun 18 23:02:19.000 [notice] Bridge 'Unnamed' has both an IPv4 and an IPv6 address.  Will prefer using its IPv4 address (155.94.238.154:443) based on the configured Bridge address.
Jun 18 23:02:19.000 [notice] new bridge descriptor 'Unnamed' (fresh): $F90B999AF1B4A0F5EEDA2E7E131A892609D7243D~Unnamed at 155.94.238.154
Jun 18 23:02:19.000 [notice] I learned some more directory information, but not enough to build a circuit: We have no usable consensus.
Jun 18 23:02:21.000 [notice] Bootstrapped 25%: Loading networkstatus consensus
Jun 18 23:02:34.000 [notice] I learned some more directory information, but not enough to build a circuit: We have no usable consensus.
Jun 18 23:02:34.000 [notice] Bootstrapped 40%: Loading authority key certs
Jun 18 23:02:35.000 [notice] Bootstrapped 45%: Asking for relay descriptors
Jun 18 23:02:35.000 [notice] I learned some more directory information, but not enough to build a circuit: We need more microdescriptors: we have 0/7216, and can only build 0% of likely paths. (We have 0% of guards bw, 0% of midpoint bw, and 0% of exit bw = 0% of path bw.)
Jun 18 23:02:35.000 [notice] Bootstrapped 50%: Loading relay descriptors
Jun 18 23:03:52.000 [warn] Rejecting request for anonymous connection to private address [scrubbed] on a TransPort or NATDPort.  Possible loop in your NAT rules?
Jun 18 23:04:09.000 [notice] Bootstrapped 57%: Loading relay descriptors
Jun 18 23:04:09.000 [notice] Bootstrapped 64%: Loading relay descriptors
Jun 18 23:04:09.000 [notice] Bootstrapped 74%: Loading relay descriptors
Jun 18 23:04:09.000 [notice] Bootstrapped 80%: Connecting to the Tor network
Jun 18 23:04:10.000 [notice] Bootstrapped 90%: Establishing a Tor circuit
Jun 18 23:04:12.000 [notice] Tor has successfully opened a circuit. Looks like client functionality is working.
Jun 18 23:04:12.000 [notice] Bootstrapped 100%: Done
Jun 18 23:04:27.000 [warn] Proxy Client: unable to connect to 209.141.35.221:33965 ("general SOCKS server failure")
Jun 18 23:04:27.000 [warn] Proxy Client: unable to connect to 194.132.208.5:30581 ("general SOCKS server failure")
Jun 18 23:08:55.000 [warn] Rejecting request for anonymous connection to private address [scrubbed] on a TransPort or NATDPort.  Possible loop in your NAT rules? [337 similar message(s) suppressed in last 300 seconds]

其中的proxychains是默认有9050端口代理的,如果没有在/etc/proxychains.conf中添加:

socks4     127.0.0.1 9050

最后使用proxychains启动火狐浏览器,直接使用Tor代理上网,也可在Chrome中的SwitchySharp设置IP为127.0.0.1、端口为9050的SOCKS代理

proxychains fixefor

2017-06-18-23-23-37-创建的截图.png
2017-06-18-23-39-46-创建的截图.png


SSH隧道技术


何谓SSH隧道

隧道是一种把一种网络协议封装进另外一种网络协议进行传输的技术。这里我们研究ssh隧道,所以所有的网络通讯都是加密的。又被称作端口转发,因为ssh隧道通常会绑定一个本地端口,所有发向这个端口端口的数据包,都会被加密并透明地传输到远端系统。

SSH隧道的类型

ssh隧道有3种类型:

动态端口转发(Socks 代理)
本地端口转发
远端端口转发

动态端口转发

动态端口允许通过配置一个本地端口,把通过隧道到数据转发到远端的所有地址。本地的应用程序需要使用Socks协议与本地端口通讯。此时SSH充当Socks代理服务器的角色。

命令格式

ssh -D [bind_address:]port

参数说明

bind_address 指定绑定的IP地址,默认情况会绑定在本地的回环地址(即127.0.0.1),如果空值或者为*会绑定本地所有的IP地址,如果希望绑定的端口仅供本机使用,可以指定为localhost。
port 指定本地绑定的端口

使用场景

假设X网络(192.168.18.0/24)有主机A(192.168.18.100),Y网络(192.168.2.0/24)有主机B(192.168.2.100)和主机C(192.168.2.101),已知主机A可以连接主机B,但无法连接主机C。

在主机A执行

$ ssh -D localhost:8080 root@192.168.2.100

然后主机A上的应用程序就可以通过

SOCKS5 localhost:8080

访问主机C上的服务。

优点

配置一个代理服务就可以访问远端机器和与其所在子网络的所有服务

缺点

应用程序需要额外配置SOCKS代理,若应用程序不支持代理配置则无法使用

本地端口转发

通过SSH隧道,将一个远端机器能够访问到的地址和端口,映射为一个本地的端口。
local_forwarding.jpg

命令格式

ssh -L [bind_address:]port:host:hostport

参数说明

bind_address 指定绑定的IP地址,默认情况会绑定在本地的回环地址(即127.0.0.1),如果空值或者为*会绑定本地所有的IP地址,如果希望绑定的端口仅供本机使用,可以指定为localhost。
port 指定本地绑定的端口
host 指定数据包转发目标地址的IP,如果目标主机和ssh server是同一台主机时该参数指定为localhost
host_port 指定数据包转发目标端口

使用场景

假设X网络(192.168.18.0/24)有主机A(192.168.18.100),Y网络(192.168.2.0/24)有主机B(192.168.2.100)和主机C(192.168.2.101),已知主机A可以连接主机B,但无法连接主机C。A主机需要访问C主机的VNC服务(5900端口)

在A主机上建立本地转发端口5901

$ ssh -L 5901:192.168.2.101:5900 root@192.168.2.100

然后本地vnc客户端通过5901端口打开c主机的vnc服务

$ open vnc://localhost:5901

优点

无需设置代理

缺点

每个服务都需要配置不同的端口转发

远端端口转发

远程端口转发用于某些单向阻隔的内网环境,比如说NAT,网络防火墙。在NAT设备之后的内网主机可以直接访问公网主机,但外网主机却无法访问内网主机的服务。如果内网主机向外网主机建立一个远程转发端口,就可以让外网主机通过该端口访问该内网主机的服务。可以把这个内网主机理解为“内应”和“开门者”。
remote_forwarding.jpg

命令格式

ssh -R [bind_address:]port:host:hostport

参数说明

bind_address 指定绑定的IP地址,默认情况会绑定在本地的回环地址(即127.0.0.1),如果空值或者为*会绑定本地所有的IP地址,如果希望绑定的端口仅供本机使用,可以指定为localhost。
port 指定本地绑定的端口
host 指定数据包转发源地址的IP,如果源主机和ssh server是同一台主机时该参数指定为localhost
host_port 指定数据包转发源端口

使用场景

假设X网络(192.168.18.0/24)有主机A(192.168.18.100),Y网络(192.168.2.0/24)有主机B(192.168.2.100)和主机C(192.168.2.101),已知主机A可以通过SSH访问登录B主机,但反向直接连接被禁止,主机B和主机C可以相互访问。若主机C想访问主机A的VNC服务(5900端口)。

在主机A执行如下命令,开放B主机远端端口转发。

$ ssh -R 5900:192.168.2.100:5901 root@192.168.2.100

然后主机C连接主机B的5901端口

$ open vnc://192.168.2.100:5901

优点

可以穿越防火墙和NAT设备

缺点

每个服务都需要配置不同的端口转发

如何禁止端口转发

设置ssh服务配置文件/etc/ssh/sshd_config

AllowTcpForwardingno


Linux命令行下获取本机外网ip的几种方法


Curl 纯文本格式输出:

curl icanhazip.com
curl ifconfig.me
curl curlmyip.com
curl ip.appspot.com
curl ipinfo.io/ip  这个不错
curl ipecho.net/plain
curl www.trackip.net/i

curl JSON格式输出:

curl ipinfo.io/json
curl ifconfig.me/all.json
curl www.trackip.net/ip?json (有点丑陋)

curl XML格式输出:

curl ifconfig.me/all.xml

curl 得到所有IP细节 (挖掘机)

curl ifconfig.me/all

使用 DYDNS (当你使用 DYDNS 服务时有用)

curl -s 'http://checkip.dyndns.org' | sed 's/.*Current IP Address: \([0-9\.]*\).*/\1/g'
curl -s http://checkip.dyndns.org/ | grep -o "[[:digit:].]\+"

使用 Wget 代替 Curl

wget http://ipecho.net/plain -O - -q ; echo
wget http://observebox.com/ip -O - -q ; echo

使用 host 和 dig 命令

如果有的话,你也可以直接使用 host 和 dig 命令。

host -t a dartsclink.com | sed 's/.*has address //'
dig +short myip.opendns.com @resolver1.opendns.com

bash 脚本示例:

#!/bin/bash
PUBLIC_IP=`wget http://ipecho.net/plain -O - -q ; echo`
echo $PUBLIC_IP