3月 23

快捷命令收集

1.快速切换到上次访问目录。

linux中操作经常在两个目录中切换。简单操作方法,在命令行输入“cd -”即可跳转到上次访问目录。

2.转换文本文件编码

iconv -f gbk -t utf8 test.txt > test.txt.utf8

参数:-f 输入编码 -t ENCODING 输出编码 -l 列出支持的编码 -s 不显示有关转换出错的信息

3月 21

linux 简单搭建vpn服务器

[整理 :张子萌 如有转载请保留整理人信息]

测试系统为redhat linux

搭建pptpd VPN服务需要内核支持mppe,内核为2.6以后的内核支持该选项。

查看内核命名# uname -r。注意:如果要远程安装调试,首先将防火墙设置为

不随操作系统启动。

1. 需要安装ppp和pptp服务,本文为使用yum安装。如果希望手动安装请到

http://poptop.sourceforge.net下载pptp源码包。

#yum -y install ppp

#yum -y install pptpd

查看内核是否加载 mppe 模块

# lsmod | grep ppp

如下图:

linux 简单搭建vpn服务器   - simon-zzm - simon个人观点

说明pptp 所又模块加载成功

2. 修改配置文件

安装完成后修改配置文件

2.1 配置pptpd.conf文件

#vi /etc/pptpd.conf

option /etc/ppp/options.pptpd # PPP使用的配置文件位置

stimeout 10 # 控制pptp连接超时,单位为秒

localip 192.168.0.1 # 服务器VPN虚拟接口将分配的IP地址

remoteip 192.168.0.234-238,192.168.0.245 # 客户端VPN连接成功后将分配的IP或IP地址范围。

说明localip和remoteip 不需要必须在同一网段,网络可以连通网段均可。

2.2 配置options.pptpd文件,此处只是对配置文件中部分配置做说明,如无特殊要求可以使用默认配置。

# vi /etc/ppp/options.pptpd

lock

auth # 启用身份验证

name cc3 # 相当于身份验证时的域,这里填上VPN服务器的名字

refuse-pap # 拒绝pap身份验证

refuse-chap # 拒绝chap身份验证

refuse-mschap # 拒绝mschap身份验证

refuse-eap # 拒绝eap身份验证

require-mschap-v2 #使用mschap-v2身份验证,使用windows可以直接建客户端

require-mppe-128 # 要求128位MPPE加密

nomppe-stateful # 无状态,有状态有mppe-stateful

ms-dns 202.106.46.151 # VPN客户端连接成功后将被分配的DNS参数,如只是ip访问可以不用此项

ms-wins 64.32.16.8 # VPN客户端连接成功后将被分配的WINS参数

proxyarp # 启用ARP代理

2.3 创建用户名和密码,可以再文件中直接编写,也可以使用命令创建。推荐使用命令创建。

2.3.1 创建用户

账户为vpntest 密码为123

#vpnuser add vpntest 123

2.3.2 删除用户:

删除 vpntest账户

#vpnuser del vpntest

2.3.3 查看当前用户表

# vpnuser show

2.3.4 直接文件编辑修改账户

#vi /etc/ppp/chap-secrets

格式如下

test pptpd 123 *

注:末尾“*”为分配给vpn客户端ip池的地址,也就是上面设置的remoteip部分。如需要分配指定IP,可以直接打入IP地址。

3. 启动pptpd服务

#service pptpd start

# /etc/init.d/pptpd start

pptpd参数有start|stop|restart|restart-kill|status,分别为启动、停止、重启、直接杀进程后重启、查看进程运行状态。

要查看连入vpn服务器的客户端信息,可以使用route命令,Use Iface列为ppp的为连入vpn服务器的客户信息。也可以使用ifconfig查看。

到此linux pptp vpn配置完成,可以使用windows来连接看看是否正常。

4. 安全防范

VPN使用GRE协议用的47端口 也需要开放 1723,如果使用防火墙需要添加如下配置。

#i ptables -A INPUT -p gre -j ACCEPT

如果开启selinux 还需要设置

#setsebool pppd_disable_trans 1

#setsebool pptp_disable_trans 1

如果客户端想用vpn server来上网的话,需要打开vpn server上的ip_forward

# echo “1” > /proc/sys/net/ipv4/ip_forward

永久更改:

# vi /etc/sysctl.conf

net.ipv4.ip_forward = 0 将 0 改为 1

保存后运行# sysctl –p 是参数生效。

设置ip伪装

#iptables -t nat -A POSTROUTING -o eth0 -j SNAT –to-source XXX.XXX.XXX.XXX (vpn 服务器公网ip)

#iptables -t nat -A FORWARD -o eth0 -j ACCEPT

如果还想访问vpn server所在的局域网,还需要在vpn server上添加路由

* 使用route 命令配置路由表 */

//添加到主机路由

# route add –host 192.168.168.110 dev eth0:1

# route add –host 192.168.168.119 gw 192.168.168.1

//添加到网络的路由

# route add –net IP netmask MASK eth0

# route add –net IP netmask MASK gw IP

# route add –net IP/24 eth1

//添加默认网关

# route add default gw IP

//删除路由

# route del –host 192.168.168.110 dev eth0

5. 常见问题处理

a) MGR: Maximum of 10 connections reduced to 3, not enough IP addresses given

说明配置文件中最大连接为10,但是只分配了3个地址。通过/etc/pptpd.conf配置文件修改

b)连接vpn后经常断线
pppd[18052]: Terminating on signal 15
pppd[18052]: Modem hangup
pppd[18052]: Connect time 1.0 minutes.
pppd[18052]: Sent 12143 bytes, received 4968 bytes.
pppd[18052]: MPPE disabled
pppd[18052]: Connection terminated.
pppd[18052]: Exit.

查看日志发现以上信息:

“Connect time 1.0 minutes.”说明用户连接vpn服务器后只连接了1分钟就断开了。

“Sent 12143 bytes, received 4968 bytes.”说明客户在连接后与vpn服务器间的传输量也不大。如

果流量过大,需要注意检查是否存在攻击。

“Terminating on signal 15”此条信息比较主要,说明vpn程序是被系统其它程序发出停止命令后强行

中断连接的。具体信号可以查看http://simon-zzm.blog.163.com/blog/static/8880952220103110240877/

3月 15

日志 压缩 备份 定时删除脚本

[编写整理:simonzhang 2010-03-15 2012-04-08修改]

  在linux下有大量日志需要压缩备份,并定期清理长期保存的备份日志。对于多处日志存放使用数组进行循环处理。脚本修改好后,设置定时任务即可。

#!/bin/sh
##############################################
# AUTHOR: simonzhang
# back log
# Ver : 1.1 For Production
# description: 
# 2010-03-12  
##############################################
####### set log patch
log_path=("/usr/local/nginx/logs/" "/usr/local/tomcat6/logs/" )
####### set backup log patch
bak_log_path=("/usr/local/nginx/logs/back" "/usr/local/tomcat6/logs/back")

####### set backup  3 day ago log
backupdays=3

#######clear 180 day ago compress log
deletedays=180

#######  start
for (( i=0 ; i<${#log_path[@]} ; i++ ))
do
        cd ${log_path[i]}
    if [ ! -f ${bak_log_path[i]} ] ; then
            /bin/mkdir -p ${bak_log_path[i]}
    fi
        /usr/bin/find  * -ctime +$backupdays -maxdepth 0 -not -name *.pid -not -name error* -exec zip -m {}.zip  {} \;
        /bin/mv *.zip ${bak_log_path[$i]}
        cd ${bak_log_path[$i]}
        echo /usr/bin/find  * -ctime +$deletedays -maxdepth 0 -exec rm {} \;
done
############  end
3月 11

优化linux资源处理限制

系统报出错误”Too many open files”,说明系统资源调用需要进行调整。

ulimit 通过一些参数选项来管理不同种类的系统资源。

ulimit 命令的格式为:ulimit [options] [limit]

具体的 options 含义以及简单示例可以参考以下表格。

选项 [options] 含义 例子
-H 设置硬资源限制,一旦设置不能增加。 ulimit – Hs 64;限制硬资源,线程栈大小为 64K。
-S 设置软资源限制,设置后可以增加,但是不能超过硬资源设置。 ulimit – Sn 32;限制软资源,32 个文件描述符。
-a 显示当前所有的 limit 信息。 ulimit – a;显示当前所有的 limit 信息。
-c 最大的 core 文件的大小, 以 blocks 为单位。 ulimit – c unlimited; 对生成的 core 文件的大小不进行限制。
-d 进程最大的数据段的大小,以 Kbytes 为单位。 ulimit -d unlimited;对进程的数据段大小不进行限制。
-f 进程可以创建文件的最大值,以 blocks 为单位。 ulimit – f 2048;限制进程可以创建的最大文件大小为 2048 blocks。
-l 最大可加锁内存大小,以 Kbytes 为单位。 ulimit – l 32;限制最大可加锁内存大小为 32 Kbytes。
-m 最大内存大小,以 Kbytes 为单位。 ulimit – m unlimited;对最大内存不进行限制。
-n 可以打开最大文件描述符的数量。 ulimit – n 128;限制最大可以使用 128 个文件描述符。
-p 管道缓冲区的大小,以 Kbyts 为单位。 ulimit – p 512;限制管道缓冲区的大小为 512 Kbytes。
-s 线程栈大小,以 Kbytes 为单位。 ulimit – s 512;限制线程栈的大小为 512 Kbytes。
-t 最大的 CPU 占用时间,以秒为单位。 ulimit – t unlimited;对最大的 CPU 占用时间不进行限制。
-u 用户最大可用的进程数。 ulimit – u 64;限制用户最多可以使用 64 个进程。
-v 进程最大可用的虚拟内存,以 Kbytes 为单位。 ulimit – v 200000;限制最大可用的虚拟内存为 200000 Kbytes。

可以使用ulimit命令修改系统资源处理限制,但是修改只对当前操作起作用,当用户注销后参数回还原为默认值。可以通过修改系统配置文件使参数生效。

使用管理员权限打开/etc/security/limits.conf

在文件中添加

* soft nofile 8192
* hard nofile 20480

添加后保存文件,再次登录使用ulimit -a命令查看是否修改成功。

修改内容分为四列:

第一列为分配用户,可以为用户名、用户组名(@group) ,统配符 * 表示缺省规则

第二列为执行模式,hard 强制实行由管理员设置由Linux Kernel执行,用户无权改变。
soft 非强制执行,用户可以改变在之前存在的,但是用户注销后参数还原为默认值。

第三列为资源种类:

core – core 文件的大小 (KB)
data – 最大的data大小 (KB)
fsize – maximum filesize (KB)
memlock – max locked-in-memory address space (KB)
nofile – max number of open files
rss – max resident set size (KB)
stack – max stack size (KB)
cpu – max CPU time (MIN)
nproc – max number of processes
as – address space limit
maxlogins – max number of logins for this user.

第四列为数值。

参考文档:

http://www.ibm.com/developerworks/cn/linux/l-cn-ulimit/index.html

3月 05

linux系统中的在线安装升级工具

linux安装软件时经常需要依赖其他软件包,使用源码和安装包安装给工作带来很多不便。幸好linux厂商提供了强大的
更新升级工具:
yum用于centos、RedHat和fedora
apt-get用于Ubuntu
pacman用于Arch
安装工具均为单进程,所以只能逐个升级。我收集的主要使用命令如下。

yum 使用
um update packagename #升级包
yum -y upgrade #升级系统中的所有包
yum check-update #显示可升级的软件包
yum clean #删除下载后的旧的header。和clean all相同
yum clean oldheaders #删除旧的headers
yum clean packagename #删除下载后的软件包
yum info #显示可用软件包信息
yum info packagename #显示指定软件包信息
yum install packagename #安装指定软件包
yum list #显示可用软件包
yum list packagename #列出软件包
yum list installed #显示安装了的软件包
yum list updates #显示可升级的软件包
yum provides packagename #显示软件包所包含的文件
yum remove packagename #删除制定的软件包,确认判定指定软件包的依存关系。
yum search 关键字 #利用关键字搜索软件包。搜索对象是,RPM文件名,Packager(包),Dummary,Description的各型

apt-get 使用
apt-cache search packagename #搜索包
apt-cache show packagename #获取包的相关信息
apt-cache depends packagename #了解使用依赖
apt-cache rdepends packagename #查看该包被哪些包依赖
apt-get install packagename #安装包
apt-get install packagename – – reinstall #重新安装包
apt-get -f install #修复安装”-f = ——fix-missing”
apt-get remove packagename #删除包
apt-get remove packagename – – purge #删除包,包括删除配置文件等
apt-get update #更新源
apt-get upgrade #更新已安装的包
apt-get dist-upgrade #升级系统
apt-get dselect-upgrade #使用 dselect 升级
apt-get build-dep packagename #安装相关的编译环境
apt-get source packagename #下载该包的源代码
apt-get autoclean #清理无用的包
apt-get check #检查是否有损坏的依赖

pacman 使用
pacman -S packagename #安装软件包
pacman -R packagename #删除软件包
pacman -Syu #升级系统中的所有包
pacman -Ss package #查询软件包
pacman -Qs package #查询已安装的包
pacman -Sw package #下载但不安装包

(本文为张子萌整理,如有遗漏请提醒)