Linux網路伺服器配置基礎

來源:互聯網
上載者:User


要建立一個安全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,另一個是0x320。編輯“conf.modules”檔案如下:

alias eth0 3c509

alias eth1 3c509

options 3c509 io=0x300,0x320

這是說明3c509的驅動程式應當分別以eth0或eth1的名稱被載入(alias eth0,eth1),並且它們應該以參數io=0x300,0x320被裝載,來通知驅動程式到哪裡去尋找網卡,其中0x是不可缺少的。

對於PCI卡,僅僅需要alias命令來使ethN和適當的驅動模組名關聯,PCI卡的IO地址將會被自動的檢測到。對於PCI卡,編輯“conf.modules”檔案如下:

alias eth0 3c905

alias eth1 3c905

若驅動已經被編譯進了核心:系統啟動時的PCI檢測程式將會自動找到所有相關的網卡。ISA卡一般也能夠被自動檢測到,但是在某些情況下,ISA卡仍然需要做下面的配置工作:

在“/etc/lilo.conf”中增加配置資訊,其方法是通過LILO程式將啟動參數資訊傳遞給核心。對於ISA卡,編輯“lilo.conf”檔案,增加如下內容:

append=" ether="0,0,eth0 ether="0,0,eth1"

註:先不要在“lilo.conf”中加入啟動參數,測試一下你的ISA卡,若失敗再使用啟動參數。

如果用傳遞啟動參數的方法,eth0和eth1將按照啟動時被發現的順序來設定。

* /etc/HOSTNAME 檔案
該檔案包含了系統的主機名稱,包括完全的網域名稱,如:deep.openarch.com。

*/etc/sysconfig/network-scripts/ifcfg-ethN 檔案
在RedHat中,系統網路裝置的設定檔儲存在“/etc/sysconfig/network-scripts”目錄下,ifcfg-eth0包含第一塊網卡的配置資訊,ifcfg-eth1包含第二塊網卡的配置資訊。

下面是“/etc/sysconfig/network-scripts/ifcfg-eth0”檔案的樣本:

DEVICE=eth0

IPADDR=208.164.186.1

NETMASK=255.255.255.0

NETWORK=208.164.186.0

BROADCAST=208.164.186.255

ONBOOT=yes

BOOTPROTO=none

USERCTL=no

若希望手工修改網路地址或在新的介面上增加新的網路介面,可以通過修改對應的檔案(ifcfg-ethN)或建立新的檔案來實現。

DEVICE=name name表示物理裝置的名字

IPADDR=addr addr表示賦給該卡的IP地址

NETMASK=maskmask表示網路遮罩

NETWORK=addraddr表示網路地址

BROADCAST=addr addr表示廣播位址

ONBOOT=yes/no 啟動時是否啟用該卡

none:無須啟動協議

bootp:使用bootp協議

dhcp:使用dhcp協議

USERCTL=yes/no 是否允許非root使用者控制該裝置

*/etc/resolv.conf 檔案
該檔案是由網域名稱解析器(resolver,一個根據主機名稱解析IP地址的庫)使用的設定檔,樣本如下:

search openarch.com

nameserver 208.164.186.1

nameserver 208.164.186.2

“search domainname.com”表示當提供了一個不包括完全網域名稱的主機名稱時,在該主機名稱後添加domainname.com的尾碼;“nameserver”表示解析網域名稱時使用該地址指定的主機為網域名稱伺服器。其中網域名稱伺服器是按照檔案中出現的順序來查詢的。

*/etc/host.conf 檔案
該檔案指定如何解析主機名稱。Linux通過解析器庫來獲得主機名稱對應的IP地址。下面是一個“/etc/host.conf”的樣本:

order bind,hosts

multi on

ospoof on

“order bind,hosts”指定主機名稱查詢順序,這裡規定先使用DNS來解析網域名稱,然後再查詢“/etc/hosts”檔案(也可以相反)。

“multi on”指定是否“/etc/hosts”檔案中指定的主機可以有多個地址,擁有多個IP地址的主機一般稱為多穴主機。

“nospoof on”指不允許對該伺服器進行IP地址欺騙。IP欺騙是一種攻擊系統安全的手段,通過把IP地址偽裝成別的電腦,來取得其它電腦的信任。

*/etc/sysconfig/network 檔案
該檔案用來指定伺服器上的網路設定資訊,下面是一個樣本:

NETWORK=yes

RORWARD_IPV4=yes

HOSTNAME=deep.openarch.com

GAREWAY=0.0.0.0

GATEWAYDEV=

NETWORK=yes/no 網路是否被配置;

FORWARD_IPV4=yes/no是否開啟IP轉寄功能

HOSTNAME=hostname hostname表示伺服器的主機名稱

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 Address Hostname Alias

127.0.0.1LocalhostGate.openarch.com

208.164.186.1gate.openarch.com Gate

………… ………… ………

最左邊一列是主機IP資訊,中間一列是主機名稱。任何後面的列都是該主機的別名。一旦配置完機器的網路設定檔,應該重新啟動網路以使修改生效。使用下面的命令來重新啟動網路:/etc/rc.d/init.d/network restart

* /etc/inetd.conf 檔案
眾所周知,作為伺服器來說,服務連接埠開放越多,系統安全穩定性越難以保證。所以提供特定服務的伺服器應該儘可能開放提供服務必不可少的連接埠,而將與伺服器服務無關的服務關閉,比如:一台作為www和ftp伺服器的機器,應該只開放80 和25連接埠,而將其他無關的服務如:finger auth等服務關掉,以減少系統漏洞。

而inetd,也叫作“超級伺服器”,就是監視一些網路請求的守護進程,其根據網路請求來調用相應的服務進程來處理串連請求。inetd.conf則是inetd的設定檔。inetd.conf檔案告訴inetd監聽哪些網路連接埠,為每個連接埠啟動哪個服務。在任何的網路環境中使用Linux系統,第一件要做的事就是瞭解一下伺服器到底要提供哪些服務。不需要的那些服務應該被禁止掉,最好卸載掉,這樣駭客就少了一些攻擊系統的機會。查看“/etc/inetd.conf”檔案,瞭解一下inetd提供哪些服務。用加上注釋的方法(在一行的開頭加上#號),禁止任何不需要的服務,再給inetd進程發一個SIGHUP訊號。

第一步:把檔案的許可許可權改成600。

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

第二步:確信檔案的所有者是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”檔案的內容如下面所示:

# To re-read this file after changes, just do a 'killall -HUP inetd'

#

#echo stream tcp nowait root internal

#echo dgram udp wait root internal

#discard stream tcp nowait root internal

#discard dgram udp wait root internal

#daytime stream tcp nowait root internal

#daytime dgram udp wait root internal

#chargen stream tcp nowait root internal

#chargen dgram udp wait root internal

#time stream tcp nowait root internal

#time dgram udp wait root internal

#

# These are standard services.

#

#ftp stream tcp nowait root /usr/sbin/tcpd in.ftpd -l -a

#telnet stream tcp nowait root /usr/sbin/tcpd in.telnetd

#

# Shell, login, exec, comsat and talk are BSD protocols.

#

#shell stream tcp nowait root /usr/sbin/tcpd in.rshd

#login stream tcp nowait root /usr/sbin/tcpd in.rlogind

#exec stream tcp nowait root /usr/sbin/tcpd in.rexecd

#comsat dgram udp wait root /usr/sbin/tcpd in.comsat

#talk dgram udp wait root /usr/sbin/tcpd in.talkd

#ntalk dgram udp wait root /usr/sbin/tcpd in.ntalkd

#dtalk stream tcp wait nobody /usr/sbin/tcpd in.dtalkd

#

# Pop and imap mail services et al

#

#pop-2 stream tcp nowait root /usr/sbin/tcpd ipop2d

#pop-3 stream tcp nowait root /usr/sbin/tcpd ipop3d

#imap stream tcp nowait root /usr/sbin/tcpd imapd

#

# The Internet UUCP service.

#

#uucp stream tcp nowait uucp /usr/sbin/tcpd /usr/lib/uucp/uucico -l

#

# Tftp service is provided primarily for booting. Most sites

# run this only on machines acting as "boot servers." Do not uncomment

# this unless you *need* it.

#

#tftp dgram udp wait root /usr/sbin/tcpd in.tftpd

#bootps dgram udp wait root /usr/sbin/tcpd bootpd

#

# Finger, systat and netstat give out user information which may be

# valuable to potential "system crackers." Many sites choose to disable

# some or all of these services to improve security.

#

#finger stream tcp nowait root /usr/sbin/tcpd in.fingerd

#cfinger stream tcp nowait root /usr/sbin/tcpd in.cfingerd

#systat stream tcp nowait guest /usr/sbin/tcpd /bin/ps -auwwx

#netstat stream tcp nowait guest /usr/sbin/tcpd /bin/netstat -f inet

#

# Authentication

#

#auth stream tcp nowait nobody /usr/sbin/in.identd in.identd -l -e -o

#

# End of inetd.conf

注意:改變了“inetd.conf”檔案之後,別忘了給inetd進程發一個SIGHUP訊號(killall –HUP inetd)。

[root@deep /root]# killall -HUP inetd

第四步:

為了保證“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守護進程啟動相應的進程提供服務,而是在系統啟動時,作為守護進程啟動並執行。而對於redhat linux,提供了一個linuxconfig命令,可以通過它在圖形介面下互動式地設定是否在啟動時運行相關服務。也可以通過命令來設定是否啟動時啟動某個服務,如:[root@deep]# chkconfig –level 35 named off

具體命令可以參考man chkconfig的說明。
* /etc/hosts.allow 檔案
但是對於telnet、ftp等服務,如果將其一同關閉,那麼對於管理員需要遠端管理時,將非常不方便。Linux提供另外一種更為靈活和有效方法來實現對服務要求使用者的限制,從而可以在保證安全性的基礎上,使可信任使用者使用各種服務。Linux提供了一個叫TCP wrapper的程式。在大多數發布版本中該程式往往是預設地被安裝。利用TCP wrapper你可以限制訪問前面提到的某些服務。而且TCP wrapper的記錄檔案記錄了所有的企圖訪問你的系統的行為。通過last命令查看該程式的log,管理員可以獲知誰曾經或者企圖串連你的系統。

在/etc目錄下,有兩個檔案:hosts.deny hosts.allow 通過配置這兩個檔案,你可以指定哪些機器可以使用這些服務,哪些不可以使用這些服務。

當服務要求到達伺服器時,TCP wrapper就按照下列順序查詢這兩個檔案,直到遇到一個匹配為止:

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.ALL表示匹配所有可能性

5.EXPECT表示除去後面所定義的主機。如:list_1 EXCEPT list_2 表示list_1主機列表中除去List_2所列出的主機

6.LOCAL表示匹配所有主機名稱中不包含"."的主機

上面的幾種方式只是Linux提供的方式中的幾種,但是對於我們的一般應用來說是足夠了。我們通過舉幾個例子來說明這個問題:

例一:我們只希望允許同一個區域網路的機器使用伺服器的ftp功能,而禁止廣域網路上面的ftp服務要求,本地區域網路由 202.39.154.、202.39.153.和202.39.152. 三個網段組成。

在hosts.deny檔案中,我們定義禁止所有機器請求所有服務:

ALL:ALL

在hosts.allow檔案中,我們定義只允許區域網路訪問ftp功能:

in.ftpd -l –a: 202.39.154 202.39.153. 202.39.152.

這樣,當非區域網路的機器請求ftp服務時,就會被拒絕。而區域網路的機器可以使用ftp服務。此外,應該定期檢查/var/log目錄下的紀錄檔案,發現對系統安全有威脅的登入事件。last命令可以有效查看系統登入事件,發現問題所在。

最後tcpdchk是檢查TCP_WAPPERS配置的程式。它檢查TCP_WAPPERS的配置,並報告它可以發現的問題或潛在的問題。在所有的配置都完成了之後,請運行tcpdchk程式:

[root@deep]# tcpdchk

* /etc/services 檔案
連接埠號碼和標準服務之間的對應關係在RFC 1700 “Assigned Numbers”中有詳細的定義。“/etc/services”檔案使得伺服器和用戶端的程式能夠把服務的名字轉成連接埠號碼,這張表在每一台主機上都存在,其檔案名稱是“/etc/services”。只有“root”使用者才有許可權修改這個檔案,而且在通常情況下這個檔案是沒有必要修改的,因為這個檔案中已經包含了常用的服務所對應的連接埠號碼。為了提高安全性,我們可以給這個檔案加上保護以避免沒有經過授權的刪除和改變。為了保護這個檔案可以用下面的命令:

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

* /etc/securetty 檔案
“/etc/securetty”檔案允許你規定“root”使用者可以從那個TTY裝置登入。登入程式(通常是“/bin/login”)需要讀取“/etc/securetty”檔案。它的格式是:列出來的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::ctrlaltdel:/sbin/shutdown -t3 -r now

改為:

#ca::ctrlaltdel:/sbin/shutdown -t3 -r now

用下面的命令使改變生效:

[root@deep]# /sbin/init q

* 改變“/etc/rc.d/init.d/”目錄下的指令檔的訪問許可
/etc/rc.d/init.d/下的指令碼主要包含了啟動服務的指令碼程式。一般使用者沒有什麼必要知道指令檔的內容。所以應該改變這些指令檔的許可權。

[root@deep]# chmod -R 700 /etc/rc.d/init.d/*

這樣只有root可以讀、寫和執行這個目錄下的指令碼。

* /etc/rc.d/rc.local 檔案
在預設情況下,當登入裝有Linux系統的電腦時,系統會告訴你Linux發行版的名字、版本號碼、核心版本和伺服器名稱。這泄露了太多的系統資訊。最好只顯示一個“Login:”的提示資訊。

第一步:

編輯“/ect/rc.d/rc.local”檔案,在下面這些行的前面加上“#”:

--

# This will overwrite /etc/issue at every boot. So, make any changes you

# want to make to /etc/issue here or you will lose them when you reboot.

#echo "" > /etc/issue

#echo "$R" >> /etc/issue

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

#

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

#echo >> /etc/issue

--

第二步:

刪除“/etc”目錄下的“issue.net”和“issue”檔案:

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

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

注意:“/etc/issue.net”檔案是使用者從網路登入電腦時(例如:telnet 、SSH),看到的登入提示。同樣在“”目錄下還有一個“issue”檔案,是使用者從本地登入時看到的提示。這 兩個檔案都是文字檔,可以根據需要改變。但是,如果想刪掉這兩個檔案,必須向上面介紹的那樣把 “/etc/rc.d/rc.local”指令碼中的那些行注釋掉,否則每次重新啟動的時候,系統又會重新建立這兩個檔案。

<全文完>

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.