阿里雲CentOS服務器安全設置

阿里雲CentOS服務器安全設置

centoscentos 系統安全防護 2015年7月13日html

463 0 0linux

Linux就該這麼學

一、開啓雲盾全部服務web

 

 

 

二、經過防火牆策略限制對外掃描行爲ubuntu

 

請您根據您的服務器操做系統,下載對應的腳本運行,運行後您的防火牆策略會封禁對外發包的行爲,確保您的主機不會再出現惡意發包的狀況,爲您進行後續數據備份操做提供足夠的時間。windows

Window2003的批處理文件下載地址:http://oss.aliyuncs.com/aliyunecs/windows2003_drop_port.batcentos

 

Window2008的批處理文件下載地址:http://oss.aliyuncs.com/aliyunecs/windows2008_drop_port.bat安全

Linux系統腳本:http://oss.aliyuncs.com/aliyunecs/linux_drop_port.shbash

 

上述文件下載到機器內部直接執行便可。服務器

 

文件內容以下:網絡

 

  1. #!/bin/bash  
  2. #########################################  
  3. #Function:    linux drop port  
  4. #Usage:       bash linux_drop_port.sh  
  5. #Author:      Customer Service Department  
  6. #Company:     Alibaba Cloud Computing  
  7. #Version:     2.0  
  8. #########################################  
  9.    
  10. check_os_release()  
  11. {  
  12.  while true  
  13.   do  
  14.    os_release=$(grep "Red Hat Enterprise Linux Server release"/etc/issue 2>/dev/null)  
  15.    os_release_2=$(grep "Red Hat Enterprise Linux Server release"/etc/redhat-release 2>/dev/null)  
  16.    if [ "$os_release" ] && [ "$os_release_2" ]  
  17.    then  
  18.      if echo "$os_release"|grep "release 5" >/dev/null2>&1  
  19.      then  
  20.        os_release=redhat5  
  21.        echo "$os_release"  
  22.      elif echo "$os_release"|grep "release 6">/dev/null 2>&1  
  23.      then  
  24.        os_release=redhat6  
  25.        echo "$os_release"  
  26.      else  
  27.        os_release=""  
  28.        echo "$os_release"  
  29.      fi  
  30.      break  
  31.    fi  
  32.    os_release=$(grep "Aliyun Linux release" /etc/issue2>/dev/null)  
  33.    os_release_2=$(grep "Aliyun Linux release" /etc/aliyun-release2>/dev/null)  
  34.    if [ "$os_release" ] && [ "$os_release_2" ]  
  35.    then  
  36.      if echo "$os_release"|grep "release 5" >/dev/null2>&1  
  37.      then  
  38.        os_release=aliyun5  
  39.        echo "$os_release"  
  40.      elif echo "$os_release"|grep "release 6">/dev/null 2>&1  
  41.      then  
  42.        os_release=aliyun6  
  43.        echo "$os_release"  
  44.      else  
  45.        os_release=""  
  46.        echo "$os_release"  
  47.      fi  
  48.      break  
  49.    fi  
  50.    os_release=$(grep "CentOS release" /etc/issue 2>/dev/null)  
  51.    os_release_2=$(grep "CentOS release" /etc/*release2>/dev/null)  
  52.    if [ "$os_release" ] && [ "$os_release_2" ]  
  53.    then  
  54.      if echo "$os_release"|grep "release 5" >/dev/null2>&1  
  55.      then  
  56.        os_release=centos5  
  57.         echo "$os_release"  
  58.      elif echo "$os_release"|grep "release 6">/dev/null 2>&1  
  59.      then  
  60.        os_release=centos6  
  61.        echo "$os_release"  
  62.      else  
  63.        os_release=""  
  64.        echo "$os_release"  
  65.      fi  
  66.      break  
  67.    fi  
  68.    os_release=$(grep -i "ubuntu" /etc/issue 2>/dev/null)  
  69.    os_release_2=$(grep -i "ubuntu" /etc/lsb-release2>/dev/null)  
  70.    if [ "$os_release" ] && [ "$os_release_2" ]  
  71.    then  
  72.      if echo "$os_release"|grep "Ubuntu 10" >/dev/null2>&1  
  73.      then  
  74.         os_release=ubuntu10  
  75.        echo "$os_release"  
  76.      elif echo "$os_release"|grep "Ubuntu 12.04">/dev/null 2>&1  
  77.      then  
  78.        os_release=ubuntu1204  
  79.        echo "$os_release"  
  80.      elif echo "$os_release"|grep "Ubuntu 12.10">/dev/null 2>&1  
  81.       then  
  82.        os_release=ubuntu1210  
  83.        echo "$os_release"  
  84.      else  
  85.        os_release=""  
  86.        echo "$os_release"  
  87.      fi  
  88.      break  
  89.    fi  
  90.    os_release=$(grep -i "debian" /etc/issue 2>/dev/null)  
  91.    os_release_2=$(grep -i "debian" /proc/version 2>/dev/null)  
  92.    if [ "$os_release" ] && [ "$os_release_2" ]  
  93.    then  
  94.      if echo "$os_release"|grep "Linux 6" >/dev/null2>&1  
  95.      then  
  96.        os_release=debian6  
  97.        echo "$os_release"  
  98.      else  
  99.         os_release=""  
  100.        echo "$os_release"  
  101.      fi  
  102.      break  
  103.    fi  
  104.    os_release=$(grep "openSUSE" /etc/issue 2>/dev/null)  
  105.    os_release_2=$(grep "openSUSE" /etc/*release 2>/dev/null)  
  106.    if [ "$os_release" ] && [ "$os_release_2" ]  
  107.    then  
  108.       if echo "$os_release"|grep"13.1" >/dev/null 2>&1  
  109.      then  
  110.        os_release=opensuse131  
  111.        echo "$os_release"  
  112.      else  
  113.        os_release=""  
  114.        echo "$os_release"  
  115.      fi  
  116.      break  
  117.    fi  
  118.    break  
  119.    done  
  120. }  
  121.    
  122. exit_script()  
  123. {  
  124.  echo -e "\033[1;40;31mInstall $1 error,will exit.\n\033[0m"  
  125.   rm-f $LOCKfile  
  126.  exit 1  
  127. }  
  128.    
  129. config_iptables()  
  130. {  
  131.  iptables -I OUTPUT 1 -p tcp -m multiport --dport21,22,23,25,53,80,135,139,443,445 -j DROP  
  132.  iptables -I OUTPUT 2 -p tcp -m multiport --dport 1433,1314,1521,2222,3306,3433,3389,4899,8080,18186-j DROP  
  133.  iptables -I OUTPUT 3 -p udp -j DROP  
  134.  iptables -nvL  
  135. }  
  136.    
  137. ubuntu_config_ufw()  
  138. {  
  139.   ufwdeny out proto tcp to any port 21,22,23,25,53,80,135,139,443,445  
  140.   ufwdeny out proto tcp to any port 1433,1314,1521,2222,3306,3433,3389,4899,8080,18186  
  141.   ufwdeny out proto udp to any  
  142.   ufwstatus  
  143. }  
  144.    
  145. ####################Start###################  
  146. #check lock file ,one time only let thescript run one time  
  147. LOCKfile=/tmp/.$(basename $0)  
  148. if [ -f "$LOCKfile" ]  
  149. then  
  150.  echo -e "\033[1;40;31mThe script is already exist,please next timeto run this script.\n\033[0m"  
  151.  exit  
  152. else  
  153.  echo -e "\033[40;32mStep 1.No lock file,begin to create lock fileand continue.\n\033[40;37m"  
  154.  touch $LOCKfile  
  155. fi  
  156.    
  157. #check user  
  158. if [ $(id -u) != "0" ]  
  159. then  
  160.  echo -e "\033[1;40;31mError: You must be root to run this script,please use root to execute this script.\n\033[0m"  
  161.   rm-f $LOCKfile  
  162.  exit 1  
  163. fi  
  164.    
  165. echo -e "\033[40;32mStep 2.Begen tocheck the OS issue.\n\033[40;37m"  
  166. os_release=$(check_os_release)  
  167. if [ "X$os_release" =="X" ]  
  168. then  
  169.  echo -e "\033[1;40;31mThe OS does not identify,So this script isnot executede.\n\033[0m"  
  170.   rm-f $LOCKfile  
  171.  exit 0  
  172. else  
  173.  echo -e "\033[40;32mThis OS is $os_release.\n\033[40;37m"  
  174. fi  
  175.    
  176. echo -e "\033[40;32mStep 3.Begen toconfig firewall.\n\033[40;37m"  
  177. case "$os_release" in  
  178. redhat5|centos5|redhat6|centos6|aliyun5|aliyun6)  
  179.  service iptables start  
  180.  config_iptables  
  181.   ;;  
  182. debian6)  
  183.  config_iptables  
  184.   ;;  
  185. ubuntu10|ubuntu1204|ubuntu1210)  
  186.   ufwenable <<EOF  
  187. y  
  188. EOF  
  189.  ubuntu_config_ufw  
  190.   ;;  
  191. opensuse131)  
  192.  config_iptables  
  193.   ;;  
  194. esac  
  195.    
  196. echo -e "\033[40;32mConfig firewallsuccess,this script now exit!\n\033[40;37m"  
  197. rm -f $LOCKfile  

 

 

三、設置iptables,限制訪問

 

 

 

  1. /sbin/iptables -P INPUT ACCEPT  
  2. /sbin/iptables -F  
  3. /sbin/iptables -X  
  4. /sbin/iptables -Z  
  5.   
  6. /sbin/iptables -A INPUT -i lo -j ACCEPT   
  7. /sbin/iptables -A INPUT -p tcp --dport 22 -j ACCEPT  
  8. /sbin/iptables -A INPUT -p tcp --dport 80 -j ACCEPT  
  9. /sbin/iptables -A INPUT -p tcp --dport 8080 -j ACCEPT  
  10. /sbin/iptables -A INPUT -p icmp -m icmp --icmp-type 8 -j ACCEPT  
  11. /sbin/iptables -A INPUT -m state --state ESTABLISHED -j ACCEPT  
  12. /sbin/iptables -P INPUT DROP  
  13.  service iptables save  

以上腳本,在每次重裝完系統後執行一次便可,其配置會保存至/etc/sysconfig/iptables

 

 

此步驟參考http://www.netingcn.com/aliyun-iptables.html

因爲做爲web服務器來使用,因此對外要開放 80 端口,另外確定要經過ssh進行服務器管理,22 端口也要對外開放,固然最好是把ssh服務的默認端口改掉,在公網上會有不少人試圖破解密碼的,若是修改端口,記得要把該端口對外開發,不然連不上就悲劇了。下面提供配置規則的詳細說明:

第一步:清空全部規則

當Chain INPUT (policy DROP)時執行/sbin/iptables -F後,你將和服務器斷開鏈接
全部在清空全部規則前把policy DROP該爲INPUT,防止悲劇發生,當心當心再當心
/sbin/iptables -P INPUT ACCEPT
清空全部規則
/sbin/iptables -F
/sbin/iptables -X
計數器置0
/sbin/iptables -Z

第二步:設置規則

容許來自於lo接口的數據包,若是沒有此規則,你將不能經過127.0.0.1訪問本地服務,例如ping 127.0.0.1
/sbin/iptables -A INPUT -i lo -j ACCEPT 

開放TCP協議22端口,以便能ssh,若是你是在有固定ip的場所,可使用 -s 來限定客戶端的ip
/sbin/iptables -A INPUT -p tcp --dport 22 -j ACCEPT

開放TCP協議80端口供web服務
/sbin/iptables -A INPUT -p tcp --dport 80 -j ACCEPT

10.241.121.15是另一臺服務器的內網ip,因爲之間有通訊,接受全部來自10.241.121.15的TCP請求
/sbin/iptables -A INPUT -p tcp -s 10.241.121.15 -j ACCEPT

接受ping
/sbin/iptables -A INPUT -p icmp -m icmp --icmp-type 8 -j ACCEPT

這條規則參看:http://www.netingcn.com/iptables-localhost-not-access-internet.html
/sbin/iptables -A INPUT -m state --state ESTABLISHED -j ACCEPT

屏蔽上述規則覺得的全部請求,不可缺乏,不然防火牆沒有任何過濾的功能
/sbin/iptables -P INPUT DROP

可使用 iptables -L -n 查看規則是否生效

至此防火牆就算配置好,可是這是臨時的,當重啓iptables或重啓機器,上述配置就會被清空,要想永久生效,還須要以下操做:

/etc/init.d/iptables save   
或
service iptables save

執行上述命令能夠在文件 /etc/sysconfig/iptables 中看到配置

如下提供一個乾淨的配置腳本:

/sbin/iptables -P INPUT ACCEPT
/sbin/iptables -F
/sbin/iptables -X
/sbin/iptables -Z

/sbin/iptables -A INPUT -i lo -j ACCEPT 
/sbin/iptables -A INPUT -p tcp --dport 22 -j ACCEPT
/sbin/iptables -A INPUT -p tcp --dport 80 -j ACCEPT
/sbin/iptables -A INPUT -p tcp -s 10.241.121.15 -j ACCEPT
/sbin/iptables -A INPUT -p icmp -m icmp --icmp-type 8 -j ACCEPT
/sbin/iptables -A INPUT -m state --state ESTABLISHED -j ACCEPT
/sbin/iptables -P INPUT DROP

最後執行 ,先確保ssh鏈接沒有問題,防止規則錯誤,致使沒法連上服務器,由於沒有save,重啓服務器規則都失效,不然就只有去機房才能修改規則了。也能夠參考:ubuntu iptables 配置腳原本寫一個腳本。



四、經常使用網絡監控命令

(1) netstat -tunl:查看全部正在監聽的端口

  1. [root@AY1407041017110375bbZ ~]# netstat -tunl  
  2. Active Internet connections (only servers)  
  3. Proto Recv-Q Send-Q Local Address               Foreign Address             State        
  4. tcp        0      0 0.0.0.0:22                  0.0.0.0:*                   LISTEN        
  5. udp        0      0 ip:123           0.0.0.0:*                                 
  6. udp        0      0 ip:123           0.0.0.0:*                                 
  7. udp        0      0 127.0.0.1:123               0.0.0.0:*                                 
  8. udp        0      0 0.0.0.0:123                 0.0.0.0:*    



其中123端口用於NTP服務。

 

(2)netstat  -tunp:查看全部已鏈接的網絡鏈接狀態,並顯示其PID及程序名稱。

 

  1. [root@AY1407041017110375bbZ ~]# netstat -tunp  
  2. Active Internet connections (w/o servers)  
  3. Proto Recv-Q Send-Q Local Address               Foreign Address             State       PID/Program name     
  4. tcp        0     96 ip:22            221.176.33.126:52699        ESTABLISHED 926/sshd              
  5. tcp        0      0 ip:34385         42.156.166.25:80            ESTABLISHED 1003/aegis_cli    



根據上述結果,能夠根據須要kill掉相應進程。

 

如:

kill -9 1003

(3)netstat -tunlp

 

(4)netstat經常使用選項說明:

-t: tcp   

-u : udp

-l, --listening

       Show only listening sockets.  (These are omitted by default.)

-p, --program

       Show the PID and name of the program to which each socket belongs.

--numeric , -n

Show numerical addresses instead of trying to determine symbolic host, port or user names.

 

五、修改ssh的監聽端口

(1)修改 /etc/ssh/sshd_config 

原有的port 22

改成port 44

(2)重啓服務

/etc/init.d/sshd restart

(3)查看狀況

 

  1.  netstat -tunl  
  2. Active Internet connections (only servers)  
  3. Proto Recv-Q Send-Q Local Address               Foreign Address             State        
  4. tcp        0      0 0.0.0.0:44               0.0.0.0:*                   LISTEN        
  5. udp        0      0 ip:123           0.0.0.0:*                                 
  6. udp        0      0 ip:123           0.0.0.0:*                                 
  7. udp        0      0 127.0.0.1:123               0.0.0.0:*                                 
  8. udp        0      0 0.0.0.0:123                 0.0.0.0:*     

 

  

本文由 CentOS中文站 - 專一Linux技術 做者:centos 發表,其版權均爲 CentOS中文站 - 專一Linux技術 全部,文章內容系做者我的觀點,不表明 CentOS中文站 - 專一Linux技術 對觀點贊同或支持。如需轉載,請註明文章來源。

贊0

相關文章
相關標籤/搜索