Archive for 十一月 14th, 2005

永远的文明

最近比较吸引我的游戏就属施德·梅尔的文明4了,想起当初最早接触的文明2,那时我真是抱着厚厚一本字典一字一句的边翻译边玩的。

这次对于文明4的需求不低,官方的最低配置纯属骗人,我的机器:AMD64 3000+ 1.5G RAM + ATI x700Pro + WD SATA2 200G*2 RAID0 开一个HUGE 地图的天神难度进了20世纪以后也会出现明显的延迟现象,配置比较低的玩家最好不要开huge地图了。

文明4中除了将原先3中“假3D”的造型改成了真3D,但是对于细节不敢恭维,单位的移动都是鬼步——像棋子一样的平移。不过对于文明而言,这已经足够了,想要好的画面,AOE3.

这次将很多“大文明”的领导人增加到了2个,中国是秦始皇和毛泽东(你说唐太宗?呵呵你玩的是天人互动汉化版),而且不同的领导人起初优势也不尽相同,等于是新的文明。

首次增加了宗教系统,各个城市的宗教会相互传播,更加有利于团结(和分裂),同时在城市中建设宗教建筑也有利于提高市民的开心度。

奇观建筑也不再仅仅是为了赚分数了——奇观会定期生产出英雄人物,可以加速城市的生产进度或科研进度,以往文明3的英雄之能够通过战争来获得。这也应证了文明这部游戏的宗旨:不是什么问题都必须通过战争来解决。

几点不足:

  • 硬件要求太高
  • 电脑的智能有问题,特别是让工人自动执行任务时
  • 赖皮的电脑——呵呵,一个野蛮民族的战士可以用木棒击落直升机;弓箭手可以射穿机械化部队的装甲。

几种胜利方式:

  • 外交胜利:建立设施“联合国"后当选秘书长。
  • 军事胜利:占领所有的城市——我唯一从来没有完成的任务
  • 时间胜利:2050年”算总账“得分最高——最容易。
  • 太空竞赛胜利:发射宇宙飞船至半人马α星——有CG,大概这才是游戏的本意。

1 Comment

SOLARIS操作系统常用命令

1、man <要查的命令名字> 4
2、ls 相当于DOS的dir 4
3、clear 相当于DOS的cls,清除屏幕上的内容 5
4、mkdir <目录名> 相当于DOS的md,新建一个目录 5
5、cd <目录名> 5
6、rm <文件名> 5
7、cp <源文件> <目的文件> 5
8、mv <源文件> <目的文件> 6
9、pwd 列出当前所在的目录位置 6
10、more <文件名> 查看文件的内容 6
11、chmod 改变文件或目录的读、写、执行的允许权限 7
12、chown 改变文件或目录的所有权 7
13、chgrp 改变文件或目录的工作组所有权 8
14、date 相当于DOS的date 8
15、su <用户名> 9
16、passwd 更改用户口令 9
17、exit 退出终端操作 9
18、shutdown 超级用户root才有权执行,关闭Solaris操作系统 9
19、find 搜索指定目录下要找的文件,找到后给出文件的路径 9
20、vi 10
21、echo 显示环境变量用 20
22、ping 测试网络通断情况。 20
23、ftp 本地工作站与远端工作站之间文件传输 21
24、telnet ip_address 远程登录命令,在工作站和PC机中都有 22
25、ps 查看系统的进程 22
26、kill 杀掉操作系统中的进程 23
27、tar 把多个文件或目录打包成一个文件,或者把已经打包的文件展开 23
28、compress 把文件压缩成后缀为.Z的压缩文件 23
29、uncompress 把后缀为.Z的压缩文件解压缩 23
30、df -k 查看各文件系统剩余的空间,-k说明单位是千字节(kb) 23

SOLARIS操作系统常用命令
SOLARIS操作系统中区分大小写字母,要注意输入系统的字符的大小写是正确的.在图形界面的CDE环境下,用鼠标的左键可以选定终端中的一个单词或一行字符,用鼠标的中键可以把选定的内容复制到光标当前的位置,十分方便.
1、man <要查的命令名字>
给出要查命令所有选项的含义,以及命令的详细说明.
2、ls 相当于DOS的dir
它的常用选项有-l(显示文件的详细信息),-a(显示包括隐含文件在内),-R(recursive,显示子目录中所有的文件和子目录),-t(依照文件最后修改时间的顺序列出文件名).例如:ls 列出目前目录下的文件名。
ls -a 列出包含以.起始的隐藏文件在内的所有文件名。
ls -t 依照文件最后修改时间的顺序,依序列出文件名。
ls -l 列出目录下所有文件的许可权、拥有者、文件大小、修改时间及名称。
ls -R 显示出目录下,以及其所有子目录的文件名。
内容很多一屏显示不完时,可用管道符连接more命令,每显示一屏暂停,按空格键继续.如: ls -altR | more
注意:
ls rms*.* 将列出rms.ini这类中间带"."的文件,而不会列出rms这类不带"."的文件,用ls rms* 可以把带"."和不带"."的文件都列出
3、clear 相当于DOS的cls,清除屏幕上的内容
4、mkdir <目录名> 相当于DOS的md,新建一个目录
5、cd <目录名>
相当于DOS的cd,和DOS的cd不一样的是,只输入cd将回到HOME目录.
6、rm <文件名>
相当于DOS的del,支持通配符*和?,例如rm file*, 为了不误删除想要的文件,在用通配符删除之前,先用ls file* 看看是否列出的文件都需要删除.要注意,用命令行删除的文件是无法恢复的,Unix操作系统因为多用户的原因,无法提供DOS下的undelete命令.如果在Solaris的CDE环境下,扔到垃圾箱里的文件是可以恢复的,因为扔到垃圾箱里的文件并没有被真正删除.
rm -r <目录名>
相当于DOS的deltree,小心使用.例如:rm file1 删除文件名为 file1 的文件。
rm file? 删除文件名中有五个字符,前四个字符为file 的所有文件。
rm f* 删除文件名中以 f 开头的所有文件。
7、cp <源文件> <目的文件>
相当于DOS的copy,和DOS的copy不一样的是,必须指定源文件名和目的文件名.cp -r <源文件> <目的文件> 相当于DOS的xcopy,带子目录的拷贝.例如:cp file1 file2 将文件 file1 复制成 file2
cp file1 dir1 将文件 file1 复制到目录 dir1 下,文件名仍为 file1.
cp /tmp/file1 . 将目录 /tmp 下的文件 file1 复制到当前目录下,文件名仍为 file1。
cp /tmp/file1 file2 将目录 /tmp 下的文件 file1 复制到现行目录下,文件名为 file2
cp -r dir1 dir2 复制整个目录。若目录 dir2 已经存在,则将目录 dir1,及其所有文件和子目录,复制到目录 dir2 下,新目录名称为 dir1,即dir2/dir1。若目录 dir2 不存在,则将dir1,及其所有文件和子目录,复制为目录 dir2。
8、mv <源文件> <目的文件>
相当于DOS的move,常用来给文件换名.例如:mv file1 file2 将文件 file1,更改文件名为 file2。
mv file1 dir1 将文件 file1,移到目录 dir1 下,文件名仍为 file1。
mv dir1 dir2 若目录 dir2 已经存在,则将目录 dir1,及其所有文件和子目录,移到目录 dir2 下,新目录名称为 dir1,即dir2/dir1。若目录 dir2 不存在,则将dir1更改为目录 dir2。
9、pwd 列出当前所在的目录位置
10、more <文件名> 查看文件的内容
显示满一屏就暂停,按空格键翻到下一页,按回车键看下一行。其它命令的输出太多来不及细看时,常通过管道操作符"|"输出到more来分屏显示输出内容。
例如:
more file1  以分页方式,查看文件名 file1 的内容。
ls -l | more 把ls -l的输出通过管道符输出到more来分屏显示输出内容。
11、chmod 改变文件或目录的读、写、执行的允许权限
格式:chmod [-R] mode name
name 可为文件名或目录名;mode可为 3 个 0-7 的数字,或利用ls -l 命令,列出
文件或目录的读、写、执行允许权的文字缩写。)
mode : rwx rwx rwx r:read w:write x:execute
user group other
缩写 : (u) (g) (o)
例如:
%chmod 755 dir1 把目录dir1设定成任何使用者,都能读取和执行,但只有所有者可做修改。
%chmod 700 file1 把文件file1设定只有所有者可以读、写和执行。
%chmod u+x file2 把文件file2增加所有者可以执行的权利。
%chmod g+x file3 把文件file3增加工作组使用者可执行的权利。
%chmod o-r file4 把文件file4除去其它使用者可读取的权利。
12、chown 改变文件或目录的所有权
格式:chown [-R] username name
name 可以是文件名或目录名。
例如:
%chown user file1
将文件 file1 的所有权,改为使用者 user 所有。
%chown -R user dir1
将目录 dir1,及其下所有文件和子目录的所有权,改为使用者 user 所有。
13、chgrp 改变文件或目录的工作组所有权
格式:chgrp [-R] groupname name
name 可为文件名或目录名
例如:
%chgrp sbsrms file1
将文件 file1 的工作组所有权,改为 sbsrms 工作组。
%chgrp -R bin dir1
将目录dir1,及其下所有文件和子目录,改为 bin 工作组。

14、date 相当于DOS的date
只输入date就显示当前的工作站时间,如果有root超级用户权限,加上参数可以修改 工作站的时间。
格式:date mmddHHMM[cc]yy
mm–月份,dd–日期,HH–小时,MM–分钟,cc–世纪(可选),yy–年份
例如:
#date 1023153098 将把工作站系统时间改为1998年10月23日15点30分
15、su <用户名>
改变自己的用户名进入其他使用者的帐号,拥有其使用权利。不指明用户名,就进入root超级用户。
例如:
%su user 进入使用者 user 的帐号
passwrod: 输入使用者 user 的密码
16、passwd 更改用户口令
例如:
%passwd rms 更改用户rms的口令
17、exit 退出终端操作
18、shutdown 超级用户root才有权执行,关闭Solaris操作系统
例如:
#/usr/sbin/shutdown -y -g0 -i0 输入绝对路径,以保证是执行关闭系统的shutdown程序
19、find 搜索指定目录下要找的文件,找到后给出文件的路径
格式:find search-path -name filename -print
例如:
%find / -name file1 -print ( 从根目录开始寻找 file1文件,并给出它的路径。)
20、vi
vi是在工作站上广泛使用的编辑软件。对初学者而言,
常因其特殊的使用方法,而不得其门而入;对已经在使用 vi 的使用者来说,也
常见因对 vi 的不熟悉或不够了解,而无法发挥出 vi 强大的编辑能力,以下将
简单介绍 vi 的使用方法。不必死记硬背,多实际操作几次就能记住常用的命令。
进入vi
直接执行 vi编辑程序即可:
%vi test
此刻屏幕上会出现 vi 的编辑屏幕,同时 vi 会将文件复制一份至内存中的缓冲区 (buffer) 。 vi会保留在硬盘中的文件不变,而先对缓冲区的文件作编辑,编辑完成后,使用者可决定是否要取代原来旧有的文件。
离开vi
若在输入模式下,则先利用《ESC》进入指令模式,而后即可选用下列指令
离开vi。
:q! 离开vi,并放弃刚在缓冲区内编辑的内容。
:wq 将缓冲区内的资料写入硬盘中,并离开vi。
:ZZ 同wq。
:x 同wq。
:w 将缓冲区内的资料写入硬盘中,但并不离开vi。
:q 离开vi,若文件被修改过,则会被要求确认是否放弃修改的内容。
此指令可与:w 配合使用。

vi 的操作模式

vi 提供两种操作模式:输入模式(insert mode)和指令模式(command mode)
。当使用者进入 vi 后,即处在指令模式下,此刻键入的任何字符都被视为
指令。在此模式下可进行删除、修改等动作。若要输入资料,则需进入输入
模式。

输入模式

如何进入输入模式
a (append) 由光标之后加入资料。
A 由该行之末加入资料。
i (insert) 由光标之前加入资料。
I 由该行之首加入资料。
o (open) 新增一行于该行之下以供输入资料。
O 新增一行于该行之上以供输入资料。

如何离开输入模式
《ESC》 结束输入模式。

指令模式

光标的移动
h 向左移一个字符。
j 向上移一个字符。
k 向下移一个字符。
l 向右移一个字符。
0 移至该行之首
 $ 移至该行之末。
^ 移至该行的第一个字符处。
H 移至屏幕的第一列。
M 移至屏幕的中间那列。
L 移至屏幕的最后一列。
G 移至该文件的最后一列。
+ 移至下一列的第一个字符处。
- 移至上一列的第一个字符处。
( 移至该句之首。 (注一)
) 移至该句之末。
{ 移至该段落之首。 (注二)
} 移至该段落之末。
nG 移至该文件的第 n 列。
n+ 移至光标所在位置之后的第 n 列。
n- 移至光标所在位置之前的第 n 列。
<Ctrl><g> 会显示该行的行号、文件名称、文件中最末行的行号、光标
所在行号占总行号的百分比。

注一:句子(sentence)在vi中是指以『!』、『.』或『?』结束的一串字。
注二:段落(paragraph)在vi中是指以空白行隔开的文字。

屏幕的移动

<Ctrl><f> 屏幕往下卷一页。
<Ctrl> 屏幕往上卷一页。
<Ctrl><d> 屏幕往下卷半页。
<Ctrl> 屏幕往上卷半页。
<Ctrl><e> 屏幕往下卷一行。
<Ctrl><y> 屏幕往上卷一行。

删除、复制及修改指令介绍 (此单元较少使用)

d(delete)、c(change)和y(yank)这一类的指令在 vi 中的指令格式为:
Operator + Scope = command
(运算子) (范围)
运算子:
d 删除指令。删除资料,但会将删除资料复制到内存缓冲区。
y 将资料(字组、行列、句子或段落)复制到缓冲区。
p 放置(put)指令,与 d 和 y 配和使用。可将最后delete或yank的资
料放置于光标所在位置的行列下。
c 修改(change)指令,类似delete与insert的组合。删除一个词组、句
子等的资料,并插入新输入的资料。

范围:
e 由光标所在位置至该字符串的最后一个字符。
w 由光标所在位置至下一个字符串的第一个字符。
b 由光标所在位置至前一个字符串的第一个字符。
 $ 由光标所在位置至该行的最后一个字符。
0 由光标所在位置至该行的第一个字符。
) 由光标所在位置至下一个句子的第一个字符。
( 由光标所在位置至该句子的第一个字符。
{ 由光标所在位置至该段落的最后一个字符。
} 由光标所在位置至该段落的第一个字符。

整行动作
dd 删除整行。
D 以行为单位,删除光标后的所有字符。
cc 修改整行的内容。
yy yank整行,使光标所在该行复制到内存缓冲区。

删除与修改

x 删除光标所在该字符。
X 删除光标所在之前一字符。
dd 删除光标所在该行。
r 用接于此指令之后的字符取代(replace)光标所在字符。
如: ra 将光标所在字符以 a 取代之。
R 进入取代状态,直到《ESC》为止。
s 删除光标所在的字符,并进入输入模式直到《ESC》。
S 删除光标所在的该行资料,并进入输入模式直到《ESC》。

移动与复制

利用 delete 及 put 指令可完成资料移动的目的。
利用 yank 及 put 指令可完成资料复制的目的。
yank 和 delete 可将指定的资料复制到内存缓冲区,而通过 put 指令
可将缓冲区内的资料复制到屏幕上。
例:
移动一行 .在该行执行 dd
.光标移至目的地
.执行 p
复制一行 .在该行执行 yy
.光标移至目的地
.执行 p

指令重复

在指令模式中,可在指令前面加入一数字 n,则此指令动作会重复执行 n
次。
例:
删除10行 .10dd
复制10行 .10yy
.光标移至目的地
.p
指标往下移10行 .10j

取消前一动作(Undo)

即复原执行上一指令前的内容。

u 恢复最后一个指令之前的结果。
U 恢复光标该行的所有改变。

查找

在vi中可查找某一字符串,使光标移至该处。

/字符串 往光标之后寻找该字符串。
?字符串 往光标之前寻找该字符串。
n 往下继续寻找下一个相同的字符串。
N 往上继续寻找下一个相同的字符串。

资料的连接

J 句子的连接。将光标所在的下一行连接至光标该行的后面。

若某行资料太长亦可将其分成两行,只要将光标移至分开点,进入输入模式
(可利用 a、i等指令)再按《Enter》即可。

环境的设定

:set nu 设定资料的行号。
:set nonu 取消行号设定。
:set ai 自动内缩。
:set noai 取消自动内缩。

自动内缩(automatic indentation)
在编辑文件或程序时,有时会遇到需要内缩的状况,『:set ai』即提供自
动内缩的功能,用下例解释:
.vi test
.(进入编辑屏幕后)
this is the test for auto indent
《Tab》start indent ← :set ai (设自动内缩)
《Tab》data
《Tab》data
《Tab》data ← :set noai (取消自动内缩)
the end of auto indent.
.注:<Ctrl><d> 可删除《Tab》字符。

ex指令

读写资料
:w 将缓冲区的资料写入硬盘中。
:10,20w test 将第10行至第20行的资料写入test文件。
:10,20w>>test 将第10行至第20行的资料加在test文件之后。
:r test 将test文件的资料读入编辑缓冲区的最后。

删除、复制及移动
:10,20d 删除第10行至第20行的资料。
:10d 删除第10行的资料。
:%d 删除整个编辑缓冲区。
:10,20co30 将第10行至第20行的资料复制至第30行之后。
:10,20mo30 将第10行至第20行的资料移动至第30行之后。

字符串搜寻与取代
s(substitute)指令可查找某行列范围。
g(global)指令则可查找整个编辑缓冲区的资料。
s指令以第一个满足该条件的字符串为其取代的对象,若该行有数个满足该条
件的字符串,也仅能取代第一个,若想取代所有的字符串则需加上g参数。
:1, $s/old/new/g 将文件中所有的『old』改成『new』。
:10,20s/^/ / 将第10行至第20行资料的最前面插入5个空白。
:%s/old/new/g 将编辑缓冲区中所有的『old』改成『new』。

恢复编辑时被中断的文件

在编辑过程中,若系统当掉或连线中断,而缓冲区的资料并还未
被写回硬盘时,当再次回到系统,执行下列指令即可回复中断前
的文件内容。
%vi -r filename

编辑多个文件

vi还提供同时编辑多个文件的功能,方法如下:
%vi file1 file2 ..

当第一个文件编辑完成后,可利用『:w』将该缓冲区存档,而后
再利用 『:n』载入下一个文件。
21、echo 显示环境变量用
例如:
%echo  $RMSROOT 显示环境变量RMSROOT的值
22、ping 测试网络通断情况。
格式:ping ip_address
例如:ping 129.9.123.45
23、ftp 本地工作站与远端工作站之间文件传输
必须拥有远端工作站的帐号及密码,才可进行传输工作 。
格式: ftp hostname or ftp ip_address
例如 :
ftp 129.9.123.45 与远端工作站 129.9.123.45 ,进行文件传输
Name (129.9.123.45:user-name) : 输入帐号
Password (129.9.123.45:user-name): 输入密码

!为执行外部操作系统的命令。
ftp> help 列出 ftp 文件传输,可使用的任何命令。
ftp> !ls 列出本地工作站,目前目录下的所有文件名。
ftp> !pwd 列出本地工作站,目前所在的工作目录位置。
ftp> ls 列出远端工作站目前目录下的所有文件名。
ftp> dir 列出远端工作站目前目录下的所有文件名(略同于 UNIX 的 ls -l 指令).
ftp> pwd 列出远端工作站目前所在的目录位置。
ftp> cd dir1 更改远端工作站的工作目录位置至 dir1 下。
ftp> get file1 将远端工作站的文件 file1 ,拷贝到本地工作站中。
ftp> put file2 将本地工作站的文件 file2 ,拷贝到远端工作站中。
ftp> mget *.c 将远端工作站中,文件名后缀为 c 的所有文件,拷贝到本地工作站中。
ftp> mput *.txt 将本地工作站中,文件名后缀为 txt 的所有文件,拷贝到远端工作站中。
ftp> bin 以二进制方式传输文件,切记在传送可执行文件时要先执行此命令。
可以将ASCII文件按二进制方式传输,但决不能将二进制文件按ASCII方式传输,否则二进制文件的内容会遭到破坏而无法使用。
ftp> asc 以ASCII方式传输文件,只在传输ASCII文件时用,特别是在DOS和Solaris之间传输时用。
ftp> prompt 使用 mput/mget 时不用每个文件皆询问yes/no
ftp> quit 结束 ftp 工作。
ftp> bye 结束 ftp 工作,和quit一样。
注: 从PC到工作站间的文件传输也可在 PC端WIN95下的 FTP命令进行文件传输,用法与
上所述大致相同。
24、telnet ip_address 远程登录命令,在工作站和PC机中都有
例如:
%telnet 129.9.123.45
25、ps 查看系统的进程
格式:ps [-euf...]
例如:
%ps -u rms   (查看系统中,用户rms的 process。)
%ps -ef   (查看系统中,包含系统内部,及所有用户的进程。)
26、kill 杀掉操作系统中的进程
一般先用ps命令先查看进程的ID号,再用kill。如果kill杀不掉,可再加参数-9,说明为强制杀掉。
例如:
%kill -9 1234 这里1234是假设的进程号。
27、tar 把多个文件或目录打包成一个文件,或者把已经打包的文件展开
例如:
%tar cvf RMS RMStar 把目录打包成一个文件
%tar xvf RMStar 把打包的文件展开。
28、compress 把文件压缩成后缀为.Z的压缩文件
例如:
%compress RMStar
29、uncompress 把后缀为.Z的压缩文件解压缩
例如:
%uncompress RMStar.Z
30、df -k 查看各文件系统剩余的空间,-k说明单位是千字节(kb)

No Comments

配置linux的防火墙

一般而言,防火墙的两个网络接口应分属两个不同的网络,根据系统管理员定义的访问规则 在两个接口之间转发数据包,或者拒绝、丢弃数据包。实际上,防火墙不单单是访问控制的功能,而且还充当了路由器的角色。当然,这并非有什么不妥当的地方, 但是当你企图把你配置好的linux防 火墙放入运行网络,来保护现有系统安全的时候,你不得不重新考虑和更改你的网络架构。另外一个可能的麻烦是,当防火 墙发生意外时,如果没有防火墙的硬件备份的话,那么你将面临巨大的心理压力,因为防火墙的故障,整个网络瘫痪了。假如你把防火墙配置成透明模式(可称为伪 网桥),就无需更改网络架构,即使是防火墙不能工作了,要做的仅仅是拔出网线,把网线直接插在路由器的内部接口就可以让网络正常工作,然后你就有时间慢慢 恢复发生故障的防火墙。

  好了,既然透明防火墙有那么多方便,我们赶快动手来配置吧!准备一台pc机,两块网 卡(建议用3com网卡),网线若干,redhat linux 9安装盘一套。打开机箱,把两块网卡插入计算机的pci插槽,用网线把计算机分别与网关和交换机相连(如前页图正常状态那样);盖上计算机的盖子,插 上电源,开机。在光驱里放上Linux 9安装光盘,由光盘引导计算机,从而安装Linux 系统。选择定制安装,不要保守,多花一点时间体验一下图形界面的安装乐趣,取消防火墙(no firewall),在安装快结束时选择以文本方式登录系统,完成安装。

  透明防火墙功能配置:

  1、设置网络地址。修改文件 /etc/sysconfig/network-scripts/ifcfg-eth0 /etc/sysconfig/network-scripts/ifcfg-eth1,使其具有相同的ip地址,相同的子网掩码。

  用vi 来编辑如下,保存文件,运行命令 service network restart 使修改生效。

DEVICE=eth0
BOOTPROTO=none
BROADCAST=192.168.1.255
IPADDR=192.168.1.254
NETMASK=255.255.255.0
NETWORK=192.168.1.0
ONBOOT=yes
USERCTL=no
PEERDNS=no
TYPE=Ethernet DEVICE=eth1
BOOTPROTO=none
BROADCAST=192.168.1.255
IPADDR=192.168.1.254
NETMASK=255.255.255.0
NETWORK=192.168.1.0
ONBOOT=yes
USERCTL=no
PEERDNS=no
TYPE=Ethernet

  这里需要注意两个地方,第一个是要区分清楚那一个网卡是eth0,那一个是 eth1.这个问题十分关键,如果搞混了就会导致防火墙不能连通网络。至于怎样区分eth0 eth1,我将在文章的末尾作简单的描述。在这里假定与路由器相连的网卡是eth0.

  2、设置默认路由。在文件 /etc/sysconfig/network-scripts/ifcfg-eth0 中加入一行 gateway=192.168.1.1 保存后运行命令 service network restart ,修改生效。找一个开放ICMP协议的公网IP,用命令ping 202.108.36.196 www.163.com 的主机)检测跟外网的连通状况,如果正常,表明Linux防火墙主机跟外网配置正确。再用命令ping 192.168.1.18 检测防火墙主机与内网主机的连通状况,如果正常则进行下一步操作。

  3、启用网络转发和proxy_arp 。这是透明防火墙的核心部分,我把它们写进文件/etc/rc.d/rc.local。用vi /etc/rc.d/rc.local 插入如下内容。

#Ip forward
/sbin/sysctl -w net.ipv4.conf.all.forwarding=1

#Enable proxy-arp
/sbin/sysctl -w net.ipv4.conf.eth0.proxy_arp=1
/sbin/sysctl -w net.ipv4.conf.eth1.proxy_arp=1

  在做这一步的时候,我曾经花费较多的时间,因为我做参考的那本书里的这一步没有参数 “–w” ,后来单独运行 sysctl net.ipv4.conf.eth0.proxy_arp=1 才发现red hat Linux 9 没有参数“-w”不能运行。

  4、 指定路由。由于两块网卡(eth0eth1)使用同样的ip ,如果不专门指定转发路径,一定会导致路由混乱,从而使防火墙以内的计算机没法访问 Internet 。还是用命令 vi 修改文件 /etc/rc.d/rc.local ,插入如下几行。

#Define route
/sbin/ip route del 192.168.1.0/24 dev eth0
/sbin/ip route add 192.168.1.1 dev eth0
/sbin/ip route add 192.168.1.0/24 dev eth1

  保存文件,重新启动计算机/Linux防火墙,如果不出意外,就可以从 192.168.1.18 这台主机访问Internet,当然内网的任何机器都是可以访问Internet 的。在这里对定义的路由(Define route)作些说明:/sbin/ip route del 192.168.1.0/24 dev eth0 表明所有到子网192.168.1.0/24的数据包都不从网卡eth0转发而从 eth1转发,即命令 /sbin/ip route add 192.168.1.0/24 dev eth1/sbin/ip route add 192.168.1.1 dev eth0 表明所有到192.168.1.1的数据包都由eth0转发,这其实可以理解为两个网卡数据转发的分工192.168.1.1 的数据包由eth0负责,其余的由eth1负责。到这一步,恭喜你!已经成功了一大半,如果安装Linux的时候,选择的防火墙规则为中等级别,那么这个 防火墙已经配置成功了。相信大家跟我一样,且肯就此罢休。

  定制防火墙策略

  都是2.4.20的内核版本,当然要用netfilter/iptables。由于安装Linux系统的时候,选择了无防火墙这个选项,那么在/etc/sysconfig 下将没有iptables这个文件存在。还是让我们随心所欲的来定制防火墙访问策略吧。

  在目录 /etc/rc.d 下创建脚本文件 myfirewall.sh,用命令 touch /etc/rc.d/myfirewall.sh并给文件执行权限 chmod 711 myfirewall。然后用 vi 编辑这个文件。

vi /etc/rc.d/myfirewall.sh
#!/bin/bash
#Define string
IPT=/sbin/iptables

#Refresh rules
$IPT -F FORWARD
$IPT -F INPUT
$IPT -F OUTPUT

#Default policy
$IPT -P INPUT DROP
$IPT -P FORWARD DROP
$IPT -P OUTPUT ACCEPT

#Enable loopback
$IPT -A INPUT -i lo -p all -j ACCEPT

#Enable icmp
$IPT -A INPUT -p icmp –j ACCEPT

#Interface forward
$IPT -A FORWARD -s 192.168.1.0/24 -j ACCEPT
$IPT -A FORWARD -d 192.168.1.0/24 -j ACCEPT

#Enable ssh
$IPT -A INPUT -p tcp –dport 22 -j ACCEPT

#Add other access rule //可根据实际情况添加或减少规则
$IPT -A INPUT -p tcp –dport 20 -j ACCEPT
$IPT -A INPUT -p tcp –dport 21 -j ACCEPT
$IPT -A INPUT -p tcp –dport 80 -j ACCEPT
$IPT -A INPUT -p tcp –dport 53 -j ACCEPT
$$IPT -A INPUT -p udp –dport 53 -j ACCEPT
$IPT -A INPUT -p tcp –dport 23 -j ACCEPT
$IPT -A INPUT -p tcp –dport 110 -j ACCEPT
$IPT -A INPUT -p tcp –dport 25 -j ACCEPT
$IPT -A INPUT -p tcp –dport 443 -j ACCEPT

  我写的这个规则只开放了较少的允许访问的策略(可以ping ,收发邮件,浏览网页,sshhttpstelnetftp,其它的访问则全部丢弃)。$IPT –A OUTPUT ACCEPT 没有设置成DROP的原因是由于大部分网络服务所使用的协议是tcp协议,众所周知,tcp协议是面向连接的,如果设置 $IPT –A OUTPUT DROP, 那么任何协议为tcp的连接就要写两条了。况且防火墙对外的访问总是允许的,因此这样做是为了简化规则。

  修改完成后保存,然后在当前目录运行命令 ./myfirewall.sh,在上述脚本没有书写错误的情况下,规则生效,但它仅仅在内存里,用命令 service iptables save 将自动生成文件 /etc/sysconfig/iptables,前面设定的访问策略就被保存到硬盘,系统重启时,系统将自动地从文件 /etc/sysconfig/iptables 获得定制的访问策略。

  到这里,一个透明的linux 防火墙就架设好了。更改计算机的BIOS设置,使它可以在没有键盘的情况下启动系统。启用ftp,以便可以在需要时可以向防火墙主机拷贝文件。把键盘和显示器拿掉,剩下的操作只是摁一下电源开关。

  防火墙的管理

  可能有时候我们需要更改防火墙的某些规则,或者做些别的管理,既然我们是系统管理 员,再插上键盘和接上显示器坐在防火墙面前可能会被人耻笑,因此这些管理工作当然通过网络来进行。Sshwebmin是我的偏好,ssh的协议端口是 22webmin的默认协议端口是10000。其中sshlinux系统的默认服务 ,只要安装客户端就可以(windows下的程序securecrt 是个不错的选择,据说ssh连接速度没有vnc 快)对防火墙进行所有的管理(和直接操作防火墙主机一样);webmin是基于web的图形界面管理方式,非常的方便和直观,尽管它不能象ssh那样对系 统进行完全的管理,但是对于我们的工作需求还是可以满足,建议在防火墙系统安装webmin服务器程序。Sshwebmin两者结合使用,可以帮助我们 较快较深入地掌握Linux

  Ssh客户端安装较为简单,而webmin不需要安装客户端。这里介绍webmin 服务器的安装:把webmin-1.110. tar.gz 下载到另外一台windows的硬盘里,然后用ftp把它复制到防火墙主机的ftp目录(如果你是linux高手,并不需要如此,只须以ssh方式登录防 火墙,用get/wget指令取得该文件),解开文件webmin-1.110.tar.gz tar –zxvf webmin-1.110.gz.tzr cd webmin-1.110 安装webmin ./setup.sh ,一路回车,创建一个webmin管理账户,安装完毕;在任何一台运行浏览器的地址栏输入防火墙的ip加上端口号10000就可以管理防火墙(http: //192.168.1.254:10000)

  以这种方式管理linux 网络的防火墙十分直观,并且选项十分详尽,就算不懂iptable语法的人也能容易的配置防火墙的访问规则。这里有一个技巧,假如你更改了某条访问规则导 致网络不能向外访问,不要慌,到防火墙跟前重启一下系统即可。万一更改规则发生不测并且规则已经写入硬盘,那么请你直接删除文件 /etc/sysconfig/iptables,然后再运行脚本 sh /etc/rc.d/myfirewall 再次重写文件/etc/sysconfig/iptables service iptables save 。有的系统管理员倾向于直接编辑/etc/sysconfig/iptables 文件,但是这需要更多的耐心和勇气。如果你是新手,建议你跟我一样,先写脚本,再生成iptables

  特别关注:

  最好把除路由器而外的整个网络放在防火墙的保护之中。如果象下图那样有同一

  网段的主机放在防火墙的前面,将导致严重的网络故障。实践表明,这台windows 主机的ip地址丢失了(网络属性的ip值还在,但用命令 ipconfig /all 则是 0.0.0.0),重启windows后提示ip地址冲突,更换同一网段内的任何一个未用的ip地址还是提示冲突。搞的我的两台邮件服务器和两台web服 务器停火,我还以为是中了邪门的病毒,直到后来我把tcp/ip协议卸载再安装才解决问题。经分析,是防火墙的路由导致这样的故障。强烈建议把所有的主机 放在防火墙的保护之下,以减少网络的复杂程度。另外,我们应该养成这样一种习惯在系统正常的情况下,如果更改了配置,请一定要用笔记录所作的更改,以便 在改出问题时我们能够快速准确的恢复,这种习惯更可运用到所有的IT管理工作,它是我的不传之密。

  附:区分eth0eth1的小技巧。把防火墙的一块网卡跟交换机相连,另外一块不 做任何连接,即另外一块网卡的网络连接是断开的;使用命令 ifconfig eth0 down 关闭网络接口eth0;用网络中的另一台计算机 ping 192.168.1.254 ,如果ping 通了则表明连接交换机的网络接口为eth1,另一块为eth0,还可以把网线交换一下另一网络接口,确认判断的正确性。

,

No Comments

在2.6内核下不编译内核给iptables添加模块

虽然是个不错的方法,而且进行的非常成功,但总觉得有点绕道的感觉,毕竟编译新的内核花费不了太多的时间。主要供不能重启的服务器作参考。

1,安装kernel源码
[root@jiecho]# yum install kernel-source

2,下载iptables-1.3.3.tar.bz2和patch-o-matic-ng-20050810.tar.bz2并解包,为了方便,我们都放在/usr/src下,
并把kernel和iptables做符号链接.
[root@jiecho]# cd /usr/src
[root@jiecho]# wget ftp://ftp.be.netfilter.org/pub/netfilter/iptables/iptables-1.3.3.tar.bz2
[root@jiecho]# wget ftp://ftp.be.netfilter.org/pub/netfilter/patch-o-matic-ng/snapshot/
patch-o-matic-ng-20050810.tar.bz2
[root@jiecho]# tar -jxvf iptables-1.3.3.tar.bz2
[root@jiecho]# tar -jxvf patch-o-matic-ng-20050810.tar.bz2
[root@jiecho]# ln -s linux-2.6.5-1.358 linux
[root@jiecho]# ln -s iptables-1.3.3 iptables

3,给netfilter打补丁,选择你要的模块,为了测试我就选择了ipp2p和time
[root@jiecho]# cd /usr/src/linux
[root@jiecho]# make mrproper
[root@jiecho]# make menuconfig
什么不做,保存退出,然后把Makefile改一下
[root@jiecho]# vi Makefile
把EXTRAVERSION = -1.358custom更改为EXTRAVERSION = -1.358
保持跟uname -a 的版本一致(可详细参考platinum兄弟的文章)
[root@jiecho]# cd /usr/src/patch-o-matic-ng-20050810
[root@jiecho]# ./runme ipp2p
[root@jiecho]# ./runme time
因为事先做好了符号链接,等问你kernel和iptables的位置的时候直接回车就行,
提示你是否添加ipp2p和time模块是就y确定,至此,netfilter的补丁打完了,如果你需要别的模块可以根据需要加上.

4,编译kernel的modules
[root@jiecho]# cd /usr/src/linux
[root@jiecho]# make menuconfig
在Device Drivers->Networking support->Networking options->Network packet filtering (replaces ipchains)
->IP: Netfilter Configuration中把下面的两项M选中.
TIME match support
IPP2P match support
然后保存退出
4,编译安装模块
下面就是最重要的步骤了,因为我们的原则是节省时间,不重新编译内核,而只编译其中的模块,
这点2.4的内核跟2.6的内核有所不同,郁闷了我一整天,2.4内核的模块是以*.o形式的,而2.6内核是以*.ko形式的,
这有个改变的方法,参考:http://blog.chinaunix.net/article.php?articleId=40742&blogId=2662
[root@jiecho]# make modules
HOSTCC scripts/basic/fixdep
HOSTCC scripts/basic/split-include
HOSTCC scripts/basic/docproc
HOSTCC scripts/conmakehash
HOSTCC scripts/kallsyms
CC scripts/empty.o
HOSTCC scripts/mk_elfconfig
MKELF scripts/elfconfig.h
HOSTCC scripts/file2alias.o
HOSTCC scripts/modpost.o
HOSTCC scripts/sumversion.o
HOSTLD scripts/modpost
HOSTCC scripts/pnmtologo
HOSTCC scripts/bin2c
到这里就可以ctrl+c中止了,因为我们不是要编译所有的模块,这样太浪费时间,而仅仅是netfilter的模块,
但是如果你直接执行make modules SUBDIRS=net/ipv4/netfilter就会出错,这就是2.4和2.6的区别,
我们先生成了scripts目录下的一系列需要的文件后就可以make modules SUBDIRS=net/ipv4/netfilter,
并用modpost等等把*.o文件生成为*.ko文件.
[root@jiecho]# make modules SUBDIRS=net/ipv4/netfilter
编译完成netfilter的模块后拷贝编译完成的模块
[root@jiecho]# cp /usr/src/linux/net/ipv4/netfilter/ipt_ipp2p.ko /lib/modules/2.6.5-1.358/kernel/net/ipv4/netfilter/
[root@jiecho]# cp /usr/src/linux/net/ipv4/netfilter/ipt_time.ko /lib/modules/2.6.5-1.358/kernel/net/ipv4/netfilter/
[root@jiecho]# chmod +x /lib/modules/2.6.5-1.358/kernel/net/ipv4/netfilter/ipt_ipp2p.ko
[root@jiecho]# chmod +x /lib/modules/2.6.5-1.358/kernel/net/ipv4/netfilter/ipt_time.ko
[root@jiecho]# depmod -a
5,编译iptables
[root@jiecho]# cd /usr/src/iptables
参照INSTALL文件我们进行编译安装
[root@jiecho]# make KERNEL_DIR=/usr/src/linux
会有错误编译不过
/usr/src/linux/include/linux/config.h:6:2: [root@jiecho]#error including kernel header in userspace; use the glibc headers instead!
我google了半天也没有找到是什么原因,就自己动手解决
[root@jiecho]# vi /usr/src/linux/include/linux/config.h把下面的三行注释掉
//#ifndef __KERNEL__
//#error including kernel header in userspace; use the glibc headers instead!
//#endif

然后重新编译安装
make KERNEL_DIR=/usr/src/linux
make install KERNEL_DIR=/usr/src/linux
完成安装以后测试一下
[root@jiecho]# iptables -V
[root@jiecho]# modprobe ipt_time
[root@jiecho]# modprobe ipt_ipp2p
[root@jiecho]# lsmod
ipt_time 2432 0
ipt_ipp2p 7552 0
ipt_REJECT 4736 1
ipt_state 1536 1
ip_conntrack 24968 1 ipt_state
iptable_filter 2048 1
ip_tables 13440 5 ipt_time,ipt_ipp2p,ipt_REJECT,ipt_state,iptable_filter
battery 6924 0
ipv6 184288 10
3c59x 30376 0
binfmt_misc 7176 1
nls_utf8 1536 4
ntfs 81516 4
dm_mod 33184 0
uhci_hcd 23708 0
button 4504 0
asus_acpi 8472 0
ac 3340 0
ext3 102376 4
jbd 40216 1 ext3
测试iptables
[root@jiecho]# iptables -A FORWARD -m ipp2p –edk –kazaa –bit -j DROP
[root@jiecho]# iptables -A INPUT -m time –timestart 8:00 –timestop 18:00 –days Mon,Tue,Wed,Thu,Fri
[root@jiecho]# iptalbes -L

,

No Comments