红叶的技术日志

希望每天能努力多一点

IT博客 首页 新随笔 联系 聚合 管理
  184 Posts :: 9 Stories :: 22 Comments :: 0 Trackbacks

#

Windows:
1.用系统管理员登陆系统。
2.停止MySQL的服务。
3.进入命令窗口,然后进入MySQL的安装目录,比如我的安装目录是c:\mysql,进入C:\mysql\bin
4.跳过权限检查启动MySQL,
[color=green]c:\mysql\bin>;mysqld-nt --skip-grant-tables[/color]
5.重新打开一个窗口,进入c:\mysql\bin目录,设置root的新密码
c:\mysql\bin>;mysqladmin -u root flush-privileges password "newpassword"
c:\mysql\bin>;mysqladmin -u root -p shutdown
将newpassword替换为你要用的root的密码,第二个命令会提示你输入新密码,重复第一个命令输入的密码。
6.停止MySQL Server,用正常模式启动Mysql
7.你可以用新的密码链接到Mysql了。

Unix&Linux:
1.用root或者运行mysqld的用户登录系统;
2.利用kill命令结束掉mysqld的进程;
3.使用--skip-grant-tables参数启动MySQL Server
[color=green]shell>;mysqld_safe --skip-grant-tables &
4.为root@localhost设置新密码
[color=green]shell>;mysqladmin -u root flush-privileges password "newpassword"
.重启MySQL Server

kill -9  mysql进程
mysqld_safe --user=mysql --skip-grants-table
posted @ 2006-09-22 01:22 applezk's IT blog 阅读(230) | 评论 (0)编辑 收藏

很多家庭都有旧的电脑,用来跑Windows系统已经力不从心,而安装上Linux系统还可以用来做许多的事情,比如,《开放系统世界》2003年第8期《给Linux家庭网络升级》中介绍的使用Linux做NAT网关进行ADSL上网。作为一个NAT网关,给它配备显示器等外设太奢侈,我们完全可以利用Windows来省略这些配置。

    远程登录的服务器设置

    我们以Red Hat Linux为例说明。首先安装Linux,这个时候不可以省略鼠标、键盘和显示器,将网络调通,保证Windows机器可以ping到。在Linux上,使用setup命令,在出现的配置选单后,选中“System Services”,回车后出现一个服务列表选单,确保在选单中有Telnet或sshd服务(为了安全起见,一般只选择sshd即可),若它们前边的方框内没有“*”号,则按空格键选择它。还要注意,firewall configuration要开放这些端口(telnet端口号23,SSH端口号22),或者为了简单实验可以暂时选择no firewall,但是今后为了安全,还是需要建立防火墙,开放22或23端口,相关设置请参考HowTo。在Linux上,用命令“useradd myself”新建一个用户myself,再用“passwd myself”设置这个用户的密码,在服务器上这样的设置就已经可以允许远程访问了。然后将那些外设统统拿掉。

    通过telnet方式访问Linux

    Windows本身自带一个telnet客户程序,在“开始”|“运行”中输入命令“telnet”。假设以上设置的Linux服务器IP地址为192.168.0.1,输入命令“open 192.168.0.1”,输入用户名“myself”和它的密码,接下来即可模仿坐在Linux机器前边进行操作了。

需要说明一点,默认情况下,使用telnet方式不允许以root用户登录,这也是在远程登录服务器设置一节最后建立用户myself的原因,下面将要提到的SSH方式就没有这个限制。

    通过SSH方式访问Linux

    由于telnet的不安全性,现在Linux发行版大多都集成了SSH功能,而Windows本身是没有SSH Client的,需要一个第三方软件支持。这里推荐使用SecureCRT或SSH Secure Shell非商业版。前者是所有Windows下客户端中能够在一个屏幕显示最多行数的软件,非免费软件,网址为http://www.vankyde.com。后者自带一个图形化的sftp软件,方便传输文件,个人使用免费,网址为http://www.ssh.com。

    要想使用SSH传输文件,还需要Linux上允许使用ssh2。方法是在/etc/ssh下使用“more sshd_config”,看sshd_config文件中protocal一行,若这一行前没有使用“#”,而且protocal后面只有数字“1”,则说明不可使用ssh2;若不是这种情况,即可使用ssh2。图1是SecureCRT的屏幕截图,图2是SSH Secure Shell的屏幕截图,并且,这些SSH类Client一般都支持telnet方式登录。在连接对话框中输入必要的信息,即可连接Linux机器了,如图3和图4。还有其它很多优秀的类似软件,这里就不一一介绍了,有兴趣的读者可以继续寻找。


图1 SecureCRT


图2 SSH Secure Shell


图3 SecureCRT connection


图4 SSH Secure Shell connection


    使用X-Window

    如果还想使用X-Window,就必须使用X Server软件了。如果安装Linux的时候选择安装了X-Window,只要可以使用telnet或SSH,那么就可以使用X-Window,不需要做额外的设置。

    这里有个概念要澄清,X Server是在Windows上运行的软件,用来接受鼠标键盘的输入,此时在Linux上跑的是X Client,负责做出对X Server的响应。此类软件比较著名的有Exceed和Xmanage,非常可惜的是它们都是商业软件。

    Exceed的历史非常悠久,在telnet/rlogin/rsh/方式下使用X-Window很方便,它来自http://www.hummingbird.com。

    Xmanage功能也十分强大,而且我还找到了一个汉化包(for 1.3.8版本免费的汉化包),安装之后可以显示中文的X-Window。有需要的读者可以发邮件到fisherjams@tom.com向我索要。至于Xmanage本身,用Google搜索很容易找到,但要注意版权问题。

图5为Xmangae,图6是使用Xmangae连接Linux。连接建立之后,运行命令“startx”即可启动X-Window。


图5 Xmanage


图6 用Xmanage连接Linux


    通过串口方式访问Linux

    无论使用前面介绍的哪种方式,都有个前提就是Linux机器一直不重启。如果Linux重新启动,会检测键盘是否存在,机器会一直停在需要确认键盘的界面上(而此时各项服务还都没有运行)。要想绕过这个限制,就需要其它的连接方式,一种方法是将终端定向到串口上(com1或com2)。制作一根DB9串口线,两边都是母头(有插孔的那种),将一头的2、3、5脚分别与另一头的3、2、5脚连接起来就可以了,当然最标准的是使用“null modem”线。

    在Linux上可进行如下设置。在文件/etc/inittab中增加下面一行(注意,如果不采用agetty程序,采用其它的程序如like getty_ps ,应用正确的命令语法):
    ID:RUNLEVELS:respawn:/sbin/agetty -L SPEED TTY TERM

    这里,ID为两字母的标识符,如s1或s2;RUNLEVELS为终端激活的运行级别;SPEED为串口端口速率;TTY为串口的设备名;TERM为环境变量。

    范例如下:
    s2:12345:respawn:/sbin/agetty -L 9600 ttyS1 vt100

    上面命令表示串口/dev/ttyS2 (COM2 )速率为9600bps,终端模式为vt100。

最后,重新启动机器。在Windows上打开“超级终端”,在“连接时使用”下拉选单中选择com1,填入如图7的信息即可进行连接。


图7 串口连接设置


    以上介绍了使用Windows控制Linux的一些技巧和方法,这些方法在家庭中即可做实验。掌握好它们,对今后管理多个Unix/Linux服务器有着许多好处。
posted @ 2006-09-15 21:27 applezk's IT blog 阅读(502) | 评论 (0)编辑 收藏

一:简介
tomcat是jakarta项目中的一个重要的子项目,其被JavaWorld杂志的编辑选为2001年度最具创新的java产品(Most Innovative Java Product),同时它又是sun公司官方推荐的servlet和jsp容器(具体可以见http://java.sun.com/products/jsp/tomcat/),因此其越来越多的受到软件公司和开发人员的喜爱。servlet和jsp的最新规范都可以在tomcat的新版本中得到实现。

二:安装及配置
tomcat最新版本为4.0.1,这个版本用了一个新的servlet容器Catalina,完整的实现了servlet2.3和jsp1.2规范。注意安装之前你的系统必须安装了jdk1.2以上版本。

(一):安装
1:windows平台
从tomcat网站下载jakarta-tomcat-4.0.1.exe,按照一般的windows程序安装步骤即可安装好tomcat,安装时它会自动寻找你的jdk和jre的位置。

2:linux平台
下载jakarta-tomcat-4.0.1.tar.gz,将其解压到一个目录。

(二):配置
运行tomcat需要设置JAVA_HOME变量

												set JAVA_HOME=c:/jdk (win98,在msdos方式下使用,或者放入autoexec.bat中)export JAVA_HOME=/usr/local/jdk (linux下使用,放到/etc/bashrc或者/etc/profile中)
										


(三):运行
设置完毕后就可以运行tomcat服务器了,进入tomcat的bin目录,win98下用startup启动tomcat,linux下用startup.sh,相应的关闭tomcat的命令为shutdown和shutdown.sh。

启动后可以在浏览器中输入http://localhost:8080/测试,由于tomcat本身具有web服务器的功能,因此我们不必安装apache,当然其也可以与apache集成到一起,下面会介绍。

下面你可以测试其自带的jsp和servlet示例。

三:应用

(一):目录结构
tomcat的目录结构如下:

目录名 简介
bin 存放启动和关闭tomcat脚本
conf 包含不同的配置文件,server.xml(Tomcat的主要配置文件)和web.xml
work 存放jsp编译后产生的class文件
webapp 存放应用程序示例,以后你要部署的应用程序也要放到此目录
logs 存放日志文件
lib/japser/common 这三个目录主要存放tomcat所需的jar文件


(二):server.xml配置简介
下面我们将讲述这个文件中的基本配置信息,更具体的配置信息见tomcat的文档

元素名 属性 解释
server port 指定一个端口,这个端口负责监听关闭tomcat的请求
shutdown 指定向端口发送的命令字符串
service name 指定service的名字
Connector
(表示客户端和service之间的连接)
port 指定服务器端要创建的端口号,并在这个断口监听来自客户端的请求
minProcessors 服务器启动时创建的处理请求的线程数
maxProcessors 最大可以创建的处理请求的线程数
enableLookups 如果为true,则可以通过调用request.getRemoteHost()进行DNS查询来得到远程客户端的实际主机名,若为false则不进行DNS查询,而是返回其ip地址
redirectPort 指定服务器正在处理http请求时收到了一个SSL传输请求后重定向的端口号
acceptCount 指定当所有可以使用的处理请求的线程数都被使用时,可以放到处理队列中的请求数,超过这个数的请求将不予处理
connectionTimeout 指定超时的时间数(以毫秒为单位)
Engine
(表示指定service中的请求处理机,接收和处理来自Connector的请求)
defaultHost 指定缺省的处理请求的主机名,它至少与其中的一个host元素的name属性值是一样的
Context
(表示一个web应用程序,通常为WAR文件,关于WAR的具体信息见servlet规范)
docBase 应用程序的路径或者是WAR文件存放的路径
path 表示此web应用程序的url的前缀,这样请求的url为http://localhost:8080/path/****
reloadable 这个属性非常重要,如果为true,则tomcat会自动检测应用程序的/WEB-INF/lib 和/WEB-INF/classes目录的变化,自动装载新的应用程序,我们可以在不重起tomcat的情况下改变应用程序

host
(表示一个虚拟主机)

name 指定主机名
appBase 应用程序基本目录,即存放应用程序的目录
unpackWARs 如果为true,则tomcat会自动将WAR文件解压,否则不解压,直接从WAR文件中运行应用程序

Logger
(表示日志,调试和错误信息)

className 指定logger使用的类名,此类必须实现org.apache.catalina.Logger 接口
prefix 指定log文件的前缀
suffix 指定log文件的后缀
timestamp 如果为true,则log文件名中要加入时间,如下例:localhost_log.2001-10-04.txt

Realm
(表示存放用户名,密码及role的数据库)

className 指定Realm使用的类名,此类必须实现org.apache.catalina.Realm接口

Valve
(功能与Logger差不多,其prefix和suffix属性解释和Logger 中的一样)

className

指定Valve使用的类名,如用org.apache.catalina.valves.AccessLogValve类可以记录应用程序的访问信息

directory 指定log文件存放的位置
pattern 有两个值,common方式记录远程主机名或ip地址,用户名,日期,第一行请求的字符串,HTTP响应代码,发送的字节数。combined方式比common方式记录的值更多

注意:1:经过我测试,我设置Context 的path="",reloadable=true,然后放一个WAR文件到webapps目录,结果tomcat不能检测出此文件(重起tomcat可以),而把此文件解压,则tomcat会自动检测出这个新的应用程序。如果不能自动检测WAR文件,我们可以利用下面管理中讲的方法来部署应用程序。

2:默认的server.xml中,Realm元素只设置了一个className属性,但此文件中也包含几个通过JDBC连接到数据库进行验证的示例(被注释掉了),通过Realm元素我们可以实现容器安全管理(Container Managed Security)。

3:还有一些元素我们没有介绍,如Parameter,loader,你可以通过tomcat的文档获取这些元素的信息。

(三):管理

1:配置
在进行具体的管理之前,我们先给tomcat添加一个用户,使这个用户有权限来进行管理。

打开conf目录下的tomcat-users.xml文件,在相应的位置添加下面一行:

												<user name="zf" password="zf" roles="standard,manager"/> 
										


注意:这一行的最后部分一定是/>,tomcat的文档掉了/符号,如果没有/符号的话,tomcat重起时将无法访问应用程序。通过logs/catalina.out文件你可以看到这个错误的详细信息。

然后重起tomcat,在浏览器中输入http://localhost:8080/manager/,会弹出对话框,输入上面的用户名和密码即可。

2:应用程序列表
在浏览器中输入http://localhost:8080/manager/list,浏览器将会显示如下的信息:

												OK - Listed applications for virtual host localhost/ex:running:1/examples:running:1/webdav:running:0/tomcat-docs:running:0/manager:running:0/:running:0
										


面的信息分别为应用程序的路径,当前状态(running 或者stopped),与这个程序相连的session数。

3:重新装载应用程序
在浏览器中输入 http://localhost:8080/manager/reload?path=/examples,浏览器显示如下:

												OK - Reloaded application at context path /examples  
										


表示example应用程序装载成功,如果我们将server.xml的Context元素的reloadable属性设为true(见上面表格),则没必要利用这种方式重新装载应用程序,因为tomcat会自动装载。

4:显示session信息
在浏览器中输入http://localhost:8080/manager/sessions?path=/examples,浏览器显示如下:

												OK - Session information for application at context path /examples Default maximum session inactive interval 30 minutes  
										


5:启动和关闭应用程序
在浏览器中输入http://localhost:8080/manager/start?path=/examples和http://localhost:8080/manager/stop?path=/examples分别启动和关闭examples应用程序。

6:部署及撤销部署
WAR有两种组织方式,一种是按一定的目录结构组织文件,一种是一个后缀为WAR的压缩包,因此它的部署方式也有两种:
(1):在浏览器中输入:http://localhost:8080/manager/install?path=/examples&war=file:/c:\examples
就会将按目录结构组织的WAR部署

(2):如果输入:http://localhost:8080/manager/install?path=/examples&war=jar:file:/c:\examples.war!/
就会将按压缩包组织的WAR部署,注意此url后半部分一定要有!/号。

部署后就可以用 http://localhost:8080/examples访问了。

在浏览器中输入:http://localhost:8080/manager/remove?path=/examples
就会撤销刚才部署的应用程序。

(四):与apache集成
虽然tomcat也可以作web服务器,但其处理静态html的速度比不上apache,且其作为web服务器的功能远不如apache,因此我们想把apache和tomcat集成起来。

我们以linux系统为例介绍.

从apache网站下载apache1.3.22源代码版本,然后使用如下命令配置安装apache:

												mkdir /usr/local/apachetar zxvf apache.1.32.tar.gzcd apache.1.32./configure --prefix=/usr/local/apache --enable-module=so makemake install
										


注意configure命令指定目标安装目录,并且加入DSO(Dynamic Shared Object)支持,注意一定不要忘了这一个选项。

然后下载webapp模块,将解压后mod_webapp.so文件放入apache的libexec目录,编辑apache的conf目录下的httpd.conf,在这个文件的最后加入下面三行:

												LoadModule webapp_module libexec/mod_webapp.soWebAppConnection warpConnection warp localhost:8008WebAppDeploy examples warpConnection /examples/ 
										


第一行是加入webapp模块,如果编译apache时不增加DSO支持,则无法使用LoadModule指令,第二行指定tomcat与apache的连接,第三行指定部署那个应用,这两个指令使用格式如下:

												WebAppConnection [connection name] [provider] [host:port]WebAppDeploy [application name] [connection name] [url path]  
										


其中connection name指定连接名,provider只能是warp,port端口与你的tomcat的配置文件server.xml最后几行指定的要保持一致。文件如下:

												<Service name="Tomcat-Apache"> <Connector className="org.apache.catalina.connector.warp.WarpConnector"port="8008" minProcessors="5" maxProcessors="75"enableLookups="true"acceptCount="10" debug="0"/>******</Service> 
										


application name与你在tomcat中部署的应用名一致,url path指定访问这个应用的url。例如上面的例子可以通过http://localhost/examples/来访问tomcat中的examples应用。

(五):中文问题
一般jsp的乱码问题可以通过在jsp中加入<%@ page contentType="text/html;charset=GB2312" %>来解决,至于servlet的乱码在可以使用servlet2.3中提供的HttpServeletRequest.setCharacterEncoding函数。更详细的中文问题请见JSP/Servlet 中的汉字编码问题

四:综述
tomcat作为一个servlet(jsp也被编译为servlet执行)容器,其应用前景是非常好的,如果与jboss结合起来,则可以实现sun的j2ee规范(用jboss作ejb服务器)。jboss的官方网站也提供集成了tomcat3.2*的jboss以供下载。另外一个开源的应用服务器(enhydra) 也是基于tomcat的,其提供了更友好的管理界面,部署应用程序也更简单,功能也更强大 。

posted @ 2006-09-14 22:30 applezk's IT blog 阅读(532) | 评论 (0)编辑 收藏

下午初接触TOMCAT,看到网上很多应用都搭建在TOMCAT上,TOMCAT一定具有很强的功能.tomcat是jakarta项目中的一个重要的子项目,其被JavaWorld杂志的编辑选为2001年度最具创新的java产品(Most Innovative Java Product),同时它又是sun公司官方推荐的servlet和jsp容器(具体可以见http://java.sun.com/products/jsp/tomcat/),因此其越来越多的受到软件公司和开发人员的喜爱。servlet和jsp的最新规范都可以在tomcat的新版本中得到实现。

**下载,安装tomcat(Ver4.0.3)
------------------------------
1:windows平台
从tomcat网站下载jakarta-tomcat-4.0.1.exe,按照一般的windows程序安装步骤即可安装好tomcat,安装时它会自动寻找你的jdk和jre的位置。

2:linux平台
下载jakarta-tomcat-4.0.1.tar.gz,将其解压到一个目录。


**对TOMCAT进行配置
-----------------------------
如果系统是WIN98,要在autoexec.bat中加入set JAVA_HOME=JDK路径;
linux下使用,放到/etc/bashrc或者/etc/profile中:export JAVA_HOME=/usr/local/jdk


**运行Tomcat
----------------------------
1.WIN98下,进入bin目录,利用startup.bat来启动Tomcat;
2.WIN2000/XP,直接通过开始>程序>apache tomcat 4.0启动;


**修改tomcat默认端口8080
----------------------------
在conf目录下,打开server.xml,找到

?port="8080" minProcessors="5" maxProcessors="75"
?enableLookups="true" redirectPort="8443"
?acceptCount="10" debug="0" connectionTimeout="60000"/>
修改port=80.


**建立自己的虚拟目录
-----------------------------
修改server.xml,在 之前加入
?
path是web的虚拟目录,docBase是硬盘上的路径。然后我们可以在浏览器地址栏输入:? http://localhost:8080/myJSP


**tomcat目录结构
-----------------------------
|--bin??? 存放启动和关闭tomcat脚本
|--conf?? 包含不同的配置文件,server.xml(Tomcat的主要配置文件)和web.xml
|--work?? 存放jsp编译后产生的class文件
|--webapp 存放应用程序示例,以后你要部署的应用程序也要放到此目录
|--logs?? 存放日志文件
|--lib/japser/common?? 这三个目录主要存放tomcat所需的jar文件


**server.xml
----------------------------
server port 指定一个端口,这个端口负责监听关闭tomcat的请求
shutdown 指定向端口发送的命令字符串
service name 指定service的名字
Connector(表示客户端和service之间的连接) port 指定服务器端要创建的端口号,并在这个断口监听来自客户端的请求
minProcessors 服务器启动时创建的处理请求的线程数
maxProcessors 最大可以创建的处理请求的线程数
enableLookups 如果为true,则可以通过调用request.getRemoteHost()进行DNS查询来得到远程客户端的实际主机名,若为false则不进行DNS查询,而是返回其ip地址
redirectPort 指定服务器正在处理http请求时收到了一个SSL传输请求后重定向的端口号
acceptCount 指定当所有可以使用的处理请求的线程数都被使用时,可以放到处理队列中的请求数,超过这个数的请求将不予处理
connectionTimeout 指定超时的时间数(以毫秒为单位)
Engine(表示指定service中的请求处理机,接收和处理来自Connector的请求) defaultHost 指定缺省的处理请求的主机名,它至少与其中的一个host元素的name属性值是一样的
Context
(表示一个web应用程序,通常为WAR文件,关于WAR的具体信息见servlet规范) docBase 应用程序的路径或者是WAR文件存放的路径
path 表示此web应用程序的url的前缀,这样请求的url为http://localhost:8080/path/***
reloadable 这个属性非常重要,如果为true,则tomcat会自动检测应用程序的/WEB-INF/lib 和/WEB-INF/classes目录的变化,自动装载新的应用程序,我们可以在不重起tomcat的情况下改变应用程序
host(表示一个虚拟主机)
name 指定主机名 appBase 应用程序基本目录,即存放应用程序的目录
unpackWARs 如果为true,则tomcat会自动将WAR文件解压,否则不解压,直接从WAR文件中运行应用程序
Logger(表示日志,调试和错误信息)
className 指定logger使用的类名,此类必须实现org.apache.catalina.Logger 接口
prefix 指定log文件的前缀
suffix 指定log文件的后缀
timestamp 如果为true,则log文件名中要加入时间,如下例:localhost_log.2001-10-04.txt
Realm(表示存放用户名,密码及role的数据库)
className 指定Realm使用的类名,此类必须实现org.apache.catalina.Realm接口
Valve(功能与Logger差不多,其prefix和suffix属性解释和Logger 中的一样)
className 指定Valve使用的类名,如用org.apache.catalina.valves.AccessLogValve类可以记录应用程序的访问信息
directory 指定log文件存放的位置
pattern 有两个值,common方式记录远程主机名或ip地址,用户名,日期,第一行请求的字符串,HTTP响应代码,发送的字节数。combined方式比common方式记录的值更多


**为manager添加用户
---------------------------
http://localhost:8080/manager添加用户进行管理,在conf\tomcat-user.xml中,添加

具体的管理还没有接触.


**再加一点
--------------------------
>>>tomcat中默认的主目录是webpages\root
>>>host里的appbase设置的是默认站点.context里的docbase是设置服务器上的虚拟目录地址.

上边的可能还不到TOMCAT功能应用的10%,初次接触,还有点收获,以后还要继续努力啊.

posted @ 2006-09-14 22:18 applezk's IT blog 阅读(274) | 评论 (0)编辑 收藏

     摘要: 一、Tomcat背景   自从JSP发布之后,推出了各式各样的JSP引擎。Apache Group在完成GNUJSP1.0的开发以后,开始考虑在SUN的JSWDK基础上开发一个可以直接提供Web服务的JSP服务器,当然同时也支持Servlet, 这样Tomcat就诞生了。 Tomcat是ja...  阅读全文
posted @ 2006-09-14 22:17 applezk's IT blog 阅读(2083) | 评论 (1)编辑 收藏

netfilter/iptables这个玩意儿似乎很复杂一直没太搞懂它的原理,所以从给公司配置服务器开始就从未使用过它,让同事们共享上网时才用了一下它的伪装,当时也只是从网上看到了那行iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE,仍然不知道它究竟都干了些什么。最近觉得QQ这个东西的确有些影响同事们工作,所以下决心摸索一下iptables,看看能不能提供一下生产力。

我的网络情况:linux服务器既是上网的拨号服务器,同时也是公司的web server、mail server、ftp server等,域名动态解析,同时它与公司其它windows客户端构成了一个局域网,内网IP为192.168.0.1(eth1接口),外网网卡(eth0接口),拨号接口为ppp0,网内其它计算机的IP也都是192.168.0网段。192.168.0.2到192.168.0.16为公司工作人员(公司比较小,只有10来个人),192.168.0.240到192.168.0.243这几个IP是我和其它两个同事在用,需要实现的目标是外网只能访问服务器的www、mail、ftp、tomcat这几个服务、内网192.168.0.2到192.168.0.16这个IP段的同事们上班时间只能上外网的www、mail、ftp、tomcat并禁止使用QQ、192.168.0.240到192.168.0.243这个IP段的同事们可以无限制上网。下面是我的脚本内容。

work_firewall.sh:
# Display start message
echo "Starting iptables rules..."
# 设置变量
IPT=/sbin/iptables
INTERNET_SERVER=192.168.0.1
IP_ME="127.0.0.1"
IP_SPEC_RANGE="192.168.0.240/30"
IP_WORK_RANGE="192.168.0.2/28"
IP_ALL="192.168.0.0/24"
# 清除所有规则
$IPT -F
$IPT -t nat -F
# 重置所有链默认设置
$IPT -P INPUT DROP
$IPT -P OUTPUT ACCEPT
$IPT -P FORWARD ACCEPT
$IPT -t nat -P PREROUTING ACCEPT
$IPT -t nat -P POSTROUTING ACCEPT
# 1. 限制internet对web服务器的访问
# (1) 允许自己无限制访问自己
$IPT -A INPUT -s $IP_ME -j ACCEPT
# (2) 允许访问www服务
$IPT -A INPUT -p tcp --dport 80 -j ACCEPT
# (3) 允许访问ftp服务
$IPT -A INPUT -p tcp --dport 20 -j ACCEPT
$IPT -A INPUT -p tcp --dport 21 -j ACCEPT
# (4) 允许访问mail服务
$IPT -A INPUT -p tcp --dport 110 -j ACCEPT
$IPT -A INPUT -p tcp --dport 143 -j ACCEPT
$IPT -A INPUT -p tcp --dport 25 -j ACCEPT
# (5) 允许访问tomcat服务
$IPT -A INPUT -p tcp --dport 8080 -j ACCEPT
# 2. 允许工作人员通过局域网访问服务器
$IPT -A INPUT -s $IP_SPEC_RANGE -j ACCEPT
$IPT -A INPUT -s $IP_WORK_RANGE -j ACCEPT
# 3. 允许特殊IP无限制上网
$IPT -t nat -A PREROUTING -s $IP_SPEC_RANGE -j ACCEPT
# 4. 对工作范围内IP限制部分上网功能
# (1) 允许访问DNS和ECHO
$IPT -t nat -A PREROUTING -s $IP_WORK_RANGE -d 0/0 -p udp --dport 53 -j ACCEPT
$IPT -t nat -A PREROUTING -s $IP_WORK_RANGE -d 0/0 -p udp --dport 42 -j ACCEPT
$IPT -t nat -A PREROUTING -s $IP_WORK_RANGE -d 0/0 -p udp --dport 7 -j ACCEPT
# (2) 禁止QQ的TCP登录
$IPT -t nat -A PREROUTING -s $IP_WORK_RANGE -d 219.133.38.5 -p tcp -j DROP
$IPT -t nat -A PREROUTING -s $IP_WORK_RANGE -d 218.18.95.165 -p tcp -j DROP
$IPT -t nat -A PREROUTING -s $IP_WORK_RANGE -d 218.17.209.23 -p tcp -j DROP
$IPT -t nat -A PREROUTING -s $IP_WORK_RANGE -d 218.18.95.153 -p tcp -j DROP
# (3) 禁止MSN登录
$IPT -t nat -A PREROUTING -s $IP_WORK_RANGE -d 207.46.104.20 -j DROP
# (4) 允许访问www
$IPT -t nat -A PREROUTING -s $IP_WORK_RANGE -d 0/0 -p tcp --dport 80 -j ACCEPT
# (5) 允许访问ftp
$IPT -t nat -A PREROUTING -s $IP_WORK_RANGE -d 0/0 -p tcp --dport 20 -j ACCEPT
$IPT -t nat -A PREROUTING -s $IP_WORK_RANGE -d 0/0 -p tcp --dport 21 -j ACCEPT
# (6) 允许访问mail
$IPT -t nat -A PREROUTING -s $IP_WORK_RANGE -d 0/0 -p tcp --dport 110 -j ACCEPT
$IPT -t nat -A PREROUTING -s $IP_WORK_RANGE -d 0/0 -p tcp --dport 143 -j ACCEPT
$IPT -t nat -A PREROUTING -s $IP_WORK_RANGE -d 0/0 -p tcp --dport 25 -j ACCEPT
# (7) 允许访问tomcat
$IPT -t nat -A PREROUTING -s $IP_WORK_RANGE -d 0/0 -p tcp --dport 8080 -j ACCEPT
# (8) 禁止访问其它服务
$IPT -t nat -A PREROUTING -s $IP_WORK_RANGE -d ! $IP_ALL -j DROP
# 5. 共享上网
$IPT -t nat -A POSTROUTING -o ppp+ -j MASQUERADE
# 显示结束信息
echo "Completed iptables rules."

网上讲解iptables命令如何使用的文章已经数不胜数了,但真正要理解它的工作原理还是不太容易,也许是自己太笨周六那天竟然午饭都没吃苦苦思索了整整一天才慢慢有所领悟。netfilter/iptables共有三组规则表:filter、nat和mangle。filter表用于一般的信息包过滤,如我的网络中192.168.0.1服务器自己访问internet资源时或者外网访问服务器本身时使用filter表规则;nat表用于转发的信息包过滤,如我的局域网内客户端需要通过服务器访问外网时就需要用到nat表规则;mangle表用于高级路由,我此次没有用到,因此也没有深究,有空了再看看^_^。filter表包括INPUT链、OUTPUT链和FORWARD链;nat表包括PREROUTING链、POSTROUTING链和OUTPUT链;mangle表包括PREROUTING链和OUTPUT链。filter表为默认规则表。

表名

功能

filter用于一般的信息包过滤,包括INPUT链、OUTPUT链和FORWARD链,如我的网络中192.168.0.1服务器自己访问internet资源时或者外网访问服务器本身时使用filter表规则
nat用于转发的信息包过滤,包括PREROUTING链、POSTROUTING链和OUTPUT链,如我的局域网内客户端需要通过服务器访问外网时就需要用到nat表规则
mangle用于高级路由,包括PREROUTING链和OUTPUT链

上面的脚本先清除了所有链的所有规则并重置了默认设置,其中INPUT链默认不接受外来访问服务器的任何数据包,接着第1步开放了服务器的80、20、21、110、143、25和8080端口,第2步允许局域网内的192.168.0.2到192.168.0.16及192.168.0.240到192.168.0.243的客户端访问服务器,第3步允许192.168.0.240及192.168.0.243无限制访问外网,第4步允许192.168.0.2到192.168.0.16访问外网的80、20、21、110、143、25、8080及DNS和echo,第5步局域网内客户端共享上网。

posted @ 2006-09-01 12:44 applezk's IT blog 阅读(452) | 评论 (0)编辑 收藏

路径: etc/sysconfig/network-scripts/    编辑: vi ifcfg-eth0

按 a 开始编辑  Esc shift+:  输入 wq! 存盘退出

重新启动网卡 路径: /etc/init.d     命令: ./network restart

 

ifcfg-eth0文件内容示例:

DEVICE=eth0

ONBOOT=YES

BOOTPROTO=static

IPADD=

NETMAST=

GATEWAY=

posted @ 2006-08-14 18:47 applezk's IT blog 阅读(242) | 评论 (0)编辑 收藏

1、什么是Linux?

  准确的说,是指Linux的kernel(系统的核心程序),其内核版权属于Linus Torvalds,在GPL(GNU General Public License)版权协议下发行, 任何人都可以自由的复制(copy), 修改(change), 套装分发(distribute),销售,但是不可以在分发时加入任何限制, 而且所有原码必须是公开的,所以任何人都可以无偿取得所有执行文件和原代码。

  对于Linux用户和系统管理员来说,Linux是指包含Linux kernel、utilities (系统工具程序)以及application (应用软件)的一个完整的操作系统。Linux的应用软件是由自由软件基金会(FSF)开发的,全世界许多热心的程序员为Linux开发或移植了很多应用程序,包括X-Windows、Emacs、TCP/IP网络(包括SLIP/PPP/ISDN)等等,现在Linux(包括内核和大量的应用程序)光是执行程序就已经达到200M,完全安装后的规模将更大(大约500M左右)。

  从本质上讲,Linux是Unix的”克隆”或Unix风格的操作系统,在原代码级上兼容绝大部分的Unix标准(如IEEE POSIX,System V,BSD),它遵从 POSIX规范,例如对于System V来说,把其上程序源代码拿到 Linux下重新编译后就可以运行,而对于BSD Unix来说,它的可执行文件可以直接在Linux环境下运行。

  Linux的标志是可爱的企鹅,至于为什么选用企鹅,Linus是这样说的:别的都被他人用了,企鹅,不是也非常可爱吗?!由Linux作者发布的仅仅是一个内核而己,有一些公司或组织把内核、原代码及相关的应用程序组织在一起发行, 于是就产生了不同的Linux发行(distributor)版本, 比较著名的发行版本有RedHat、SlackWare 、S.u.S.e、Debian 等。

 2、Linux的发展历史?

  Linux的历史可以追溯到1990年,Linus Torvalds还是芬兰赫尔辛基大学的一名学生,最初用汇编语言写了一个在80386保护模式下处理多任务切换的程序,后来从Minix(用于操作系统教学、很小的Unix)中得到灵感,发誓要写一个比Minix更好的Minix,于是开始写了一些硬件的设备驱动程序、一个小的文件系统......,这样0.0.1版本的Linux就出来了,但是它必须在有Minix的机器上编译以后才能玩,这时候的Linus已经完全“走火入魔”了,决定踢开Minix“闹革命”,于是在1991年10月5号发布了Linux 0.0.2版本,这个版本已经可以运行bash(一种用户与操作系统内核通讯的软件)和gcc(GNU C编译器)了。

  Linus从一开始,就决定自由扩散Linux、包括源代码,他把源代码发布在网上,随即就引起爱好者的注意,他们通过互连网也加入了Linux的内核开发工作,一大批高水平程序员的加入,使得Linux达到迅猛发展,到1993年底,Linux 1.0终于诞生。Linux 1.0已经是一个功能完备的操作系统了,其内核写得紧凑高效,可以充分发挥硬件的性能,在4M内存的80386机器上也表现得非常好。

  很多人对Linux的认识有个误区,即总把Linux与低档硬件平台联系到一起,其实从2.1.xx系列内核开始,Linux就开始走高端的路子了,大约在1.3版本之后,开始向其他硬件平台上移植,包括号称最快的CPU---Digital Alpha(目前主频是最高的),目前Linux能将硬件的性能充分发挥出来,可以囊括低端到高端的所有应用。

  Linux加入GNU并遵循公共版权许可证(GPL),由于不排斥商家对自由软件进一步开发,不排斥在Linux上开发商业软件,故而使Linux又开始了一次飞跃,出现了很多的Linux发行版,如Slackware、Redhat、Suse、TurboLinux、OpenLinux等十多种,而且还在增加,还有一些公司在Linux上开发商业软件或把其他Unix平台的软件移植到Linux上来,如今很多IT界的大腕如IBM、Intel、Oracle、Infomix、Sysbase、Corel、Netscape、CA、Novell等都宣布支持Linux! 商家的加盟弥补了纯自由软件的不足和发展障碍,Linux得以迅速普及。


1、如何快速掌握Linux?

  方法是多动手、动脑,学习时要经常与Windows进行对比。建议你先安装RedHat Linux,然后练习如何配置它,如何使用Linux命令,如何在X—WINDOWS下操作,如何在Linux下安装应用软件,如何在Linux下上网、编辑文档、播放多媒体文件、玩游戏等。

  快速上手的方法只有一个,那就是多动手操作,看看你能否完成上面的工作。

2、Linux与Windows有哪些异同点?

  Windows是图形界面的,Linux类似以前的DOS,是文本界面的,如果你运行了图形界面程序X-WINDOWS后,Linux也能显示图形界面,也有开始菜单、桌面、图标等。

  Windows有MS-DOS方式,在该方式下通过输入DOS命令来操作电脑;而Linux与Windows类似,也有命令方式,Linux启动后如果不执行X-WINDOWS,就会处于命令方式下,必须发命令才能操作电脑。另外Linux上也有很多的应用软件,安装运行了这些软件后,你就可以在Linux上编辑文档、图片,玩游戏、上网、播放多媒体文件等。

  不过Linux的分区格式和目录结构,与Windows迥然不同,应用软件的安装方式也不同。

3、安装Linux时的注意事项

  安装前确定好Linux安装在哪个分区,Linux也有系统分区和Swap分区(类似Windows的虚拟分区,即交换文件)两个分区。由于Linux支持的分区格式与Windows分区格式不同,所以如果安装了Linux后,Windows还能继续使用,Linux就应该安装在硬盘分区的最后一个扩展分区;其次Linux的Swap分区必须保证有60MB,系统分区最少要保证240MB;此外安装前搜集好PC硬件方面的信息,特别是显示器信息,这将直接决定你安装Linux后,使用图形界面程序的效果;在安装、使用中输入命令时,请注意大小写。

4、掌握Linux的目录结构

  Linux的目录结构与Windows不同,而且在Windows下看不到Linux的目录,反过来,Linux也看不到Windows下的目录。Linux下各目录的含义如下:

目录名称 意 义
/vmlinuz 该目录中存放的是系统内核
/bin 该目录中存放Linux的常用命令,在有的版本中是一些和根目录下相同的目录。
/boot 该目录下存放的都是系统启动时要用到的程序,当用lilo引导Linux时,会用到这里的一些信息
/dev 该目录包含了Linux系统中使用的所有外部设备,它实际上是访问这些外部设备的端口,你可以访问这些外部设备,与访问一个文件或一个目录没有区别。例如在系统中键入“cd /dev/cdrom”,就可以看到光驱中的文件;键入“cd /dev/mouse”即可看鼠标的相关文件。
/cdrom 该目录在刚安装系统时是空的,你可以将光驱文件系统挂在这个目录下, 例如“mount /dev/cdrom /cdrom”
/etc
该目录存放了系统管理时要用到的各种配置文件和子目录,例如网络配置文件、文件系统、X系统配置文件、设备配置信息、设置用户信息等。
/sbin 该目录用来存放系统管理员的系统管理程序。
/home 如果建立一个名为“xx”的用户,那么在/home目录下就有一个对应的“/home/xx”路径,用来存放该用户的主目录。
/lib 该目录用来存放系统动态连接共享库,几乎所有的应用程序都会用到该目录下的共享库
/lost+found 该目录在大多数情况下都是空的。但当突然停电、或者非正常关机后,有些文件就临时存放在这里。
/mnt 该目录在一般情况下也是空的,你可以临时将别的文件系统挂在该目录下。
/proc 可以在该目录下获取系统信息,这些信息是在内存中由系统自己产生的
/root 如果你是以超级用户的身份登录的,这个就是超级用户的主目录
/tmp 用来存放不同程序执行时产生的临时文件
/usr 用户的很多应用程序和文件都存放在该目录下

5、Linux的常用命令

  如果在Linux命令行模式下遇到不会用的命令,你可以打"man [command]"得到该命令的帮助,如果想知道一个命令有哪些参数,可以打command -help来得到。

  注意:linux中的参数输入形式和dos不一样,在命令后面应该打一个空格,然后打"-",最后再跟一个或多个参数;另外linux下大小写是有区别的!

  下面介绍几个linux下最常用的命令,每个命令都与对应的dos命令作比较,并列出一些常用的参数。

命令参数 意 义
Ls
-a列出系统中的隐含文件,linux下的隐含文件是靠文件名的格式来表示的,不同于dos是靠文件属性来表示,即只要该文件以“.”开头,那么它就是隐含文件。
-l以长式列出。就是把该文件或目录的所有信息都列出来,一个文件占一行
相当于dos下的dir命令,是列文件列表的命令。
cd 和dos下的cd一样,转换目录的命令。 注意:linux下转到上级目录要打"cd .."而不是dos下的"cd..",即"cd"后面要有个空格
pwd 列出当前目录命令,相当于dos下没有参数的cd命令。例如:
[root@ttqq bin]# pwd /usr/bin [root@ttqq bin]# 这表示目前在"/usr/bin"目录下。
Mkdir
-m mode表示建立目录时默认的目录模式。这个是dos和Windows所没有的功能,主要是关于权限的问题。
建立新目录,相当于dos的md命令。一般就用 mkdir [dirname]
rmdir 删除目录,相当于dos的rd命令。
用法:rmdir [dirname]
cat 在文件后面追加文件,或在屏幕上打印文件内容,追加功能相当于dos的copy file1+file2,而在屏幕上打印文件内容可以和dos的typeml来类比。如果文件太大,在一屏上无法完全显示,则可用more命令
more 分屏显示文件内容,和dos下的more命令大致相同,但它可以和别的命令搭配使用。如:cat /home/eec/myfile | more。
cp

-r相当于dos的xcopy/s。用于拷贝一个目录下的所有子目录和文件 拷贝文件,相当于dos下的copy,使用方法与dos下的copy一样。

=======================================

系统安装: Linux快速入门

不少初学者都觉得Linux操作系统难用,现特将Linux中的基本操作与DOS操作系统中相似的操作对照比较如下,以让大家尽快入门


[一、基础知识]
1、[系统安装]
Linux的安装时,使用Tab、箭头、空格、回车等键做出选择。Linux一般须安装在单独的分区下,为避免Windows系统中的注册表、快捷方式路径出错,最好安装在硬盘的最后一个分区。即将最后的一个分区删除后,用分区软件(建议用Pqmagic)分为Linux Native(根分区)和Linux Swap(数据交换区),如果您的硬盘大于8G,您的Linux root分区应安装在前8G之内(linux 根分区终止扇区 <1023 柱面)。Native分区一般要大于240MB,具体大小视安装的Linux组件决定,建议不要大于2G。Swap分区必须有60MB以上。安装前要搜集好您的硬件信息如:CPU、内存、显示器、显卡、鼠标、键盘等。Linux的版本有很多,而且不断更新,根据提示安装一般都可顺利完成。

2、[登陆进入]
默认安装,启动后在出现的Lilo boot:之后输入Linux(或回车),Linux便开始启动,当出现登陆提示符Login:时,输入用户名,然后出现口令提示符password:输入口令。可进入相应的用户环境。如输入:root,及其密码,可进入超级用户环境#,输入其他用户名及口令,可进入该用户环境$(当然由于版本的不同还可能是%等)。

3、[关闭系统]
在超级用户提示符#下输入halt(立即关机)或shutdown [time](延迟time分后关机,给各用户每隔一段时间发出还有多长时间将关机的警告)后,计算机将进行一系列的关机工作,最后出现System halt时,表示可以关闭电源了。非超级用户则需用exit命令退出操作环境,再用超级用户:root登陆,才能执行关闭操作。

4、[注意事项]
与DOS不完全相同的地方:

  DOS Linux 备注
命令行字母 不区分大小写 区分大小写 在Linux中,超级用户的系统提示符是#,一般普通用户的系统提示符是$,普通用户的系统提示符也同DOS一样可以更改。通配符中*、?与DOS中的含义相同,[]是仅包括括号内的符号,连续的符号可用“-”连接首尾的符号代替,如[12345678]可以用[1-8]代替,[abcdefijk]可用[a-fi-k ]表示。
路径分隔符 /
提示符 > #、$
通配符 *、? *、?、[]

5、[文件类型]
与DOS、Windows不同,在Linux系统中,目录和设备都被视为文件,共有四种文件类型,它们是:⑴普通文件,即我们通常所说的文件,在长列目录方式时行首前用一符号“-”表示。⑵目录文件,即我们通常所说的目录,在长列目录方式时行用首前用一字母“d”表示。⑶字符设备文件,如显示器、打印机、终端等,在长列目录方式时行首前用一字母 “c”表示。⑷块设备文件,如硬盘、软盘、光盘在长列目录方式时行首前用一字母“b”表示。在Linux中用长格式列目录命令ls -l时,例如:

-rwxrw-r-- 5 user group 1089 Nov 18 1998 filename
存取权限 用户 组名 字节数 最后修改时间 文件名

DOS下的文件名是8.3格式的,Windows95以后开始支持长文件名,Linux支持长文件名。在DOS下扩展名是com、exe或bat的文件为可执行文件,但在Linux中文件类型只能通过文件属性得知,用命令ls –F可区分目录和文件,后有“/”符号的为目录,后有“*”符号的为可执行文件,用ls –aF可列出所有的文件和目录,包括隐藏的文件和目录,文件名以点号“.”开头的为隐藏文件。

6、[读取权限]
在Linux中,文件的主人称所有者,其他使用者分别称为同组者、其他人,为保证各用户文件的安全,Linux继承了UNIX的作法,通过设定存取权限,限制某些用户对文件的随意存取。共有三个级别的存取权:读权r、写权w、执行权x。在存取权中共有九个字符的位置其顺序是:所有者、同组人、其他人。在上例中分别表示:主人对文件拥有读写权和执行权,同组人对文件拥有读写权、其他人对文件只拥有读权。

7、[使用帮助]
在Linux中,您只要在命令行中打上man command(您要看帮助的命令),就可以得到该命令的在线帮助。man有一套它自己的命令,通常由单个键组成,按空格键和F键将翻到下一页,按B键翻到上一页,按Q键退出man,回到命令行。

[二、文件管理和目录操作]
1、[文件管理]

功能 DOS Linux 备注
显示文件内容 type、more cat、more type、cat是全部显示,more是分页显示
拷贝文件 copy cp
移动文件及改名 move mv
删除文件 del、erase rm
打印文件 print lpr

2、[目录操作]

功能 DOS Linux 备注
列目录及文件 dir/选项 ls –选项 在Linux中cd/是直接返回登录时的目录而不是根目录
显示当前目录 cd pwd
变更工作目录 cd目录 cd/目录
建立目录 md、mkdir mkdir
删除目录 rd、rmdir rmdir
目录更名 move mv
拷贝目录 xcopy copy

据说很多DOS命令都是借鉴UNIX的,而Linux又是从UNIX发展起来,故DOS和Linux命令的格式很相似,只是Linux的命令的功能更加强大,各选项、参数有较大区别,具体运用时可使用帮助命令。

[三、外存储器的使用]
在Linux中一般不能直接访问软盘、其他硬盘逻辑分区、光盘等,在Linux中它们都被视为文件,在使用前必须使用装载命令mount将它们装载到系统的/mnt目录中,使用结束后还须卸载。命令格式如下:

mount –t 文件系统类型 设备名 装载目录

常用的文件类型有:
msdos dos分区文件
vfat 支持长文件名的dos分区
ext2 Linux的文件系统
swap Linux swap分区或swap文件
iso9660 安装CD-ROM的文件系统
hpfs OS/2分区文件系统

设备名是指要装载的设备的名称,如软盘、硬盘、光盘等,软盘一般为/dev/fd0 fd1,硬盘一般为/dev/hda hdb ,硬盘逻辑分区一般为期hda1 hda2…等等,光盘一般为/dev/hdc。在装载前一般要在/dev/mnt目录下建立一个空的目录(名字自拟),如软盘可为floppy,硬盘分区可为其盘符如c、d等等,光盘可为cd-rom,个体使用例子:

装载一个mddos格式的软盘:mount –t msdos /dev/fd0 /mnt/floppy
装载一个Linux格式的软盘:mount –t ext2 /dev/fd0 /mnt/floppy
装载Windows98格式的硬盘分区(C盘):mount –t vfat /dev/hda1 /mnt/c
装载一个光盘:mount –t iso9660 /dev/hdc /mnt/cd-rom

装载完成后便可对该目录进行操作,在使用新的软盘及光盘前必须退出该目录,使用卸载命令umount卸载,才可以使用新的软盘及光盘,否则系统会不承认的,光盘在卸载前是不能用光驱面板前的弹出键退出的。

以上只是Linux基本的知识,不过相信您掌握后便已快速步入Linux了之门,进一步深入学习其他Linux知识了应该不成问题了。



Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=659004

posted @ 2006-08-14 18:41 applezk's IT blog 阅读(264) | 评论 (0)编辑 收藏

110 重新启动标记应答。
120 服务在多久时间内ready。
125 数据链路埠开启,准备传送。
150 文件状态正常,开启数据连接端口。
200 命令执行成功。
202 命令执行失败。
211 系统状态或是系统求助响应。
212 目录的状态。
213 文件的状态。
214 求助的讯息。
215 名称系统类型。
220 新的联机服务ready。
221 服务的控制连接埠关闭,可以注销。
225 数据连结开启,但无传输动作。
226 关闭数据连接端口,请求的文件操作成功。
227 进入passive mode。
230 使用者登入。
250 请求的文件操作完成。
257 显示目前的路径名称。
331 用户名称正确,需要密码。
332 登入时需要账号信息。
350 请求的操作需要进一部的命令。
421 无法提供服务,关闭控制连结。
425 无法开启数据链路。
426 关闭联机,终止传输。
450 请求的操作未执行。
451 命令终止:有本地的错误。
452 未执行命令:磁盘空间不足。
500 格式错误,无法识别命令。
501 参数语法错误。
502 命令执行失败。
503 命令顺序错误。
504 命令所接的参数不正确。
530 未登入。
532 储存文件需要账户登入。
550 未执行请求的操作。
551 请求的命令终止,类型未知。
552 请求的文件终止,储存位溢出。
553 未执行请求的的命令,名称不正确。

posted @ 2006-08-14 18:31 applezk's IT blog 阅读(287) | 评论 (0)编辑 收藏

一般情况下,iptables已经包含在了Linux发行版中,可以运行iptables --version来查看系统是否安装了iptables。在我使用的Fedora Core 1中,安装的版本是iptables v1.2.8。如果你的系统确实没有安装iptables,那么可以从以下地址下载: http://www.netfilter.org/

查看规则集

虽然上文对iptables的用法作一个简单介绍,但现实中我们可能需要知道更完整的信息,这时我们可以运行man iptables来查看所有命令和选项的完整介绍,也可以运行iptables help来查看一个快速帮助。要查看系统中现有的iptables规划集,可以运行以下命令:

 

														
														iptables list

下面是没有定义规划时iptables的样子:

 

														
														  Chain INPUT (policy ACCEPT)
  target   prot opt source               destination
  
  Chain FORWARD (policy ACCEPT)
  target   prot opt source               destination         
  
  Chain OUTPUT (policy ACCEPT)
  target   prot opt source               destination   
  
如上面的例子所示,每一个数据包都要通过三个内建的链(INPUT、OUTPUT和FORWARD)中的一个。 filter是最常用的表,上文所示设置所有的表规则的基本语法:iptables [-t table] command [match] [target]。

现实中,不一定要用到这里所列出的所有选项,也不一定是以这个顺序。当然,这是一种惯例,因为规则一般都比较长,为了清晰起见,最好能够按照这个顺序。

在没有指定规则表的情况下,缺省时使用的filter表。在filter表中最常用的三个目标是ACCEPT、DROP和REJECT。DROP会丢弃数据包,不再对其进行任何处理。REJECT会把出错信息传送至发送数据包的主机。虽然有时会有一些预想不到的影响,但在很多时候它还是非常有用。

增加规则

本例中的规则将会阻止来自某一特定IP范围内的数据包,因为该IP地址范围被管理员怀疑有大量恶意的攻击者在活动:

  # iptables -t filter -A INPUT -s 123.456.789.0/24 -j DROP

要了解有关iptables详细的参数和命令格式,请使用man iptables查看。可以说,现在我们对于网络上的恶意攻击者已经深恶痛绝,但不管怎么说,我们也不能因为憎恨它们就以同样的方法对其实行简单的报复,至少这种事情不能在你的网络里发生。因此,我们也可以很轻易地阻止所有流向攻击者IP地址的数据包,该命令也只是稍有不同:

 

  # iptables -t filter -A OUTPUT -d 123.456.789.0/24 -j DROP
  

注意这里的A选项,如前所述,使用它说明是给现有的链添加规则。

删除规则

网络上的恶意攻击者总是在变化着的,因此我们也要不断改变IP。假设我们了解的一个网上攻击者转移到了新的IP地址,而其老的IP地址被分配给了一些清白的用户,那么这时这些用户的数据包就无法通过你的网络了。这种情况下,我们可以使用带-D选项的命令来删除现有的规则:

  # iptables -t filter -D OUTPUT -d 123.456.789.0/24 -j DROP
  

 

缺省的策略

创建一个具有很好灵活性,可以抵御各种意外事件的规则需要花大量的时间。对于那些不想这样做的人,最基本的原则就是“先拒绝所有的数据包,然后再允许需要的”。下面我们来为每一个链设置缺省的规则:

  # iptables -P INPUT DROP
  # iptables -P FORWARD DROP
  # iptables -P OUTPUT ACCEPT
  

这里选项-P用于设置链的策略,只有三个内建的链才有策略。这些策略可以让信息毫无限制地流出,但不允许信息流入。但很多时候,我们还是需要接收外部信息的。这时可使用以下命令:

 

  # iptables -t filter -A INPUT -s 123.456.789.0/24 -j ACCEPT
 

SYN的使用

我们不能关闭所有的端口,那将会把我们自己完全“与世隔绝”。我们也不能只指定某些端口处于打开状态,因为我们无法预见哪一个端口将会被使用。事实上,只简单地允许目的地为某一特定端口的数据流通过将对阻止恶意的攻击毫无意义。那么我们怎样才能设置一个有效的规则,即可以允许普通用户正常通过,又可以阻止恶意攻击者访问我们的网络呢?

对于刚开始使用iptables的人,我们可以充分利用syn标识来阻止那些未经授权的访问。因为iptables只检测数据包的报头,所以不会增加有效负荷。事实上,除iptables以外,很多其它有用的数据包分析都是基于报头的。

比如,在进行Web冲浪时,一个请求从你的PC发送至其它某一个地方的Web服务器之上,接着该服务器就会响应请求并且向你发回一个数据包,并且得到你的系统上的一个临时端口。与响应请求不同的是,服务器并不关心你所传送的内容。这们可以利用这种特点,来设置一个规则,让它阻止所有没有经过你的系统授权的TCP连接:

 

  # iptables -t filter -A INPUT -i eth0 -p tcp --syn -j DROP

 

这里的-i指的是网卡,-p则是指协议,--syn则表示带有syn标识设置的TCP数据包。从中我们可以看出,对TCP/IP的了解将非常有利于维护网络安全。SYN用于初始化一个TCP连接,如果你在自己的机器上没有运行任何服务器,别人自然也就不会向你发送SYN数据包了。

就这点而言,有人会说:何必如此麻烦?的确,我们有更简单的创建防火墙的方法,也有很多不错的软件也可以帮助我们来构建自己的规则集,但是我们应该清楚,最简单的办法,往往不是最好的方法。既然我们有更好的方法,为什么不使用呢?

共享一个Internet连接

网络地址翻译和IP伪装都可以实现多台主机共享一个Internet连接,而这个局域网可以是Linux和Windows系统组成的多系统局域网。假设现在我们有一台机器有两个网卡,其中eth0为“公共”网卡,eth1为“私有”网卡。

换句话说,eth0被分配了一个静态的,可路由的IP地址,而eth1则被分配给了一个私有的、不能路由的IP,也就是说该IP是属于该局域网子网的。要实现上述功能,我们需要向nat和filter表中添加一些链:

  # iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
  # iptables -t filter -A FORWARD -i eth0 -o eth1 -m state --state 
   RELATED,ESTABLISHED -j ACCEPT
  # iptables -t filter -A FORWARD -i eth1 -o eth0 -j ACCEPT

这显示了有状态的数据包检测的价值。请注意,我们这里是如何实现流入数据包只有在属于一个已经存在的连接时才被允许的,而所有来自局域网内流向外的数据包则都允许通过 (注意:这里的filter是缺省的表,但它并不是必须的)。第一条规则让所有流出的信息看起来都是来自防火墙机器的,而并不会显示出防火墙后面还有一个局域网。

下面的例子是为FORWARD和POSTROUTING链设置了缺省的策略,在使用伪装时,有一个缺省的POSTROUTING DROP策略是非常重要的,否则,就有可能有心怀恶意的用户突破网关后伪装它自己的身份。

 

  # iptables -t filter -P FORWARD DROP
  # iptables -t nat -P POSTROUTING DROP

下面的例子是为了拨号连接设置的,它可以动态地分配IP地址:

 

  # iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE

 

规则的保存

使用脚本更改规则的问题是:改动每个规则都要调用命令iptables,而每一次调用iptables,它首先要把netfilter内核空间中的整个规则集都提取出来,然后再插入或附加,或做其他的改动,最后,再把新的规则集从它的内存空间插入到内核空间中,这显然会花费很多时间。

为了解决这个问题,可以使用命令iptables-save和restore 。iptables-save用来把规则集保存到一个特殊格式的文本文件里,而iptables-restore则用来把这个文件重新装入到内核空间中。

这两个命令最好的地方在于一次调用就可以装载和保存规则集,而不像脚本中每个规则都要调用一次iptables。

iptables-save运行一次就可以把整个规则集从内核里提取出来,并保存到文件里,而iptables-restore每次装入一个规则表。换句话说,对于一个很大的规则集,如果用脚本来设置,那这些规则就会反复地被卸载、安装很多次,而我们现在可以把整个规则集一次就保存下来,安装时则是一次一个表,这可是节省了大量的时间。所以,一旦测试结果令你满意,你就可以将它们保存为脚本:

  # iptables-save > iptables-script

现在,信息包过滤表中的所有规则都被保存在文件iptables-script中。无论何时再次引导系统,都可以使用 iptables-restore 命令将规则集从该脚本文件恢复到信息包过滤表,恢复指令如下所示:

 

  # iptables-restore iptables-script

如果您愿意在每次引导系统时自动恢复该规则集,则可以将上面指定的这条命令放到任何一个初始化shell脚本中。

事实上,大部分发行版都为用户提供了一个可以自动加载的文件,让用户在其中编辑规则集,并且大部分发行版都会有一个已经预先配置好的防火墙。不同的发行版的配置文件位置不尽相同,我们可以使用命令locate iptables来找到配置文件。对于Red Hat或者 Fedora Core而言,这个配置文件位于/etc/sysconfig/iptables。该文件初始的内容如下:

 

1 # Firewall configuration
2 *filter
3 :INPUT <target> [0:0]
4 :FORWARD <target> [0:0]
5 :OUTPUT <target> [0:0]
6
7 # your rules here
8 
9 COMMIT

建议将其基本框架改成以下内容:

 

1 *filter
 2 :INPUT DROP [0:0]
 3 :FORWARD DROP [0:0]
 4 :OUTPUT ACCEPT [0:0]
 5
 6 # allow local loopback connections
 7 -A INPUT -i lo -j ACCEPT
 8
 9 # drop INVALID connections
10 -A INPUT   -m state --state INVALID -j DROP
11 -A OUTPUT  -m state --state INVALID -j DROP
12 -A FORWARD -m state --state INVALID -j DROP
13
14 # allow all established and related
15 -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
16 
17 # add anymore rules here
18
19 COMMIT

posted @ 2006-08-14 18:27 applezk's IT blog 阅读(224) | 评论 (0)编辑 收藏

仅列出标题
共19页: First 11 12 13 14 15 16 17 18 19