2007年8月31日星期五

squid不同网段封网站权限设定

根据参考文章配置Squid代理服务器
在squid中建立该网段 acl home_network src 192.168.10.0/24 添加入http_access allow home_network
对允许访问网络进行设置#/etc/squid/allowesites.squid修改其中内容
# /etc/squid/denysites.squid修改其中内容
在squid中的acl中添加:acl home_network src 192.168.10.0/255.255.255.0
acl GoodSites dstdomain -i "/etc/squid/allowesites.squid"
acl BadSites dstdomain -i "/etc/squid/denysites.squid"
在squid中的http_access中添加: http_access deny BadSites
http_access allow home_network GoodSites
http_access allow home_network
新在网卡上添加代理:
auto eth0:2(只有一块网卡做代理) inface eth0:2 inet static
address 192.168.10.1
netmask 255.255.255.0
由于添加新的网段相应的iptables也需要进行变动:
重定义NLAN="eht0"
对10网段的流量进行开放
iptables -A INPUT -i $NLAN -s 192.168.10.0/24 -p icmp -j ACCEPT
将对10对80的请求发送到3128上
iptables -t nat -A PREROUTING -i $NLAN -p tcp -m -tcp --dport80 -j REDIRECT --to-ports 3128
iptables -t nat -A POSTROUTING -i 192.168.10.0.24 -o $NLAN -j SNAT --to 主机IP
余下的就网段修改

2007年8月30日星期四

Ubuntu使用手札二

详细参见wiki。下面为具体经典比较实用:

在类Unix环境里,有一些按键有特殊的意思。

  • Ctrl-U: 擦除一行光标前面的部分。
  • Ctrl-H: 擦除光标前面的一个字符。
  • Ctrl-D: 终止输入。(退出shell,如果您正在使用shell的话)。
  • Ctrl-C: 终止当前正在运行的程序。
  • Ctrl-Z: 暂停程序。 (把它放到后台运行请看 command &, 第 4.3.10.1 节)
  • Ctrl-S: 停止向屏幕输出。
  • Ctrl-Q: 重新激活向屏幕输出。

默认的shell,bash, 有历史编辑和tab补齐功能。

  • up-arrow: 开始历史命令搜索。
  • Ctrl-R: 开始增量历史命令搜索。
  • TAB: 完整的把文件名输入到命令行。
  • Ctrl-V TAB: 输入TAB而不是扩展命令行。

其他一些需要记住的按键组合。

让我们来学习基本的Unix命令。 使用非特权用来执行下面的所有的命令。

  • pwd
    • 显示当前工作路径。
  • whoami
    • 显示当前用户名。
  • file foo
    • 显示foo文件的属性。
  • type -p commandname
    • 显示命令commandname所的的地方。
    • which commandname也可以用来做这个 .
  • type commandname
    • 显示命令 commandname的信息。
  • apropos key-word
    • 找到和 key-word相关的命令。
    • man -k key-word也可以做到
  • whatis commandname
    • 显示该命令的一句话帮助。 commandname.
  • man -a commandname
    • 显示命令的解释信息。 commandname. (Unix style)
  • info commandname
    • 显示很长的命令解释 commandname. (GNU style)

ls

    • 列出目录内容 (非以.开始的文件和目录)
  • ls -a
    • 列出目录内容(所有的文件和目录)
  • ls -A
    • 列出目录内容。(几乎所有的文件和目录,略去".." and ".")
  • ls -la
    • 列出目录所有文件和目录的详细信息。查看 Ubuntu 中的文件系统概念, 第 4.5.2 节。
  • ls -d *
    • 列出当前目录下的目录名称,而不是目录下的内容。
  • lsof foo
    • 显示文件foo的打开状态。
  • mkdir foo
    • 在当前目录下创建一个新的目录foo。
  • cd foo
    • 切换到当前目录下或者在变量CDPATH中列出来的目录foo。在builtins(7)查看命令cd。
  • cd /
    • 切换到根目录。
  • cd
    • 切换到用户主目录。
  • cd /foo
    • 切换到绝对路径/foo所指定的目录。
  • cd ..
    • 切换到上一级目录。
  • cd ~foo
    • 切换到用户主目录下的foo目录去。
  • cd -
    • 切换到上一次所去的目录。
    • 使用默认的分页程序查看文件/etc/motd的内容,参照 command <>
  • touch junkfile
    • 创建一个空文件junkfile。
  • cp foo bar
    • 拷贝一个已有的文件foo到新文件bar。
  • rm junkfile
    • 删除文件junkfile
  • mv foo bar
    • 把已有的文件foo重命名为bar
  • mv foo bar/baz
    • 把已有的文件foo移动到新位置并重命名为bar/baz。目录bar必须存在。
  • chmod 600 foo
    • 让已经存在的文件foo其他人不能读写。(所有人都 不能执行)。
  • chmod 644 foo
    • 使文件foo其他的人可以读,但是不能写。(所有人 都不能执行)
  • chmod 755 foo
    • 使文件foo其他的人能读不能写。(所有人都可以执行)
  • top
    • 全屏显示进程信息。输入”q”退出。
  • ps aux | pager
    • 用BSD风格输出所有正在运行的进程的信息。参照 command1 | command2, 第 4.3.10.2 节。
  • ps -ef | pager
    • 用system-V风格来输出所有正在运行的进程的信息。
  • ps aux | grep -e "[e]xim4*"
    • 显示exim4进程,或者运行exim的进程。输入man grep可以从grep(1)的手册页学习正则表达式。
  • ps axf | pager
    • 用ASCCI艺术形式来显示运行所有进程信息。
  • kill 1234
    • 杀死进程号为1234的进程。 查看 中止一个进程, 第 8.5.1 节。
  • grep -e "pattern" *.html
    • 找到当前目录下面所有以.html结尾的文件中含有"pattern"的行,并显示它们。
  • gzip foo
    • 用Lempel-Ziv(LZ77)压缩算法压缩foo,生成foo.gz。
  • gunzip foo.gz
    • 将文件foo.gz解压缩生成foo。
  • bzip2 foo
    • 将文件foo.bz2解压缩生成foo。
  • tar -xvvf foo.tar
    • 从打包文件foo.tar解出文件来。
  • tar -xvvzf foo.tar.gz
    • 从打包压缩的文件foo.tar.gz中解开文件。
  • tar -xvvf --bzip2 foo.tar.bz2
    • 从文件foo.tar.bz2解压缩文件。
  • tar -cvvf foo.tar bar/
    • 把目录bar/的内容打包存放到foo.tar存档中。
  • tar -cvvzf foo.tar.gz bar/
    • 把目录bar/的内容打包并且压缩存放到foo.tar.gz存档中。
  • tar -cvvf --bzip2 foo.tar.bz2 bar/
    • 把目录bar/中的内容打包存放到foo.tar.bz2存档里面。
  • zcat README.gz | pager
    • 实用默认的分页显示程序pager来显示压缩文件README.gz中的内容。
  • zcat README.gz > foo
    • 使用文件README.gz解开后的内容创建一个文件foo。
  • zcat README.gz >> foo
    • 把文件README.gz解开后的内容追加到文件foo的后面(如果文件不存在的话,就会创建一个)。
  • find . -name pattern
    • 用shell找到匹配pattern的文件名(慢一些)。
  • locate -d . pattern
    • 用shell找到匹配pattern的文件名(使用已有的规则的数据库,快一些)。
  • Ctrl-Alt-Del:挂起或者重新启动系统 初始化安装完成后再安装其他软件包, 第 3.8.1 节.
  • Left-click-and-drag mouse: 选择并且拷贝到剪贴板。
  • Click middle mouse button: 使用剪贴板的内容粘贴。
  • Meta-key (Emacs terminology) 传统的是使用 Left-Alt-key. 但是有些系统使用 Windows-key实现 Meta-key.
man 或者 命令 --help都可以查看该命令的内容和使用方法。

shell通配符使得这个成为可能。

  • *
    • 这个匹配0个或者多个字符。
    • 它不会匹配以"."开始的文件名.
  • ?
    • 这个仅匹配一个字符。
  • [...]
    • 这个匹配[]里面的某个字符。
  • [a-z]
    • 这个匹配字符a到z之间的某个字符。
  • [^...]
    • 这个匹配任意不包含在[]里面的字符(不包含字符"^")


您可以给一个命令序列起一个别名。比如:

$ alias la='ls -la'

现在, la就成了 ls -la命令的简写用来列出所有文件的详细信息。

您可以用type来显示命令的详细路径或者其他身份。比如:

$ type ls
ls is hashed (/bin/ls)
$ type la
la is aliased to `ls -la'
$ type echo
echo is a shell builtin
$ type file
file is /usr/bin/file
还没用别名试验过。


在类 Unix 的系统中,有几个文本处理工具经常用到。

  • 非正则表达式的方法有:
    • head 显示文件的开始部分。
    • tail 显示文件的结尾部分。
    • sort 给文件中的每一行排序。
    • uniq 删除文件中重复的行。
    • tr 转换或者删除字符。
    • diff 把文件中的内容一行一行的比较。
  • 基本的正则表达式Basic regular expression (BRE) :
    • grep 按模式匹配文本。
    • ed 一个原始的行编辑器。
    • sed 一个流编辑器。
    • vi 一个屏幕编辑器。
    • emacs 一个屏幕编辑器。
  • 扩展的正则表达式Extended regular expression (ERE) is used:
    • egrep 按模式匹配文本。
    • awk 进行简单的文本处理。
    • perl做非常难以想像的文本处理。

家庭用开关机密码变更

针对时间设置建立.bat文件(记事本建立保存为.bat),内容为net user %date:~0,4%%date:~5,2%%date:~8,2%
打开gpedit.msc在开机关机中都设定为该脚本。
CMD下date今天为2007-08-30那么你的密码就是20070830,如果中间插入各字符也可以应用。

2007年8月29日星期三

Add Google Custmor Page

方便自己定义和搜索的网页,类似于网络的网页收藏夹,毕竟个人太懒,没办法。My google search engine.
查看LINUX写手的BLOG受益良多,bash shell在处理简单的触发时间很厉害。

2007年8月27日星期一

路由与代理服务器的问题

分公司因为要打印票务,所以今天需要对机子进行安装。由于代理服务器是squid对于下载和iptables有一定的限制,所以对于下载来说,目前处于暂时的关闭状态,可是还是很奇怪对于安装软件来说确实是很奇怪,没有任何的限制,开放对他所有的TCP,UDP端口可是下载还是出错,对于他们拿来的机子应该说已经更新过了,所以通过路由器在升级方面没有问题只是端在的验证而已,但是换到代理网段就有一些奇怪的地方,无论如何验证不成功,于是经理决定把端口放到我们的路由上面,可是用旧版本的票务软件升级后就出问题,原版拷贝后,软件商的问题也同时发生。后续就没有我的事情了,但是依照目前的对SQUID设置来说,应该是比较完全的。出现问题表示奇怪。

2007年8月21日星期二

Squid2.6与2.5比较

Ubuntu环境下:
$ sudo apt-get install squid
$ sudo vim /etc/squid/squid.conf

#2.6下基础配置中
http_port 3128 transparent
cache_men cache_dir (根据目标的代理服务器进行配置)
dns_nameservers 202.101.172.35 202.101.172.46 202.101.172.47
auth_param 相对进行开放,children 5
realm Squid proxy-caching web server
casesensitive off
#acl 配置
acl all src 0.0.0.0/0.0.0.0
acl manager proto cache_object
acl localhost src 127.0.0.1/255.255.255.255
acl to_localhost dst 127.0.0.0/8
acl SSL_ports port 443 # https
acl SSL_ports port 563 # snews
acl SSL_ports port 873 # rsync
acl Safe_ports port 80 # http
acl Safe_ports port 21 # ftp
acl Safe_ports port 443 # https
acl Safe_ports port 70 # gopher
acl Safe_ports port 210 # wais
acl Safe_ports port 1025-65535 # unregistered ports
acl Safe_ports port 280 # http-mgmt
acl Safe_ports port 488 # gss-http
acl Safe_ports port 591 # filemaker
acl Safe_ports port 777 # multiling http
acl Safe_ports port 631 # cups
acl Safe_ports port 873 # rsync
acl Safe_ports port 901 # SWAT
acl purge method PURGE
acl CONNECT method CONNECT
acl denydomain dstdomain -i "/etc/squid/denydomain"
acl allowsrcip src "/etc/squid/allowsrcip"
acl denyurlregex url_regex -i "/etc/squid/denyurlregex"
acl time1 time SMTWHFA 0:00-23:59
acl conn1 maxconn 60
acl file1 urlpath_regex -i \.mp3$ \.exe$ \.zip$ \.rar$ \.torrent$ \.avi$ \.rmvb$ \.wma$ \.com$ \.mpg$ \.rm$ \.scr$ \.ocx$ \.cab$

#http_access deny/allow
http_access deny denydomain
http_access deny !allowsrcip
http_access deny file1
http_access deny denyurlregex
http_access deny allowsrcip !time1
http_access deny allowsrcip conn1
http_access allow localhost
http_access allow allowsrcip
http_access deny all

denydomain dengyurlregex allowsrcip 进行配置


#2.5的反向代理加速配置
#httpd_accel_host 127.0.0.1
#httpd_accel_port 80
#httpd_accel_single_host on
#httpd_accel_uses_host_header on
#httpd_accel_with_proxy on

总体来说整个SQUID在版本升级以后变的更为简单,但是一开始并不是十分适应,我大概用了将近一个礼拜也没有讲透明代理的效果设置出来,根据前面设置的IPTABLES相互配合,两者可以相辅相成,对于两者来说需要怎么样使用都可以来看。
在经理的调试下,终于成功。

iptables实例

echo "Enable IP Forwarding..."
echo "1">/proc/sys/net/ipv4/ip_forward
echo "Starting /sbin/iptables rules..."
/sbin/modprobe iptable_filter
/sbin/modprobe ip_tables
/sbin/modprobe iptable_nat
#Refresh all chains
/sbin/iptables -F -t nat
/sbin/iptables -F INPUT
/sbin/iptables -F OUTPUT
/sbin/iptables -F FORWARD
/sbin/iptables -P INPUT DROP
/sbin/iptables -P FORWARD DROP

# WAN is INTERNET_IFACE, ETH0,2,3 are LAN_IFACE
LAN="eth0"
WAN="eth0"
#Open Web POrts And Squid Http Ports
#/sbin/iptables -A INPUT -i $WAN -s 61.175.192.117 -j DROP
/sbin/iptables -A INPUT -i $WAN -p tcp -m multiport --sport 80,21,20 -j ACCEPT
/sbin/iptables -A INPUT -i $WAN -p tcp -m multiport --dport 80,21,20 -j ACCEPT
#/sbin/iptables -A INPUT -i $WAN -p tcp -m multiport --dport 3128 -j DROP
#/sbin/iptables -A INPUT -i $WAN -p tcp -m multiport --sport 3128 -j DROP
/sbin/iptables -A INPUT -i $WAN -p icmp -j ACCEPT

/sbin/iptables -A INPUT -i $LAN -s 192.168.11.0/24 -p icmp -j ACCEPT

# enable DNS PORT 53
/sbin/iptables -A INPUT -i $WAN -p udp --sport 53 -j ACCEPT

/sbin/iptables -A INPUT -i lo -j ACCEPT

/sbin/iptables -A INPUT -i $WAN -s 192.168.18.157 -p tcp --dport 22 -j ACCEPT
/sbin/iptables -A INPUT -i $WAN -s 192.168.18.199 -p tcp --dport 22 -j ACCEPT

/sbin/iptables -A INPUT -p tcp -m multiport --ports 3128 -j ACCEPT

/sbin/iptables -t nat -A PREROUTING -i $LAN -p tcp -m tcp --dport 80 -j REDIRECT --to-ports 3128

/sbin/iptables -t nat -A POSTROUTING -s 192.168.11.0/24 -o $WAN -j SNAT --to 192.168.18.198

########### #LAN 192.168.11.X
/sbin/iptables -A FORWARD -d 192.168.11.0/24 -p tcp -m multiport --sport 8000,80,1080,443,25,110,8001,3128,8081,8888,22221,22223,22224,22225,6666 -j ACCEPT
/sbin/iptables -A FORWARD -s 192.168.11.0/24 -p tcp -m multiport --dport 8000,80,1080,443,25,110,8001,3128,8081,8888,22221,22223,22224,22225,6666 -j ACCEPT
/sbin/iptables -A FORWARD -s 192.168.11.0/24 -p tcp -m multiport --dport 6668,8002,8601,3389,21,8003,8008,9008,1863,10037,10041,7001,4439,188,8222 -j ACCEPT
/sbin/iptables -A FORWARD -d 192.168.11.0/24 -p tcp -m multiport --sport 6668,8002,8601,3389,21,8003,8008,9008,1863,10037,10041,7001,4439,188,8222 -j ACCEPT
/sbin/iptables -A FORWARD -d 192.168.11.0/24 -p udp -m multiport --sport 8000,53,1701,1702,1703,1704 -j ACCEPT
/sbin/iptables -A FORWARD -s 192.168.11.0/24 -p udp -m multiport --dport 8000,53,1701,1702,1703,1704 -j ACCEPT
/sbin/iptables -A FORWARD -s 192.168.11.0/24 -d 61.175.192.117 -p tcp --sport 1025:65523 -j ACCEPT
/sbin/iptables -A FORWARD -d 192.168.11.0/24 -s 61.175.192.117 -p tcp --dport 1025:65523 -j ACCEPT

/sbin/iptables -A FORWARD -f -m limit --limit 100/s --limit-burst 100 -j ACCEPT
/sbin/iptables -A FORWARD -p icmp -m limit --limit 1/s --limit-burst 10 -j ACCEPT

iptables设置一例

只需要一个公网地址设在外接口上,内部用私网地址组网即可,在内部服务器提供Internet服务。


#!/bin/sh

#--------------------------------------------
#
# 外接口eth0,开放 vpn ssh
# 内接口eth1,绑定 dhcp dns squid
# 向内部服务器转发 ftp smtp www pop3
# 支持透明代理
#
# 胖头鱼:pangty@ta139.com
#
#--------------------------------------------

EXT_IF="eth0"
INT_IF="eth1"
EXT_IP="" #公网IP
INT_IP="" #内接口IP
SERVER_IP="" #内部服务器IP

# pptpd_vpn_service ssh
TRUSTED_LOCAL_TCP_PORT="1723 22"
TRUSTED_LOCAL_UDP_PORT="22"

# ftp-data ftp smtp http pop3
FWD_TCP_PORT="20 21 25 80 110"
FWD_UDP_PORT="20 21 25 80 110"

# load any special modules
modprobe ip_nat_ftp
modprobe ip_conntrack_ftp
modprobe ip_nat_irc
modprobe ip_conntrack_irc

# turn on ip forwarding
echo "1" > /proc/sys/net/ipv4/ip_forward

# setting up ip spoofing protection
for f in /proc/sys/net/ipv4/conf/*/rp_filter; do
echo 1 > $f
done

# delete any existing chains
iptables -F -t filter
iptables -X -t filter
iptables -Z -t filter
iptables -F -t nat
iptables -X -t nat
iptables -Z -t nat

# setting up default policies
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT
iptables -t nat -P PREROUTING ACCEPT
iptables -t nat -P POSTROUTING ACCEPT
iptables -t nat -P OUTPUT ACCEPT

#---------------------- filter ---------------------

# allow ping from internet
iptables -A INPUT -i $EXT_IF -p icmp -j ACCEPT

# enable local traffic
#------------------------------------------------------------------------
# iptables -A INPUT ! -i $EXT_IF -m state --state NEW -j ACCEPT
# iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
#
# iptables -A FORWARD ! -i $EXT_IF -m state --state NEW -j ACCEPT
# iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
#------------------------------------------------------------------------

iptables -N allowed
iptables -A allowed ! -i $EXT_IF -m state --state NEW -j ACCEPT
iptables -A allowed -m state --state ESTABLISHED,RELATED -j ACCEPT

iptables -A INPUT -j allowed
iptables -A FORWARD -j allowed

for PORT in $TRUSTED_LOCAL_TCP_PORT; do
iptables -A INPUT -i $EXT_IF -p tcp --dport $PORT -m state --state NEW -j
ACCEPT

done

for PORT in $TRUSTED_LOCAL_UDP_PORT; do
iptables -A INPUT -i $EXT_IF -p udp --dport $PORT -m state --state NEW -j
ACCEPT

done

#---------------------- nat ---------------------

# port forwarding
for PORT in $FWD_TCP_PORT; do
iptables -A FORWARD -i $EXT_IF -o $INT_IF -d $SERVER_IP
-p tcp --dport $PORT -m state --state NEW -j ACCEPT
iptables -t nat -A PREROUTING -d $EXT_IP
-p tcp --dport $PORT -j DNAT --to-destination $SERVER_IP
iptables -t nat -A POSTROUTING -d $SERVER_IP
-p tcp --dport $PORT -j SNAT --to-source $INT_IP
done

for PORT in $FWD_UDP_PORT; do
iptables -A FORWARD -i $EXT_IF -o $INT_IF -d $SERVER_IP
-p udp --dport $PORT -m state --state NEW -j ACCEPT
iptables -t nat -A PREROUTING -d $EXT_IP
-p udp --dport $PORT -j DNAT --to-destination $SERVER_IP
iptables -t nat -A POSTROUTING -d $SERVER_IP
-p udp --dport $PORT -j SNAT --to-source $INT_IP
done

# Transparent Proxy
iptables -t nat -A PREROUTING -i $INT_IF -p tcp --dport 80 -j REDIRECT --to-
port 3128


# SNAT or MASQUERADE
#------------------------------------------------------------------------
# iptables -t nat -A POSTROUTING -o $EXT_IF -j SNAT --to-source $EXT_IP
#------------------------------------------------------------------------
iptables -t nat -A POSTROUTING -o $EXT_IF -j MASQUERADE

# THE END

2007年8月15日星期三

解决mysql“Access denied for user 'root'@'localhost'”

我的系统是ubuntu7.04,最近新装好的mysql在进入mysql工具时,总是有错误提示:
# mysql -uroot -p
Enter password:
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)

使用网上介绍的方法修改root用户的密码:
# mysqladmin -uroot -p password 'newpassword'
Enter password:
mysqladmin: connect to server at 'localhost' failed
error: 'Access denied for user 'root'@'localhost' (using password: YES)'

现在终于被我找到了解决方法,如下:
# /etc/init.d/mysql stop
# mysqld_safe --user=mysql --skip-grant-tables --skip-networking &
# mysql -u root mysql
mysql> UPDATE user SET Password=PASSWORD('newpassword') where USER='root';
mysql> FLUSH PRIVILEGES;
mysql> quit

# /etc/init.d/mysql restart
# mysql -uroot -p
Enter password: <输入新设的密码newpassword>

mysql>