Linux如何配置网游服务器?

要建立一个安全的Linux服务器,首先要了解Linux环境下与网络服务相关的配置文件的含义,以及如何安全配置。在Linux系统中,TCP/IP网络是由几个文本文件构成的。也许你需要编辑这些文件来完成联网,但是这些配置文件大部分都可以通过配置命令linuxconf来实现(其中网络部分的配置可以通过netconf命令来实现)。下面描述了基本的TCP/IP网络配置文件。

*/etc/conf.modules文件

这个配置文件定义了启动时需要加载的各个模块的参数信息。本文主要讨论网卡的配置。在使用Linux作为网关的情况下,Linux服务器至少需要配置两块网卡。为了减少启动时可能出现的问题,Linux内核不会自动检测多个网卡。对于动态加载网卡驱动程序为模块而不是编译到内核的系统,如果需要安装多个网卡,应该在“conf.modules”文件中进行相应的配置。

如果把设备驱动编译成模块(内核模块):对于PCI设备,模块会自动检测系统上已经安装的所有设备;对于ISA卡,需要给模块提供IO地址,这样模块才能知道在哪里找卡。这一信息在“/etc/conf.modules”中提供。

例如,我们有两个带ISA总线的3c509卡,一个IO地址为0x300,另一个IO地址为0x320。编辑“conf.modules”文件,如下所示:

aliaseth03c509

aliaseth13c509

选项3c509io=0x300,0x320

这说明3c509的驱动要分别加载eth0或者eth1的名字(aliaseth0,eth1),还要加载参数io=0x300,0x320来通知驱动去哪里找网卡,其中0x是必不可少的。

对于PCI卡,只需要alias命令就可以将ethN与相应的驱动模块名称关联起来,PCI卡的IO地址就会被自动检测出来。对于PCI卡,编辑“conf.modules”文件,如下所示:

aliaseth03c905

aliaseth13c905

如果驱动程序已经编译到内核中,系统启动时的PCI检测程序会自动找到所有相关的网卡。ISA卡也可以被自动检测,但是在某些情况下,ISA卡仍然需要做以下配置工作:

通过LILO程序将启动参数信息传递给内核,在“/etc/LILO.conf”中添加配置信息。对于ISA卡,编辑“lilo.conf”文件并添加以下内容:

append="ether="0,0,eth0ether="0,0,eth1 "

注意:先不要在“lilo.conf”中添加启动参数,先测试您的ISA卡,如果失败,再使用启动参数。

如果传递了启动参数,eth0和eth1将按照启动时找到它们的顺序进行设置。

*/etc/HOSTNAME文件

该文件包含系统的主机名,包括完整的域名,如deep.openarch.com。

*/etc/sys config/network-scripts/if CFG-ethn文件

在RedHat中,系统网络设备的配置文件保存在“/etc/sysconfig/network-scripts”目录下,ifcfg-eth0包含第一块网卡的配置信息,ifcfg-eth1包含第二块网卡的配置信息。

以下是文件“/etc/sys config/network-scripts/if CFG-eth 0”的示例:

设备=eth0

IP addr = 208.164.186.1

网络掩码=255.255.255.0

网络=208.164.186.0

广播=208.164.186.255

ONBOOT =是

BOOTPROTO =无

USERCTL =否

如果您想要手动修改网络地址或向新接口添加新的网络接口,您可以通过修改相应的文件(ifcfg-ethN)或创建新文件来实现。

DEVICE=name name表示物理设备的名称。

Ipaddr = addaddr表示分配给卡的IP地址。

NETMASK=mask mask表示网络掩码。

Network = addaddr表示网络地址。

Broadcast = addaddr表示广播地址。

启动时=是/否是否在启动时激活卡?

无:不需要启动协议

Bootp:使用bootp协议

Dhcp:使用dhcp协议

user CTL = yes/no是否允许非超级用户控制设备?

*/etc/resolv.conf文件

该文件是域名解析器(根据主机名解析IP地址的库)使用的配置文件。例子如下:

searchopenarch.com

名称服务器208.164.186.1

名称服务器208.164.186.2

“searchdomainname.com”是指当提供不包含完整域名的主机名时,在主机名后面加上domainname.com的后缀;“名称服务器”是指解析域名时,该地址指定的主机是域名服务器。其中,域名服务器是按照它在文件中出现的顺序进行查询的。

*/etc/host.conf文件

该文件指定如何解析主机名。Linux通过解析器库获取主机名对应的IP地址。以下是“/etc/host.conf”的示例:

订单绑定,主机

多离子

奥斯普丰

“orderbind,hosts”指定主机名查询顺序,规定先用DNS解析域名,再查询“/etc/hosts”文件(反之亦然)。

“multion”指定“/etc/hosts”文件中指定的主机是否可以有多个地址。拥有多个IP地址的主机通常称为多宿主主机。

“nospoofon”表示此服务器不允许IP地址欺骗。IP欺骗是攻击系统安全的一种手段。它通过将IP地址伪装成其他计算机来获得其他计算机的信任。

*/etc/sysconfig/network文件

该文件用于指定服务器上的网络配置信息。下面是一个例子:

网络=是

RORWARD _ IPV4 =是

HOSTNAME=deep.openarch.com

加雷威=0.0.0.0

GATEWAYDEV=

网络=是/否是否配置了网络;

forward _ IP v4 = yes/no是否开启IP转发功能?

HOSTNAME=hostnamehostname表示服务器的主机名。

GAREWAY=gw-ip gw-ip表示网络网关的ip地址。

GAREWAYDEV=gw-dev gw-dw表示网关的设备名,如etho等。

注意:为了与旧软件兼容,“/etc/HOSTNAME”文件应该使用与HOSTNAME=hostname相同的主机名。

*/etc/hosts文件

当机器启动时,在可以查询DNS之前,机器需要查询主机名和IP地址之间的一些匹配。匹配信息存储在/etc/hosts文件中。如果没有域名服务器,系统上的所有网络程序都会查询该文件,以解析与主机名对应的IP地址。

以下是“/etc/hosts”文件的示例:

IP地址主机名别名

127.0.0.1本地主机Gate.openarch.com

208.164.186.1

………… ………… ………

最左边一列是主机IP信息,中间一列是主机名。任何后续列都是该主机的别名。配置好机器的网络配置文件后,应重新启动网络以使修改生效。使用以下命令重新启动网络:/etc/RC . d/init . d/network restart。

*/etc/inetd.conf文件

众所周知,作为服务器,开放的服务端口越多,越难保证系统的安全性和稳定性。因此,提供特定服务的服务器应尽可能开放提供服务必不可少的端口,关闭与服务器服务无关的服务。例如,作为www和ftp服务器的机器应该只打开80和25端口,关闭fingerauth等其他不相关的服务,以减少系统漏洞。

而inetd也叫“超级服务器”,是一个守护进程,它监控一些网络请求,它根据网络请求调用相应的服务进程来处理连接请求。Inetd.conf是Inetd的配置文件。inetd.conf文件告诉inetd要监听哪些网络端口,以及为每个端口启动哪个服务。在任何网络环境下使用Linux系统时,首先要知道服务器会提供什么服务。不需要的服务应该禁止,最好卸载,这样黑客攻击系统的机会就少了。检查文件“/etc/inetd.conf”以了解inetd提供了哪些服务。通过添加注释(在行首添加#符号),禁止任何不必要的服务,然后向inetd进程发送SIGHUP信号。

第一步:将文件的权限改为600。

[root @ deep]# chmod 600/etc/inetd . conf

步骤2:确保文件的所有者是root。

[root @ deep]# stat/etc/inetd . conf

第三步:编辑文件“inetd . conf”(VI/etc/inetd . conf),禁止所有不必要的服务,比如ftp、telnet、shell、login、exec、talk、ntalk、imap、pop-2、pop-3、finger、auth等等。如果你发现一些服务有用,你不必禁止它们。但是,如果这些服务被禁止,系统被攻击的可能性就会降低。更改后的“inetd.conf”文件的内容如下:

#Tore-readthisfileafterchanges,justdoa'killall-HUPinetd '

#

# echostreamtcpnowaitrootinterial

# echodgramudpwaitrootinternal

# discardstreamtcpnowaitrootinternal

# discarddgramudpwaitrootinterial

# daytimestreamtcpnowaitrootinternal

# daytimedgramudpwaitrootinternal

# chargenstreamtcpnowaitrootinternal

# chargendgramudpwaitrootinternal

# timestreamtcpnowaitrootinternal

#timedgramudpwaitrootinternal

#

#这些是标准服务。

#

# ftpstreamtcpnowaitroot/usr/sbin/tcpdin . ftpd-l-a

# telnetstreamtcpnowaitroot/usr/sbin/tcpdin . telnetd

#

#Shell,login,exec,comsatandtalkareBSDprotocols。

#

# shellstreamtcpnowaitroot/usr/sbin/tcpdin . rshd

# loginstreamtcpnowaitroot/usr/sbin/tcpdin . rlogind

# execstreamtcpnowaitroot/usr/sbin/tcpdin . rexecd

# comsatdgramudpwaitroot/usr/sbin/tcpdin . com sat

# talkdgramudpwaitroot/usr/sbin/tcpdin . talkd

# ntalkdgramudpwaitroot/usr/sbin/tcpdin . ntalkd

# dtalkstreatcpwaitnobody/usr/sbin/tcpdin . dtalkd

#

#Popandimapmailservicesetal

#

# pop-2 streamtcpnowaitroot/usr/sbin/tcpdipop2d

# pop-3 streamtcpnowaitroot/usr/sbin/tcpdipop3d

# imapstreamtcpnowaitroot/usr/sbin/tcpdimapd

#

# TheInternetUUCPservice。

#

# uucpstreamtcpnowaitucp/usr/sbin/tcpd/usr/lib/uucp/uu cico-l

#

# tftpserviceisprovidedpririlyforbooting。大多数网站

# runthisonlyonmachinescactingas“bootservers”Donotuncomment

#除非你*需要*它。

#

# tftpdgramudpwaitroot/usr/sbin/tcpdin . tftpd

# bootpsdgramudpwaitroot/usr/sbin/tcpdbootpd

#

#Finger,systatandnetstatgiveoutuserinformation which maybe

#有价值的潜在“系统黑客”多站点选择禁用

# someoralloftheservicestoimprove security。

#

# fingerstreamtcpnowaitroot/usr/sbin/tcpdin . fingerd

# cfingerstreamtcpnowaitroot/usr/sbin/tcpdin . cfingerd

# systatstreamtcpnowaitguest/usr/sbin/tcpd/bin/PS-au wwx

# netstatstreamtcpnowaitguest/usr/sbin/tcpd/bin/netstat-finet

#

#认证

#

# authstreamtcpnowaitnonover/usr/sbin/in . ident din . identd-l-e-o

#

#Endofinetd.conf

注意:更改文件“inetd.conf”后,不要忘记向inetd进程发送SIGHUP信号(kill all–hup inetd)。

[root @ deep/root]# kill all-HUPinetd

第四步:

为了保证“inetd.conf”文件的安全性,可以使用chattr命令使其不可变。使用以下命令使文件不可变:

[root @ deep]# chattr+I/etc/inetd . conf

这可以避免对“inetd.conf”文件的任何更改(意外或其他原因)。具有“I”属性的文件不能被更改:不能被删除或重命名,不能创建到该文件的链接,也不能将数据写入该文件。只有系统管理员可以设置和清除该属性。如果要更改inetd.conf文件,必须先清除不允许更改的标记:

[root @ deep]# chattr-I/etc/inetd . conf

但对于sendmail、named和www等服务,与finger和telnet不同,inet守护进程在请求到来时启动相应的进程提供服务,而在系统启动时作为守护进程运行。对于redhatlinux,提供了一个linuxconfig命令,可以用来在图形界面中交互设置启动时是否运行相关服务。还可以通过命令设置是否在启动时启动服务,比如[root @ deep]# chkconfig–level 35 named off。

具体命令请参考manchkconfig的说明。

*/etc/hosts.allow文件

但是对于telnet、ftp等业务,如果一起关闭,管理员需要远程管理会非常不方便。Linux提供了另一种更加灵活有效的方法来限制请求服务的用户,让可信用户在保证安全的基础上使用各种服务。Linux提供了一个名为TCPwrapper的程序。这个程序通常默认安装在大多数发行版中。使用TCPwrapper,您可以限制对上面提到的一些服务的访问。并且TCPwrapper的日志文件记录了所有访问您系统的尝试。通过最后一个命令查看程序的日志,管理员可以知道谁已经连接或试图连接到您的系统。

在/etc目录中,有两个文件:hosts.denyhosts.allow通过配置这两个文件,可以指定哪些计算机可以使用这些服务,哪些不可以。

当服务请求到达服务器时,TCPwrapper按以下顺序查询这两个文件,直到找到匹配项:

1.当/etc/hosts.allow中的项目与请求服务的主机的地址项目匹配时,则允许该主机获得该服务。

2.否则,如果/etc/hosts.deny中有一项与请求服务的主机的地址项匹配,则该主机将被禁止使用该服务。

3.如果相应的配置文件不存在,访问控制软件会将其视为空文件,因此可以通过删除或移除配置文件来清除所有设置。在文件中,空行或以#开头的行被忽略,可以通过在行前加#实现注释功能。

配置这两个文件是通过一个简单的访问控制语言实现的。访问控制语句的基本格式是:

程序名列表:主机名/IP地址列表。

程序名称列表指定提供相应服务的一个或多个程序的名称,用逗号或空格分隔。您可以在inetd.conf文件中查看提供相应服务的程序名:与上面的文件示例一样,telent所在行的最后一项是必需的程序名:in.telnetd。

主机名/IP地址列表指定允许或禁止使用该服务的一个或多个主机的身份,主机名用逗号或空格分隔。通配符既可以用于程序名,也可以用于主机地址,这样可以方便地指定多个服务和多个主机。

Linux提供了以下灵活的方法来指定进程或主机列表:

1.以“.”开头的域名字符串,如amms.ac.cn,则www.amms.ac.cn匹配此项。

2.如果IP字符串以“.”结尾是202.37.152,那么IP地址包括202.37.152的主机都匹配此项。

3.n.n.n.n/m.m.m.m的格式表示网络/掩码。如果请求服务的主机的IP地址和掩码的位和的结果等于n.n.n.n,则主机匹配此项。

4.所有意味着匹配所有的可能性。

5.EXPECT意味着删除稍后定义的主机。例如,list_1EXCEPTlist_2意味着list_1中列出的主机被排除在主机列表之外。

6.本地意味着匹配主机名不包含“.”的所有主机

以上方法只是Linux提供的一些方法,但是对于我们一般的应用来说已经足够了。我们举几个例子来说明这个问题:

例1:我们只想允许同一个局域网中的机器使用服务器的ftp功能,但禁止广域网上的ftp服务请求。本地局域网由三个网段组成:202.39.154。, 202.39.153.和202.39.152。

在hosts.deny文件中,我们定义禁止所有机器请求所有服务:

全部:全部

在hosts.allow文件中,我们定义只允许局域网访问ftp功能:

in . ftpd-l–a:202 . 39 . 154202 . 39 . 153 . 202 . 39 . 152。

这样,当非局域网机器请求ftp服务时,就会被拒绝。局域网机器可以使用ftp服务。此外,还应该定期检查/var/log目录下的日志文件,查找威胁系统安全的登录事件。最后一个命令可以有效地检查系统登录事件并发现问题。

最后,tcpdchk是检查TCP_WAPPERS配置的程序。它检查TCP_WAPPERS的配置,并报告它发现的任何问题或潜在的问题。完成所有配置后,请运行tcpdchk程序:

[root@deep]#tcpdchk

*/etc/services文件

在RFC 1700“分配的号码”中详细定义了端口号和标准服务之间的对应关系。“/etc/services”文件使服务器和客户机程序能够将服务名转换成端口号。这个表存在于每个主机上,它的文件名是“/etc/services”。只有“root”用户有权修改这个文件,正常情况下不需要修改这个文件,因为这个文件已经包含了常用服务对应的端口号。为了提高安全性,我们可以保护这个文件,以避免未经授权的删除和更改。要保护该文件,可以使用以下命令:

[root @ deep]# chattr+I/etc/services

*/etc/securetty文件

“/etc/securetty”文件允许您指定“root”用户可以从该tty设备登录。登录程序(通常是“/bin/login”)需要读取“/etc/securety”文件。它的格式是:列出的tty设备全部允许登录,被注释掉的或者本文件中不存在的不允许root登录。

注释掉(在这一行的开头加上#)所有您想阻止root用户登录的tty设备。

如下编辑securetty文件(vi/etc/securetty ),并注释掉一些行:

tty1

#tty2

#tty3

#tty4

#tty5

#tty6

#tty7

#tty8

*使Control-Alt-Delete关机键无效。

在“/etc/inittab”文件中注释掉一行,禁止使用Control-Alt-Delete关闭计算机。如果服务器没有放在安全的地方,这一点非常重要。

编辑inittab文件(vi/etc/inittab ),并输入以下代码行:

ca::ctrl altdel:/sbin/shut down-T3-rnow

替换为:

# ca::ctrl altdel:/sbin/shut down-T3-rnow

使用以下命令使更改生效:

[root@deep]#/sbin/initq

*更改“/etc/rc.d/init.d/”目录中脚本文件的访问权限。

/etc/rc.d/init.d/下的脚本主要包括启动服务的脚本程序。普通用户没有必要知道脚本文件的内容。所以您应该更改这些脚本文件的权限。

[root @ deep]# chmod-R700/etc/RC . d/init . d/*

只有root用户可以读取、写入和执行该目录中的脚本。

*/etc/rc.d/rc.local文件

默认情况下,当登录到装有Linux系统的计算机时,系统会告诉你Linux发行版的名称、版本号、内核版本和服务器名称。这暴露了太多的系统信息。最好只显示“登录:”的提示信息。

第一步:

编辑文件“/ect/rc.d/rc.local”并在以下行前添加“# ”:

-

# this will overwrite/etc/issueateveryboot。所以,做任何改变

# wanttomaketo/etc/issueherehoryouwillosethemwhenyoureboot。

# echo " " & gt/etc/issue

# echo " $ R " & gt& gt/etc/issue

# echo " Kernel $(uname-r)on $ a $(uname-m)" gt;& gt/etc/issue

#

#cp-f/etc/issue/etc/issue.net

# echo & gt& gt/etc/issue

-

第二步:

删除“/etc”目录中的“issue.net”和“issue”文件:

[root@deep]#rm-f/etc/issue

[root@deep]#rm-f/etc/issue.net

注意:文件“/etc/issue.net”是用户从网络(例如telnet、SSH)登录到计算机时看到的登录提示。“”目录下还有一个“问题”文件,是用户在本地登录时看到的提示。这两个文件是文本文件,可以根据需要进行更改。但是,如果您想要删除这两个文件,您必须如上所述注释掉“/etc/rc.d/rc.local”脚本中的这些行,否则系统将在每次重新启动时重新创建这两个文件。