January 16, 2007
bind9编译笔记
tar zxvf bind-9.3.2-P1.tar.gz
cd bind-9.3.2-P1
./configure --prefix=/usr/local/named --enable-threads --disable-openssl-version-check
或者
./configure --prefix=/usr/local/named --enable-threads --with-openssl=/usr/local/openssl
make
make install
--enable-threads 开启多线程支持
groupadd bind
useradd -g bind -d /usr/local/named -s /sbin/nologin bind
cd /usr/local/named
mkdir etc
sbin/rndc-confgen > etc/rndc.conf
cd etc
tail -10 rndc.conf | head -9 | sed s/#\ //g > named.conf
mkdir /usr/local/named/var
chmod 777 /usr/local/named/var
cd /usr/local/named/var
vi localhost.zone
$TTL 86400
$ORIGIN localhost.
@ 1D IN SOA @ root (
42 ; serial (d. adams)
3H ; refresh
15M ; retry
1W ; expiry
1D ) ; minimum
1D IN NS @
1D IN A 127.0.0.1
建立named.local文件
vi named.local
$TTL 86400
@ IN SOA localhost. root.localhost. (
1997022700 ; Serial
28800 ; Refresh
14400 ; Retry
3600000 ; Expire
86400 ) ; Minimum
IN NS localhost.
1 IN PTR localhost.
dig命令直接生成named.root文件
dig > named.root
vi common.zone
内容如下
zone "." IN {
type hint;
file "named.root";
};
zone "localhost" IN {
type master;
file "localhost.zone";
allow-update { none; };
};
zone "0.0.127.in-addr.arpa" IN {
type master;
file "named.local";
allow-update { none; };
};
vi /usr/local/named/etc/named.conf
主要内容如下
options {
directory "/usr/local/named/var";
pid-file "named.pid";
version "I am bind";
listen-on {x.x.x.x;};
};
controls {
inet 127.0.0.1 port 953
allow { 127.0.0.1; } keys { "rndc-key"; };
};
include "common.zone";
chown -R bind:bind /usr/local/named
启动服务测试一下
/usr/local/named/sbin/named -c /usr/local/named/etc/named.conf -u bind &
查看状态
/usr/local/named/sbin/rndc status
为了方便建立启动脚本:
vi /etc/rc.d/init.d/named
#!/bin/bash
# named a network name service.
# chkconfig: 545 35 75
# description: a name server
if [ `id -u` -ne 0 ]
then
echo "ERROR:For bind to port 53,must run as root."
exit 1
fi
case "$1" in
start)
if [ -x /usr/local/named/sbin/named ]; then
/usr/local/named/sbin/named -c /usr/local/named/etc/named.conf -u bind && echo . && echo 'BIND9 server started'
fi
;;
stop)
kill `cat /usr/local/named/var/named.pid` && echo . && echo 'BIND9 server stopped'
;;
restart)
echo .
echo "Restart BIND9 server"
$0 stop
sleep 10
$0 start
;;
reload)
/usr/local/named/sbin/rndc reload
;;
status)
/usr/local/named/sbin/rndc status
;;
*)
echo "$0 start | stop | restart |reload |status"
;;
esac
chmod 755 /etc/rc.d/init.d/named
***********************************************************************
***********************************************************************
加入log配置
mkdir /usr/local/named/log
vi /usr/local/named/var/log.conf
logging {
channel warning
{ file "/usr/local/named/log/dns_warnings" versions 3 size 100m;
severity warning;
print-category yes;
print-severity yes;
print-time yes;
};
channel general_dns
{ file "/usr/local/named/log/dns_logs" versions 3 size 100m;
severity info;
print-category yes;
print-severity yes;
print-time yes;
};
category default { warning; };
category queries { general_dns; };
};
chown -R bind:bind /usr/local/named
说明:
1:print-time是设定在日志中是否需要写入时间,print-severity是设定在日志中是否需要写入消息级别,print-category是设定在日志中是否需要写入日志类别。
2:severity是指定记录消息的级别。在bind中主要有以下几个级别(按照严重性递减的顺序):
critical
error
warning
notice
info
debug [ level ]
dynamic
定义了某个级别后,系统会记录包括该级别以及比该级别更严重的级别的所有消息。比如定义级别为error,则会记录critical和error两个级别的信息。一般情况下,我们记录到info级别就可以了。
然后在/usr/local/named/etc/named.conf 加入下列语句
include "log.conf";
/usr/local/named/sbin/rndc reconfig
默认是不启用日志的,你可以通过
/usr/local/named/sbin/rndc status
看到:
query logging is OFF
所以我们用以下命令启用log日志
/usr/local/named/sbin/rndc querylog
由 frank 发表于 10:45 PM | 回复 (4) | 引用
December 27, 2006
bind9的部分FAQ
log日志报如下错误:
27-Dec-2006 23:02:57.118 general: error: dns_master_load: localhost.zone:2: unexpected end of line
27-Dec-2006 23:02:57.118 general: error: dns_master_load: localhost.zone:1: unexpected end of input
27-Dec-2006 23:02:57.118 general: error: zone localhost/IN: loading master file localhost.zone: unexpected end of input
解决办法:
localhost.zone配置文件里TTL前加上$
process `named' is using obsolete setsockopt SO_BSDCOMPAT
今天安装bind 9.3.3,成功安装后,message报如下错误
process `named' is using obsolete setsockopt SO_BSDCOMPAT
解决办法:
将Bind得tar包解压后,在其/lib/isc/unix/socket.c里面找到需要修改的代码:
首先找到这个 (在1297行附近):
#if defined(USE_CMSG) || defined(SO_BSDCOMPAT)
int on = 1;
改成:
#if defined(USE_CMSG)
int on = 1;
************************************************************
#ifdef SO_BSDCOMPAT
if (setsockopt(sock->fd, SOL_SOCKET, SO_BSDCOMPAT,
(void *)&on, sizeof on) < 0) {
isc__strerror(errno, strbuf, sizeof(strbuf));
UNEXPECTED_ERROR(__FILE__, __LINE__,
"setsockopt(%d, SO_BSDCOMPAT) %s: %s",
sock->fd,
isc_msgcat_get(isc_msgcat, ISC_MSGSET_GENERAL,
ISC_MSG_FAILED, "failed"),
strbuf);
/* Press on... /*
}
#endif
June 15, 2005
调试cisco路由器手记-修改NAT配置
这个手记实在不算什么,虽然自己也学过ccna,但公司的路由器还是让人家专线接入运营商帮忙设置了,用了好久,一直没动过设置,也没出过什么事,时隔几年,路由器的基本命令基本忘的差不多,这次趁这次机会把调试过程写下来,省得以后再临时抱佛脚,去看路由器的基本命令。
路由器以前只是简单的做了一个NAT转换,而且NAT地址池设置了一个网段。
用了一段时间后,发现地址池有点浪费,自己什么时候想用真ip的时候,反而没法用,所以决定修改路由器配置。
原来的的路由设置如下(摘取关键几句)
...
interface FastEthernet0/0
ip address 192.168.1.58 255.255.255.252
ip nat outside
...
interface FastEthernet0/1
ip address 192.168.2.1 255.255.255.0 secondary
ip address 219.235.228.81 255.255.255.248
ip nat inside
...
ip nat pool NAT-1 219.235.228.82 219.235.228.85 netmask 255.255.255.248
ip nat inside source list 1 pool NAT-1 overload
...
access-list 1 permit 192.168.2.0 0.0.0.255
...
现在想把地址池219.235.228.82-219.235.228.85换成219.235.228.82一个地址,其实思路很简单,但在操作过程中还是比是得仔细,大概思路是
1.先把外网断掉,因为现在动态nat正在使用,是不容许你修改配置,所以我们得先断了外网
2.然后清楚所有动态nat转换缓存
3.删除以前那个地址池的设置
4.添加正确的地址池的设置
5.打开外网
6.保存配制到RAM
好了实际操作如下
#conf t
int FastEthernet0/0
no ip nat outside
让后退到#模式
#clear ip nat translation *
进入FastEthernet0/1 修改nat
conf t
int FastEthernet0/1
no ip nat pool NAT-1 219.235.228.82 219.235.228.85 netmask 255.255.255.248
ip nat pool NAT-1 219.235.228.82 219.235.228.82 netmask 255.255.255.248
nat配制修改完毕,现在我们回去把外网打开
#conf t
int FastEthernet0/0
ip nat outside
ok,修改完毕,简单吧,就是仔细点就行。
最后一步别忘了保存哦,否则以后重启路由器又得重新修改,呵呵“)
由 frank 发表于 9:00 PM | 回复 (1) | 引用
February 7, 2004
高性能LINUX双效防火墙HOWTO
原文地址:
http://www.linuxaid.com.cn/articles/4/4/441672019.shtml
杭州小红马工作室 kinglee
kinglee@hzcnc.com
系统功能说明:
包过滤和WEB代理双效合一。由iptables 实现包的过滤,由LINUX下大名鼎鼎的squid结合NAT来实现透明WEB代理。SQUID代理的性能本身已经是代理服务器中的佼佼者,本系统将其性能发挥的极至:通过ramdisk技术,让SQUID把网页cahce到内存中,这样,你所访问的网页,除了第一次需要到网络上取,以后都将来自内存!下面介绍如何用redhat 7.2来实现的方法和步骤。
(1)选择一台比较稳定的计算机,装上两块网卡,256或512M内存,硬盘10G(注意:第一块网卡接内网,第二块网卡接外网。)
(2)安装red hat 7.2,安装时选择服务器模式,自动分区
(3)大概在10-15分中后系统安装完毕,重启后进入系统,开始配置系统
1、开启包转发
编辑/etc/sysctl.conf,将net.ipv4.ip_forward=0 该为net.ipv4.ip_forward=1,保存修改。其目的是允许LINUX内核做IP包的转发:允许IP数据包从一个网络接口穿越到另一个网络接口,只有这样,系统才具有充当包过滤防火墙的条件。
2、激活RamDisk
修改/etc/grub.conf
#boot=/dev/sda
default=0
timeout=10
splashimage=(hd0,0)/grub/splash.xpm.gz
title Red Hat Linux (2.4.7-10)
root (hd0,0)
kernel /vmlinuz-2.4.7-10 ro root=/dev/sda6 ramdisk=268435
initrd /initrd-2.4.7-10.img
其中ramdisk=268435 是我们要添加的内容,目的是告诉系统默认的 ramdisk的大小是268435k,也就是256M。注意千万不可以直接写256M,这样系统是不认识的,必须要换成K才行!(摸索了好几个月的心得!),这样设好,重新启动后就系统就回自动生成一个256M的虚拟盘了。当然,你要根据自己的内存大小来设置这个参数,如果不运行XWINDOWS,设你总内存的一半都没问题,因为LINUX系统本身并不需要很多内存的。
3、设置squid参数
编辑/etc/squid/squid.conf,在末尾加入以下条目:
httpd_accel_host virtual
httpd_accel_port 80
httpd_accel_with_proxy on
httpd_accel_uses_host_header on
http_access allow all
cache_dir ufs /squid 256 16 256
前面四条参数使squid提供透明代理提供基础。“http_access allow all”表示允许所有的客户机器都可以访问代理;这里特别强调的是最后一条 “cache_dir ufs /squid 256 16 256”,
squid默认的cache_dir是“/var/spool/squid”,我们因为要让squid将内容cache到内存中,所以这里先改成/squid,接下来要将ramdisk影射到/squid目录中。
4、建立ramdisk。用下面的两条命令来完成:
(1)mkdir /squid 建立目录“/squid”
(2)mkfs /dev/ramdisk 创建文件系统
(3)mount /dev/ramdisk /squid 将ramdisk 挂载到/squid目录。
由于ramdisk在每次重启后会消失,因此,为了让系统启动时自动建立好,我们可以建立一个自动装载ramdisk的批命令:
mkfs /dev/ramdisk
mount /dev/ramdisk /squid
将这两条命令写到一个文件中,我们暂且用myautoexec.bat作为文件名,为了方便起见,我们建立/admin目录,然后将myautoexec.bat文件保存在/admin下,并加给可执行的权限:chmod +x myautoexec.bat
但这样系统启动时并不会被调用,所以我们还要做一件事:编辑/etc/rc.local 文件,在文件末尾插入一行:/admin/myautoexec.bat,这样,系统就会自动调用myautoexec.bat了。
5、初始化squid。
还记得“cache_dir ufs /squid 256 16 256”这个参数吗?初始化过程实际上就是squid在指定的cache_dir中建立指定的一级目录(这里是16),然后在每个一级目录中建立256个二级目录。使用的命令是:“squid –z ”。但现在这时输入命令系统会报告出错,因为/squid现在的属主是root, squid 没有权限操作root的文件,所以还要先把/squid目录指派给squid用户,用“chown squid.squid /squid”。再一次运行“squid –z ”,不到一秒钟时间就可完成。如果这个过程是在磁盘上而不是在ramdisk上,一般要工作几十秒钟。
同样,这步的设置也要把
chown squid.squid /squid
squid –z
两条命令写到myautoexec.bat中,最后加上一条“squid”,就是启动squid服务进程。到这里,squid的设置全部完成。
6、设置NAT和防火墙规则。
为了方便起见,建立文件/admin/myfirwall,将规则都写到文件中:
#------初始化部分
iptables -F
iptables -t nat -F
modprobe ip_tables
modprobe iptable_nat
modprobe iptable_filter
modprobe ip_conntrack_ftp
modprobe ip_nat_ftp
modprobe ipt_state
#——初始化结束
#-START NAT<<<<<让地址为10.27.0.0/16的内部计算机可以伪装上因特网。
iptables -t nat -A POSTROUTING -o eth1 -s 10.3.37.0/24 -j MASQUERADE
#>>>>>end NAT
#端口转换,将所有发到外网的请求端口为80的都转到3128去,让squid来处理,这一
#--条是透明代理的关键<<<<<<
iptables -t nat -A PREROUTING -i eth0 -d ! 10.27.0.0/16 -p tcp -m tcp \
--dport 80 -j REDIRECT --to-ports 3128
#>>>>>>>end 端口转换
#防火墙规则<<<<<<< 这里要根据你的要求来定了
iptables -A INPUT -i eth1 -s 0.0.0.0/0 -p ICMP -j DROP
iptables –A INPUT –i eth1 –s 0.0.0.0/0 –p TCP –port ! 80 –j DROP
#以上两条分别是将所有从外网进来的ping包都统统丢弃,将所有由外网发起的非80端口
#的请求都统统丢弃,意思就是只不允许从外网向内网发ping ,只允许外网访问内网的
#HTTP服务。完整的防火墙规则要根据你的网络安全要求来制定,这里只做参考。
说明:所有以#开头的行表示说明,不用写入文件,保存为/admin/myfirewall,并用“chmod +x /admin/myfirewall”使其可以执行。编辑/admin/myautoexec.bat,加入“/admin/myfirewall”在最后一行。
到此为止,我们的好性能防火墙全部配置完成,运行reboot 重启后,可以工作了。
由 frank 发表于 6:10 AM
February 6, 2004
Redhat9上配置DNS
前提:机器名为bak.5ilinux.com 域名为5ilinux.com
1。从安装盘安装
rpm -ivh bind-9.2.2-21.i386.rpm
2。增加配置文件
vi /etc/named.conf
## named.conf - configuration for bind # # Generated automatically by redhat-config-bind, alchemist et al. # Any changes not supported by redhat-config-bind should be put # in /etc/named.custom # controls { inet 127.0.0.1 allow { localhost; } keys { rndckey; }; }; include "/etc/rndc.key";options {
directory "/var/named/";
};zone "." {
type hint;
file "named.ca";
};zone "0.0.127.in-addr.arpa" {
type master;
file "0.0.127.in-addr.arpa.zone";
};zone "localhost" {
type master;
file "localhost.zone";
};zone "5ilinux.com" {
type master;
file "5ilinux.com.zone";
};
下载named.ca
wget ftp://ftp.rs.internic.net/domain/named.root
下载后改名为named.ca 存在/var/named目录下
vi /var/named/localhost.zone
$TTL 86400 @ IN SOA @ root.localhost (
1 ; serial
28800 ; refresh
7200 ; retry
604800 ; expire
86400 ; ttl
)
IN NS localhost.@ IN A 127.0.0.1
vi /var/named/0.0.127.in-addr.arpa.zone
$TTL 86400 @ IN SOA localhost. root.localhost (
2 ; serial
28800 ; refresh
7200 ; retry
604800 ; expire
86400 ; ttl
)
@ IN NS localhost.
1 IN PTR localhost.
1 IN PTR bak.
vi /var/named/5ilinux.com.zone
$TTL 86400 @ IN SOA bak.wapya.com. root.localhost (
3 ; serial
28800 ; refresh
7200 ; retry
604800 ; expire
86400 ; ttl
)
IN NS bak.wapya.com.
www IN A 210.51.0.124
bak IN A 210.51.0.124
mail IN CNAME www
wap IN A 210.51.0.122
5ilinux.com IN MX 10 www
ok了,就是这些配置文件,至于原理我就不讲了。
只是为了方便以后查资料,所以把配置过程写下来
/etc/rc.d/iinit.d/named restart
重启一下服务就可以用了
由 frank 发表于 6:05 AM
November 17, 2003
Samba3.0轻松搞定PDC域服务器
版权声明:可以任意转载,转载时请务必以超链接形式标明文章原始出处和作者信息及本声明
http://www.5ilinux.com/samba01.html
Fedora Core 1服务器调试手记<二>
关键字 linux samba fedora smb PDC smbclient smbpasswd 域控制器
Samba3.0轻松搞定PDC域服务器
前面我们已经讲了关于samba服务器如何充当一个局域网的文件服务器,以满足平时的工作需要,在看本文档之前,大家最好先看看那篇文档《Samba3.0服务器实战调试》(http://www.5ilinux.com/samba.html),大家只有领会了那篇文档以后,再来看用samba实现PDC就不死很困难了。
其实早在samba2.2版本已经能非常好的支持samba做PDC(主域控制器),只不过到了3.0对域的支持更加好,到现在为止最新的版本3.0,已经支持AD,并且支持Microsoft Kerberos 认证、完全重写和可配置的认证子系统等新功能。
好了,我们来开始今天的任务,我们今天只是实现简单的域控制器PDC的建立,至于他支持的AD和Kerberos等功能大家慢慢的自己去研究,我也不是很懂哦:)
1。安装samba,这个很简单了,如果你是fedora,就可以从光盘直接安装samba的rpm包。
rpm -ivh samba-3.0.0-15.i386.rpm
大家也可以直接到samba的官方网站(http://www.samba.org)去下载最新的软件包
或者下载最新的tar包,http://us1.samba.org/samba/ftp/samba-3.0.0.tar.gz
那就最好按下面的方法编译
tar zvxf samba-3.0.0.tar.gz
cd samba-3.0.0
./configure \
--prefix=/usr \
--bindir=/usr/bin \
--sbindir=/usr/sbin \
--libexecdir=/usr/libexec \
--datadir=/usr/share/samba \
--sysconfdir=/etc/samba \
--localstatedir=/usr/local/samba/var \
--libdir=/usr/lib \
--with-lockdir=/var/locks/samba \
--with-swatdir=/usr/share/samba/swat \
--with-codepagedir=/etc/samba/codepages \
--with-configdir=/etc/samba \
--with-smbwrapper \
--with-automount \
--with-smbmount \
--with-pam \
--with-pam_smbpass \
--with-winbindmake
make intall
ok!安装完以后,下面才是我们的重点,修改/etc/samba/smb.conf,大家最好在原来的基础上修改。
[global]
workgroup = bmit
netbios name = proxy
server string = Samba PDC running %v
socket options = TCP_NODELAY IPTOS_LOWDELAY SO_SNDBUF=8192 SO_RCVBUF=8192# 这里的workgroup = bmit就代表bmit域,当然如果用bmit.com那就更加规范,但为了客户端输入的方便,还是直接bmit的好,netbios name = proxy表示这台服务器的netbios名,socket options选项设置控制 TCP/IP 性能。所显示的设置就可以与基于 Linux 的系统一起很好地工作了。
os level = 64
preferred master = yes
local master = yes
domain master = yes#domain master 选项是一个“开关”,通告 Samba 将成为主域控制器。(local master browser)是维护局域网机器列表的服务器被称为本地主浏览器。
security = user
encrypt passwords = yes
domain logons = yes
log file = /var/log/samba/log.%m
log level = 2
max log size = 50
hosts allow = 127.0.0.1 192.168.1.0/255.255.255.0#这里我们还是使用user验证方式,不要悬在所谓的domain,至于hosts allow大家可以根据自己的需求写那些网段可以访问你的服务器,或者索性不写也行。
logon home = \\%L\%U\.profile
logon drive = H:
logon path = \\%L\profiles\%U
logon script = netlogon.bat#以上是漫游设置和登录脚本,logon path = \\%L\profiles\%U,会于下面我们要说的 [profiles] 共享成对应关系。
[homes]
comment = Home Directories
browseable = no
writeable = yes[profiles]
path = /home/samba/profiles
writeable = yes
browseable = no
create mask = 0600
directory mask = 0700[netlogon]
comment = Network Logon Service
path = /home/netlogon
read only = yes
browseable = no
write list= root以上是关于共享的手腕子,其中profile是用来存放每个登录用户的设置文件,以便用户以后登录可以从服务器读取以前的桌面设置,netlogon是用来存放登录脚本的,所以要限制写的权限,假设这里只有root用户可以有权限。
至于其他共享,完全可以参照《Samba3.0服务器实战调试》(http://www.5ilinux.com/samba.html)这篇文章共享设置,我就不再重复讲了
接着是将用户和机器帐户添加到域控制器。
先建立创建了下列各组以及创建两个必要目录,并设置正确的所有权。
groupadd admin
groupadd machines
mkdir -m 0775 /home/netlogon
chown root.admins /home/netlogon
mkdir /home/samba /home/samba/profiles
chown 1757 /home/samba/profiles
对上述目录设置正确的权限和所有权是保护服务器的关键一步哦 :)
手工添加机器帐号
比如我的客户端的机器名是ibm240,那么我们可以这么做
useradd -g machines -d /dev/null -c "machine id" -s /bin/false ibm240$
passwd -l ibm240$
输入两遍密码;
不要忘记标上美元符号;这是必需的,它将该项标识为信任帐户
创建 linux 帐户后,我们现在可以将该机器添加到 /etc/samba/smbpasswd
smbpasswd -a -m ibm240
当然你也可以让系统自动添加机器帐号,用下面的方法,不过大家最好先试手动添加,成功后再试验系统自动添加
自动添加只要在[global]添加
add user script = /usr/sbin/useradd -d /dev/null -g machines -s /bin/false -M %u
添加用户帐号
首先添加的是root帐户,把root加入到smb帐户中
smbpasswd -c root
这一步很重要,因为后面的加入域要用到有管理员的帐号加入域的权限,否则用普通用户好像不能顺利加入域
然后添加普通用户
useradd frank
passwd frank
smbpasswd -a frank
为了方便以后的管理,最好smb的用户密码和unix系统密码一样,这样我们还可以用到samba的密码同步功能
#下面的选项语句将允许用户从 Windows 客户机上更改他们的 Samba 密码,这样会随即更新他们的 UNIX 密码以与新的 Samba 项相匹配。但是如果更改了 UNIX 密码,那么同一技术不能逆向工作;必需手工同步更改 Samba 密码。也是在[global],初学者可以先不做这个工作。
unix password sync = yes
passwd program = /usr/bin/passwd %u
passwd chat = *New*UNIX*password* %n\n *Retype*new*UNIX*password* %n\n *Enter*new*UNIX*password* %n\n *Retype*new*UNIX*password* %n\n *passwd: *all*authentication*tokens*updated*successfully*#上述语句中唯一值得一提的是 passwd chat 选项,不管这里如何显示它,都要将它输入成一行。还要注意有些选项使用“password”,而有些使用“passwd”。
Samba PDC 的配置就这样完成了。剩下唯一要做的是将客户机加入到域中。记得重启samba服务哦!
客户端的设置,这里由于条件的限制,我只试验了windows2000客户端加入域,至于winxp和win98的加入大家自己去试验。
(win200机器最好先重启一下,可以避免一些不必要的问题)然后转至 控制面板 -> 网络-> 网络标示,如果机器目前被配置在 工作组 选项下,那么选中 域 单选按钮并输入域名bmit。
现在,通过使用用户名 root 和相应的密码登录到域。必需初始化服务器和客户机机器之间的“秘密”。从此时起,任何已认证的用户都可以从这台机器登录。
应该出现一个欢迎您来到 XX域的消息恭喜你已经成功将samba配置成PDC
据说xp加入samba建立的域有点复杂,我没试验过,大家有兴趣的话,最好去samba的老家看看文档,好像是要设置安全选项,并修改注册表,好麻烦哦,幸亏我没有xp :)
相关参考文档
Samba3.0服务器实战调试 http://www.5ilinux.com/samba.html
将 Samba 用作 PDC http://www-900.ibm.com/developerWorks/cn/cnedu.nsf/linux-onlinecourse-bytitle/60281E1423A2B876C8256D04001C9374?OpenDocument
作者:张微波
2003年11月17日晚于北京
由 frank 发表于 5:41 AM
November 12, 2003
Samba3.0服务器实战调试
版权声明:可以任意转载,转载时请务必以超链接形式标明文章原始出处和作者信息及本声明
http://www.5ilinux.com/samba.html
Fedora Core 1服务器调试手记<一>
关键字 samba fedora smb smbclient smbpasswd
Samba3.0服务器实战调试
fedora预装的samba已经是samba-3.0.0-15,功能已经非常强大了,今天我们调试的重点不是samba3.0的新功能,我们还是先来实现他的基本功能,文件共享服务,至于域控制器功能我会在以后的调试手记中阐述。
我们今天要实现的环境是,假如公司有财务,技术,领导3个部门,我们分别为3个部门建立3个用户组为caiwu,network,lingdao;
三个部门里各有2个用户,我们建用户分别为caiwu01,caiwu02,network01,network02,lingdao01,lingdao02
然后我们分别就公司的具体情况建立相应的目录及访问权限,通过以下的例子,希望大家能在平时的工作中灵活的应用samba的安全权限来设置你们的samba文件服务器。
1。首先服务器采用用户验证的方式,每个用户可以访问自己的宿主目录,并且只有该用户能访问宿主目录,并具有完全的权限,而其他人不能看到你的宿主目录。
2。建立一个caiwu的文件夹,希望caiwu组和lingdao组的人能看到,network02也可以访问,但只有caiwu01有写的权限。
3。建立一个lindao的目录,只有领导组的人可以访问并读写,还有network02也可以访问,但外人看不到那个目录
4。建议一个文件交换目录exchange,所有人都能读写,包括guest用户,但每个人不能删除别人的文件。
5。建议一个公共的只读文件夹public,所有人只读这个文件夹的内容。
好,我们先来前期的工作
#groupadd caiwu
#groupadd network
#groupadd lingdao
#useradd caiwu01 -g caiwu
#useradd caiwu02 -g caiwu
#useradd network01 -g network
#useradd network02 -g network
#useradd lingdao01 -g lingdao
#useradd lingdao02 -g lingdao
然后我们使用smbpasswd -a caiwu01的命令为6个帐户分别添加到samba用户中
#mkdir /home/samba
#mkdir /home/samba/caiwu
#mkdir /home/samba/lingdao
#mkdir /home/samba/exchange
#mkdir /home/samba/public
我们为了避免麻烦可以在这里把上面所有的文件夹的权限都设置成777,我们通过samba灵活的权限管理来设置上面的5点要求。
以下是我的smb.conf的配置文件
[global]
workgroup = bmit
#我的网络工作组
server string = Frank's Samba File Server
#我的服务器名描述
security = user
#使用用户验证机制
encrypt passwords = yes
smb passwd file = /etc/samba/smbpasswd
#使用加密密码机制,在win95和winnt使用的是明文其他的基本上可以按照默认的来。
[homes]
comment = Home Directories
browseable = no
writable = yes
valid users = %S
create mode = 0664
directory mode = 0775#homes段满足第1条件
[caiwu]
comment = caiwu
path = /home/samba/caiwu
public = no
valid users = @caiwu,@lingdao,network02
write list = caiwu01
printable = no#caiwu段满足我们的第2要求
[lingdao]
comment = lingdao
path = /home/samba/lingdao
public = no
browseable = no
valid users = @lingdao,network02
printable = no#lingdao段能满足我们的第3要求
[exchage]
comment = Exchange File Directory
path = /home/samba/exchange
public = yes
writable = yes#exchange段基本能满足我们的第4要求,但不能满足每个人不能删除别人的文件这个条件,即使里设置了mask也是没用,其实这个条件只要unix设置一个粘着位就行
chmod -R 1777 /home/samba/exchange
注意这里权限是1777,类似的系统目录/tmp也具有相同的权限,这个权限能实现每个人能自由写文件,但不能删除别人的文件这个要求
[public]
comment = Read Only Public
path = /home/samba/public
public = yes
read only = yes#这个public段能满足我们的第5要求。
到此为止我们的设置已经能实现我们的共享文件要求,记得重启服务哦
#/etc/rc.d/init.d/smb restart
如果大家没有winodws,不妨先用samba的cilent端命令来测试一下
命令的用法我在这里只举几个例子,具体的大家去试验
smbclient -L 服务器ip -N
guest帐户查询你的服务器的samba共享情况,你可以检验一下是否lingdao目录时候能被guest帐户看到,应该是看不到的,当然你也可以以某个用户的名义查看
smbclient -L 服务器ip -U caiwu01
系统会提示密码,只要输入smb密码就行。
smbclient //服务器ip/caiwu -U caiwu01
#以caiwu01用户的名义登录caiwu目录
smbmount //服务器ip/caiwu /mnt/caiwu -o username=caiwu01
#把服务器的财务目录映射到本地的/mnt/caiwu目录
关于samba的其他用法我会在后续的文章中继续,请大家等待!
参考资料
Samba 配置 http://www.linuxfocus.org/ChineseGB/March2002/article177.shtml
O'Reilly 线上书籍:http://www.oreilly.com/catalog/samba/chapter/book/index.html
Samba3.0轻松搞定PDC域服务器 http://www.5ilinux.com/samba01.html
作者:张微波
2003年11月12日于北京
由 frank 发表于 5:38 AM
June 4, 2003
调试socks5服务器
调试socks5服务器
最近有不少网友老是问我一些QQ如何利用代理的事。其实是很简单的,通过代理猎手寻找一些socks5代理便可。刚好最近在学习linux系统,于是突然想到用RH9来做个socks5代理服务器。ok!说干就干
1。先在北大天网搜索一下socks5的安装包,发现一大堆,最新版本是socks5-v1.0r11.tar.gz,于是下载到我的RH9的服务器上。
2。解压缩软件包
#tar xvfz socks5-v1.0r11.tar.gz
3.开始编译
#cd socks5-v1.0r11
#./configure --with-threads
#make
#make install
4.建立/etc/socks5.conf,其实在软件包里已经有现成的examples
#cd examples
#cp socks5.conf.singlehomed /etc/socks5.conf (我们挑选一个最简单的配置文件)
默认配置就是
# A Socks5 Config file for a normal, single homed server
permit - - - - - -
这个配置文件是允许任何人都可以使用这个socks5代理,并不需要验证
如果想限制只是某个IP段(192.168.0.0/255.255.255.0)可以访问,可以改成
permit - - 192.168.0. - - -
或者只允许某个IP(192.168.0.10)可以访问使用,可以改成
permit - - 192.168.0.10 - - -
5.ok 运行一下socks5 -t 启动socks5服务,然后用QQ测试一下代理是否生效,记住默认端口是1080
反正我是在FTP软件和QQ上试了 都没问题。
6.如果要停止socks5,只要运行stopsocks -KILL就行,socks5就会停止!
7.使用非默认端口:如果你想让socks5服务启动的时候不启动默认监听端口1080,比如为1234,我们可以运行如下命令
socks5 -b 1234 -t 当然你关掉这个服务,就必须用下面的命令 stopsocks -p 1234 -KILL
8.我们来深入配置一下socks5.conf,使socks5使用用户验证机制
要使用用户验证,首先要建立/etc/socks5.pwsswd文件
内容为:(userA代表用户名。passwdA代表用户userA的密码)
#/etc/socks5.passwd
userA passwdA
userB passwdB
userC passwdC
然后修改/etc/socks5.conf
添加下列语句
auth - - u
或者把:
auth - - -改成auth - - u
添加:
把默认permit - - - - - - 改成permit u - 192.168.0. - - -
即允许来自192.168.0.0/255.255.255.0网段的任何经过用户认证的连接
如果你不想把密码文件存在默认的/etc/socks5.passwd里。想存在自定义的文件,比如/etc/qq.passwd
那就得修改/etc/socks5.conf.添加一项参数
set SOCKS5_PWDFILE /etc/qq.passwd
ok!重启一下服务,这时如果不输入正确的用户名和密码是使用不了socks5代理服务器的,输入正确的用户名和密码便可使用。
以上说的参数,大家可以结合使用,比如限制某个IP段使用socks5服务,而且要使用用户名验证
另外针对/etc/socks5.conf还有一些参数,大家就自己去研究吧
set SOCKS5_BINDINFC 192.168.0.8:1080
忽略ident请求。当客户机没有运行identd时,使用SOCKS5_NOIDENT将降低超时值
set SOCKS5_NOIDENT
指定连接停顿最长时间。超过最大值后,socks5断开连接
set SOCKS5_TIMEOUT 15
socks5将接受SOCKS V4 协议的请求,默认不接受
set SOCKS5_V4SUPPORT
指定同时存在的最大子进程数,Socks5预设为64
set SOCKS5_MAXCHILD 4
作者:张微波
2003年6月4日
由 frank 发表于 5:27 AM | 回复 (0) | 引用
March 21, 2003
Redhat9+ADSL+IPTABLES+DHCPD解决方案
本解决方案要用到服务有 ppp0 , dhcp ,iptables ,squid (其中dhcp和squid可选择不装)
最终实现目标: 服务器redhat用adsl拨号上网,下面局域网的其他机器通过服务器的iptables服务上网,并且基本上网服务都不受影响。如果你的客户端比较多的话,可以选择安装squid服务,使客户端访问网页速度快一点。当然如果你觉的你懒的去配置客户端的TCP/IP设置,那你可以启动DHCP服务。
服务器: redhat9.0 3com905b X 2 中兴的ZXDSL831 北京网通ADSL线路(非包月)
IP地址分配:
redhat服务器:
eth0: 192.168.0.1 255.255.255.0 其他网关,dns等都不要配置(如图),
此网卡用于连接局域网其他机器
eht1: 192.168.1.2 255.255.255.0其他网关,dns等都不要配置(如图),
此网卡用于ADSL拨号用,注意大家千万不要设置成192.168.1.1,因为我的中兴的ADSL有个默认的配置地址就是192.168.1.1
以上我们服务器的两块网卡都是静态设置,而不是大家常说的ADSL网卡要设置成DHCP获取地址。
客户端的IP地址设置我们这里选择DHCP获取。如果你要静态设置,那你可以设置成
192.168.0.2-192.168.0.254之间的ip地址,子网掩码都是255.255.255.0,网关都指向192.168.0.1,DNS指向192.168.0.1或者其他你知道的ISP的DNS地址
好服务器的网卡基本配置完成,现在我们来配置adsl连接,网上有很多人说redhat的自ADSL有问题,可我配置却没有任何问题。我是直接用命令adsl-setup来配置
输入:adsl-setup 进入配置对话
Welcome to the ADSL client setup. First, I will run some checks on
your system to make sure the PPPoE client is installed properly...
The following DSL config was found on your system:
Device: Name:
ppp0 DSLppp0
Please enter the device if you want to configure the present DSL config
(default ppp0) or enter 'n' if you want to create a new one: 建立的拨号连接名字,默认就行
LOGIN NAME
Enter your Login Name (default ): 输入ADSL账号的登陆用户名
INTERFACE
Enter the Ethernet interface connected to the ADSL modem
For Solaris, this is likely to be something like /dev/hme0.
For Linux, it will be ethX, where 'X' is a number.
(default eth1): ADSL设备所绑定的网卡,我们这里是eht1
Do you want the link to come up on demand, or stay up continuously?
If you want it to come up on demand, enter the idle time in seconds
after which the link should be dropped. If you want the link to
stay up permanently, enter 'no' (two letters, lower-case.)
NOTE: Demand-activated links do not interact well with dynamic IP
addresses. You may have some problems with demand-activated links.
Enter the demand value (default no): 默认就行
DNS
Please enter the IP address of your ISP's primary DNS server.
If your ISP claims that 'the server will provide dynamic DNS addresses',
enter 'server' (all lower-case) here. 注意这里我们不要填写任何DNS地址,后面我们会配置ADSL自动从ISP中获取dns地址
If you just press enter, I will assume you know what you are
doing and not modify your DNS setup.
Enter the DNS information here:
PASSWORD
Please enter your Password: 输入ADSL账号的密码
Please re-enter your Password: 密码验证
USERCTRL
Please enter 'yes' (two letters, lower-case.) if you want to allow
normal user to start or stop DSL connection (default yes): 默认就行
FIREWALLING
Please choose the firewall rules to use. Note that these rules are
very basic. You are strongly encouraged to use a more sophisticated
firewall setup; however, these will provide basic security. If you
are running any servers on your machine, you must choose 'NONE' and
set up firewalling yourself. Otherwise, the firewall rules will deny
access to all standard servers like Web, e-mail, ftp, etc. If you
are using SSH, the rules will block outgoing SSH connections which
allocate a privileged source port.
The firewall choices are:
0 - NONE: This script will not set any firewall rules. You are responsible
for ensuring the security of your machine. You are STRONGLY
recommended to use some kind of firewall rules.
1 - STANDALONE: Appropriate for a basic stand-alone web-surfing workstation
2 - MASQUERADE: Appropriate for a machine acting as an Internet gateway
for a LAN
Choose a type of firewall (0-2): 由于我们要在后面使用iptables,所以选择2
Start this connection at boot time
Do you want to start this connection at boot time?
Please enter no or yes (default no): 我这里不是包月,所以选择no,如果你是包月的话就选yes
** Summary of what you entered **
Ethernet Interface: eth1
User name: username
Activate-on-demand: No
DNS: Do not adjust
Firewalling: MASQUERADE
User Control: yes
Accept these settings and adjust configuration files (y/n)? 选择yes,保存设置.
用adslsetup命令配置好ppp0后,我们在Xwindows下看一下ppp0的配置
注意这里我们把自动从提供商处获取DNS信息选上,这部非常关键,否则到后面即使客户端能上网,本地服务器也看不了网页。
好了到此位置,adsl配置完成,我们用命令adsl-start来激活ADSL连接
基本如果你能ping通外面的IP地址就行了,最多再用nslookup命令来测试一下
DNS是否正常。
只有在确认ADSL连接没问题后,我们才来配置iptables.
修改/etc/sysconfig/iptables(把原有的内容都删除),修改完如下
# Firewall configuration written by lokkit
# Manual customization of this file is not recommended.
# Note: ifup-post will punch the current nameservers through the
# firewall; such entries will *not* be listed here.
*mangle
:PREROUTING ACCEPT [0:0]
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
*nat
:PREROUTING ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
[0:0]-A POSTROUTING -o ppp0 -j MASQUERADE
COMMIT
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
COMMIT
修改/etc/sysctl.conf,把net.ipv4.ip_forward设置成1,如下:
net.ipv4.ip_forward = 1
如此一来,每次你重新启动机器或重新启动网络服务(/etc/init.d/network restart)时就会自动启动ip转发功能!
重起iptables服务:
/etc/rc.d/init.d/iptables restart
iptables -t nat -L -n 看代理规则是否正确,结果如下:
[root@localhost root]# iptables -t nat -L -n
Chain PREROUTING (policy ACCEPT)
target prot opt source destination
Chain POSTROUTING (policy ACCEPT)
target prot opt source destination
MASQUERADE all -- 0.0.0.0/0 0.0.0.0/0
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
cat /proc/sys/net/ipv4/ip_forward 看值是否为1,结果如下:[/b]
[root@localhost root]$ cat /proc/sys/net/ipv4/ip_forward
1
其实到现在如果你的客户段是静态设置ip地址,现在就可以通过服务器共享上网了,如果你还要配置DHCP服务器的话,修改/etc/dhcpd.conf
#Start of /etc/dhcpd.conf
ddns-update-style interim;
ignore client-updates;
subnet 192.168.0.0 netmask 255.255.255.0 {
# --- default gateway
option routers 192.168.0.1;
option subnet-mask 255.255.255.0;
# --- option domain-name-servers ISP's DNS1,ISP's DNS2;
option domain-name-servers 192.168.0.1,202.106.0.20,202.106.148.1;
option time-offset -18000; # Eastern Standard Time
# --- Selects point-to-point node (default is hybrid). Don't change this unless
# -- you understand Netbios very well
# option netbios-node-type 2;
range dynamic-bootp 192.168.0.2 192.168.0.254;
default-lease-time 21600;
max-lease-time 43200;
}
#End of /etc/dhcpd.conf
关于squid的配置我就不讲了,非常简单哦,只不过在配置过程中需要主要配置dns地址。默认使没有的,否则你在adsl没连接的情况下,squid是启动不了的,可参考dhcpd.conf的dns地址。
好了,redhat服务器reboot后,所有windows客户端ipconfig/renew一下幸地址,服务器adsl-start后,一切都ok!什么时候想停止上网,只要在服务器端输入以下命令adsl-stop就可以