存档

‘UNIX’ 分类的存档

squid 配置HTTPS代理

2017年8月17日 没有评论

从源代码编译:(编译的squid必须是3.3或以上的版本。2.x版好像没有加密代理功能)

yum install openssl openssl-devel  gcc-c++ bzip2 gcc perl
(如果你的系统是DEBIAN/UBUNTU,则需运行命令:apt-get install openssl libssl-dev gcc g++ bzip2 perl,否则
编译时,会遇到错误提示:configure: error: library ‘crypto’ is required for OpenSSL。参见
http://superuser.com/questions/371901/openssl-missing-during-configure-how-to-fix)

wget http://www.squid-cache.org/Versions/v3/3.5/squid-3.5.7.tar.bz2
tar jxvf squid-3.5.7.tar.bz2
cd squid-3.5.7
./configure –prefix=/usr –sysconfdir=/etc/squid –libdir=/usr/lib –with-openssl
–enable-basic-auth-helpers=”LDAP,MSNT,NCSA,PAM,SASL,SMB,YP,DB,POP3,getpwnam,squid_radius_auth,multi-domain-NTLM” –with-swapdir=/var/spool/squid –libexecdir=/usr/lib/squid
make (此步骤耗时15分钟)
make install

配置squid,(修改SQUID的配置文件squid.conf)

然后修改Squid的配置文件。把http_port变成https_port ,修改监听的端口号为443:
https_port 443 cert=/etc/squid/public.crt key=/etc/squid/private.key
其中cert和key分别是网站的HTTPS证书和私钥。在/etc/squid/目录中,运行openssl req -x509 -nodes -days 3650 -newkey rsa:2048 -keyout private.key -out public.crt即可生成public.crt和private.key 。注意:监听的端口号必须设为443.否则squid启动不了。

chrome

chrome支持https类型的代理。启动chrome的时候在末尾加上–proxy-server=https://vps-ip:443 –ignore-certificate-errors即可。注意,把这里的vps-ip换成你的服务器的ip。
全配置好之后,用chrome浏览器即可翻墙。

证书可以用商业证书,自己生成的比较麻烦。。

启用用户认证了。

具体方法如下:yum install httpd (debian/ubuntu系统下,则apt-get install apache2)这样你的系统上就会出现htpasswd命令。然后在/etc/squid/目录里,运行htpasswd -cb /etc/squid/users jones fx5rm31s上述命令将生成密码文件users.(jones和fx5rm31s分别为你指定的用户名和密码)然后,编辑/etc/squid/squid.conf文件,在http_access deny all那一段的上方,插入:

auth_param basic program /usr/lib/squid/basic_ncsa_auth /etc/squid/users
auth_param basic children 5
auth_param basic realm Squid proxy-caching web server
auth_param basic credentialsttl 2 hours
acl normal proxy_auth REQUIRED
http_access allow normal
auth_param basic casesensitive off

然后重启squid,即可启用squid的认证机制。

分类: UNIX 标签:

awk使用

2016年6月21日 没有评论

awk 处理数据挺方便的,整理下使用方法。

先看下最简单的用法

下面是数据,文件名pic.csv

10371029    130657404  33250828600
10375462   0  32754488348
10401830   130670653  33301943326
10490532   130818323  33390650001,33390638503
10492736   130808000  33392915994,33392923278,33392951671,33392965894
10501933   130847315  33426734671,33426784141,33426741368
10520323   130871605  33474622551
10561441   130900744  33569740772
10563686   130931058  33572560455,33572597666,33572625609
10594334   130933942  33595945445,33595930712
10609164   130968431  33625612546
10623734   130960850  33655945376
10625513   130985226  33659411835,33659434639
10662700   131036062  33748007817
10688362   131050019  33802663455
10744503   131143877  33909572401,33909557630
10749313   131138769  33912184752
10777611   131181015  33975768553
10790647   131192937  34013919173,34013904105,34013909379
10790833   131198786  34014605153,34014654005,34014895558,34014920756
10799709   131213531  34039005481
10805941   131221289  34048620033,34048637653
10806145   131228025  34049593438,34049617769,34049618566,34049596717
10837378   131259345  34138112374,34138156606
10847268   131293940  34163393641,34163387864

只看前两列

awk '{print $1,$2}' pic.csv

数据过滤,只看第一列数字为10847268

awk ' $1==10847268' pic.csv

内建变量
说到了内建变量,我们可以来看看awk的一些内建变量:

$0 当前记录(这个变量中存放着整个行的内容)
$1~$n 当前记录的第n个字段,字段间由FS分隔
FS 输入字段分隔符 默认是空格或Tab
NF 当前记录中的字段个数,就是有多少列
NR 已经读出的记录数,就是行号,从1开始,如果有多个文件话,这个值也是不断累加中。
FNR 当前记录数,与NR不同的是,这个值会是各个文件自己的行号
RS 输入的记录分隔符, 默认为换行符
OFS 输出字段分隔符, 默认也是空格
ORS 输出的记录分隔符,默认为换行符
FILENAME 当前输入文件的名字

awk  -F: '{print $1,$3,$6}' OFS="\t" /etc/passwd
root    0       /root
bin     1       /bin
daemon  2       /sbin
adm     3       /var/adm
lp      4       /var/spool/lpd
sync    5       /sbin

如果把文件第一列用逗号分隔,可以用

awk 'ORS="," {print $1}' pic.csv
分类: UNIX 标签:

Linux常用网络诊断工具整理

2016年3月15日 2 条评论

常用命令如下,自行查找用法

  • 连通性测试

    • ping命令
    • traceroute
    • mtr
  • arp相关

    • arping
    • arp
  • 端口相关

    • telnet
    • netstat
  • DNS相关

    • host
    • nslookup
    • dig
  • 其他

    • ad
分类: UNIX 标签:

supervisor守护进程

2016年3月8日 没有评论

有时候写个脚本跑着跑着挂了,用supervisor守护进程挺方便的。

Supervisor是一个Python开发的client/server系统,可以通过pip安装,需要注意的是Python2.7以下兼容性很差,很可能运行失败。

pip install Supervisor 

安装好后

echo_supervisord_conf > /etc/supervisord.conf 

生成配置文件
然后我们在配置文件末尾追加想守护的进程即可,写法如下

[program:program-name]
command = python /root/program-dir/program-name.py 
user = root  
autostart = true  
autorestart = true  

配置好后可以执行supervisord启动,也可以killall -HUP supervisord
再然后我们添加supervisord到系统服务中
下面是Centos 示例代码

#!/bin/sh
#
# /etc/rc.d/init.d/supervisord
#
# Supervisor is a client/server system that
# allows its users to monitor and control a
# number of processes on UNIX-like operating
# systems.
#
# chkconfig: - 64 36
# description: Supervisor Server
# processname: supervisord

# Source init functions
. /etc/init.d/functions

RETVAL=0
prog="supervisord"
pidfile="/tmp/supervisord.pid"
lockfile="/var/lock/subsys/supervisord"

start()
{
        echo -n $"Starting $prog: "
        daemon --pidfile $pidfile supervisord -c /etc/supervisord.conf
        RETVAL=$?
        echo
        [ $RETVAL -eq 0 ] && touch ${lockfile}
}

stop()
{
        echo -n $"Shutting down $prog: "
        killproc -p ${pidfile} /usr/bin/supervisord
        RETVAL=$?
        echo
        if [ $RETVAL -eq 0 ] ; then
                rm -f ${lockfile} ${pidfile}
        fi
}

case "$1" in

  start)
    start
  ;;

  stop)
    stop
  ;;

  status)
        status $prog
  ;;

  restart)
    stop
    start
  ;;

  *)
    echo "Usage: $0 {start|stop|restart|status}"
  ;;

esac

放在/etc/rc.d/init.d/supervisord 目录中,设置好执行权限后 我们chkconfig supervisord on 设置开机启动即可
简单吧!

分类: UNIX 标签:

iptable配置

2015年1月9日 评论已被关闭

iptables   -A   OUTPUT   -d  wlt.ustc.edu.cn    -j   REJECT



1.创建/etc/iptables文件(文件名可以随意取)

2.创建/etc/network/if-pre-up.d/iptables文件,并给予其执行权限
root@godontop:~# touch /etc/network/if-pre-up.d/iptables
root@godontop:~# chmod +x /etc/network/if-pre-up.d/iptables
3.编辑/etc/network/if-pre-up.d/iptables文件,使其内容如下:
#!/bin/sh
/sbin/iptables-restore < /etc/iptables
4.配置iptables,过程略,配置好iptables后,将配置保存到/etc/iptables文件中即可
root@godontop:~# iptables-save > /etc/iptables
分类: UNIX 标签:

安装MySQLdb 出错的解决

2014年9月20日 评论已被关闭

pip install mysql-python

显示如下错误


EnvironmentError: mysql_config not found

然后我查找这个文件是否存在


find / -name mysql_config

显示不存在,然后我在网上找到原因说是mysql的一些开发包没有安装,我安装一下就行了

apt-get install python-dev libmysqlclient-dev
分类: UNIX, 数据库 标签:

编译linux内核(Ubuntu 环境下)

2014年9月19日 评论已被关闭

1.配置

 make menuconfig

2.编译内核


make

3.安装模块


make modules_install

模块被安装到 /lib/modules/2.6.33.1目录下

4.安装内核二进制映象文件


make install

因为笔者使用的是ubuntu系统,需要执行以下的命令才能生成和安装boot初始化文件系统映象


update-initramfs -c -k 2.6.33.1

5.在一些系统设置下,可能需要手动进行grub设置才能从当前安装的内核启动。在这种情况下下,请适当编辑/boot/grub/menu.lst或是
执行


update-grub2

6.重新启动系统
7.查看系统内核


uname -r

分类: UNIX 标签:

squid 配置 支持 ipv6

2014年9月5日 评论已被关闭

自己编译安装squid 目前我用的版本是3.4.7 ,老版本的不支持ipv6。
如果想让所有人访问,在最后加上如下一行即可

http_access allow all

最重要的是,更改配置后,要执行命令让它生效

squid -k reconfigure
or
squid reload

这种方式无需重启
此外,可以查看logs 文件下的access.log 和cache.log
来查看运行状况,便于定位错误
配置好后,ipv4接入代理服务器也能访问ipv6网站,ipv4 ipv6畅通无阻

分类: UNIX 标签:

ssh自动登录配置

2013年2月18日 没有评论

假设有两台机器A、B,使A自动登录B

在A机器输入


ssh-keygen -t rsa

得到id_rsa.pub文件

然后将该文件追加到B机器的~/.ssh/authorized_keys文件上即可

分类: UNIX 标签:

树莓派(debian)拨号,并且动态域名解析

2013年2月7日 没有评论

拨号安装几个包就行了


sudo apt-get install pppoe pppoeconf

然后设置下


sudo pppoeconf

动态域名解析,用的dnspod

#!/usr/bin/python
#coding=utf-8
import httplib, urllib
import socket
import time

params_www = dict(
    login_email="xx@163.com", # replace with your email
    login_password="xx", # replace with your password
    format="json",
    domain_id=2783079, # replace with your domain_od, can get it by API Domain.List
    record_id=19154942, # replace with your record_id, can get it by API Record.List
    sub_domain="www", # replace with your sub_domain
    record_line=u"默认".encode("utf-8"),
)

current_ip = None

def ddns(ip):
    params_www.update(dict(value=ip))

    headers = {"Content-type": "application/x-www-form-urlencoded", "Accept": "text/json"}
    conn = httplib.HTTPSConnection("dnsapi.cn")

    conn.request("POST", "/Record.Ddns", urllib.urlencode(params_a), headers)
    response = conn.getresponse()

    data = response.read()

    conn.close()


def getip():
    sock = socket.create_connection(('ns1.dnspod.net', 6666))
    ip = sock.recv(16)
    sock.close()
    return ip

if __name__ == '__main__':
    while True:
        try:
            ip = getip()

            if current_ip != ip:
                if ddns(ip):
                    current_ip = ip
        except Exception, e:
            print e
            pass
        time.sleep(30)
分类: UNIX 标签: