6
29
2012
3

openVPN

服务器端

准备工作

检查Tun/Tap是否开通:

cat /dev/net/tun

如果返回内容为: cat: /dev/net/tun: File descriptor in bad stat,表明已经成功启用TUN支持。不然到BurstNET的控制台上打开TUN支持。

 

检查iptables_nat模块是否支持:

iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o venet0 -j MASQUERADE

如果返回内容为:iptables: Unknown error 4294967295,表明系统还不支持,需要联系客服开通。

 

生成证书

复制一个例子出来:

mkdir ~/easy-rsa
cp /usr/share/openvpn/easy-rsa/2.0 ~/easy-rsa
cd ~/easy-rsa

编辑环境变量vars文件:

# vim vars
export KEY_COUNTRY="CN"
export KEY_PROVINCE="SC"
export KEY_CITY="ChengDu"
export KEY_ORG="FreedomUnion"
export KEY_EMAIL="admin@xiaozhou.net"

导出环境变量:

source vars
./clean-all
./build-ca

生成服务器端证书和密钥,如起名为“morgan-vps”:

./build-key-server morgan-vps

生成客户端证书和密钥(如果给多个人用就生成多个),如起名为“jade”:

./build-key jade

生成证书:

./build-dh

把keys下面的证书文件复制到openvpn目录下:

mkdir /etc/openvpn/keys
cp ~/easy-rsa/keys/*  /etc/openvpn/keys/

编辑配置文件:

# vim /etc/openvpn/server.conf

port 9090
proto tcp
dev tun

ca   /etc/openvpn/keys/ca.crt
cert /etc/openvpn/keys/morgan-vps.crt
key  /etc/openvpn/keys/morgan-vps.key
dh   /etc/openvpn/keys/dh1024.pem 

server 10.8.0.0 255.255.255.0

push "redirect-gateway def1"
push "dhcp-option DNS 8.8.8.8"
push "dhcp-option DNS 8.8.4.4"

client-to-client

keepalive 10 60

comp-lzo

max-clients 10

persist-key
persist-tun

status openvpn-status.log
log-append openvpn.log
verb 3
mute 20

修改:

# sudo vim /etc/sysctl.conf

net.ipv4.ip_forward = 1

 

添加iptables规则:

iptables -t nat -A POSTROUTING -s 10.168.0.0/16 -o eth0 -j MASQUERADE

如果报错: iptables: No chain/target/match by that name  。则改为:

iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o venet0 -j SNAT --to-source 本机的IP

启动服务:

/usr/sbin/openvpn --config /etc/openvpn/server.conf 

用启用脚本启动VPN与网络:

/etc/init.d/openvpn restart
/etc/init.d/networking restart 

 

 

客户端

复制密钥到配置目录下:

# ls /etc/openvpn/jade-vpn/keys

ca.crt	jade.crt  jade.key

配置文件:

# cat /etc/openvpn/jade-vpn/client.ovpn

client
dev tun
proto tcp
remote 服务器IP 服务器端口
resolv-retry infinite
nobind
persist-key
persist-tun
ca /etc/openvpn/jade-vpn/keys/ca.crt
cert /etc/openvpn/jade-vpn/keys/jade.crt
key  /etc/openvpn/jade-vpn/keys/jade.key
ns-cert-type server
comp-lzo
verb 3

可以建立一个启动脚本:

# vim jade-vpn.sh

#!/bin/bash
sudo openvpn --config /etc/openvpn/jade-vpn/client.ovpn

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Category: linux | Tags:
6
27
2012
10

系统安装备忘

备份

备份没有在github上存着的东西:

offlineimap

msmtprc

pidgin聊天记录

firefox收藏夹

等等……继续补充……

 

安装系统时别手贱“下一步”“下一步”。很多安装向导默认会“使用*整个*硬盘”!

重新分区时,再三确认上面的内容已经备份。想想某年某月某日错把备份完数据的U盘做安装盘的二逼事迹。

 

安装

好像一时还想不到什么话说……

 

配置

locale

安装locales程序:

apt-get install locales  

然后配置所用的语系:

dpkg-reconfigure locales 

中文常用的的locale:

  • en_US.ISO-8859-1
  • en_US.UTF-8
  • zh_CN.GB2312
  • zh_CN.GB18030
  • zh_CN.UTF-8
  • zh_CN.GBK
  • zh_TW.BIG5
  • zh_TW.UTF-8

缺省locale为en_US.utf8,

这样就完成了,可以查看一下中的语系:

locale -a 

 

用户

添加常用账号,默认会建立同名组

groupadd user001
useradd user001 -g user001 -d /home/user001 -s /usr/bin/zsh 

修改密码

passwd user001

建立用户目录,别忘记修改权限,不然什么东西都被人家看到……(羞)

mkdir /home/user001
chgrp user001 /home/user001 
chown user001 /home/user001
chmod 700 /home/user001

同步用户和组(不过不是直接修改配置文件的话应该用不着)

grpconv

再提醒一下自己以后删除用户的时候不要-r参数忘记删除home目录和mail。 还有userdel会把用户的组也一块删除掉,当心当心

userdel -r user001

用于天朝特色用途的账号,没有登录的必要。不给shell:

useradd user001 -g user001 -s /bin/false


sudo

安装sudo

apt-get install sudo

编辑/etc/sudoers增加sudo权限

user001 ALL=(ALL) ALL

更详细的配置介绍:

1、别名设置
别名主要分成4种,分别是:
1)Host_Alias 主机别名,就是主机的列表
如:Host_Alias HOST_FLAG = hostname1, hostname2, hostname3


2)Cmnd_Alias 命令别名,就是允许执行的命令的列表
如:Cmnd_Alias COMMAND_FLAG = command1, command2, command3


3)User_Alias 用户别名,就是具有sudo权限的用户的列表
如:User_Alias USER_FLAG = user1, user2, user3


4)Runas_Alias Runas别名,就是用户以什么身份执行(例如root,或者oracle)的列表
如:Runas_Alias RUNAS_FLAG = operator1, operator2, operator3
别名格式是:Alias_Type NAME = item1, item2, ……

2、权限设置
首先看看授权规则:
格式: 授权用户 主机 = [(目的用户)] [NOPASSWD:] 命令列表
如:tony ALL=(ALL) NOPASSWD:ALL
其中NOPASSWD是指不需要密码验证

例子:

# groups
User_Alias  ROOT = user1, user2, user3
User_Alias  WEBMASTERS = user4, user5, user6
 
# commands
Cmnd_Alias  APACHE = /usr/local/sbin/kickapache
Cmnd_Alias  TAIL = /usr/bin/tail
Cmnd_Alias      SHUTDOWN = /sbin/shutdown
Cmnd_Alias      APT = /usr/bin/apt-get, /usr/bin/dpkg
 
# privileges 
ROOT        ALL = (ALL) ALL
WEBMASTERS  ALL = PASSWD : APACHE, TAIL
admin       ALL = NOPASSWD : /etc/init.d/apache

参数:
-l 显示出自己(执行 sudo 的使用者)的权限
-v 因为 sudo 在第一次执行时或是在 N 分钟内没有执行(N 预设为五)会问密码,这个参数是重新做一次确认,假如超过 N 分钟,也会问密码
-k 将会强迫使用者在下一次执行 sudo 时问密码(不论有没有超过 N 分钟)
-b 将要执行的指令放在后台执行
-p prompt 能够更改问密码的提示语,其中 %u 会代换为使用者的帐号名称, %h 会显示主机名称
-u username/#uid 不加此参数,代表要以 root 的身份执行指令,而加了此参数,能够以 username 的身份执行指令(#uid 为该 username 的使用者号码)
-s 执行环境变量中的 SHELL 所指定的 shell ,或是 /etc/passwd 里所指定的 shell
-H 将环境变数中的 HOME (家目录)指定为要变更身份的使用者家目录(如不加 -u 参数就是系统管理者 root )

 

安全设置

SSH

修改SSH端口,禁止root远程登录

# vi /etc/ssh/sshd_config
Port 1234
PermitRootLogin no

重启服务

service sshd restart

生成登录用的密钥

ssh-keygen -t rsa

把公钥上传到服务器

cat  ~/.ssh/id_rsa.pub | ssh user001@192.168.1.1 "cat - >> ~/.ssh/authorized_keys"

如果密钥中设置了passphrase,则需要输passphrase登录服务器。为了更方便可以通过ssh-agent来帮助修改"~/.ssh/id_rsa"文件。看起来像是自动输入passphrase(只是而已):

ssh-add

备注:对于SSH2兼容格式的公钥,可以转换成为Openssh兼容格式

ssh-keygen -i -f Identity.pub >> /root/.ssh/authorized_keys2

禁止密码登录,只允许key登录:还不知道怎么搞~OTZ

iptables

清除已有的规则:

iptables -F
iptables -X
iptables -Z

开放常用的端口:

# 允许本地回环接口
iptables -A INPUT -s 127.0.0.1 -d 127.0.0.1 -j ACCEPT
# 放行已经连接的相关连接
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
# 不限制外出
iptables -A OUTPUT -j ACCEPT
# 放行常用入口请求 ssh http ftp
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -p tcp --dport 21 -j ACCEPT
iptables -A INPUT -p tcp --dport 20 -j ACCEPT
# 同样格式的其他入口
# 禁止其他访问入口,注意别把ssh的22端口给禁了
iptables -A INPUT -j REJECT
iptables -A FORWARD -j REJECT

# 封一个IP
iptables -I INPUT -s 123.45.6.7 -j DROP
# 封123.0.0.1~123.255.255.254整个段
iptables -I INPUT -s 123.0.0.0/8 -j DROP
# 封123.45.0.1到123.45.255.254
iptables -I INPUT -s 124.45.0.0/16 -j DROP
# 封123.45.6.1到123.45.6.254
iptables -I INPUT -s 123.45.6.0/24 -j DROP

检查已经添加的规则:

iptables -L -n --line-numbers

可以按显示的chain类与行号删除一条规则,如 INPUT中的第3条:

iptables -D INPUT 3

网卡启动时加载规则:

/etc/network/if-pre-up.d/iptables
#!/bin/bash
iptables-restore < /etc/iptables.rules
chmod +x /etc/network/if-pre-up.d/iptables

网卡关闭时保存规则

/etc/network/if-post-down.d/iptables
#!/bin/bash
iptables-save > /etc/iptables.rules
chmod +x /etc/network/if-post-down.d/iptables

 

iptables-persistent

这是debian内用于iptables规则持久化的工具,你可以编辑/etc/iptables/rules.v4来修改防火墙规则。一般来说,至少要包含以下内容:

-A INPUT -m state –state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -i tun+ -j ACCEPT
-A INPUT -i ppp+ -j ACCEPT
-A INPUT -p tcp -m multiport –dport 22,xxx,xxx,xxx -j ACCEPT
-A INPUT -p udp -m multiport –dport xxx,xxx,xxx -j ACCEPT

强烈建议先保存一个没问题的iptables,然后直接修改iptables,再保存。这样当改错了导致无法管理的时候,只要重启就可以恢复vps工作。

 

denyhosts

python编写用来踢掉试图尝试ssh密码的ip。如果已经用了通过key的连接方式,你可以一次就直接踢掉对方ip。

 

常用软件

jre

sudo apt-get install python-software-properties
add-apt-repository "deb http://archive.canonical.com/ lucid partner"
sudo apt-get update
sudo apt-get install openjdk-6-jre
sudo apt-get install openjdk-6-jdk

mocp

sudo apt-get install moc moc-ffmpeg-plugin 

增加配置文件

vim ~/.moc/config

内容:

XTermTheme = nightly_theme # 背景透明
ReadTags   = no            # 中文歌名乱码





 

网络管理

ifstat

ifstat是用于网络流量管理的工具,可以告诉你网络目标的流量是多少。
 

dnsutils

dnsutils里面包含了不少用于管理dns的工具,包括我们常用的nslookup,还有相对少用的dig。
 

mtr-tiny

mtr是一个traceroute工具,比后者好用很多。这个工具可以快速跟踪路由。
 

vnstat

vnstat是用于跟踪网卡流量的工具,尤其对于每个月都有限额的vps,这个工具更有意义。注意安装完成后需要初始化每个网卡,然后重启服务,而不是马上能够工作。

 

网络服务

pptp

pptp是一个经典的vpn服务,直接安装pptpd就好。注意,部分手机不支持128bit的mppe,关闭后可以连接。但是windows只支持128bit的mppe,关掉就无法连接。So,自己权衡。
 
openvpn
 
openpn是一个非常稳定而强大的vpn程序,他使用udp作为连接协议。其实openvpn有tcp协议模式,但是速度比udp慢很多。openvpn的配置可以参考贝壳童鞋的文章(反正很本文很多工具都是从他blog上学来的):
1.搭建家用的OpenVPN服务器:http://shell909090.com/blog/2009/09/%E6%90%AD%E5%BB%BA%E5%AE%B6%E7%94%A8%E7%9A%84openvpn%E6%9C%8D%E5%8A%A1%E5%99%A8/
2.说说x509证书链:http://shell909090.com/blog/2011/04/%E8%AF%B4%E8%AF%B4x509%E8%AF%81%E4%B9%A6%E9%93%BE/
3.再论openvpn的搭建:http://shell909090.com/blog/2011/05/%E5%86%8D%E8%AE%BAopenvpn%E7%9A%84%E6%90%AD%E5%BB%BA/
 

ssh
 
ssh用于翻墙常见两种模式,固定端口转发和动态端口转发。前者使用-R将远程的某个端口映射到本地。通常而言,映射的都是squid或者polipo(推荐后者,内存消耗更小,更好配置)。这样相当于在 本地可以访问远程的代理,从而达到翻墙的效果。
命令:
ssh -L port:localhost:port …
 
而动态端口转发则是使用ssh -D port …,将本地的port端口变成一个支持socks5协议的代理服务器。相比而言,-D模式更加灵活,提供了全协议的访问, 本地可以通过polipo转换为http代理。而-L模式则不能提供socks5代理功能(除非远程的端口上是socks5代理服务,但是这样就回到了 -D模式,反而多开了一个服务)。但是有些时候(例如android的ssh翻墙软件)只支持后者的模式。另外,不要用日常管理帐号翻墙。新开一个翻墙帐号,并且设定独立的key。然后禁用shell,在ssh的时候,使用参数-CNq,这个参数可以不打开shell。如果网络不稳定,可以加上-o ServerAliveInterval 30。
 
stunnel
stunnel本身没有任何功效,他只是将你的普通连接转换为ssl连接而已。当这个程序搭配其他程序,例如polipo,就可以实现一个ssl级别的代理。
 
httptunnel
这是一个服务软件,服务器端运行一个httptunnel,客户端运行一个。而后客户端就可以获得一个到服务器端的tcp连接,不受限的。
 
polipo
polipo常见有两种模式,端口转发模式和ssl模式。两者都在前文有说。端口转发模式配合ssh用,ssl模式配合stunnel用。
以上的服务看似很多,实际上,在128M内存的实例上完全可以运行其中大部分的服务。你可以在一台服务器上运行其中多个,以保证全天候的服务。

 

 

Category: linux | Tags:
6
4
2012
0

debian包管理

1.dpkg包管理工具  
dpkg --info "软件包名" --列出软件包解包后的包名称.  
dpkg -l --列出当前系统中所有的包.可以和参数less一起使用在分屏查看.  
dpkg -l |grep -i "软件包名" --查看系统中与"软件包名"相关联的包.  
dpkg -s 查询已安装的包的详细信息.  
dpkg -L 查询系统中已安装的软件包所安装的位置.  
dpkg -S 查询系统中某个文件属于哪个软件包.  
dpkg -I 查询deb包的详细信息,在一个软件包下载到本地之后看看用不用安装(看一下呗).  
dpkg -i 手动安装软件包(这个命令并不能解决软件包之前的依赖性问题),如果在安装某一个软件包的时候遇到了软件依赖的问题,可以用apt-get -f install在解决信赖性这个问题.  
dpkg -r 卸载软件包.不是完全的卸载,它的配置文件还存在.  
dpkg -P 全部卸载(但是还是不能解决软件包的依赖性的问题)  
dpkg -reconfigure 重新配置  


2. apt包管理工具
(1)GTK图形的"synaptic",这是APT的前端工具.  
(2)"aptitude",这也是APT的前端工具.  
用APT管理工具进行包的管理,可以有以下几种方法做源:  
(1)拿安装盘做源,方法如下:  
apt-cdrom ident 扫描光盘的信息  
apt-cdrom add 添加光盘源  
(2)这也是最常用的方法就是把源添加到/etc/apt/source.list中,之后更新列apt-get update  
APT管理工具常用命令  
apt-cache 加上不同的子命令和参数的使用可以实现查找,显示软件,包信息及包信赖关系等功能.  
apt-cache stats 显示当前系统所有使用的Debain数据源的统计信息.  
apt-cache search +"包名",可以查找相关的软件包.  
apt-cache show +"包名",可以显示指定软件包的详细信息.  
apt-cache depends +"包名",可以查找软件包的依赖关系.  
apt-get upgrade 更新系统中所有的包到最新版  
apt-get install 安装软件包  
apt-get --reindtall install 重新安装软件包  
apt-get remove 卸载软件包  
apt-get --purge remove 完全卸载软件包  
apt-get clean 清除无用的软件包  
在用命令apt-get install之前,是先将软件包下载到/var/cache/apt/archives中,之后再进行安装的.所以我们可以用apt-get clean清除/var/cache/apt/archives目录中的软件包.  
源码包安装  
apt-cache showsrc 查找看源码包的文件信息(在下载之前)  
apt-get source 下载源码包.  
apt-get build-dep +"包名" 构建源码包的编译环境. 


3.apt-get与dpkg的一些基本用法  
apt-get install packagename #安装一个新软件包  
apt-get remove packagename #卸载一个已安装的软件包(保留配置文件)  
apt-get --purge remove packagename #卸载一个已安装的软件包(删除配置文件)  
dpkg --force-all --purge packagename #强制卸载,风险大!  
apt-get upgrade #更新所有已安装的软件包  
apt-get dist-upgrade #将系统升级到新版本  
apt-get clean #清理所有软件缓存  
apt-get autoclean #清理旧版本的软件缓存  
apt-get autoremove #删除系统不再使用的孤立软件  
apt-cdrom add #增加一个光盘源  
auto-apt run ./configure #编译时缺少h文件的自动处理  
apt-cache search 正则表达式 #在软件包列表中搜索字符串  
dpkg -l 正则表达式 #列出所有与模式相匹配的软件包  
dpkg -l |grep ^rc|awk '{print $2}' |  #xargs dpkg -P #清除所有已删除包的残馀配置文件  
dpkg -i, --install XXX.deb #安装XXX.deb软件包:dpkg --install stardict_3.0.1-1_i386.deb  
dpkg -r, --remove, -P, --purge package...|-a|--pending #删除一个软件包:dpkg -r stardict

Category: linux | Tags: apt debian dpkg

Host by is-Programmer.com | Power by Chito 1.3.3 beta | Theme: Aeros 2.0 by TheBuckmaker.com