学习Linux网络服务配置时做的笔记!

Web、Mail、Ftp、DNS、Proxy、VPN、Samba、LDAP 等基础网络服务
4321go
帖子: 180
注册时间: 2005-09-13 21:18

学习Linux网络服务配置时做的笔记!

#1

帖子 4321go » 2006-05-15 20:11

一、基本网络配置
1.基本配置文件
/etc/hosts:是将IP地址和主机名联系起来的简单文本文件。
格式:IP地址 全限定主机名 别名
举例:192.168.0.2 wanghui.shuke.com wanghui
说明:将IP地址映射到wanghui.shuke.com,并且分配一个备用主机名wanghui。

/etc/services:将服务的名字转成端口号。
注意:没有必要修改,已经包含了常用服务的端口号。
格式:主机服务名 端口号/端口类型 别名
举例:smtp 25/utp mail
说明:smtp服务使用25端口,使用utp连接方式,服务别名是mail。

/etc/sysconfig/network:网络配置信息,系统启动时会引导这个文件。
内容:
NETWORKING=YES|NO
YES表示需要配置网络,NO表示不需要配置网络;
HOSTNAME=homename
主机的全限定域名;
GATEWAY=gw-ip
网络网关的IP地址;
GATEWAYDEV=gw-dev
网络设备的名称(例如eth0或者IP地址);
NISDOMAIN=dom-name
表示NIS域(如果有的话)。

2.可执行脚本和命令
/etc/rc.d/init.d/network {start|stop|restart|reload|status}
系统启动时的初始化脚本程序。

/etc/sysconfig/network-scripts/ifcfg-interface-name:网卡配置文件。
内容:
DEVICE=物理设备名
IPADDR=IP地址
NETMASK=掩码值
NETWORK=网络地址
BROADCAST=广播地址
GATEWAY=网关地址
ONBOOT=[yes|no](引导时是否激活设备)
USERCTL=[yes|no](非root用户是否可以控制该设备)
BOOTPROTO=[none|static|bootp|dhcp](引导时不使用协议|静态分配|BOOTP协议|DHCP协议)

ifconfig:命令用来在系统内核表中设置或读取网络设备参数
举例:ifconfig eth0 IP地址 netmask 子网掩码
说明:配置IP和子网
举例:ifconfig eth0 hw ether MAC地址
说明:配置mac地址
举例:ficonfig dynamic
说明:启动dhcp
举例:ifconfig eth0 [down|up]
说明:启动或关闭网卡

netconfig:通过通行界面配置网络。

3.DNS
/etc/host.conf:指定如何解析主机名。
举例:order hosts,bind
说明:查询顺序,先静态还是先dhcp

/etc/nsswitch.conf:用于管理系统中多个配置文件查找的顺序。

/etc/resolv.conf:网络用来确定主机解析的关键文件之一,最多标示三个。
格式:search lintec.edu.cn
nameserver 202.106.196.152
nameserver 202.106.196.115
说明:nameserver表明dns服务器的IP地址;search指明域名查询顺序。

4.路由设置及管理命令
route:显示路由信息
内容:
Destination:目标网络或主机
Gateway:该目标要经由哪个网关传送
Genmask:目标网络或主机的掩码
Flages:路由标志
Iface:该路由使用的网络接口
Metric:路由成本
Ref:此路由被使用的次数

添加路由命令:
route add -net 192.192.192.0 netmask 255.255.255.0 dev eth0

删除路由命令:
route del -net 192.192.192.0 netmask 255.255.255.0

traceroute:测试路由命令
举例:traceroute www.sina.com.cn
说明:测试从本地到远程主机的路由信息

二、邮件服务
1.MUA与NTA:
MUA:邮件用户代理,常用的有:Foxmail, Outlook Express, Pine, mail等。
MTA:邮件传送带里,常用的有:Sendmail, Qmail, Postfix, Exim, Exchange等

2.sendmail安装包:
sendmail-812.8-4:sendmail可执行文件
sendmail-cf-812.8-4:sendmail.cf生成器
sendmail-doc-812.8-4:sendmail.doc文档

3.sendmail的主要配置文件:
/etc/mail/aliases
用来定义邮件的列表、转发、别名。
注意:每次修改了aliases文件后,要使用命令newaliases更新数据库。
举例:fox: shuke
说明:系统用户shuke具有fox的别名。
举例:maillist: shuke liu wang zhang
说明:发送给maillist的邮件,shuke,liu,wang,zhang用户都能收到。
举例:shuke: shuke.w@163.com
说明:发送给本地shuke的用户会被转发给shuke.w@163.com这个邮箱。

/etc/mail/sendmail.cf
用来限定sendmail守护进程的运行,在264行左右。

/etc/mail/sendmail.mc
sendmail.cf中的文件太复杂,可以通过编辑sendmail.mc文件,然后生成sendmail.cf文件。
命令:m4 /etc/mail/sendmail.mc > /etc/mail/sendmail.cf


/etc/mail/local-host-names
定义本地主机名和域名的列表,判断收到的邮件是本地的还是远程的。

/etc/mail/access.db
用来定义要通过的邮件地址列表,是允许还是拒绝。
每次修改后,需要用makemap生成新的access数据库。
命令:makemap hash /etc/mail/access.db < /etc/mail/access

/etc/mail/sendmail.cw
当一个主机有多个域名,并且希望每个域名都能用来接收电子邮件时,可以在该文件中加入这些域名,sendmail会接受这些域名的邮件,并把他们当作本地邮件处理。
举例:vi /etc/mail/sendmail.cw
cuckoo.edu.cn
napoleon.frh.org
说明:这两个域名的邮件都会被这台机器接收。

/etc/mail/virtusertable
建立虚拟邮件账户。
举例:shuke@mail.shuke.com shuke1
shuke@shuke.com shuke2
说明:shuke@mail.shuke.com的邮件被接收,并放在shuke1邮箱,shuke@shuke.com邮件被接收,放在shuke2邮箱。
注意:修改后必须生成新的数据库文件。
命令:makemap hash /etc/mail/virtusertable.db < /etc/mail/virtusertable

4.其他文件
/var/spool/mqueue:是邮件队列临时存放的目录。
内容:
qf*:消息队列控制文件;
df*:数据文件;
tf*:临时文件;
nf*:每个用户对应的消息队列;
xf*:当前会话过程的transcript文件。

/var/mail:存放所有收到的邮件,每个本地用户会有一个目录。

var/log/maillog:用于分析错误的日志文件。

5.增加sendmail的认证功能
需要使用的安装包:
cyrus-sasl-devel-2.1.10-4
cyrus-sasl-md5-2.1.10-4
cyrus-sasl-gssapi-2.1.10-4
cyrus-sasl-2.1.10-4
cyrus-sasl-plain-2.1.10-4

注意:在sendmail已经包括sasl验证库的情况下,默认不支持smtp认证,需要配置/etc/mail/sendmail.mc文件支持smtp认证。编辑文件/etc/mail/sendmail.mc文件,并去掉下面三个文件前面的注释:
TRUST_AUTH_MECH (`EXTERNAL DIGEST-MD5 LOGIN PLAIN ') dnl
define (`confAUTH_MECHANISMS', ` EXTERNAL DIGEST-MD5 CRAM-MD5 LOGIN PLAIN ') dnl
DAEMON_OPTIONS (`Port =submission, Name=MSA, M=Ea') dnl
并配置下面的地址为本机IP地址:
DAEMON_OPTIONS (`Port =smtp,Addr=192.168.10.2,Name=MSA, M=Ea') dnl
使用m4工具生成sendmail.mc文件:
m4 /etc/mail/sendmail.mc > /etc/mail/sendmail.cf

6.安装配置POP3和IMAP服务器
使用的安装包:imap-2001a-28

编辑两个文件:/etc/xinetd.d/ipop3文件和/etc/xinetd.d/imap文件,修改disable设置为"no",然后使用启动进程命令:/etc/rc.d/init.d/xinetd restart即可。

三、APACHE服务器与APACHE+MYSQL+PHP协同服务
1.Apache的主要配置文件:httpd.conf
/etc/httpd/conf/httpd.conf
或者
/usr/local/apache/conf/httpd.conf

httpd.conf的内容:
Serverroot:设置服务器存在的主目录;

LockFile filename:httpd守护进程的加锁文件,一般不需要设置,如果Serverroot是NFS文件系统,就需要修改参数指定本地文件系统中的路径;

ScoreBoardFile file-path:httpd使用ScoreBoardFile来维护进程的内部数据,因此除非要在一台计算机上运行几个Apache服务器,否则不需要修改;

PidFile /var/run/httpd.pid:指定文件记录httpd的守护进程号;

Timeout number:定义客户程序和服务器连接的超时间隔;

KeepAlive on|off:用于支持http1.1版本的一次连接、多次传输功能,这样就可以在一次连接中传递多个http请求;

MaxKeepAliveRequests number:一次连接可以进行的http请求最大数。如果数值为0,将支持在一次连接内进行无限制的传输请求;

KeepAliveTimeout number:测试一次连接中的多次请求传输之间的时间,如果在完成了一次连接之后没有收到客户程序的下一次请求,超过这个间隔值后,就会断开;

StartServers number:服务器启动时建立的进程数量;

MinSpareServers/MinSpareThreads number:服务器最低维持的空进程数;

MaxSpareServers/MaxSpareThreads number:服务器运行时维持的最大空进程数;

MaxClients number:服务器运行时可以同时处理的客户端最大数量;

MaxRequestsPerChil number:设置每个进程可处理的请求数,达到这个数值后,子进程自动销毁,如果设置为0,则永不销毁子进程;

Listen [IP-address:]portnumber:设置apache监听的端口,默认为80;

LoadModule module filename:在apahce安装过程中,被配置为--enable-module=shared的apache模块,会被独立的编译成*.so的动态共享对象。当服务器需要加载这个动态对象时,必须在httpd.conf中使用LoadModule指令,指定在服务器启动或重新启动时被加载;
举例:LoadModule foo_module modules/foo.so

ExtendedStatus On|Off:apache服务器可以通过特殊的http请求,报告自身的运行状态,打开这个ExtendedStatus参数,可以让服务器报告更全面的运行状态信息;

User unix-userid:服务器以root身分启动以后,改变为设置的用户身份运行;

Group unix-grouprid:服务器以root身分启动以后,改变为设置的组身份进行运行;

ServerName 完整的域名/IP地址[:端口号]:默认不需要修改,如果服务器名字解析有问题,在此修改;

ServerAdmin 邮件地址:设置的在返回给客户端的错误信息中要包含的邮件地址;

UseCanonicalName on|off|dns:on-使用ServerName值生成的默认web站点构造服务器的规范名称,off-使用由客户提供的主机头指令的主机名称和端口号为服务器构造默认的web站点,dns-使用dns执行客户连接IP地址搜索时确定的主机名构造服务器默认的web站点;

DocumentRoot /usr/local/apache/htdocs:设置客户端访问服务器时,可允许访问的根目录;
举例:DocumentRoot /usr/web
注意:最后的目录不要加"/"符号。

<Directory 目录路径>...</Directory>:用于封装一组命令,使之仅对某个目录及其子目录生效;
举例:
<Directory /usr/local/apache/htdocs/pics>
Options Indexes FollowSymLinks
AllowOverride None
Order allow,deny
Allow from all
</Directory>

Options [+|-]可选项[+|-]可选项...:设置在特定目录中将使用那些服务器特性,默认为ALL;

AllowOverride All|None|指令类型[指令类型]...:当服务器发现了一个.htaccess文件(由AccessFileName指定)时,它需要知道在这个文件中声明的哪些指令;

Order规则:控制缺省的访问状态和Allow,Deny指令被评估的顺序;
举例:
<Directory /www>
order Allow,Deny
Allow from shuke.com
Deny from no.shuke.com
说明:shuke.com域中的所有主机,除了no.shuke.com子域中包含的主机外都允许访问。所有不在shuke.com域中的主机都不允许访问。

Allow from all|host|env=env-variable [host|env=env-variable]...:哪些主机可以访问服务器的一个区域,可以用主机名,IP地址,IP地址范围或者其他环境变量中捕获的客户端请求特性来对访问进行控制;

Deny from all|host|env=env-variable [host|env=env-variable]...:允许基于主机名,IP地址或者环境变量限制对服务器的访问;

UserDir Directory:设定了用户宿主目录下的一个实际目录,存放了该用户提供访问的文档。apache允许系统的每个用户建立自己的网站,用户只需要在自己的主目录下建立一个目录,并以UserDir指令设置目录名(默认为public_html),把提供访问的文件存放在该目录下,则在客户端可以使用类似的地址访问;
举例:http://webserver/~用户名/guess.html
说明:服务器向客户端返回/home/用户名/guess.html页面。

DirectoryIndex filename:设置默认的网站访问页面;
举例:DirectoryIndex index.html
说明:必须在客户端方式index.html为站点的索引文件。

AccessFileName 文件名:指定所有发布目录中的配置文件名;
举例:AccessFileName .htaccess
说明:在返回文档/usr/local/web/index.html之前,服务器会为此指令读取/.htaccess, /usr/.htaccess, /usr/local/.htaccess和/usr/local/web/.Htaccess,除非此功能已为如下代码所禁用:
<Directory />
AllowOverride None
</Directory>

HostnameLookups on|off|double:此指令起用了DNS查询,使得主机名能被记入日志;

ServerSignature On|Off|Email:配置服务器生成文档的页脚,on-简单的增加一行关于服务器版本和正在伺服的虚拟主机的ServerName,off-没有错误行,Email-额外创建一个指向ServerAdmin的"mailto:"部分;

Alias URL-path file-path|directory-path:使文档可以存储在DocumentRoot以外的本地文件系统中;
举例:Alias /image /ftp/pub/image
说明:对http://webserver/image/shuke.w的请求,服务器将返回/ftp/pub/image/shuke.w文件。

ScriptAlias URL-path file-path|directory-path:ScriptAlias指令的行为与Alias指令相同,但同时,他又表明此目录中含有应该由mod_cgi中cgi-script处理器的CGI脚本;
举例:ScriptAlias /cgi-bin /web/cgi-bin/
说明:对http://myserver/cgi-bin/shuke的请求会引导服务器执行/web/cgi-bin/shuke脚本。

AddType MIME-type extension [extension]...:AddType指令在给定的文件扩展名与特定的内容类型间建立映射关系;

AddHandler handler-name extension [extension]...:指定带extension扩展名的文件应被handler-name处理器来处理。这个映射关系会添加在所有有效的映射上,并覆盖所有相同的extension扩展名映射;
举例:AddHandler cgi-script .cgi
说明:把扩展名为.cgi的文件作为CGI脚本处理,一旦这个定义放在httpd.conf文件中,所有包含.cgi扩展名的文件,都会被当作CGI程序。

<VirtualHost 地址[:端口号][地址[:端口号]]...>...</VirtualHost>:用于封装一组仅作用于特定虚拟主机的指令;

2.基于IP地址的虚拟主机:
1) 需要服务器支持一个网卡绑定多个IP地址,在Red Hat Linux9的内核中已默认支持此功能。首先需要为虚拟主机申请域名和IP,假设为本地地址为www.shuke1.com:202.19.0.23,申请新的域名和IP为:www.shuke2.com:202.19.0.55;

2) 为网卡添加新IP地址;
#/sbin/ifconfig eth0 add 202.19.0.35 netmask 255.255.255.0

3) 重新设置httpd.conf,在文件中加入;
<VirtualHost 202.19.0.35>
ServerAdmin webmaster@ shuke1.com
DocumentRoot /home/httpd/www.shuke2.com
ServerName www.shuke2.com
ErrorLog /var/log/httpd/www.shuke2.com/error.log
</VirtualHost>

4) 建立相应的目录;
#mkdir /home/httpd/www.shuke2.com
#mkdir /var/log/httpd/www.shuke2.com

5) 将相应的主业内容存放在DocumentRoot指定的目录中;

6) 重新启动httpd服务进程,即可提供两个web服务器的功能。

3.基于名字的虚拟主机服务:基于名字的虚拟主机服务是比较适合使用的一种方案。他不需要更多的IP地址,而且配置简单,无需什么特殊的软硬件支持。现代的浏览器大都支持这种虚拟主机地实现方法。
1) 在DNS登记新的域名www.shuke2.com指向本地IP地址;
2) 修改配置文件,增加下面内容:
NameVirtualHost 202.19.0.23
<VirtualHost 202.19.0.23>
ServerAdmin webmaster@yourdomain.com
DocumentRoot /home/httpd/www.shuke1.com
ServerName www.shuke1.com
ErrorLog /var/log/httpd/www.shuke1.com/error.log
</VirtualHost>

<VirtualHost 202.19.0.23>
ServerAdmain webmaster@yourdomain.com
DocumentRoot /home/httpd/www.shuke2.com
ServerName www.shuke2.com
ErrorLog /var/log/httpd/www.shuke2.com/error.log
</VirtualHost>
也就是在基于IP地址的配置基础上增加一句:NameVirtualHost 202.19.0.23,最后是建立相应的目录,将主页内容放到相应的目录中去。

4.Apache的日志配置:
同样需要在httpd.conf中使用配置命令完成。
ErrorLog 文件路径|syslog[:facility]:指定了当服务器遇到错误时记录错误日志的文件名,默认为logs/error_log。

LogLevel级别:设置写入错误日志中信息的详细程度。
注意:建立至少使用crit级别,默认warn级别。
内容:
emerg:紧急-系统无法使用;
举例:Child cannot open lock file. Exiting
alert:必须立即采取错误;
举例:getpwuid: couldn't determine user name from uid
crit:致命情况;
举例:socket: Failed to get a socket, exiting child
error:错误情况;
举例:Premature end of script headers
warn:警告情况;
举例:chile process 1234 did not exit, sending another SIGHUP
notice:一般重要情况;
举例:httpd: caught SIGBUS, attempting to dump core in...
info:普通信息;
举例:Server seems busy, (you may need to increase StarServers, or Min/MaxSpareServers)...
debug:出错级别信息;
举例:Opening config file...

LogFormat format|nickname [nickname]:定义日志文件的记录格式。

CustomLog file|pipe format|nickname [env=[!]environment-variable]:对服务器的请求进行日志记录。

TransferLog file|pipe:不允许直接定义日志格式或根据条件进行日志记录外,与CustomLog指令有完全相同的参数和功能。

5.Apache的安装与验证
1) 安装源代码包httpd-2.0.48.tar.gz
[root@shuke src]#tar -zxvf httpd-2.0.48.tar.gz
[root@shuke src]#cd httpd-2.0.48
[root@shuke httpd-2.0.48]#./configure --prefix=/usr/local/apache --enable-so
[root@shuke httpd-2.0.48]#make
[root@shuke httpd-2.0.48]#make install
[root@shuke httpd-2.0.48]#vi /usr/local/apache/conf/httpd.conf
配置ServerAdmin的值为服务器管理员的邮箱地址:
ServerAdmin webmaster@mail.shuke.com
配置ServerName的值为本机域名:
ServerName webserver.shuke.com:80
[root@shuke httpd-2.0.48]#/usr/local/apache/bin/apachectl start
[root@shuke httpd-2.0.48]#ps -aux | grep httpd
验证apache进程已经启动,通过客户端在浏览器打开站点,看到apache欢迎页面。

2) apache的启动和停止的配置
复制/usr/local/apache/bin/apachectl文件到/etc/rc.d/init.d/目录:
[root@shuke httpd-2.0.48]#cp /usr/local/apache/bin/apachectl /etc/rc.d/init.d/
编辑启动文件:
[root@shuke httpd-2.0.48]#vi /etc/rc.d/init.d/apachectl
修改文件,在文件中'#!/bin/sh'后面加入下面两条规则:
#!/bin/sh
#
# chkconfig: 2345 85 15
# description: Apache is a World Wide Web Server
#
使用chkconfig命令把apachectl命令加入到系统启动队列中:
[root@shuke apache]#chkconfig --add apachectl
查看apachectl的状态:
[root@shuke apache]#chkconfig --list apachectl
[root@shuke apache]#reboot
重新启动系统,察看进程,确认apache进程已经伴随系统启动。

3) 查看日志
查看错误日志:
[root@shuke apache]#less /usr/local/apache/logs/error_log
查看访问日志:
[root@shuke apache]#less /usr/local/apache/logs/access_log

6.Apache+Mysql+Php协同服务(顺序:mysql,apache,php)
mysql的安装步骤:
1) 建立一个mysql的组和用户
2) ./configure --prefix=/usr/local/mysql --sysconfdir=/etc --localstatedir=/var/lib/mysql
3) make
4) make install
5) /usr/local/mysql/bin/mysql_install_db
初始化数据库。
6) chown -R mysql /var/lib/mysql
设置mysql目录的权限。
7) cp /usr/local/mysql/share/mysql/my-medium.cnf /etc/my.cnf
复制配置文件。
8) /usr/local/mysql/bin/mysqld_safe --user=root &
使用root用户启动mysql服务。
9) /usr/local/mysql/bin/mysqladmin -u root -p password 1234
因为初始的root密码是空的,因此修改密码,注意(Enter Password:直接回车)。

php的安装步骤:
1) ./configure --with-mysql=/usr/local/mysql --with-apxs2=/usr/local/apache/bin/apxs
2) make
3) make install
4) cp php.ini-dist /usr/local/lib/php/php.ini
复制php配置文件到php目录。
5) vi /usr/local/apache/conf/httpd.conf
修改apache的配置文件,添加内容:
AddType application/x-httpd-php .php
AddType application/x-httpd-php-source .phps

安装一个论坛(zorum)的步骤:(用一个已经做好的config.php文件)
1) cp -dpR zorum_3_5/* /usr/local/apache/htdocs/zorum/
将文件拷贝到位于apache下的zorum目录下,并赋予它可以被写被读的权限。
2) 启动mysql和apache服务。
通过客户端访问验证,论坛启动成功,则协同服务正常。

四、DNS服务
1.安装包以及模板包
安装包:bind-9.2.1-16
模板包:caching-nameserver-7.2-7.noarch

2.配置文件
1) /etc/named.conf
主配置文件
举例:shuke.com,IP:10.0.0.10
vi /etc/named.conf;
在(include "/etc/rndc.key";)下添加:
zone "shuke.com" IN {
type master;
file "shuke.com.zone";
allow-update { none; };
};

zone "0.0.10.in-addr.arpa" IN {
type master;
file "0.0.10.local";
allow-update { none; };
};
说明:指明了正反向解析文件的调用位置。

2) /var/named/named.ca
根域名服务器指向文件

3) /var/named/named.local
区资源文件,反向映射信息
举例1:使用模板文件拷贝原内容到shuke.com的反向解析文件配置文件"0.0.10.local",并修改如下:
$TTL 86400
@ IN SOA nameserver.shuke.com. root.mail.shuke.com. (
2004010101 : Serial
28800 : Refresh
14400 : Retry
3600000 : Expire
86400 : Minimum
IN NS nameserver.shuke.com.

10 IN PTR nameserver.shuke.com.
11 IN PTR webserver.shuke.com.
12 IN PTR mail.shuke.com.
13 IN PTR slave.shuke.com.
说明:shuke.com的域名反向解析文件配置,指定了域名服务器:nameserver.shuke.com,指定了主机位10.11.12.13分别对应的域名。

举例2:使用模板文件拷贝原内容到shuke.com的正向解析文件配置文件"shuke.com.zone",并修改如下:
$TTL 86400
@ IN SOA nameserver.shuke.com. root.mail.shuke.com. (
2004010101 : Serial
28800 : Refresh
14400 : Retry
3600000 : Expire
86400 : Minimum
IN NS nameserver.shuke.com.
IN MX 10 mail.shuke.com.

Localhost. IN A 127.0.0.1
nameserver IN A 10.0.0.10
webserver IN A 10.0.0.11
www IN CNAME webserver
mail IN A 10.0.0.12
slave IN A 10.0.0.13
说明:shuke.com的域名正向解析文件配置,指定了域名服务器:nameserver.shuke.com,指定了主机头分别对应的IP地址。

4) DNS资源记录类型
SOA:标记区数据的开始,定义影响整个区的参数;
NS:一个区的域名服务器;
A:转换主机名到IP地址;
PTR:转换IP地址到主机名;
MX:该域的邮件服务器;
CHANME:定义主机别名;
HINFO:描述主机硬件和操作系统信息;
TXT:文本描述信息。

3.纯缓存域名服务器
不对外提供本地域名解析服务,只通过向根域名服务器或其他的域名服务器发布查询,以解析本地网络客户发出的请求,并将查询结果保存在缓存中,如果下次收到同样域名的查询,就不再向外发出查询请求,直接从缓存中读取信息返回给客户。
1) 需要三个配置文件
vi /etc/named.conf,做如下编辑:
options {
directory "/var/named";
forwarder {202.106.0.20;213.32.9.67};
};

zone "." IN {
type hint;
file "named.ca";
};

zone "0.0.127.in-addr.arpa" IN {
type master;
file "named.local";
};
说明:forwarder选项使纯缓存域名服务器接收到域名请求时,如果缓存中没有请求的域名信息,将不直接向根域名服务器查询,而是把请求交给forwarder指定的DNS服务器代为查询,并在从这台DNS获得查询后返回查询请求客户,同时在缓存中保留该信息。

2) /var/named/named.ca
不需要修改

3) /var/named/named.local
同主域名服务器的文件设置相同,提供本地回环接口的反向映射信息。

4) 完成以上三个工作,通过rndc命令启动服务器,就可以对内网用户提供域名解析工作了。

4.辅助域名服务器
辅助域名服务器平时可以分担主域名服务器的负载,当主域名服务器不能正常工作时,辅助域名服务器还可以接管主服务器的工作。辅助域名服务器通过接收网络上主域名服务器传来的数据保持与主域名服务器的同步。辅助域名服务器的配置文件不同于主服务器,需要建立三个文件:
1) vi /etc/named.conf并做如下修改:
options {
directory "/var/named";
};
zone "." IN {
type hint;
file "named.ca";
};
zone "0.0.127.in-addr.arpa" IN {
type master;
file "named.local";
allow-update { none; };
};
zone "shuke.com" IN {
type slave;
file "shuke.com.zone";
masters { 10.0.0.10; };
};
zone "0.0.10.in-addr.arpa" IN {
type slave;
file "0.0.10.local";
masters { 10.0.0.10; };
};
说明:本地域祝基辛吸取和反向解析区设置为slave类型,即辅助域名服务器本身不具有本地域的授权信息,只能接受主域名服务器的设置信息,向外提供本地域名解析服务,主域名服务器由masters项决定。同时,本地服务器也不用建立这两个slave区的数据文件,而是由named进程启动时自动从主DNS服务器10.0.0.10拷贝数据内容到从DNS服务器上。自动创建这两个主要文件。

2) /var/named/named.ca
辅助域名服务器中,此配置文件不需要修改。

3) /var/named/named.local
同主域名服务器设置。

5.调试域名服务器
nslookup和dig命令

五、文件服务
1.FTP常用命令:
![cmd [args]]:在本地机中执行交互shell后退回到ftp环境,如!ls *.zip;
account [password]:提供登陆远程系统成功后访问系统资源所需的密码;
append local-file[remote-file]:将本地文件追加到远程系统主机,若未指定远程系统文件名,则使用本地文件名;
ascii:使用ASCII类型的传输方式;
bin:是用二进制传输方式;
bye:推出FTP会话过程;
case:在使用mget时,将远程主机文件名中的大写转为小写字母;
cd remote-dir:进入远程主机目录;
cdup:进入远程主机目录的父目录;
close:中断与远程服务器的ftp会话,与open对应;
delete remote-file:删除远程主机文件;
dir [remote-dir][local-file]:显示远程主机目录,并将结果存入本地文件;
get remote-file[local-file]:将远程主机的文件remote-file传至本地硬盘的local-file;
hash:没传输1024字节,显示一个hash符号"#";
help[cmd]:显示ftp内部命令cmd的帮助信息,如help get;
lcd [dir]:将本地工作目录切换至dir;
ls [remote-dir][local-file]:显示远程目录remote-dir,并存入本地文件local-file;
mdelete [remote-file]:删除远程主机文件;
mget remote-files:传输多个远程文件;
mkdir dir-name:在远程主机中创建目录;
mput local-file:将多个文件传输至远程主机;
newer file-name:如果远程主机中file-name的修改时间比本地硬盘同名文件的时间更近,则重传该文件;
open host[port]:建立指定的ftp服务器连接,可指定连接端口;
put local-file[remote-file]:将本地文件local-file传至远程主机;
pwd:显示远程主机的当前工作目录;
quit:同bye,退出ftp会话;
reget remote-file[local-file]:类似于get,但若local-file存在,则从上次传输中断处续传;
rhelp [cmd-name]:请求获得远程主机的帮助;
rstatus [file-name]:若未指定文件名,则显示远程主机的状态,否则显示文件状态;
rename [from][to]:更改远程主机的文件名;
restart marker:从指定的标志marker处,重新开始get或者put,如restart 130;
rmdir dir-name:删除远程主机目录;
size file-name:显示远程主机文件大小,如size idle 7200;
status:显示当前ftp状态;
system:显示远程主机的操作系统类型;
user user-name[password][account]:向远程主机表明自己的身份,需要密码时,必须输入密码,如useranonymous my@email。

2.vsftp基本配置
1) 使用安装包:vsftpd-1.1.3-8

2) 配置vsftpd服务
/etc/vsftpd/vsftpd.conf
内容:
anonymous_enable=YES:是否允许匿名ftp,如否,则选择NO;
local_enable=YES:是否允许本地用户登陆;
local_umask=022:设置本地用户的文件掩码为缺省022,默认值为077;
anon_upload_enable=YES:是否允许匿名上传文件;
anon_mkdir_write_enable=YES:是否允许匿名用户有创建目录的权利;
dirmessage_enable=YES:是否显示目录说明文件,缺省是YES,但需要手工创建.message文件;
xferlog_enable=YES:是否记录ftp传输过程;
connect_from_port_20=YES:是否确信端口传输来自20(ftp-data);
chown_username=username:是否改变上传文件的属主,如果需要,则输入一个系统用户名,可以把上传的文件都改成root属主;
xferlog_file=/var/log/vsftpd.log:ftp传输日志的路径和名字缺省是/var/log/vsftpd.log;
xferlog_std_format=YES:是否使用标准的ftp xferlog模式;
idle_session_timeout=600:设置缺省的断开不活跃会话时间;
data_connection_timeout=120:设置数据传输超时时间;
nopriv_user=ftpsecure:运行vsftpd需要的非特权系统用户,缺省是nobody;
ascii_upload_enable=YES:是否使用ASCII方式上传文件;
ascii_download_enable=YES:是否使用ASCII方式下载文件;
ftpd_banner=Welcome to shuke FTP service:定制欢迎信息;
deny_email_enable=YES:是否禁止匿名用户使用某些邮件地址;
banned_email_file=/etc/vsftpd.banned_emails:如果禁止匿名用户使用某些邮件地址,则输入禁止的邮件地址的路径和文件名;
chroot_list_enable=YES:是否将系统用户限制在自己的home目录下;
chroot_list_file=/etc/vsftpd.chroot_list:如果限制系统用户在home目录下,则在列表中写出被禁止的用户列表;
max_clients=Number:如果以standalone模式启动,那么,只有$Number个用户可以连接,其他用户将得到错误信息,缺省是0,不限制用户数;
message_file:设置访问一个目录时获得的目录信息文件的文件名,缺省是.message。

3) /etc/vsftpd.ftpusers
此文件记录簿允许访问ftp服务器的用户名单。

4) /etc/vsftpd.user_list
此文件中指定的用户缺省情况下不能访问FTP服务器,在/etc/vsftpd/vsftpd.conf中设置了userlist_enable=NO的时候,仅允许列表中的用户访问FTP服务器。

5) 启动ftp服务进程
/etc/rc.d/init.d/vsftpd start

6) 设置vsftpd服务开机自动启动
chkconfig --level 2345 vsftpd on

3.wu-ftp的设置
1) 安装包
wu-ftpd-2.6.2-13984cl

2) 安装之后,会在/bin目录下生成5个可执行文件:
ftpd:FTP服务器程序;
ftpshut:用于关闭ftp服务器程序;
ftpcount:显示目前在线人数;
ftpwho:查看目前ftp服务器的连接情况;
ckconfig:检查ftp服务器的设置是否正确;

3) 在/etc下生成了5个配置文件:
/etc/ftpusers:禁止登陆FTP服务器的用户名;
/etc/ftpconversions:用户在通过FTP传输文件的同时,对文件进行压缩打包处理,使用默认即可;
/etc/ftphosts:禁止指定机器登陆;
/etc/ftpgroups:在access配置文件中开放SITE命令后,可以使用SITE GROUP命令来制定一个增强的访问组合相应的密码,若输入的密码有效,该用户将变为/etc/ftpgroups文件中设置的组的成员,具有该组的访问权限;
/etc/ftpaccess:最重要的配置文件,关系到ftp服务器能否运行。
内容:
loginfails[次数]:设置当用户登陆到ftp服务器时,允许用户数错密码的次数;
class[类名][real/guest/anonymous][IP地址]:设置FTP服务器上用户的类别,并可对客户端的IP地址进行限制,允许某部分的IP地址或全部的IP地址访问;
limit[类别][人数][时间][文件名]:设置指定的时间内指定的类别允许连接的指定人数上限,当达到人数上限的时候,显示指定文件的内容;
message [文件名称][指令]:当用户执行所指定的指令时,系统将指定的文件内容显示出来;
passwd-check[none/trivial/rfc822][enforce/warn]:设置对匿名用户anonymous的密码使用方式。none-不做密码验证,trival-只要输入的密码中含有字符"@"就可以登陆,rfc822-表示密码一定要符合RFC822中所规定的E-mail格式才能登陆,enfore-表示输入的密码不符合以上的指定格式就不允许登陆,warn-表示密码不符合规定只出现警告信息,可以登陆;
logcommand [real/guest/anonymous]:设置哪些用户登陆后的操作记录在文件/usr/adm/xferlog中;
delete [yes/no][real/guest/anonymous]:设置是否允许指定用户使用delete命令删除文件,允许缺省,例如:delete no anonymous,guest;
overwrite [yes/no][real/anonymous/guest]:设置是否允许指定用户覆盖同名文件,缺省是允许,但一般不允许匿名用户覆盖文件;
chmod [yes/no][real/anonymous/guest]:设置是否允许指定用户使用chmod命令更改文件权限,缺省是允许;
alias [目录别名][目录名]:给指定目录设置一个别名,在切换目录时,就可以使用较短的目录别名;
deny [IP地址/域名][说明文件]:允许用户根据对方的IP地址或主机名阻断别人对登陆FTP服务器的访问。

4) 启动wu-ftpd服务器
/etc/rc.d/init.d/xinetd restart

4.NFS网络文件系统
1) linux系统之间的访问
mount servername:/exported dir /dir to mount -t nfs
举例:主机shuke1运行了NFS,将自己的/pub目录共享了,那么,客户机shuke2就可以通过如下命令装载客户机shuke1的共享资源,并将其挂接到/home/inport目录下:
[root@shuke2root]#mount shuke1:/pub /home/inport
客户机在mount服务器的时候,可以传递一些命令选项,如:
[root@shuke2root]#mount -o r shuke1:/pub /home/inport
表示把shuke1主机上的/pub目录挂在本地的/home/inport目录下,只读。
其他选项如下:
rw:可以读写;
bg:后台安装;
intr:出现问题时,可以中断;
soft:允许经过retrans次尝试后,停止安装,返回失败信息。
卸载服务器文件系统:
#umount /home/inport

2) linux与windows之间的访问
在windows客户端安装nfsxe.exe软件。

3) 配置NFS服务器
创建或修改配置文件/etc/exports:
exports的每一行由导出路径、客户列表以及每个客户名后尾随的访问选项构成,访问选项是可选的,语法如下:directory hostname (options)...
举例:/usr ws1.shuke.com
说明:导出路径/usr提供给ws1.shuke.com访问。
举例:/usr ws1.shuke.com (rw)
说明:导出路径/usr提供给ws1.shuke.com访问,具备读写权限。
举例:/pub (ro,insecure.all_squash)
说明:只允许对该分区做只读操作,任何机器都可以访问,允许用大于1024的端口进行连接,并把所有的连接id映射到nobody。
选项说明如下:
insecure:允许用户可以从大于1024的端口进行连接;
secure:限制用户只能从小于1024的端口进行连接;
ro:只读,在没指定ro的情况下,默认是可写的;
noaccess:让导出路径的所有子目录对客户不可见,用户连接到这样的路径后,看到的是个空目录;
root_squash:设置服务器应答在某个NFS挂装分区上的根用户发出的请求,可以把从客户机的根用户的设置映射成nobody;
no_root_squash:设置服务器在缺省情况下不理会在某个NFS挂装分区上的根用户发出的请求;
rw:可写,这是缺省的。

4) 启动和停止NFS服务
第一次启动NFS时,使用启动脚本:/etc/rc.d/init.d/nfs start,NFS会在内核建立一系列的NFS相关进程,在修改过/etc/exports后,需要高速NFS进程重新检查配置信息,重新启动NFS进程。

5.建立Samba服务器
完成一个实例,安装、配置和启动samba服务器,向外共享tmp,home,pub,printer资源,并使它们可以被指定的客户机访问,启动samba服务器后,首先在本地使用测试工具测试samba服务器提供的服务,然后互相进行远程测试和访问共享资源试验结果。以IP192.168.0.6,主机名shuke为例进行试验,本试验任务通过主机名或IP地址进行访问,因而对DNS解析不做要求。

1) 安装Samba安装包:
samba-2.2.7a-7.9.0
redhat-config-samba-1.0.4-1
samba-common-2.2.7a-7.9.0
samba-client-2.2.7a-7.9.0
samba-swat-2.2.7a-7.9.0

2) 编辑lmhost配置文件
[root@shuke samba]#vi /etc/samba/lmhosts

127.0.0.1 localhost
192.168.0.1 xpserver
192.168.0.6 smbserver
192.168.0.2 host2
192.168.0.3 host3
~

3) 修改/etc/samba/smb.conf文件,按照如下修改:
[global]
workgroup=TEST GROUP
server string=Samba Server
hosts allow=192.168.0.
load printers=yes
printcap name=/etc/printcap
guest account=guest
log file=/usr/local/samba/var/log.%m
max log size=50
encrypt passwords=yes
security=user
socketoptions=TCP_NODELAY
[homes]
comment=HomeDirectories
browseable=yes
writable=yes
[printers]
comment=AllPrinters
path=/usr/spool/samba
browseable=yes
guestok=no
writable=no
printable=yes
[tmp]
comment=Temporaryfile
path=/tmp
readonly=no
public=yes
[public]
comment=PublicZone
path=/var/pub
public=yes
writable=yes

4) 新建一个pub共享资源的目录/var/pub,并修改权县为任意用户都可读写;
[root@shuke samba]#mkdir /var/pub
[root@shuke samba]#chmod 777 /var/pub

5) 建立一个访问samba服务器的账号,smbuser,首先它应该成为系统账号;
[root@shuke samba]#useradd smbuser
[root@shuke samba]#passwd smbuser

6) 将系统账号smbuser添加到samba账号数据库中,使其仅对应于Windows用户winuser;
[root@shuke samba]#smbadduser smbuser:winuser

7) 启动samba服务器守护进程;
[root@shuke samba]#/etc/rc.d/init.d/smb

8) 使用sambaclient命令,测试对方的samba服务器的共享资源;
[root@shuke samba]#sambaclient -L smbserver -U smbuser
added interface ip=192.168.0.6 bcast=192.168.0.255 namsk=255.255.255.0

9) 使用smbmount命令装载远程主机的samba共享资源,并列出资源内容;
[root@shuke samba]#smbmount //smbserver/homes /mnt -o username=smbuser

10) 因为homes资源是可写的,可以在此建立目录,然后使用smbumount命令卸载资源;
[root@shuke samba]#mkdir /mnt/newdir
[root@shuke samba]#smbumount /mnt

11) 启动windows系统,以winuser的用户名登陆系统,打开网上邻居-整个网络-Microsoft Windows Network,可看到Test group



六、代理/防火墙
1.iptables规则表
Filter(针对过滤系统):INPUT、FORWARD、OUTPUT
NAT(针对地址转换系统):PREROUTING、POSTROUTING、INPUT、OUTPUT
Mangle(针对策略路由和特殊应用):OUTPUT、POSTROUTING

2.安装包
iptables-1.2.7a-2

3.配置防火墙
1) 命令语法
Usge: iptables [-t table] -[ADC] chain rule-specification [options]
iptables [-t table] -I chain [rulenum] rule-specification [options]
iptables [-t table] -R chain rulenum rule-specification [options]
iptables [-t table] -D chain rulenum [options]
iptables [-t table] -[LFZ] [chain] [options]
iptables [-t table] -N chain
iptables [-t table] -X [chain]
iptables [-t table] -P chain target [options]
iptables [-t table] -E old-chain-name new-chain-name
规则操作参数说明:
-A:在所选择的链末添加一条或更多规则;

-D:从所选链中删除一条或更多规则。有两种方法:把被删除规则指定为链中的

序号(第一条序号为1),或者指定为要匹配的规则;

-R:从选中的链中取代一条规则。如果源地址或目的地址转换为多地址,该命令

会失败。规则序号从1开始;

-I:根据给出的规则序号,向所选链中插入一条或更多规则。所以,如果规则序

号为1,规则会插入链的头部。这也是不指定规则序号时的默认方式;

-L:现实所选链的所有规则。如果没有所选链,将显示所有链。也可以和z选项一

起用,这是链会自动列出和归零;

-F:清空所选链。这等于把所有规则一个个删除;

-Z:把所有链的包以及字节的计数器清空;

-N:根据给出的名称建立一个新的用户定义链。这必须保证没有同名的链存在;

-X:删除指定的用户自定义链。这个链必须没有被引用,如果被引用,在删除之

前必须删除或者替换与之有关的规则。如果没有给出参数,这条命令将试着删除

每个非内建的链;

-P:设置链的目标规则;

-E:根据用户给出的名字对指定链进行重名名;

规则定义参数说明:
-p [!]protocol:
规则或者包检查(待查包)的协议。指定协议可以是TCP、UDP、ICMP中的一个或

者全部,也可以是数值,代表这些协议中的某一个。当然也可以使用

在/etc/protocols中定义的协议名。在协议名前加上"!"表示相反的规则。数字0

相当于所有all。Protocol all会匹配所有协议,而且这是缺省时的选项。在和

check命令结合时,all可以不被使用;

-s[!]address[/mask]:
指定源地址,可以是主机名、网络名和清楚地IP地址。mask说明可以是网络掩码

或清楚的数字,在网络掩码的左边指定网络掩码左边"1"的个数,因此,mask值为

24等于255.255.255.0。在指定地址前加上"!"说明指定了相反的地址段。标志--

src是这个选项的简写;

-d[!]address[/mask]:
指定目标地址,要获取详细说明请参见-s标志的说明。标志--dst是这个选项的简

写;

-j target:
指定规则的目标:也就是说包匹配应当做什么。目标可以为ACCEPT(通过)、

DROP(删除)、RETURN(返回)、REDIRECT(重新指向)、SNAT(源地址转换)

、DNAT(目标地址转换)、MASQUERADE(伪装)等,还可以是用户自定义链。如

果规则的这个选项被忽略,那么匹配的过程不会对包产生影响,不过规则的计数

器会增加;

-i[!][name]:
待选的可接受包接口名称,包通过该接口接收(在链INPUT、FORWORD和

PREROUTING中进入的包)。当在接口名前使用"!"说明后,指的是相反的名称,如

果接口名后面加上"+",则所有以次接口名开头的接口都会被匹配。如果这个选项

被忽略,会假设为"+",那么将匹配任意接口;

-O[!][NAME]:
这是包经由该接口送出的可选的出口名称,包通过该口输出(在链FORWARD、

OUTPUT和POSTROUTING中送出的包)。其他设置同上。

2) 匹配规则扩展选项:
tcp:当指定-p tcp,且未指定其他匹配的扩展,则装载这些扩展。
--source-port[!][port[:port]]:
源端口或端口范围指定。可以是服务名或端口号。使用格式端口:端口也可以指

定包含的(端口)范围。如果忽略首端口号,默认是0,如果忽略末端口号,默认

是65535,如果第二个端口号大于第一个,则他们进行交换。这个选项可以使用-

-sport的别名;
--destionation-port[!][port:[port]]:
目标端口或端口范围指定。这个选项可以使用--dport别名来代替;

--tcp-flags[!]mask comp:
匹配指定的TCP标记。第一个参数是要检查的标记,一个用逗号分开的列表,第二

个参数是用逗号分开的标记表,是必须设置的。标记如:SYN(同步)、ACK(应

答)、FIN(结束)、RST(重设)、URG(紧急)、PSH(送入)ALLNONE。
命令iptables -A FORWARD -p tcp --tcp-flags SYN, ACK, FIN, RST SYN只匹配

那些设置了SYN标记而没有设置ACK、FIN和RST标记的包。

udp:当指定-p icmp且未指定其他匹配的扩展时,则装载这些扩展。
--icmp-type[!]typename:这个选项允许指定ICMP类型,可以是一个数值型的

ICMP类型,或者是某个由命令"iptables -p icmp -h"所显示的ICMP类型名。

mac:
--mac-source[!]address:匹配物理地址。必须是XX:XX:XX:XX:XX这样的格式。

注意,他只对来自以太设备并进入PREROUTING、FORWORD和INPUT链的包有效。

limit:这个模块匹配标志用来对网络数据的通过速率进行标记,他和LOG目标结

合使用,给出有限的登陆数。当达到这个极限值时,使用这个扩展包的规则将进

行匹配。(除非使用了!标记),他的扩展选项包括:
--limit rate:最大平均匹配速率,可赋的值有"/second"、"/minute"、"/hour"

或"/day"这样的单位,默认是"3/hour";
--limit-burst number:待匹配包初始个数的最大值。若前面指定的极限还没达

到这个数值,则该数字加1。默认值是5。

multiport:这个模块匹配一组源端口或目标端口,最多可以指定15个端口。只能

和-p tcp或者-p udp连着使用:
--source-port[port[,port]]:如果源端口是其中一个给定端口,则匹配;
--destination-port[port[,port]]:如果目标端口是其中一个给定端口,则匹配


--port[port[,port]]:若源端口和目的端口相等并与某个给定端口相等,则匹配



owner:此扩展为本地生成包匹配包的创建者,只能用于OUTPUT链,而且,有一些

包(如ICMP ping应答)还可能没有所有者,因此永远不会匹配:
--uid-owner userid:如果给出有效的user id,那么匹配他的进程产生的包;
--gid-owner groupid:如果给出有效的group id,那么匹配它的进程产生的包;
--sid-owner sessionid:根据给出的会话组成匹配该进程产生的包。

REJECT:作为对匹配的包的相应,返回一个错误的包,其他情况下和DROP相同。

此目标只适用于INPUT、FORWARD和OUTPUT链,以及调用这些链的用户自定义链。

这几个选项控制返回的错误包的特性:
--reject-with type:其中的type可以是icmp-net-unreachable、icmp-host-

unreachable、icmp-port-unreachable、icmp-porto-unreachable、icmp-net-

prohibited或者icmp-host-prohibited,该类型会返回相应的ICMP错误信息(默

认是port-unreachable)。选项echo-reply也是允许的;它只能用于指定ICMP

ping包的规则中,生成ping的回应。

SNAT:这个目标只适用于nat表的POSTROUTING链。它规定修改包的源地址(此连

接以后所有的包都会被影响),停止对规则的检查:
--to-source <ipaddr>[<ipaddr>][:port-port]:
可以指定一个单一的新IP地址,一个IP地址范围,也可以附加一个端口范围(只

能在指定-p tcp或者-p udp的规则里)。如果未指定端口范围,源端口是512以下

的端口惠被安排为其他的512以下的端口;512到1024之间的端口会被安排为1024

以下的,其他端口会被安排为1024或以上。如果可能,端口不会被修改;
--to-destiontion <ipaddr>[<ipaddr>][:port-port]:
可以指定一个单一的新的IP地址,一个IP地址范围,也可以附加一个端口范围(

只能在指定-p tcp或者-p udp的规则里)。如果未指定端口范围,目标端口不会

被修改。

MASQUERADE:只用于nat表的POSTROUTING链。只能用于动态获取ip(拨号)连接

:如果拥有静态IP地址,要用SNAT。伪装相当于给包发出时所经过接口的IP地址

设置一个映像,当借口关闭时,连接会终止。这是因为,当下一次拨号时,未必

是相同的接口地址(以后所有建立的连接都将关闭)。他有一个选项:
--to-ports <port>[<port>]:指定使用的源端口范围,覆盖默认的SNAT源地址选

择。这个选项只适用于指定了-p tcp或者-p udp的规则。

REDIRECT:只适用于nat表的PREROUTING和OUTPUT链,以及只调用他们的用户定义

链。他修改包的目标IP地址来发送包到机器自身(本地生成的包被安置为地址

127.0.0.1),包含一个选项:
--to-ports <port>[<port>]:指定使用的目的端口或端口范围:不指定的话,目

标端口不会被修改。只能用于指定了-p tcp或者-p udp的规则。

3) 包过滤设置
举例:
假如有这样一个局域网,内部IP地址范围192.168.1.1-254,网关地址为

192.168.1.1,绑定在eth0接口上,同时,网关具有外部Internet地址为

10.25.0.7,绑定在eth1接口上,防火墙就位于网关上,通过它的设置,对流经防

火墙的网络包进行过滤处理。同时,在局域网内部有一台WWW服务器,他的内部地

址为192.168.1.2,他被设置为可以接受外部的网络用户访问。

首先清空所有的规则链,并设置规则链的默认策略为DROP,即丢弃所有的网络数

据包。
iptables -F
iptables -P INPUT DROP
iptables -P OUTPUT DROP
iptables -P FORWARD DROP

新增用户者自定义规则链bad_tcp_packets、allowed和icmp_packets。
iptables -N bad_tcp_packets
iptables -N allowed
iptables -N icmp_packets

下面定义bad_tcp_packets规则链的规则:将要求重导向的网络连接记录起来,然

后将报文丢弃(防止本地机器被其他主机作为入侵跳板,侵入别的主机):
iptables -A bad_tcp_packets -p TCP ! --syn -m state --state NEW -j LOG

--log-level INFO --log-prefix "New not syn:"
iptables -A bad_tcp_packets -p TCP ! --syn -m state --state NEW -j DROP

下面定义allowed规则链的规则:允许要求连接的网络数据包或相应包进入,将其

与网络数据包丢弃:
iptables -A allowed -p TCP --syn -j ACCEPT
iptables -A allwoed -p TCP -m state --state ESTABLLSHED,RELATED -J

ACCEPT
IPTABLES -A allowed -p TCP -j DROP

下面定义icmp_packets规则链的规则:允许ping网络数据包进入,将其余的网络

数据包丢弃:
iptables -A icmp_packets -p ICMP -s 0/0 --icmp-type 8 -j ACCEPT
iptables -A icmp_packets -p ICMP -s 0/0 --icmp-type 11 -j ACCEPT

INPUT链,过滤要到达防火墙的网络数据包。
进入防火墙主机的TCP网络数据包必须先进行bad_tcp_packets过滤:
iptables -A INPUT -p TCP -j bad_tcp_packets

从WAN进入防火墙主机的ICMP网络数据包,必须先进行icmp_packets过滤,这是为

了避免黑客传送不完整的IP网络数据包,系统会相应ICMP网络数据包,以通知对

方,导致主机位置被侦测出来:
iptables -A INPUT -p ICMP -i eth1 -j icmp_packets

从LAN进入防火墙主机的全部单播和广播的网络数据包,均会放行:
iptables -A INPUT -p ALL -i eth0 -d 192.168.1.1 -j ACCEPT
iptables -A INPUT -p ALL -i eth0 -d 192.168.1.255 -j ACCEPT

从LAN进入防火墙主机的DHCP网络数据包,予以放行,只有当防火墙担任DHCP时才

使用:
iptables -A INPUT -p UDP -i eth0 --dport 67 --sport 68 -j ACCEPT

从WAN进入防火墙主机的所有网络数据包,检查是否为响应网络数据包,若是则予

以放行:
iptables -A INPUT -p ALL -d 10.25.0.7 -m state --state

ESTABLISHED,RELATED -j ACCEPT

限制过滤规则的检测频率为每分钟平均流量三个网络数据包(超过)上限的网络

数据包将暂停检测,并将瞬间流量设定为一次最多处理三个网络数据包(超过上

限的网络数据包将丢弃不予处理),这类网络数据包通常是黑客用来进行拒绝服

务攻击:
iptables -A INPUT -m limit --limit 3/minute --limit-burst 3 -j LOG --

log-level INFO --log-prefix "IPT INPUT packet died:"

FORWAD链,过滤要通过防火墙的网络数据包
通过防火墙的TCP网络数据包必须先进行bad_tcp_pcakets过滤:
iptables -A FORWAD -P TCP -J bad_tcp_packets

从LAN要到WAN的网络数据包均放行:
iptables -A FORWARD -i eth0 -o eth1 -j ACCEPT

从WAN到LAN的网络数据包仅放行应答网络数据包:
iptables -A FORWARD -i eth1 -o eth0 -m state --state

ESTABLISHED,RELATED -j ACCEPT

允许来自WAN的PING网络数据包,递送到局域网内的WWW服务器:
iptables -A FORWARD -p ICMP -i eth1 -o eth0 -d 192.168.1.2 -j

icmp_packets

允许来自WAN的HTTP,HTTPS网络数据包,递送到局域网的WEB服务器:
iptables -A FORWARD -p TCP -i eth1 -o eth0 -d 192.168.1.2 -m multiport

--dport 80,443 -j allowed

限制过滤规则的检测频率为每分钟平均流量3各网络数据包(超过上限的网络数据

包将暂停检测),并将瞬间流量设定为一次最多处理3个数据包(超过上限的网络

数据包将被丢弃不予处理),这类网络数据包通常是黑客用来进行拒绝服务攻击


iptables -A FORWARD -m limit --limit 3/minute --limit-burst 3 -j LOG -

-log-level DEBUG --log-prefix "IPT FORWARD packet died:"

OUTPUT链,过滤从防火墙送出的网络数据包。
从防火墙送出的TCP网络数据包必须先进行bad_tcp_packets过滤:
iptables -A OUTPUT -p TCP -j bad_tcp_packets

对于过滤通过的TCP包和其他类型的包,均会放行:
iptables -A OUTPUT -p ALL -s 127.0.0.1 -j ACCEPT
iptables -A OUTPUT -p ALL -s 192.168.1.1 -j ACCEPT
iptables -A OUTPUT -p ALL -s 10.25.0.7 -j ACCEPT

限制过滤规则的检测频率为每分钟平均流量3各网络数据包(超过上限的网络数据

包将暂停检测),并将瞬间流量设定为一次最多处理3个数据包(超过上限的网络

数据包将被丢弃不予处理),这类网络数据包通常是黑客用来进行拒绝服务攻击


iptables -A OUTPUT -m limit --limit 3/minute --limit-burst 3 -j LOG --

log-level DEBUG --log-prefix "IPT OUTPUT packet died:"

4.NAT配置
1) 目的NAT(DNAT)
DNAT在外部数据包进入防火墙后且路由之前进行,他把该数据包的目的地址改为

内部局域网的地址,然后路由该数据包进入到局域网内部主机。
举例:
iptables -t nat -A PREROUTING -t tcp -d 10.25.0.7 --dport 80 -i eth1 -j

DNAT --to 192.168.1.2:80
说明:可以路由到达防火墙的访问80端口(即WWW服务器)的数据包的目的地址改

为192.168.1.2。

2) 源NAT(SNAT)
SNAT主要用来更改从防火墙发出的数据包的源地址,使得来自局域网的私有地址

通过防火墙后,更改为防火墙具有的外部地址,以便数据接收方接收数据后,能

够找到正确的回复地址。
举例:
iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o eth0 -j SNAT --

to10.25.0.7
说明:更改所有来自192.168.1.0/24的数据包的源IP地址为10.25.0.7

注意:系统在经过路由及过滤等处理后,直到数据包要送出时,才进行SNAT,有

一种SANT的特殊情况是IP伪装,通常建议在用拨号上网时使用,也就是在合法IP

地址不固定的情况下使用。
举例:
iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE
说明:这样可以保证局域网内部的用户能够所有通过拨号服务器连接到INTERNET



5.缓存代理squid
1) 安装包
squid-2.5.STABLE1-2

2) 主要配置文件
/etc/squid/squid.conf
内容:
http_port:指定了squid监听客户请求的端口,默认值是3128。要使用代理,建

议这个端口值和运行squid的机器ip地址一起使用;
举例:http_port 192.168.0.2:3128
说明:squid绑定在ip地址192.168.0.2上,端口为3128。

cache_mgr:当代理页面发生错误时,代理服务器将向这个配置项登记的用户发送

邮件消息,将它配置为管理员的实际邮件地址;
举例:cache_mgr shuke@shuke.com
说明:当代理页面发生错误,给shuke@shuke.com发送消息。

http_access:允许HTTP访问,这个是主要的访问控制列表。默认拒绝所有的访问


举例:http_access allow all
说明:接受所有访问。

cache_dir:定义磁盘缓存空间,以存储访问过的页面或其他资源的拷贝。
格式:cache_dir Type Directory-Name Fs-specific-data [options]
说明:
Type:存储类型,一般设置为ufs;
Directory-Name:代表缓存的位置,默认的设置是cache_dir ufs

/var/spool/squid 100 16 256,其中,100代表缓存空间最大为100M;16到256代

表缓存目录下的一级和二级目录数目。

启动命令:/etc/rc.d/init.d/squid start

客户端需要进行的设置:
IE浏览器选项-局域网设置-选中代理服务器和对本地地址不使用代理服务器,填

写代理的IP地址和端口号。

3) squid.conf的13个配置选项:
NETWORK OPTIONS (有关的网络选项) :
OPTIONS WHICH AFFECT THE NEIGHBOR SELECTION ALGORITHM (作用于邻居选择

算法的有关选项) :
OPTIONS WHICH AFFECT THE CACHE SIZE (定义cache大小的有关选项):
LOGFILE PATHNAMES AND CACHE DIRECTORIES (定义日志文件的路径及cache的目

录)
OPTIONS FOR EXTERNAL SUPPORT PROGRAMS (外部支持程序选项)
OPTIONS FOR TUNING THE CACHE (调整cache的选项)
TIMEOUTS (超时)
ACCESS CONTROLS (访问控制)
ADMINISTRATIVE PARAMETERS (管理参数)
OPTIONS FOR THE CACHE REGISTRATION SERVICE (cache注册服务选项)
HTTPD-ACCELERATOR OPTIONS (HTTPD加速选项)
MISCELLANEOUS (杂项)
DELAY POOL PARAMETERS (延时池参数)

网络选项:
tcp_incoming_address指定监听来自客户或其他squid代理服务器的绑定ip地址;


tcp_outgoing_address指定向远程服务器或其他squid代理服务器发起连接的ip地


udp_incoming_address为ICP套接字指定接收来自其他squid代理服务器的包的ip

地址 udp_outgoing_address为ICP套接字指定向其他squid代理服务器发送包的ip

地址;
缺省为没有绑定任何ip地址。该绑定地址可以用ip指定,也可以用完整的域名指

定。

交换空间设定选项:
cache_swap_low (percent, 0-100)
cache_swap_high (percent, 0-100)
说明:squid使用大量的交换空间来存储对象。那么,过了一定的时间以后,该交

换空间就会用完,所以还必须定期的按照某种指标来将低于某个水平线的对象清

除。squid使用所谓的“最近最少使用算法”(LRU)来做这一工作。当已使用的

交换空间达到cache_swap_high时,squid就根据LRU所计算的得到每个对象的值将

低于某个水平线的对象清除。这种清除工作一直进行直到已用空间达到

cache_swap_low。这两个值用百分比表示,如果你所使用的交换空间很大的话,

建议你减少这两个值得差距,因为这时一个百分点就可能是几百兆空间,这势必

影响squid的性能。缺省为:
cache_swap_low 90
cache_swap_high 95

maximum_object_size
说明:大于该值得对象将不被存储。如果你想要提高访问速度,就请降低该值;

如果你想最大限度地节约带宽,降低成本,请增加该值。单位为K,缺省值为:
maximum_object_size 4096 KB

有关日志的选项:
cache_access_log:
说明:指定客户请求记录日志的完整路径(包括文件的名称及所在的目录),该

请求可以是来自一般用户的HTTP请求或来自邻居的ICP请求。缺省值为:

cache_access_log /var/log/squid/access.log,如果你不需要该日志,可以用

以下语句取消:cache_access_log none;

cache_store_log
说明:指定对象存储记录日志的完整路径(包括文件的名称及所在的目录)。该

记录表明哪些对象被写到交换空间,哪些对象被从交换空间清除。缺省路径为:

cache_log /var/log/squid/cache.log,如果你不需要该日志,可以用以下语句

取消:cache_store_log none;

cache_log:
说明:指定squid一般信息日志的完整路径(包括文件的名称及所在的目录)。缺

省路径为:cache_log /var/log/squid/cache.log;

cache_swap_log:
说明:该选项指明每个交换空间的“swap.log”日志的完整路径(包括文件的名

称及所在的目录)。该日志文件包含了存储在交换空间里的对象的元数据

(metadata)。通常,系统将该文件自动保存在第一个“cache_dir”说定义的顶

级目录里,但是你也可以指定其他的路径。如果你定义了多个“cache_dir”,则

相应的日志文件可能是这样的:
cache_swap_log.00
cache_swap_log.01
cache_swap_log.02
后面的数字扩展名与指定的多个“cache_dir”一一对应。需要注意的是,最好不

要删除这类日志文件,否则squid将不能正常工作;

pid_filename:
说明:指定记录squid进程号的日志的完整路径(包括文件的名称及所在的目录)

。缺省路径为
pid_filename /var/run/squid.pid,如果你不需要该文件,可以用以下语句取消

:pid_filename none;

debug_options:
说明:控制作日志时记录信息的多寡。可以从两个方面控制:section控制从几个

方面作记录;level控制每个方面的记录的详细程度。推荐的方式(也是缺省方式

)是:debug_options ALL,1,即,对每个方面都作记录,但详细程度为1(最低)



log_fqdn on|off:
说明:控制在 access.log 中对用户地址的记录方式。打开该选项时,squid记录

客户的完整域名,取消该选项时,squid记录客户的ip地址。注意,如果打开该选

项会增加系统的负担,因为squid还得进行客户ip的DNS查询。缺省值为:

log_fqdn off。

有关外部支持程序的选项:
ftp_user:
说明:设置登录匿名ftp服务器时的提供的电子邮件地址,登录匿名ftp服务器时

要求用你的电子邮件地址作为登录口令(更多的信息请参看本书的相关章节)。

需要注意的是,有的匿名ftp服务器对这一点要求很苛刻,有的甚至会检查你的电

子邮件的有效性。缺省值为:ftp_user Squid@;

ftp_list_width:
说明:设置ftp列表的宽度,如果设得太小将不能的浏览到长文件名。缺省值为:

ftp_list_width 32;

cache_dns_program:
说明:指定DNS查询程序的完整路径(包括文件的名称及所在的目录)。缺省路径

为:cache_dns_program /usr/lib/squid/dnsserver;

dns_children:
说明:设置DNS查询程序的进程数。对于大型的登录服务器系统,建议该值至少为

10。最大值可以是32,缺省设置为5个。注意,如果你任意的降低该值,可能会使

系统性能急剧降低,因为squid主进程要等待域名查询的结果。没有必要减少该值

,因为DNS查询进程并不会消耗太多的系统的资源;

dns_nameservers:
说明:指定一个DNS服务器列表,强制squid使用该列表中的DNS服务器而非使

用/etc/resolv.conf文件中定义的DNS服务器。你可以这样指定多个DNS服务器:

dns_nameservers 10.0.0.1 192.172.0.4
缺省设置为:dns_nameservers none;

unlinkd_program:
说明:指定文件删除进程的完整路径。缺省设置为:unlinkd_program

/usr/lib/squid/unlinkd;

pinger_program:
说明:指定ping进程的完整路径。该进程被squid利用来测量与其他邻居的路由距

离。该选项只在你启用了该功能时有用。缺省为:pinger_program

/usr/lib/squid/pinger;

authenticate_program:
说明:指定用来进行用户认证的外部程序的完整路径。squid的用户认证功能我们

将在后面的章节讲述。缺省设置为不认证。

用户访问控制选项:
acl:
说明:定义访问控制列表。
定义语法为:
acl aclname acltype string1 ...
acl aclname acltype "file" ...
当使用文件时,该文件的格式为每行包含一个条目。
acltype 可以是 src dst srcdomain dstdomain url_pattern urlpath_pattern

time port proto method browser user 中的一种。

分别说明如
我有一个Blog, 最近在上面发表了很多Linux基础知识, 上面的内容会随着我的提高而丰富的。 URL:http://4321go.blogchina.com
本站的Blog:http://forum.ubuntu.org.cn/weblog.php?w=38
头像
eexpress
帖子: 58428
注册时间: 2005-08-14 21:55
来自: 长沙

#2

帖子 eexpress » 2006-05-15 20:58

晕倒的。这么多。看了一段。

那个sendmail的最好别搞。搞死人的。 :lol:

没有svn的。
● 鸣学
ironwires
帖子: 85
注册时间: 2006-04-19 2:36

#3

帖子 ironwires » 2006-05-15 21:09

好东西,收藏了.
ironwires
帖子: 85
注册时间: 2006-04-19 2:36

#4

帖子 ironwires » 2006-05-15 21:19

不好意思,敢问楼主,这些笔记没有错的地方吧?因为我以后可能会用到...
头像
Samuel.running
帖子: 2
注册时间: 2006-05-02 19:29

#5

帖子 Samuel.running » 2006-05-16 10:15

收藏先,同楼上问。
关注中.........
4321go
帖子: 180
注册时间: 2005-09-13 21:18

#6

帖子 4321go » 2006-05-16 21:41

ironwires 写了:不好意思,敢问楼主,这些笔记没有错的地方吧?因为我以后可能会用到...
我校对过~ 应该没有错误,但是我也不敢保证绝对没有误差, 如果你发现有错误,请提出来 谢谢!^_^
我有一个Blog, 最近在上面发表了很多Linux基础知识, 上面的内容会随着我的提高而丰富的。 URL:http://4321go.blogchina.com
本站的Blog:http://forum.ubuntu.org.cn/weblog.php?w=38
2301103001
帖子: 20
注册时间: 2006-04-05 16:28
来自: 四川成都

#7

帖子 2301103001 » 2006-05-17 14:54

太多了!
看不完啊!
2301103001
帖子: 20
注册时间: 2006-04-05 16:28
来自: 四川成都

#8

帖子 2301103001 » 2006-05-17 14:58

不过还是谢谢LZ
我是新手!我是新手!我是新手!
头像
firehare
帖子: 2625
注册时间: 2005-04-10 16:54
来自: 温州大学
联系:

#9

帖子 firehare » 2006-05-17 21:49

ironwires 写了:不好意思,敢问楼主,这些笔记没有错的地方吧?因为我以后可能会用到...
由于 Linux 的不同发行版中的配置不尽相同,这里面的内容有些并不适用于 Ubuntu,请初学者要谨慎,不要什么都照做。不过作为参考看看无妨!
我心无畏,源自于我心无知。
图片
4321go
帖子: 180
注册时间: 2005-09-13 21:18

#10

帖子 4321go » 2006-05-18 17:31

firehare 写了:
ironwires 写了:不好意思,敢问楼主,这些笔记没有错的地方吧?因为我以后可能会用到...
由于 Linux 的不同发行版中的配置不尽相同,这里面的内容有些并不适用于 Ubuntu,请初学者要谨慎,不要什么都照做。不过作为参考看看无妨!
并非不适用,而是不能刻板套用。
和Ubuntu主要的不同是:软件包的管理~ 因为Ubuntu是基于debian的发行版,最初的Debian Linux 发行版提供dpkg工具进行软件安装和卸载的管理,最后发展为APT(advanced package tool,高级软件包工具)。 接着Red Hat 也在Red Hat Linux 发行版中使用了RPM包管理工具。

这些包管理工具的作用就是对应用程序软件包的安装、卸载、查询进行管理,使普通用户能够方便简单地对软件进行上述操作。

能够区别 APT和 RPM 这2个包管理系统, 就能够触类旁通了。
我有一个Blog, 最近在上面发表了很多Linux基础知识, 上面的内容会随着我的提高而丰富的。 URL:http://4321go.blogchina.com
本站的Blog:http://forum.ubuntu.org.cn/weblog.php?w=38
holz
帖子: 188
注册时间: 2005-07-18 18:20
来自: http://www.gdgpi.com.cn
联系:

#11

帖子 holz » 2006-07-06 9:29

这样,我也先收藏了。
头像
jackson0905
帖子: 51
注册时间: 2006-03-21 22:30

#12

帖子 jackson0905 » 2006-07-11 8:13

好长阿,没有耐心看下去阿,谢谢LZ.
先保存,以后要用时再看。
Jamsa
帖子: 147
注册时间: 2006-03-17 13:40

#13

帖子 Jamsa » 2006-07-11 8:50

这个应该主要是针对于RedHat系统的.
ceapple
帖子: 20
注册时间: 2006-04-19 9:32

6.06好像不适用

#14

帖子 ceapple » 2006-07-14 10:47

6.06好像不适用,6.06网络配置文件在哪?我的没有用DHCP,可是每次重启后DNS都消失,得重新配置网络
shane
帖子: 1
注册时间: 2006-12-25 21:15

#15

帖子 shane » 2006-12-25 21:36

谢了.
刚好正在学网络的配置......
回复