溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

Linux服務(wù)器安全配置的知識(shí)點(diǎn)有哪些

發(fā)布時(shí)間:2022-04-16 15:22:56 來源:億速云 閱讀:116 作者:zzz 欄目:開發(fā)技術(shù)

本文小編為大家詳細(xì)介紹“Linux服務(wù)器安全配置的知識(shí)點(diǎn)有哪些”,內(nèi)容詳細(xì),步驟清晰,細(xì)節(jié)處理妥當(dāng),希望這篇“Linux服務(wù)器安全配置的知識(shí)點(diǎn)有哪些”文章能幫助大家解決疑惑,下面跟著小編的思路慢慢深入,一起來學(xué)習(xí)新知識(shí)吧。                                      

  1.概述
  linux服務(wù)器版本:redhat linux as
  對于開放式的操作系統(tǒng)---linux,系統(tǒng)的安全設(shè)定包括系統(tǒng)服務(wù)最小化、限制遠(yuǎn)程存取、隱藏重要資料、修補(bǔ)安全漏洞、采用安全工具以及經(jīng)常性的安全檢查等。本文主要從用戶設(shè)置、如何開放服務(wù)、系統(tǒng)優(yōu)化等方面進(jìn)行系統(tǒng)的安全配置,以到達(dá)使linux服務(wù)器更安全、穩(wěn)定。
  2.用戶管理
  在 linux系統(tǒng)中,用戶帳號(hào)是用戶的身份標(biāo)志,它由用戶名和用戶口令組成。系統(tǒng)將輸入的用戶名存放在/etc/passwd文件中,而將輸入的口令以加密的形式存放在/etc/shadow文件中。在正常情況下,這些口令和其他信息由操作系統(tǒng)保護(hù),能夠?qū)ζ溥M(jìn)行訪問的只能是超級用戶(root)和操作系統(tǒng)的一些應(yīng)用程序。但是如果配置不當(dāng)或在一些系統(tǒng)運(yùn)行出錯(cuò)的情況下,這些信息可以被普通用戶得到。進(jìn)而,不懷好意的用戶就可以使用一類被稱為“口令破解”的工具去得到加密前的口令。
  2.1 刪除系統(tǒng)特殊的的用戶帳號(hào)和組帳號(hào):
  #userdel username
  userdel adm
  userdel lp
  userdel sync
  userdel shutdown
  userdel halt
  userdel news
  userdel uucp
  userdel operator
  userdel games
  userdel gopher
  以上所刪除用戶為系統(tǒng)默認(rèn)創(chuàng)建,但是在常用服務(wù)器中基本不使用的一些帳號(hào),但是這些帳號(hào)常被黑客利用和攻擊服務(wù)器。
  #groupdel username
  groupdel adm
  groupdel lp
  groupdel news
  groupdel uucp
  groupdel games
  groupdel dip
  同樣,以上刪除的是系統(tǒng)安裝是默認(rèn)創(chuàng)建的一些組帳號(hào)。這樣就減少受攻擊的機(jī)會(huì)。
  2.2 用戶密碼設(shè)置:
  安裝linux時(shí)默認(rèn)的密碼最小長度是5個(gè)字節(jié),但這并不夠,要把它設(shè)為8個(gè)字節(jié)。修改最短密碼長度需要編輯login.defs文件(vi /etc/login.defs)
  pass_max_days 99999 ##密碼設(shè)置最長有效期(默認(rèn)值)
  pass_min_days 0 ##密碼設(shè)置最短有效期
  pass_min_len 5 ##設(shè)置密碼最小長度
  pass_warn_age 7 ##提前多少天警告用戶密碼即將過期。
  2.3 修改自動(dòng)注銷帳號(hào)時(shí)間:
  自動(dòng)注銷帳號(hào)的登錄,在linux系統(tǒng)中root賬戶是具有最高特權(quán)的。如果系統(tǒng)管理員在離開系統(tǒng)之前忘記注銷root賬戶,那將會(huì)帶來很大的安全隱患,應(yīng)該讓系統(tǒng)會(huì)自動(dòng)注銷。通過修改賬戶中“tmout”參數(shù),可以實(shí)現(xiàn)此功能。tmout按秒計(jì)算。編輯你的profile文件(vi /etc/profile),在"histsize="后面加入下面這行:
  tmout=300
  300,表示300秒,也就是表示5分鐘。這樣,如果系統(tǒng)中登陸的用戶在5分鐘內(nèi)都沒有動(dòng)作,那么系統(tǒng)會(huì)自動(dòng)注銷這個(gè)賬戶。
  2.4 給系統(tǒng)的用戶名密碼存放文件加鎖:
  chattr +i /etc/passwd
  chattr +i /etc/shadow
  chattr +i /etc/gshadow
  chattr +i /etc/group
  注:chattr是改變文件屬性的命令,參數(shù)i代表不得任意更動(dòng)文件或目錄,此處的i為不可修改位(immutable)。查看方法:lsattr /etc/passwd
  3.服務(wù)管理
  在linux系統(tǒng)的服務(wù)管理方面,如果想做到服務(wù)的最好安全,其中主要的就是升級服務(wù)本身的軟件版本,另外一個(gè)就是關(guān)閉系統(tǒng)不使用的服務(wù),做到服務(wù)最小化。
  3.1 關(guān)閉系統(tǒng)不使用的服務(wù):
  cd /etc/init.d ##進(jìn)入到系統(tǒng)init進(jìn)程啟動(dòng)目錄
  在這里有兩個(gè)方法,可以關(guān)閉init目錄下的服務(wù),一、將init目錄下的文件名mv成*.old類的文件名,即修改文件名,作用就是在系統(tǒng)啟動(dòng)的時(shí)候找不到這個(gè)服務(wù)的啟動(dòng)文件。二、使用chkconfig系統(tǒng)命令來關(guān)閉系統(tǒng)啟動(dòng)等級的服務(wù)。
  注:在使用以下任何一種方法時(shí),請先檢查需要關(guān)閉的服務(wù)是否是本服務(wù)器特別需要啟動(dòng)支持的服務(wù),以防關(guān)閉正常使用的服務(wù)。
  第一種:修改文件名的方法
  cd /etc/init.d/
  mv apmd apmd.old ##筆記本需要
  mv netfs netfs.old ## nfs客戶端
  mv yppasswdd yppasswdd.old ## nis服務(wù)器,此服務(wù)漏洞很多
  mv ypserv ypserv.old ## nis服務(wù)器,此服務(wù)漏洞很多
  mv dhcpd dhcpd.old ## dhcp服務(wù)
  mv portmap portmap.old ##運(yùn)行rpc(111端口)服務(wù)必需
  mv lpd lpd.old ##打印服務(wù)
  mv nfs nfs.old ## nfs服務(wù)器,漏洞極多
  mv sendmail sendmail.old ##郵件服務(wù), 漏洞極多
  mv snmpd snmpd.old ## snmp,遠(yuǎn)程用戶能從中獲得許多系統(tǒng)信息
  mv rstatd rstatd.old ##避免運(yùn)行r服務(wù),遠(yuǎn)程用戶可以從中獲取很多信息
  mv atd atd.old ##和cron很相似的定時(shí)運(yùn)行程序的服務(wù)
  第二種:使用chkcofig命令來關(guān)閉不使用的系統(tǒng)服務(wù)
  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是系統(tǒng)啟動(dòng)的類型,3代表系統(tǒng)的多用啟動(dòng)方式,5代表系統(tǒng)的x啟動(dòng)方式。
  3.2 給系統(tǒng)服務(wù)端口列表文件加鎖
  主要作用:防止未經(jīng)許可的刪除或添加服務(wù)
  chattr +i /etc/services
  3.3 修改ssh服務(wù)的root登錄權(quán)限
  修改ssh服務(wù)配置文件,使的ssh服務(wù)不允許直接使用root用戶來登錄,這樣建設(shè)系統(tǒng)被惡意登錄攻擊的機(jī)會(huì)。
  vi /etct/ssh/sshd_config
  permitrootlogin yes
  將這行前的#去掉后,修改為:permitrootlogin no
  4.系統(tǒng)文件權(quán)限
  linux 文件系統(tǒng)的安全主要是通過設(shè)置文件的權(quán)限來實(shí)現(xiàn)的。每一個(gè)linux的文件或目錄,都有3組屬性,分別定義文件或目錄的所有者,用戶組和其他人的使用權(quán)限(只讀、可寫、可執(zhí)行、允許suid、允許sgid等)。特別注意,權(quán)限為suid和sgid的可執(zhí)行文件,在程序運(yùn)行過程中,會(huì)給進(jìn)程賦予所有者的權(quán)限,如果被黑客發(fā)現(xiàn)并利用就會(huì)給系統(tǒng)造成危害。
  4.1 修改init目錄文件執(zhí)行權(quán)限:
  chmod -r 700 /etc/init.d/*
  4.2 修改部分系統(tǒng)文件的suid和sgid的權(quán)限:
  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 修改系統(tǒng)引導(dǎo)文件
  chmod 600 /etc/grub.conf
  chattr +i /etc/grub.conf
  5.系統(tǒng)優(yōu)化
  5.1 虛擬內(nèi)存優(yōu)化:
  一般來說,linux的物理內(nèi)存幾乎是完全used。這個(gè)和windows非常大的區(qū)別,它的內(nèi)存管理機(jī)制將系統(tǒng)內(nèi)存充分利用,并非windows無論多大的內(nèi)存都要去使用一些虛擬內(nèi)存一樣。
  在/proc/sys/vm/freepages中三個(gè)數(shù)字是當(dāng)前系統(tǒng)的:最小內(nèi)存空白頁、最低內(nèi)存空白頁和最高內(nèi)存空白。
  注意,這里系統(tǒng)使用虛擬內(nèi)存的原則是:如果空白頁數(shù)目低于最高空白頁設(shè)置,則使用磁盤交換空間。當(dāng)達(dá)到最低空白頁設(shè)置時(shí),使用內(nèi)存交換。內(nèi)存一般以每頁4k 字節(jié)分配。最小內(nèi)存空白頁設(shè)置是系統(tǒng)中內(nèi)存數(shù)量的2倍;最低內(nèi)存空白頁設(shè)置是內(nèi)存數(shù)量的4倍;最高內(nèi)存空白頁設(shè)置是系統(tǒng)內(nèi)存的6倍。
  以下以1g內(nèi)存為例修改系統(tǒng)默認(rèn)虛擬內(nèi)存參數(shù)大?。?br />  echo "2048 4096 6444" >/proc/sys/vm/freepages
  6.日志管理
  6.1 系統(tǒng)引導(dǎo)日志:
  dmesg
  使用 dmesg 命令可以快速查看最后一次系統(tǒng)引導(dǎo)的引導(dǎo)日志。通常它的
  內(nèi)容會(huì)很多,所以您往往會(huì)希望將其通過管道傳輸?shù)揭粋€(gè)閱讀器。
  6.2 系統(tǒng)運(yùn)行日志:
  a、linux 日志存儲(chǔ)在 /var/log 目錄中。這里有幾個(gè)由系統(tǒng)維護(hù)的日志文件,但其他服務(wù)和程序也可能會(huì)把它們的日志放在這里。大多數(shù)日志只有 root 才可以讀,不過只需要修改文件的訪問權(quán)限就可以讓其他人可讀。
  以下是常用的系統(tǒng)日志文件名稱及其描述:
  lastlog 記錄用戶最后一次成功登錄時(shí)間
  loginlog 不良的登陸嘗試記錄
  messages 記錄輸出到系統(tǒng)主控臺(tái)以及由syslog系統(tǒng)服務(wù)程序產(chǎn)生的消息
  utmp 記錄當(dāng)前登錄的每個(gè)用戶
  utmpx 擴(kuò)展的utmp
  wtmp 記錄每一次用戶登錄和注銷的歷史信息 wtmpx 擴(kuò)展的wtmp
  vold.log 記錄使用外部介質(zhì)出現(xiàn)的錯(cuò)誤
  xferkig 記錄ftp的存取情況 sulog 記錄su命令的使用情況
  acct 記錄每個(gè)用戶使用過的命令
  aculog 撥出自動(dòng)呼叫記錄
  b、/var/log/messages
  messages 日志是核心系統(tǒng)日志文件。它包含了系統(tǒng)啟動(dòng)時(shí)的引導(dǎo)消息,以及系統(tǒng)運(yùn)行時(shí)的其他狀態(tài)消息。io 錯(cuò)誤、網(wǎng)絡(luò)錯(cuò)誤和其他系統(tǒng)錯(cuò)誤都會(huì)記錄到這個(gè)文件中。其他信息,比如某個(gè)人的身份切換為 root,也在這里列出。如果服務(wù)正在運(yùn)行,比如 dhcp 服務(wù)器,您可以在 messages 文件中觀察它的活動(dòng)。通常,/var/log/messages 是您在做故障診斷時(shí)首先要查看的文件。
  c、/var/log/xfree86.0.log
  這個(gè)日志記錄的是 xfree86 xwindows 服務(wù)器最后一次執(zhí)行的結(jié)果。如果您在啟動(dòng)到圖形模式時(shí)遇到了問題,一般情況從這個(gè)文件中會(huì)找到失敗的原因。
  d、在/var/log 目錄下有一些文件以一個(gè)數(shù)字結(jié)尾,這些是已輪循的歸檔文件。日志文件會(huì)變得特別大,特別笨重。linux 提供了一個(gè)命令來輪循這些日志,以使您的當(dāng)前日志信息不會(huì)淹沒在舊的無關(guān)信息之中。 logrotate 通常是定時(shí)自動(dòng)運(yùn)行的,但是也可以手工運(yùn)行。當(dāng)執(zhí)行后,logrotate 將取得當(dāng)前版本的日志文件,然后在這個(gè)文件名最后附加一個(gè)“.1”。其他更早輪循的文件為“.2”、“.3”,依次類推。文件名后的數(shù)字越大,日志就越老。
  可以通過編輯 /etc/logrotate.conf 文件來配置 logrotate 的自動(dòng)行為。通過 man logrotate 來學(xué)習(xí) logrotate 的全部細(xì)節(jié)。
  其中:
  # rotate log files weekly
  weekly
  這里代表每個(gè)日志文件是每個(gè)星期循環(huán)一次,一個(gè)日志文件保存一個(gè)星期的內(nèi)容。
  # keep 4 weeks worth of backlogs
  rotate 4
  這里代表日志循環(huán)的次數(shù)是4次,即可以保存4個(gè)日志文件。
  e、定制日志
  可以通過編輯 /et/syslog.conf 和 /etc/sysconfig/syslog 來配置它們的行為,可以定制系統(tǒng)日志的存放路徑和日志產(chǎn)生級別。
  6.3 系統(tǒng)各用戶操作日志:
  last
  單獨(dú)執(zhí)行l(wèi)ast指令,它會(huì)讀取位于/var/log目錄下,名稱為wtmp的文件,并把該給文件的內(nèi)容記錄的登入系統(tǒng)的用戶名單全部顯示出來。
  history
  history 命令能夠保存最近所執(zhí)行的命令。如果是root命令所保存的命令內(nèi)容在/root/.bash_history文件中,如果是普通用戶,操作所命令保存在這個(gè)用戶的所屬目錄下,即一般的/home/username/.bash_history。這個(gè)history的保存值可以設(shè)置,編輯/etc /profile文件,其中的histsize=1000的值就是history保存的值。
  7.防火墻
  7.1 iptables類型防火墻:
  7.1.1 iptables概念:
  iptalbes(ip包過濾器管理)是用來設(shè)置、維護(hù)和檢查linux內(nèi)核的ip包過濾規(guī)則的。
  可以定義不同的表,每個(gè)表都包含幾個(gè)內(nèi)部的鏈,也能包含用戶定義的鏈。每個(gè)鏈都是一個(gè)規(guī)則列表,對對應(yīng)的包進(jìn)行匹配:每條規(guī)則指定應(yīng)當(dāng)如何處理與之相匹配的包。這被稱作'target'(目標(biāo)),也可以跳向同一個(gè)表內(nèi)的用戶定義的鏈。
  通過使用用戶空間,可以構(gòu)建自己的定制規(guī)則,這些規(guī)則存儲(chǔ)在內(nèi)核空間的信息包過濾表中。這些規(guī)則具有目標(biāo),它們告訴內(nèi)核對來自某些源、前往某些目的地或具有某些協(xié)議類型的信息包做些什么。如果某個(gè)信息包與規(guī)則匹配,那么使用目標(biāo) accept 允許該信息包通過。還可以使用目標(biāo) drop 或 reject 來阻塞并殺死信息包。對于可對信息包執(zhí)行的其它操作,還有許多其它目標(biāo)。
  根據(jù)規(guī)則所處理的信息包的類型,可以將規(guī)則分組在鏈中。處理入站信息包的規(guī)則被添加到 input 鏈中。處理出站信息包的規(guī)則被添加到 output 鏈中。處理正在轉(zhuǎn)發(fā)的信息包的規(guī)則被添加到 forward 鏈中。這三個(gè)鏈?zhǔn)腔拘畔^濾表中內(nèi)置的缺省主鏈。另外,還有其它許多可用的鏈的類型(如 prerouting 和 postrouting),以及提供用戶定義的鏈。每個(gè)鏈都可以有一個(gè)策略,它定義“缺省目標(biāo)”,也就是要執(zhí)行的缺省操作,當(dāng)信息包與鏈中的任何規(guī)則都不匹配時(shí),執(zhí)行此操作。
  建立規(guī)則并將鏈放在適當(dāng)?shù)奈恢弥?,就可以開始進(jìn)行真正的信息包過濾工作了。這時(shí)內(nèi)核空間從用戶空間接管工作。當(dāng)信息包到達(dá)防火墻時(shí),內(nèi)核先檢查信息包的頭信息,尤其是信息包的目的地。我們將這個(gè)過程稱為路由。
  如果信息包源自外界并前往系統(tǒng),而且防火墻是打開的,那么內(nèi)核將它傳遞到內(nèi)核空間信息包過濾表的 input 鏈。如果信息包源自系統(tǒng)內(nèi)部或系統(tǒng)所連接的內(nèi)部網(wǎng)上的其它源,并且此信息包要前往另一個(gè)外部系統(tǒng),那么信息包被傳遞到 output 鏈。類似的,源自外部系統(tǒng)并前往外部系統(tǒng)的信息包被傳遞到 forward 鏈。
  7.1.2 iptables實(shí)例1:
  #!/bin/sh
  # 禁止系統(tǒng)的轉(zhuǎn)發(fā)包功能
  echo 0 > /proc/sys/net/ipv4/ip_forward
  # 清楚iptables原有規(guī)則,并設(shè)置iptables默認(rèn)規(guī)則
  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規(guī)則中需要打開的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規(guī)則中狀態(tài)為:state related 的包都接受
  iptables -a input -m state --state established,related -j accept
  # 啟用系統(tǒng)ip轉(zhuǎn)發(fā)功能
  echo 1 > /proc/sys/net/ipv4/ip_forward
  < --end-- >
  7.1.3 iptables實(shí)例2:
  注:這個(gè)實(shí)例中,只需要設(shè)置tcp、udp端口和服務(wù)器網(wǎng)絡(luò)段ip范圍即可,其他已經(jīng)默認(rèn)設(shè)置好。
  #!/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 被用來安裝、維護(hù)、檢查linux內(nèi)核的防火墻規(guī)則。規(guī)則可以分成四類:ip input鏈、ip output鏈、ip forward鏈、user defined 鏈。
  一個(gè)防火墻規(guī)則指定包的格式和目標(biāo)。當(dāng)一個(gè)包進(jìn)來時(shí), 核心使用input鏈來決定它的命運(yùn)。 如果它通過了, 那么核心將決定包下一步該發(fā)往何處(這一步叫路由)。假如它是送往另一臺(tái)機(jī)器的, 核心就運(yùn)用forward鏈。如果不匹配,進(jìn)入目標(biāo)值所指定的下一條鏈,那有可能是一條user defined鏈,或者是一個(gè)特定值: accept,deny,reject,masq,redirect,return。
  accept意味著允許包通過,deny 扔掉包就象沒有受到過一樣,reject也把包扔掉,但(假如它不是 icmp 包)產(chǎn)生一個(gè) icmp 回復(fù)來告訴發(fā)包者,目的地址無法到達(dá)(請注意deny和reject對于icmp包是一樣的)。
  masq 告訴核心偽裝此包,它只對forward 鏈和user defined鏈起作用,想讓它起作用, 編譯核心時(shí)必需讓 ip masquerading 起作用。
  redirect只對input鏈和user defined鏈起作用。它告訴核心把無論應(yīng)送到何處的包改送到一個(gè)本地端口. 只有 tcp 和 udp 協(xié)議可以使用此指定. 任意用 '-j redirect' 指定一個(gè)端口(名字或編號(hào))可以使送往此的包被重定向到某個(gè)特殊的端口, 即使它被標(biāo)記為送到其它端口。想讓它起作用,編譯內(nèi)核時(shí),必須讓config_ip_transparent_proxy起作用。
  最后的一個(gè)目標(biāo)指定是 return, 它跳過它下面的所有規(guī)則, 直到鏈的末尾。
  任何其它的目標(biāo)指定表示一個(gè)用戶自定義的鏈。包將在那個(gè)鏈中通過. 假如那個(gè)鏈沒有決定此包的命運(yùn), 那么在那個(gè)鏈中的傳輸就完成了,包將通過當(dāng)前鏈的下一個(gè)規(guī)則。
  7.2.2 ipchains實(shí)例:
  ##清除input規(guī)則的規(guī)則,并改變input默認(rèn)的規(guī)則鏈策略為reject
  -f input
  -p input reject
  ##以下是允許input規(guī)則鏈的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
  ##設(shè)置除了以上允許的input規(guī)則鏈以為,拒絕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
  ##允許系本身統(tǒng)網(wǎng)卡上發(fā)生的所有包通過
  -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規(guī)則的規(guī)則,并改變output默認(rèn)的規(guī)則鏈策略為accept
  -f output
  -p output accept
  ##清除forward規(guī)則的規(guī)則,并改變forward默認(rèn)的規(guī)則鏈策略為deny,設(shè)置了forward規(guī)則鏈允許對10.10.11.0/24網(wǎng)段的包可以轉(zhuǎn)發(fā)并且做偽裝處理。
  -f forward
  -p forward deny
  -a forward -s 10.10.11.0/24 -j masq                                                                                                             
  1.概述
  linux服務(wù)器版本:redhat linux as
  對于開放式的操作系統(tǒng)---linux,系統(tǒng)的安全設(shè)定包括系統(tǒng)服務(wù)最小化、限制遠(yuǎn)程存取、隱藏重要資料、修補(bǔ)安全漏洞、采用安全工具以及經(jīng)常性的安全檢查等。本文主要從用戶設(shè)置、如何開放服務(wù)、系統(tǒng)優(yōu)化等方面進(jìn)行系統(tǒng)的安全配置,以到達(dá)使linux服務(wù)器更安全、穩(wěn)定。
  2.用戶管理
  在 linux系統(tǒng)中,用戶帳號(hào)是用戶的身份標(biāo)志,它由用戶名和用戶口令組成。系統(tǒng)將輸入的用戶名存放在/etc/passwd文件中,而將輸入的口令以加密的形式存放在/etc/shadow文件中。在正常情況下,這些口令和其他信息由操作系統(tǒng)保護(hù),能夠?qū)ζ溥M(jìn)行訪問的只能是超級用戶(root)和操作系統(tǒng)的一些應(yīng)用程序。但是如果配置不當(dāng)或在一些系統(tǒng)運(yùn)行出錯(cuò)的情況下,這些信息可以被普通用戶得到。進(jìn)而,不懷好意的用戶就可以使用一類被稱為“口令破解”的工具去得到加密前的口令。
  2.1 刪除系統(tǒng)特殊的的用戶帳號(hào)和組帳號(hào):
  #userdel username
  userdel adm
  userdel lp
  userdel sync
  userdel shutdown
  userdel halt
  userdel news
  userdel uucp
  userdel operator
  userdel games
  userdel gopher
  以上所刪除用戶為系統(tǒng)默認(rèn)創(chuàng)建,但是在常用服務(wù)器中基本不使用的一些帳號(hào),但是這些帳號(hào)常被黑客利用和攻擊服務(wù)器。
  #groupdel username
  groupdel adm
  groupdel lp
  groupdel news
  groupdel uucp
  groupdel games
  groupdel dip
  同樣,以上刪除的是系統(tǒng)安裝是默認(rèn)創(chuàng)建的一些組帳號(hào)。這樣就減少受攻擊的機(jī)會(huì)。
  2.2 用戶密碼設(shè)置:
  安裝linux時(shí)默認(rèn)的密碼最小長度是5個(gè)字節(jié),但這并不夠,要把它設(shè)為8個(gè)字節(jié)。修改最短密碼長度需要編輯login.defs文件(vi /etc/login.defs)
  pass_max_days 99999 ##密碼設(shè)置最長有效期(默認(rèn)值)
  pass_min_days 0 ##密碼設(shè)置最短有效期
  pass_min_len 5 ##設(shè)置密碼最小長度
  pass_warn_age 7 ##提前多少天警告用戶密碼即將過期。
  2.3 修改自動(dòng)注銷帳號(hào)時(shí)間:
  自動(dòng)注銷帳號(hào)的登錄,在linux系統(tǒng)中root賬戶是具有最高特權(quán)的。如果系統(tǒng)管理員在離開系統(tǒng)之前忘記注銷root賬戶,那將會(huì)帶來很大的安全隱患,應(yīng)該讓系統(tǒng)會(huì)自動(dòng)注銷。通過修改賬戶中“tmout”參數(shù),可以實(shí)現(xiàn)此功能。tmout按秒計(jì)算。編輯你的profile文件(vi /etc/profile),在"histsize="后面加入下面這行:
  tmout=300
  300,表示300秒,也就是表示5分鐘。這樣,如果系統(tǒng)中登陸的用戶在5分鐘內(nèi)都沒有動(dòng)作,那么系統(tǒng)會(huì)自動(dòng)注銷這個(gè)賬戶。
  2.4 給系統(tǒng)的用戶名密碼存放文件加鎖:
  chattr +i /etc/passwd
  chattr +i /etc/shadow
  chattr +i /etc/gshadow
  chattr +i /etc/group
  注:chattr是改變文件屬性的命令,參數(shù)i代表不得任意更動(dòng)文件或目錄,此處的i為不可修改位(immutable)。查看方法:lsattr /etc/passwd
  3.服務(wù)管理
  在linux系統(tǒng)的服務(wù)管理方面,如果想做到服務(wù)的最好安全,其中主要的就是升級服務(wù)本身的軟件版本,另外一個(gè)就是關(guān)閉系統(tǒng)不使用的服務(wù),做到服務(wù)最小化。
  3.1 關(guān)閉系統(tǒng)不使用的服務(wù):
  cd /etc/init.d ##進(jìn)入到系統(tǒng)init進(jìn)程啟動(dòng)目錄
  在這里有兩個(gè)方法,可以關(guān)閉init目錄下的服務(wù),一、將init目錄下的文件名mv成*.old類的文件名,即修改文件名,作用就是在系統(tǒng)啟動(dòng)的時(shí)候找不到這個(gè)服務(wù)的啟動(dòng)文件。二、使用chkconfig系統(tǒng)命令來關(guān)閉系統(tǒng)啟動(dòng)等級的服務(wù)。
  注:在使用以下任何一種方法時(shí),請先檢查需要關(guān)閉的服務(wù)是否是本服務(wù)器特別需要啟動(dòng)支持的服務(wù),以防關(guān)閉正常使用的服務(wù)。
  第一種:修改文件名的方法
  cd /etc/init.d/
  mv apmd apmd.old ##筆記本需要
  mv netfs netfs.old ## nfs客戶端
  mv yppasswdd yppasswdd.old ## nis服務(wù)器,此服務(wù)漏洞很多
  mv ypserv ypserv.old ## nis服務(wù)器,此服務(wù)漏洞很多
  mv dhcpd dhcpd.old ## dhcp服務(wù)
  mv portmap portmap.old ##運(yùn)行rpc(111端口)服務(wù)必需
  mv lpd lpd.old ##打印服務(wù)
  mv nfs nfs.old ## nfs服務(wù)器,漏洞極多
  mv sendmail sendmail.old ##郵件服務(wù), 漏洞極多
  mv snmpd snmpd.old ## snmp,遠(yuǎn)程用戶能從中獲得許多系統(tǒng)信息
  mv rstatd rstatd.old ##避免運(yùn)行r服務(wù),遠(yuǎn)程用戶可以從中獲取很多信息
  mv atd atd.old ##和cron很相似的定時(shí)運(yùn)行程序的服務(wù)
  第二種:使用chkcofig命令來關(guān)閉不使用的系統(tǒng)服務(wù)
  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是系統(tǒng)啟動(dòng)的類型,3代表系統(tǒng)的多用啟動(dòng)方式,5代表系統(tǒng)的x啟動(dòng)方式。
  3.2 給系統(tǒng)服務(wù)端口列表文件加鎖
  主要作用:防止未經(jīng)許可的刪除或添加服務(wù)
  chattr +i /etc/services
  3.3 修改ssh服務(wù)的root登錄權(quán)限
  修改ssh服務(wù)配置文件,使的ssh服務(wù)不允許直接使用root用戶來登錄,這樣建設(shè)系統(tǒng)被惡意登錄攻擊的機(jī)會(huì)。
  vi /etct/ssh/sshd_config
  permitrootlogin yes
  將這行前的#去掉后,修改為:permitrootlogin no
  4.系統(tǒng)文件權(quán)限
  linux 文件系統(tǒng)的安全主要是通過設(shè)置文件的權(quán)限來實(shí)現(xiàn)的。每一個(gè)linux的文件或目錄,都有3組屬性,分別定義文件或目錄的所有者,用戶組和其他人的使用權(quán)限(只讀、可寫、可執(zhí)行、允許suid、允許sgid等)。特別注意,權(quán)限為suid和sgid的可執(zhí)行文件,在程序運(yùn)行過程中,會(huì)給進(jìn)程賦予所有者的權(quán)限,如果被黑客發(fā)現(xiàn)并利用就會(huì)給系統(tǒng)造成危害。
  4.1 修改init目錄文件執(zhí)行權(quán)限:
  chmod -r 700 /etc/init.d/*
  4.2 修改部分系統(tǒng)文件的suid和sgid的權(quán)限:
  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 修改系統(tǒng)引導(dǎo)文件
  chmod 600 /etc/grub.conf
  chattr +i /etc/grub.conf
  5.系統(tǒng)優(yōu)化
  5.1 虛擬內(nèi)存優(yōu)化:
  一般來說,linux的物理內(nèi)存幾乎是完全used。這個(gè)和windows非常大的區(qū)別,它的內(nèi)存管理機(jī)制將系統(tǒng)內(nèi)存充分利用,并非windows無論多大的內(nèi)存都要去使用一些虛擬內(nèi)存一樣。
  在/proc/sys/vm/freepages中三個(gè)數(shù)字是當(dāng)前系統(tǒng)的:最小內(nèi)存空白頁、最低內(nèi)存空白頁和最高內(nèi)存空白。
  注意,這里系統(tǒng)使用虛擬內(nèi)存的原則是:如果空白頁數(shù)目低于最高空白頁設(shè)置,則使用磁盤交換空間。當(dāng)達(dá)到最低空白頁設(shè)置時(shí),使用內(nèi)存交換。內(nèi)存一般以每頁4k 字節(jié)分配。最小內(nèi)存空白頁設(shè)置是系統(tǒng)中內(nèi)存數(shù)量的2倍;最低內(nèi)存空白頁設(shè)置是內(nèi)存數(shù)量的4倍;最高內(nèi)存空白頁設(shè)置是系統(tǒng)內(nèi)存的6倍。
  以下以1g內(nèi)存為例修改系統(tǒng)默認(rèn)虛擬內(nèi)存參數(shù)大小:
  echo "2048 4096 6444" >/proc/sys/vm/freepages
  6.日志管理
  6.1 系統(tǒng)引導(dǎo)日志:
  dmesg
  使用 dmesg 命令可以快速查看最后一次系統(tǒng)引導(dǎo)的引導(dǎo)日志。通常它的
  內(nèi)容會(huì)很多,所以您往往會(huì)希望將其通過管道傳輸?shù)揭粋€(gè)閱讀器。
  6.2 系統(tǒng)運(yùn)行日志:
  a、linux 日志存儲(chǔ)在 /var/log 目錄中。這里有幾個(gè)由系統(tǒng)維護(hù)的日志文件,但其他服務(wù)和程序也可能會(huì)把它們的日志放在這里。大多數(shù)日志只有 root 才可以讀,不過只需要修改文件的訪問權(quán)限就可以讓其他人可讀。
  以下是常用的系統(tǒng)日志文件名稱及其描述:
  lastlog 記錄用戶最后一次成功登錄時(shí)間
  loginlog 不良的登陸嘗試記錄
  messages 記錄輸出到系統(tǒng)主控臺(tái)以及由syslog系統(tǒng)服務(wù)程序產(chǎn)生的消息
  utmp 記錄當(dāng)前登錄的每個(gè)用戶
  utmpx 擴(kuò)展的utmp
  wtmp 記錄每一次用戶登錄和注銷的歷史信息 wtmpx 擴(kuò)展的wtmp
  vold.log 記錄使用外部介質(zhì)出現(xiàn)的錯(cuò)誤
  xferkig 記錄ftp的存取情況 sulog 記錄su命令的使用情況
  acct 記錄每個(gè)用戶使用過的命令
  aculog 撥出自動(dòng)呼叫記錄
  b、/var/log/messages
  messages 日志是核心系統(tǒng)日志文件。它包含了系統(tǒng)啟動(dòng)時(shí)的引導(dǎo)消息,以及系統(tǒng)運(yùn)行時(shí)的其他狀態(tài)消息。io 錯(cuò)誤、網(wǎng)絡(luò)錯(cuò)誤和其他系統(tǒng)錯(cuò)誤都會(huì)記錄到這個(gè)文件中。其他信息,比如某個(gè)人的身份切換為 root,也在這里列出。如果服務(wù)正在運(yùn)行,比如 dhcp 服務(wù)器,您可以在 messages 文件中觀察它的活動(dòng)。通常,/var/log/messages 是您在做故障診斷時(shí)首先要查看的文件。
  c、/var/log/xfree86.0.log
  這個(gè)日志記錄的是 xfree86 xwindows 服務(wù)器最后一次執(zhí)行的結(jié)果。如果您在啟動(dòng)到圖形模式時(shí)遇到了問題,一般情況從這個(gè)文件中會(huì)找到失敗的原因。
  d、在/var/log 目錄下有一些文件以一個(gè)數(shù)字結(jié)尾,這些是已輪循的歸檔文件。日志文件會(huì)變得特別大,特別笨重。linux 提供了一個(gè)命令來輪循這些日志,以使您的當(dāng)前日志信息不會(huì)淹沒在舊的無關(guān)信息之中。 logrotate 通常是定時(shí)自動(dòng)運(yùn)行的,但是也可以手工運(yùn)行。當(dāng)執(zhí)行后,logrotate 將取得當(dāng)前版本的日志文件,然后在這個(gè)文件名最后附加一個(gè)“.1”。其他更早輪循的文件為“.2”、“.3”,依次類推。文件名后的數(shù)字越大,日志就越老。
  可以通過編輯 /etc/logrotate.conf 文件來配置 logrotate 的自動(dòng)行為。通過 man logrotate 來學(xué)習(xí) logrotate 的全部細(xì)節(jié)。
  其中:
  # rotate log files weekly
  weekly
  這里代表每個(gè)日志文件是每個(gè)星期循環(huán)一次,一個(gè)日志文件保存一個(gè)星期的內(nèi)容。
  # keep 4 weeks worth of backlogs
  rotate 4
  這里代表日志循環(huán)的次數(shù)是4次,即可以保存4個(gè)日志文件。
  e、定制日志
  可以通過編輯 /et/syslog.conf 和 /etc/sysconfig/syslog 來配置它們的行為,可以定制系統(tǒng)日志的存放路徑和日志產(chǎn)生級別。
  6.3 系統(tǒng)各用戶操作日志:
  last
  單獨(dú)執(zhí)行l(wèi)ast指令,它會(huì)讀取位于/var/log目錄下,名稱為wtmp的文件,并把該給文件的內(nèi)容記錄的登入系統(tǒng)的用戶名單全部顯示出來。
  history
  history 命令能夠保存最近所執(zhí)行的命令。如果是root命令所保存的命令內(nèi)容在/root/.bash_history文件中,如果是普通用戶,操作所命令保存在這個(gè)用戶的所屬目錄下,即一般的/home/username/.bash_history。這個(gè)history的保存值可以設(shè)置,編輯/etc /profile文件,其中的histsize=1000的值就是history保存的值。
  7.防火墻
  7.1 iptables類型防火墻:
  7.1.1 iptables概念:
  iptalbes(ip包過濾器管理)是用來設(shè)置、維護(hù)和檢查linux內(nèi)核的ip包過濾規(guī)則的。
  可以定義不同的表,每個(gè)表都包含幾個(gè)內(nèi)部的鏈,也能包含用戶定義的鏈。每個(gè)鏈都是一個(gè)規(guī)則列表,對對應(yīng)的包進(jìn)行匹配:每條規(guī)則指定應(yīng)當(dāng)如何處理與之相匹配的包。這被稱作'target'(目標(biāo)),也可以跳向同一個(gè)表內(nèi)的用戶定義的鏈。
  通過使用用戶空間,可以構(gòu)建自己的定制規(guī)則,這些規(guī)則存儲(chǔ)在內(nèi)核空間的信息包過濾表中。這些規(guī)則具有目標(biāo),它們告訴內(nèi)核對來自某些源、前往某些目的地或具有某些協(xié)議類型的信息包做些什么。如果某個(gè)信息包與規(guī)則匹配,那么使用目標(biāo) accept 允許該信息包通過。還可以使用目標(biāo) drop 或 reject 來阻塞并殺死信息包。對于可對信息包執(zhí)行的其它操作,還有許多其它目標(biāo)。
  根據(jù)規(guī)則所處理的信息包的類型,可以將規(guī)則分組在鏈中。處理入站信息包的規(guī)則被添加到 input 鏈中。處理出站信息包的規(guī)則被添加到 output 鏈中。處理正在轉(zhuǎn)發(fā)的信息包的規(guī)則被添加到 forward 鏈中。這三個(gè)鏈?zhǔn)腔拘畔^濾表中內(nèi)置的缺省主鏈。另外,還有其它許多可用的鏈的類型(如 prerouting 和 postrouting),以及提供用戶定義的鏈。每個(gè)鏈都可以有一個(gè)策略,它定義“缺省目標(biāo)”,也就是要執(zhí)行的缺省操作,當(dāng)信息包與鏈中的任何規(guī)則都不匹配時(shí),執(zhí)行此操作。
  建立規(guī)則并將鏈放在適當(dāng)?shù)奈恢弥?,就可以開始進(jìn)行真正的信息包過濾工作了。這時(shí)內(nèi)核空間從用戶空間接管工作。當(dāng)信息包到達(dá)防火墻時(shí),內(nèi)核先檢查信息包的頭信息,尤其是信息包的目的地。我們將這個(gè)過程稱為路由。
  如果信息包源自外界并前往系統(tǒng),而且防火墻是打開的,那么內(nèi)核將它傳遞到內(nèi)核空間信息包過濾表的 input 鏈。如果信息包源自系統(tǒng)內(nèi)部或系統(tǒng)所連接的內(nèi)部網(wǎng)上的其它源,并且此信息包要前往另一個(gè)外部系統(tǒng),那么信息包被傳遞到 output 鏈。類似的,源自外部系統(tǒng)并前往外部系統(tǒng)的信息包被傳遞到 forward 鏈。
  7.1.2 iptables實(shí)例1:
  #!/bin/sh
  # 禁止系統(tǒng)的轉(zhuǎn)發(fā)包功能
  echo 0 > /proc/sys/net/ipv4/ip_forward
  # 清楚iptables原有規(guī)則,并設(shè)置iptables默認(rèn)規(guī)則
  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規(guī)則中需要打開的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規(guī)則中狀態(tài)為:state related 的包都接受
  iptables -a input -m state --state established,related -j accept
  # 啟用系統(tǒng)ip轉(zhuǎn)發(fā)功能
  echo 1 > /proc/sys/net/ipv4/ip_forward
  < --end-- >
  7.1.3 iptables實(shí)例2:
  注:這個(gè)實(shí)例中,只需要設(shè)置tcp、udp端口和服務(wù)器網(wǎng)絡(luò)段ip范圍即可,其他已經(jīng)默認(rèn)設(shè)置好。
  #!/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 被用來安裝、維護(hù)、檢查linux內(nèi)核的防火墻規(guī)則。規(guī)則可以分成四類:ip input鏈、ip output鏈、ip forward鏈、user defined 鏈。
  一個(gè)防火墻規(guī)則指定包的格式和目標(biāo)。當(dāng)一個(gè)包進(jìn)來時(shí), 核心使用input鏈來決定它的命運(yùn)。 如果它通過了, 那么核心將決定包下一步該發(fā)往何處(這一步叫路由)。假如它是送往另一臺(tái)機(jī)器的, 核心就運(yùn)用forward鏈。如果不匹配,進(jìn)入目標(biāo)值所指定的下一條鏈,那有可能是一條user defined鏈,或者是一個(gè)特定值: accept,deny,reject,masq,redirect,return。
  accept意味著允許包通過,deny 扔掉包就象沒有受到過一樣,reject也把包扔掉,但(假如它不是 icmp 包)產(chǎn)生一個(gè) icmp 回復(fù)來告訴發(fā)包者,目的地址無法到達(dá)(請注意deny和reject對于icmp包是一樣的)。
  masq 告訴核心偽裝此包,它只對forward 鏈和user defined鏈起作用,想讓它起作用, 編譯核心時(shí)必需讓 ip masquerading 起作用。
  redirect只對input鏈和user defined鏈起作用。它告訴核心把無論應(yīng)送到何處的包改送到一個(gè)本地端口. 只有 tcp 和 udp 協(xié)議可以使用此指定. 任意用 '-j redirect' 指定一個(gè)端口(名字或編號(hào))可以使送往此的包被重定向到某個(gè)特殊的端口, 即使它被標(biāo)記為送到其它端口。想讓它起作用,編譯內(nèi)核時(shí),必須讓config_ip_transparent_proxy起作用。
  最后的一個(gè)目標(biāo)指定是 return, 它跳過它下面的所有規(guī)則, 直到鏈的末尾。
  任何其它的目標(biāo)指定表示一個(gè)用戶自定義的鏈。包將在那個(gè)鏈中通過. 假如那個(gè)鏈沒有決定此包的命運(yùn), 那么在那個(gè)鏈中的傳輸就完成了,包將通過當(dāng)前鏈的下一個(gè)規(guī)則。
  7.2.2 ipchains實(shí)例:
  ##清除input規(guī)則的規(guī)則,并改變input默認(rèn)的規(guī)則鏈策略為reject
  -f input
  -p input reject
  ##以下是允許input規(guī)則鏈的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
  ##設(shè)置除了以上允許的input規(guī)則鏈以為,拒絕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
  ##允許系本身統(tǒng)網(wǎng)卡上發(fā)生的所有包通過
  -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規(guī)則的規(guī)則,并改變output默認(rèn)的規(guī)則鏈策略為accept
  -f output
  -p output accept
  ##清除forward規(guī)則的規(guī)則,并改變forward默認(rèn)的規(guī)則鏈策略為deny,設(shè)置了forward規(guī)則鏈允許對10.10.11.0/24網(wǎng)段的包可以轉(zhuǎn)發(fā)并且做偽裝處理。
  -f forward
  -p forward deny
  -a forward -s 10.10.11.0/24 -j masq                                            

讀到這里,這篇“Linux服務(wù)器安全配置的知識(shí)點(diǎn)有哪些”文章已經(jīng)介紹完畢,想要掌握這篇文章的知識(shí)點(diǎn)還需要大家自己動(dòng)手實(shí)踐使用過才能領(lǐng)會(huì),如果想了解更多相關(guān)內(nèi)容的文章,歡迎關(guān)注億速云行業(yè)資訊頻道。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI