Linux 伺服器安全配置

來源:互聯網
上載者:User

第一部分:RedHat Linux篇
  1.概述
  Linux伺服器版本:RedHat Linux AS
  對於開放式的作業系統---Linux,系統的安全設定包括系統服務最小化、限制遠程存取、隱藏重要資料、修補安全性漏洞、採用安全工具以及經常性的安全檢查等。本文主要從使用者佈建、如何開放服務、系統最佳化等方面進行系統的安全配置,以到達使Linux伺服器更安全、穩定。
  2.使用者管理
  在 Linux系統中,使用者帳號是使用者的身份標誌,它由使用者名稱和使用者口令組成。系統將輸入的使用者名稱存放在/etc/passwd檔案中,而將輸入的口令以加密的形式存放在/etc/shadow檔案中。在正常情況下,這些口令和其他資訊由作業系統保護,能夠對其進行訪問的只能是超級使用者(root)和作業系統的一些應用程式。但是如果配置不當或在一些系統運行出錯的情況下,這些資訊可以被普通使用者得到。進而,不懷好意的使用者就可以使用一類被稱為“口令破解”的工具去得到加密前的口令。
  2.1 刪除系統特殊的的使用者帳號和組帳號:
  #userdel username
  userdel adm
  userdel lp
  userdel sync
  userdel shutdown
  userdel halt
  userdel news
  userdel uucp
  userdel operator
  userdel games
  userdel gopher
  以上所刪除使用者為系統預設建立,但是在常用伺服器中基本不使用的一些帳號,但是這些帳號常被駭客利用和攻擊伺服器。
  #groupdel username
  groupdel adm
  groupdel lp
  groupdel news
  groupdel uucp
  groupdel games
  groupdel dip
  同樣,以上刪除的是系統安裝是預設建立的一些組帳號。這樣就減少受攻擊的機會。
  2.2 使用者密碼設定:
  安裝linux時預設的密碼最小長度是5個位元組,但這並不夠,要把它設為8個位元組。修改最短密碼長度需要編輯login.defs檔案(vi /etc/login.defs)
  PASS_MAX_DAYS 99999 ##密碼設定最長有效期間(預設值)
  PASS_MIN_DAYS 0 ##密碼設定最短有效期間
  PASS_MIN_LEN 5 ##設定密碼最小長度
  PASS_WARN_AGE 7 ##提前多少天警告使用者密碼即將到期。
  2.3 修改自動登出帳號時間:
  自動登出帳號的登入,在Linux系統中root賬戶是具有最高特權的。如果系統管理員在離開系統之前忘記登出root賬戶,那將會帶來很大的安全隱患,應該讓系統會自動登出。通過修改賬戶中“TMOUT”參數,可以實現此功能。TMOUT按秒計算。編輯你的profile檔案(vi /etc/profile),在"HISTSIZE="後面加入下面這行:
  TMOUT=300
  300,表示300秒,也就是表示5分鐘。這樣,如果系統中登陸的使用者在5分鐘內都沒有動作,那麼系統會自動登出這個賬戶。
  2.4 給系統的使用者名稱密碼存放檔案加鎖:
  chattr +i /etc/passwd
  chattr +i /etc/shadow
  chattr +i /etc/gshadow
  chattr +i /etc/group
  註:chattr是改變檔案屬性的命令,參數i代表不得任意更動檔案或目錄,此處的i為不可修改位(immutable)。查看方法:lsattr /etc/passwd
  3.服務管理
  在Linux系統的服務管理方面,如果想做到服務的最好安全,其中主要的就是升級服務本身的軟體版本,另外一個就是關閉系統不使用的服務,做到服務最小化。
  3.1 關閉系統不使用的服務:
  cd /etc/init.d ##進入到系統init進程啟動目錄
  在這裡有兩個方法,可以關閉init目錄下的服務,一、將init目錄下的檔案名稱mv成*.old類的檔案名稱,即修改檔案名稱,作用就是在系統啟動的時候找不到這個服務的開機檔案。二、使用chkconfig系統命令來關閉系統啟動等級的服務。
  註:在使用以下任何一種方法時,請先檢查需要關閉的服務是否是本伺服器特別需要啟動支援的服務,以防關閉正常使用的服務。
  第一種:修改檔案名稱的方法
  Cd /etc/init.d/
  mv apmd apmd.old ##筆記本需要
  mv netfs netfs.old ## nfs用戶端
  mv yppasswdd yppasswdd.old ## NIS伺服器,此服務漏洞很多
  mv ypserv ypserv.old ## NIS伺服器,此服務漏洞很多
  mv dhcpd dhcpd.old ## dhcp服務
  mv portmap portmap.old ##運行rpc(111連接埠)服務必需
  mv lpd lpd.old ##列印服務
  mv nfs nfs.old ## NFS伺服器,漏洞極多
  mv sendmail sendmail.old ##郵件服務, 漏洞極多
  mv snmpd snmpd.old ## SNMP,遠端使用者能從中獲得許多系統資訊
  mv rstatd rstatd.old ##避免運行r服務,遠端使用者可以從中擷取很多資訊
  mv atd atd.old ##和cron很相似的定時運行程式的服務
  第二種:使用chkcofig命令來關閉不使用的系統服務
  chkconfig ?Clevel 35 apmd off
  chkconfig ?Clevel 35 netfs off
  chkconfig ?Clevel 35 yppasswdd off
  chkconfig ?Clevel 35 ypserv off
  chkconfig ?Clevel 35 dhcpd off
  chkconfig ?Clevel 35 portmap off
  chkconfig ?Clevel 35 lpd off
  chkconfig ?Clevel 35 nfs off
  chkconfig ?Clevel 35 sendmail off
  chkconfig ?Clevel 35 snmpd off
  chkconfig ?Clevel 35 rstatd off
  chkconfig ?Clevel 35 atd off
  註:以上chkcofig 命令中的3和5是系統啟動的類型,3代表系統的多用啟動方式,5代表系統的X啟動方式。
  3.2 給系統服務連接埠列表檔案加鎖
  主要作用:防止未經許可的刪除或添加服務
  chattr +i /etc/services
  3.3 修改ssh服務的root登入許可權
  修改ssh服務組態檔,使的ssh服務不允許直接使用root使用者來登入,這樣建設系統被惡意登入攻擊的機會。
  vi /etct/ssh/sshd_config
  PermitRootLogin yes
  將這行前的#去掉後,修改為:PermitRootLogin no
  4.系統檔案許可權
  Linux 檔案系統的安全主要是通過設定檔案的許可權來實現的。每一個Linux的檔案或目錄,都有3組屬性,分別定義檔案或目錄的所有者,使用者組和其他人的使用許可權(唯讀、可寫、可執行、允許SUID、允許SGID等)。特別注意,許可權為SUID和SGID的可執行檔,在程式運行過程中,會給進程賦予所有者的許可權,如果被駭客發現並利用就會給系統造成危害。
  4.1 修改init目錄檔案執行許可權:
  chmod -R 700 /etc/init.d/*
  4.2 修改部分系統檔案的SUID和SGID的許可權:
  chmod a-s /usr/bin/chage
  chmod a-s /usr/bin/gpasswd
  chmod a-s /usr/bin/wall
  chmod a-s /usr/bin/chfn
  chmod a-s /usr/bin/chsh
  chmod a-s /usr/bin/newgrp
  chmod a-s /usr/bin/write
  chmod a-s /usr/sbin/usernetctl
  chmod a-s /usr/sbin/traceroute
  chmod a-s /bin/mount
  chmod a-s /bin/umount
  chmod a-s /bin/ping
  chmod a-s /sbin/netreport
  4.3 修改系統引導檔案
  chmod 600 /etc/grub.conf
  chattr +i /etc/grub.conf
  5.系統最佳化
  5.1 虛擬記憶體最佳化:
  一般來說,linux的實體記憶體幾乎是完全used。這個和windows非常大的區別,它的記憶體管理機制將系統記憶體充分利用,並非windows無論多大的記憶體都要去使用一些虛擬記憶體一樣。
  在/proc/sys/vm/freepages中三個數字是當前系統的:最小記憶體空白頁、最低記憶體空白頁和最高記憶體空白。
  注意,這裡系統使用虛擬記憶體的原則是:如果空白頁數目低於最高空白頁設定,則使用磁碟交換空間。當達到最低空白頁設定時,使用記憶體交換。記憶體一般以每頁4k 位元組分配。最小記憶體空白頁設定是系統中記憶體數量的2倍;最低記憶體空白頁設定是記憶體數量的4倍;最高記憶體空白頁設定是系統記憶體的6倍。
  以下以1G記憶體為例修改系統預設虛擬記憶體參數大小:
  echo "2048 4096 6444" >/proc/sys/vm/freepages
  6.日誌管理
  6.1 系統引導日誌:
  dmesg
  使用 dmesg 命令可以快速查看最後一次系統引導的引導日誌。通常它的
  內容會很多,所以您往往會希望將其通過管道傳輸到一個閱讀器。
  6.2 系統作業記錄:
  A、Linux 日誌儲存在 /var/log 目錄中。這裡有幾個由系統維護的記錄檔,但其他服務和程式也可能會把它們的日誌放在這裡。大多數日誌只有 root 才可以讀,不過只需要修改檔案的存取權限就可以讓其他人可讀。
  以下是常用的系統記錄檔名稱及其描述:
  lastlog 記錄使用者最後一次成功登入時間
  loginlog 不良的登陸嘗試記錄
  messages 記錄輸出到系統主控台以及由syslog系統服務程式產生的訊息
  utmp 記錄當前登入的每個使用者
  utmpx 擴充的utmp
  wtmp 記錄每一次使用者登入和登出的曆史資訊 wtmpx 擴充的wtmp
  vold.log 記錄使用外部介質出現的錯誤
  xferkig 記錄Ftp的存取情況 sulog 記錄su命令的使用方式
  acct 記錄每個使用者使用過的命令
  aculog 撥出自動通訊記錄
  B、/var/log/messages
  messages 日誌是核心系統記錄檔。它包含了系統啟動時的引導訊息,以及系統運行時的其他狀態訊息。IO 錯誤、網路錯誤和其他系統錯誤都會記錄到這個檔案中。其他資訊,比如某個人的身份切換為 root,也在這裡列出。如果服務正在運行,比如 DHCP 伺服器,您可以在 messages 檔案中觀察它的活動。通常,/var/log/messages 是您在做故障診斷時首先要查看的檔案。
  C、/var/log/XFree86.0.log
  這個日誌記錄的是 Xfree86 Xwindows 伺服器最後一次執行的結果。如果您在啟動到圖形模式時遇到了問題,一般情況從這個檔案中會找到失敗的原因。
  D、在/var/log 目錄下有一些檔案以一個數字結尾,這些是已輪循的歸檔檔案。記錄檔會變得特別大,特別笨重。Linux 提供了一個命令來輪循這些日誌,以使您的當前日誌資訊不會淹沒在舊的無關資訊之中。 logrotate 通常是定時自動啟動並執行,但是也可以手工運行。當執行後,logrotate 將取得目前的版本的記錄檔,然後在這個檔案名稱最後附加一個“.1”。其他更早輪循的檔案為“.2”、“.3”,依次類推。檔案名稱後的數字越大,日誌就越老。
  可以通過編輯 /etc/logrotate.conf 檔案來配置 logrotate 的自動行為。通過 man logrotate 來學習 logrotate 的全部細節。
  其中:
  # rotate log files weekly
  weekly
  這裡代表每個記錄檔是每個星期迴圈一次,一個記錄檔儲存一個星期的內容。
  # keep 4 weeks worth of backlogs
  rotate 4
  這裡代表日誌迴圈的次數是4次,即可以儲存4個記錄檔。
  E、定製日誌
  可以通過編輯 /et/syslog.conf 和 /etc/sysconfig/syslog 來配置它們的行為,可以定製系統日誌的存放路徑和日誌產生層級。
  6.3 系統各使用者動作記錄:
  last
  單獨執行last指令,它會讀取位於/var/log目錄下,名稱為wtmp的檔案,並把該給檔案的內容記錄的登入系統的使用者名稱單全部顯示出來。
  history
  history 命令能夠儲存最近所執行的命令。如果是root命令所儲存的命令內容在/root/.bash_history檔案中,如果是普通使用者,操作所命令儲存在這個使用者的所屬目錄下,即一般的/home/username/.bash_history。這個history的儲存值可以設定,編輯/etc /profile檔案,其中的HISTSIZE=1000的值就是history儲存的值。
  7.防火牆
  7.1 iptables類型防火牆:
  7.1.1 iptables概念:
  Iptalbes(IP包過濾器管理)是用來設定、維護和檢查Linux核心的IP包過濾規則的。
  可以定義不同的表,每個表都包含幾個內部的鏈,也能包含使用者定義的鏈。每個鏈都是一個規則列表,對對應的包進行匹配:每條規則指定應當如何處理與之相匹配的包。這被稱作'target'(目標),也可以跳向同一個表內的使用者定義的鏈。
  通過使用使用者空間,可以構建自己的定製規則,這些規則儲存在核心空間的資訊包過濾表中。這些規則具有目標,它們告訴核心對來自某些源、前往某些目的地或具有某些協議類型的資訊包做些什麼。如果某個資訊包與規則匹配,那麼使用目標 ACCEPT 允許該資訊包通過。還可以使用目標 DROP 或 REJECT 來阻塞並殺死資訊包。對於可對資訊包執行的其它操作,還有許多其它目標。
  根據規則所處理的資訊包的類型,可以將規則分組在鏈中。處理入站資訊包的規則被添加到 INPUT 鏈中。處理出站資訊包的規則被添加到 OUTPUT 鏈中。處理正在轉寄的資訊包的規則被添加到 FORWARD 鏈中。這三個鏈是基本資料包過濾表中內建的預設主鏈。另外,還有其它許多可用的鏈的類型(如 PREROUTING 和 POSTROUTING),以及提供使用者定義的鏈。每個鏈都可以有一個策略,它定義“預設目標”,也就是要執行的預設操作,當資訊包與鏈中的任何規則都不匹配時,執行此操作。
  建立規則並將鏈放在適當的位置之後,就可以開始進行真正的資訊包過濾工作了。這時核心空間從使用者空間接管工作。當資訊包到達防火牆時,核心先檢查資訊包的頭資訊,尤其是資訊包的目的地。我們將這個過程稱為路由。
  如果資訊包源自外界並前往系統,而且防火牆是開啟的,那麼核心將它傳遞到核心空間資訊包過濾表的 INPUT 鏈。如果資訊包源自系統內部或系統所串連的內部網上的其它源,並且此資訊包要前往另一個外部系統,那麼資訊包被傳遞到 OUTPUT 鏈。類似的,源自外部系統並前往外部系統的資訊包被傳遞到 FORWARD 鏈。
  7.1.2 iptables執行個體1:
  #!/bin/sh
  # 禁止系統的轉寄包功能
  echo 0 > /proc/sys/net/ipv4/ip_forward
  # 清楚iptables原有規則,並設定iptables預設規則
  iptables -t nat -F POSTROUTING
  iptables -t nat -F PREROUTING
  iptables -t nat -F OUTPUT
  iptables -F
  iptables -P INPUT DROP
  iptables -P FORWARD ACCEPT
  iptables -P OUTPUT ACCEPT
  # 在input規則中需要開啟的tcp、upd連接埠
  iptables -A INPUT -j ACCEPT -p tcp --dport 80
  iptables -A INPUT -j ACCEPT -p tcp --dport 22
  iptables -A INPUT -j ACCEPT -p tcp --dport 25
  iptables -A INPUT -j ACCEPT -p tcp --dport 1352
  iptables -A INPUT -p udp --destination-port 53 -j ACCEPT
  # 在input規則中狀態為:STATE RELATED 的包都接受
  iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
  # 啟用系統ip轉寄功能
  echo 1 > /proc/sys/net/ipv4/ip_forward
  < --end-- >
  7.1.3 iptables執行個體2:
  註:這個執行個體中,只需要設定tcp、udp連接埠和伺服器網路段ip範圍即可,其他已經預設設定好。
  #!/bin/sh
  # make:yongzhang
  # time:2004-06-18
  # e-mail: yongzhang@wiscom.com.cn
  PATH=/sbin:/bin:/usr/sbin:/usr/bin
  ##tcp allow ports
  TPORTS="80 22"
  ##udp allow ports
  UPORTS="53"
  ##internal server_ip range
  SERVER_IP="172.18.10.0/24"
  ##disable forwarding
  echo 0 > /proc/sys/net/ipv4/ip_forward
  ##reset default policies
  iptables -P INPUT ACCEPT
  iptables -P FORWARD ACCEPT
  iptables -P OUTPUT ACCEPT
  iptables -t nat -P PREROUTING ACCEPT
  iptables -t nat -P POSTROUTING ACCEPT
  iptables -t nat -P OUTPUT ACCEPT
  ##del all iptables rules
  iptables -F INPUT
  iptables -F FORWARD
  iptables -F OUTPUT
  ##clean all non-default chains
  iptables -X
  iptables -t nat -X
  ##iptables default rules
  iptables -P INPUT DROP
  iptables -P FORWARD DROP
  iptables -P OUTPUT ACCEPT
  ##allow ping packets
  iptables -A INPUT -p ICMP -s 0/0 --icmp-type 0 -j ACCEPT
  iptables -A INPUT -p ICMP -s 0/0 --icmp-type 3 -j ACCEPT
  iptables -A INPUT -p ICMP -s 0/0 --icmp-type 5 -j ACCEPT
  iptables -A INPUT -p ICMP -s 0/0 --icmp-type 8 -j ACCEPT
  iptables -A INPUT -p ICMP -s 0/0 --icmp-type 11 -j ACCEPT
  #iptables -A INPUT -p ICMP -s 0/0 --icmp-type 11 -m limit --limit 5/s -j ACCEPT
  iptables -A FORWARD -p ICMP -j ACCEPT
  ##enable forwarding
  iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
  ##STATE RELATED for router
  iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
  ##accept internal packets on the internal i/f
  iptables -A INPUT -s $SERVER_IP -p tcp -j ACCEPT
  ##open ports on router for server/services
  ##TCP PORTS
  for ATP in $TPORTS
  do
  iptables -A INPUT ! -s $SERVER_IP -d $SERVER_IP -p tcp --destination-port $ATP -j ACCEPT
  iptables -A FORWARD -p tcp --destination-port $ATP -j ACCEPT
  done
  ##UDP PORTS
  for AUP in $UPORTS
  do
  iptables -A INPUT -p udp --destination-port $AUP -j ACCEPT
  iptables -A FORWARD -p udp --destination-port $AUP -j ACCEPT
  done
  ##bad_packets chain
  ##drop INVALID packets immediately
  iptables -A INPUT -p ALL -m state --state INVALID -j DROP
  ##limit SYN flood
  #iptables -A INPUT -f -m limit --limit 100/s --limit-burst 100 -j ACCEPT
  #iptables -A FORWARD -f -m limit --limit 100/s --limit-burst 100 -j ACCEPT
  ##deny all ICMP packets,eth0 is external net_eth
  #iptables -A INPUT -i eth0 -s 0.0.0.0/0 -p ICMP -j DROP
  ##allow loopback
  iptables -A INPUT -i lo -p all -j ACCEPT
  iptables -A OUTPUT -o lo -p all -j ACCEPT
  ##enable forwarding
  echo 1 > /proc/sys/net/ipv4/ip_forward
  < --end-- >
  7.2 ipchains類型防火牆:
  7.2.1 ipchains概念:
  Ipchains 被用來安裝、維護、檢查Linux核心的防火牆規則。規則可以分成四類:IP input鏈、IP output鏈、IP forward鏈、user defined 鏈。
  一個防火牆規則指定包的格式和目標。當一個包進來時, 核心使用input鏈來決定它的命運。 如果它通過了, 那麼核心將決定包下一步該發往何處(這一步叫路由)。假如它是送往另一台機器的, 核心就運用forward鏈。如果不匹配,進入目標值所指定的下一條鏈,那有可能是一條user defined鏈,或者是一個特定值: ACCEPT,DENY,REJECT,MASQ,REDIRECT,RETURN。
  ACCEPT意味著允許包通過,DENY 扔掉包就象沒有受到過一樣,REJECT也把包扔掉,但(假如它不是 ICMP 包)產生一個 ICMP 回複來告訴發包者,目的地址無法到達(請注意DENY和REJECT對於ICMP包是一樣的)。
  MASQ 告訴核心偽裝此包,它只對forward 鏈和user defined鏈起作用,想讓它起作用, 編譯核心時必需讓 IP Masquerading 起作用。
  REDIRECT只對input鏈和user defined鏈起作用。它告訴核心把無論應送到何處的包改送到一個本地連接埠. 只有 TCP 和 UDP 協議可以使用此指定. 任意用 '-j REDIRECT' 指定一個連接埠(名字或編號)可以使送往此的包被重新導向到某個特殊的連接埠, 即使它被標記為送到其它連接埠。想讓它起作用,編譯核心時,必須讓CONFIG_IP_TRANSPARENT_PROXY起作用。
  最後的一個目標指定是 RETURN, 它跳過它下面的所有規則, 直到鏈的末尾。
  任何其它的目標指定表示一個使用者自訂的鏈。包將在那個鏈中通過. 假如那個鏈沒有決定此包的命運, 那麼在那個鏈中的傳輸就完成了,包將通過當前鏈的下一個規則。
  7.2.2 ipchains執行個體:
  ##清除input規則的規則,並改變input預設的規則鏈策略為REJECT
  -F input
  -P input REJECT
  ##以下是允許input規則鏈的tcp連接埠為:80 81 22 123
  -A input -s 0/0 -d 0/0 80 -p tcp -y -j ACCEPT
  -A input -s 0/0 -d 0/0 81 -p tcp -y -j ACCEPT
  -A input -s 0/0 -d 0/0 22 -p tcp -y -j ACCEPT
  -A input -s 0/0 -d 0/0 123 -p udp -j ACCEPT
  ##設定除了以上允許的input規則鏈以為,拒絕0-1023、2049、6000-6009、7100的tcp和upd連接埠,
  -A input -p tcp -s 0/0 -d 0/0 0:1023 -y -j REJECT
  -A input -p tcp -s 0/0 -d 0/0 2049 -y -j REJECT
  -A input -p udp -s 0/0 -d 0/0 0:1023 -j REJECT
  -A input -p udp -s 0/0 -d 0/0 2049 -j REJECT
  -A input -p tcp -s 0/0 -d 0/0 6000:6009 -y -j REJECT
  -A input -p tcp -s 0/0 -d 0/0 7100 -y -j REJECT
  ##允許系本身統網卡上發生的所有包通過
  -A input -s 0/0 -d 0/0 -i lo -j ACCEPT
  -A input -s 0/0 -d 0/0 -i eth0 -j ACCEPT
  -A input -s 0/0 -d 0/0 -i eth1 -j ACCEPT
  ##清除output規則的規則,並改變output預設的規則鏈策略為ACCEPT
  -F output
  -P output ACCEPT
  ##清除forward規則的規則,並改變forward預設的規則鏈策略為DENY,設定了forward規則鏈允許對10.10.11.0/24網段的包可以轉寄並且做偽裝處理。
  -F forward
  -P forward DENY
  -A forward -s 10.10.11.0/24 -j MASQ
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.