注意:推薦使用centos7.4系列的系統,用RHEL也能夠php
實驗環境搭建:python
系統安裝linux
安裝RHEL7或者centos7系列的64位系統,不要用32位算法
下載地址: shell
連接: https://pan.baidu.com/s/1hsw3P1y 密碼: suu9vim
[root@xuegod63 ~]# iptables -F [root@xuegod63 ~]# systemctl stop firewalld [root@xuegod63 ~]# systemctl disable firewalld
[root@xuegod63 ~]# getenforce
Disabled
vim /etc/selinux/config
##命令
vim /etc/sysconfig/network-scripts/ifcfg-ens32
TYPE="Ethernet" PROXY_METHOD="none" BROWSER_ONLY="no" BOOTPROTO="static" DEFROUTE="yes" IPV4_FAILURE_FATAL="no" IPADDR=192.168.0.63 GATEWAY=192.168.0.1 DNS1=223.5.5.5 NAME="ens32" UUID="5e02ab66-a084-404a-bb4c-50bf47bd1bd5" DEVICE="ens32" ONBOOT="yes"
關閉NetworkManager 服務:
##命令
service NetworkManager stop systemctl disable NetworkManager.service
[root@xuegod63 ~]# vim /etc/hosts 127.0.0.1 localhostlocalhost.localdomain localhost4 localhost4.localdomain4 ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6 192.168.1.63 xuegod63.cn xuegod63 192.168.1.64 xuegod64.cn xuegod64
[root@xuegod63 ~]# vim /etc/hostname xuegod63 [root@xuegod63 ~]# hostname xuegod63 ##當即生效 xuegod63
本地yum源centos
[root@xuegod63 ~]# mount /dev/sr0 /mnt/ [root@xuegod63 ~]# echo "/dev/sr0 /mnt iso9660 defaults 0 0" >> /etc/fstab [root@xuegod63 ~]# rm -rf /etc/yum.repos.d/* [root@xuegod63 ~]# cat> /etc/yum.repos.d/rhel6.repo <<EOF > [rhel6-source] >name=rhel6-source >baseurl=file:///mnt > enabled=1 >gpgcheck=0 > EOF
阿里雲鏡像源站點(http://mirrors.aliyun.com/)緩存
centos鏡像參考:http://mirrors.aliyun.com/help/centos
安全
CentOS服務器
1、備份
mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
2、下載新的CentOS-Base.repo 到/etc/yum.repos.d/
CentOS 7
wget -O /etc/yum.repos.d/CentOS-Base.repohttp://mirrors.aliyun.com/repo/Centos-7.repo
yum install epel-release –y
主機網卡類型:橋接
開機配置成: init 3 模式
[root@xuegod63 ~]# ln -svf /lib/systemd/system/runlevel3.target
/etc/systemd/system/default.target
重啓機器生效
[root@xuegod63 ~] reboot
建立一個快照
每作一個新的服務時,使用一個全新的快照.
克隆虛擬機:
克隆後發現克隆的機器網卡沒法啓動,須要以下操做:
1.刪除克隆機器的網卡MAC地址
2.刪除網卡信息文件
[root@xuegod63 network-scripts]# rm -rf /etc/udev/rules.d/70-persistent-net.rules
3.重啓 reboot
SSHD服務
介紹:SSH協議:安全外殼協議.爲Secure Shell的縮寫. SSH爲創建在應用層和傳輸層基礎上的安全協議.
做用:sshd服務使用SSH協議能夠用來進行遠程控制,活在計算機之間傳送文件.
相比較以前用telnet方式來傳輸文件要安全不少,由於telnet使用明文傳輸,sshd時加密傳輸
服務安裝:
須要安裝OpenSSH四個安裝包:
OpenSSH軟件包,提供了服務端後臺程序和客戶端工具,用來加密遠程控件和文件傳輸過程的數據.
並由此來代替原來的相似服務.
安裝包:
OpenSSH服務須要4個軟件包
openssh-5.3p1-114.el6_7.x86_64:包含OpenSSH服務器及客戶端須要的核心文件
openssh-clients-5.3p1-114.el6_7.x86_64:OpenSSH客戶端軟件包
openssh-server-5.3p1-114.el6_7.x86_64:OpenSSH服務器軟件包
openssh-askpass-5.3p1-114.el6_7.x86_64:支持對話框窗口的顯示,是一個基於X系統的密碼診斷工具
這4個福安簡報在咱們的RHEL鏡像軟件安裝包裏有.
[root@xuegod63 Packages]# ls /media/cdrom/Packages/openssh* /media/cdrom/Packages/openssh-5.3p1-104.el6.x86_64.rpm /media/cdrom/Packages/openssh-askpass-5.3p1-104.el6.x86_64.rpm /media/cdrom/Packages/openssh-clients-5.3p1-104.el6.x86_64.rpm /media/cdrom/Packages/openssh-server-5.3p1-104.el6.x86_64.rpm
找到軟件包存放位置以後,下面咱們來安裝軟件包
安裝方法有兩種:
yum install openssh openssh-clients openssh-server -y 來安裝
前提:系統以及配置好yum源,(本地源or網絡源) 推薦用yum來安裝
設置開機自動掛載系統鏡像文件
echo「/dev/cdrom /media/cdrom iso9660 defaults 0 0 」>>/etc/fstab
#你的光驅設別 #掛載點 #掛在格式 #默認 #默認
rpm –ivh /media/cdrom/Packages/openssh*.rpm
可能須要解決依賴關係
確認軟件包是否已經安裝
rpm -qa | grep openssh openssh-askpass-5.3p1-114.el6_7.x86_64 openssh-clients-5.3p1-114.el6_7.x86_64 openssh-5.3p1-114.el6_7.x86_64 openssh-server-5.3p1-114.el6_7.x86_64
查看軟件安裝生成的文件
rpm –ql openssh /etc/ssh /etc/ssh/moduli /usr/bin/ssh-keygen /usr/libexec/openssh /usr/libexec/openssh/ssh-keysign /usr/share/doc/openssh-5.3p1
OpenSSH配置文件
OpenSSH經常使用配置文件有兩個/etc/ssh/ssh_config和/etc/sshd_config
ssh_config 爲客戶端配置文件
sshd_config 爲服務器端配置文件
服務啓動和關閉腳本
[root@xuegodssh]# service sshd restart/stop/start/status
開機啓動服務
[root@xuegod63 ~]# chkconfig sshd on [root@xuegod63 ssh]# systemctl list-unit-files | grep sshd sshd-keygen.service static sshd.service enabled sshd@.service static sshd.socket disabled
如何使用ssh來遠程鏈接主機:
方法一
1. ssh [遠程主機用戶名]@[遠程服務器主機名或IP地址]
若是用root進行登錄遠程主機能夠這樣
[root@xuegodssh]# ssh 192.168.0.64
普通用戶:
[root@xuegod63 ~]# useradd cat&&echo 123456 | passwd --stdin cat [root@xuegodssh]# ssh cat@192.168.0.64
第一次登錄服務器時系統沒有保存遠程主機的信息,爲了確認該主機身份會提示用戶是否繼續鏈接,輸入yes後登錄,這是系統會將遠程服務器信息寫入用戶主目錄下的$HOME/.ssh/known_hosts文件中,下次再進行登錄時由於保存有該主機信息就不會再提示了.
RSA算法基於一個十分簡單的數論事實:將兩個大素數相乘十分容易,可是想要對其乘積進行因式分解卻極其困難,所以能夠將乘積公開做爲加密密鑰
方法二
ssh -l [遠程主機用戶名] [遠程服務器主機名或IP地址]
例: ssh -l cat 192.168.0.64
-l login_name
介紹下配置文件,和以及須要安全調優的地方
注:參數前面有#,表示是默認值. 固然#號也表示註釋
/etc/ssh/sshd_config 配置文件
Port 22
設置sshd監聽端口號
#SSH 預設使用22 這個port, 也可使用多個port, 即重複使用 port 這個設定項目!
#例如想要開放sshd端口爲 22 和 222 ,則多加一行內容爲 : Port 222 便可.
#而後從新啓動sshd這樣就行了. 建議你們修改port number爲其餘端口. 防止別人暴力破解.
例: 修改sshd 服務器默認監聽的端口爲 222
[root@xuegodssh]#vim /etc/ssh/sshd_config 改 Port 22 爲 Port 222 [root@xuegodssh]# service sshd restart
測試:
[root@xuegod74 ~]# netstat -tlunp | grep sshd tcp 0 0 0.0.0.0:222 0.0.0.0:* LISTEN 4139/sshd tcp 0 0 :::222 :::* LISTEN 4139/sshd
修改完端口默認端口號,登錄方法:
[root@xuegod63 ~]# ssh -p 222 192.168.0.63 ListenAddress 0.0.0.0
設置sshd服務器綁定的IP地址,0.0.0.0 表示監聽全部地址
這個值能夠寫成本地IP地址也能夠寫成全部地址
Protocol 2
#選擇的 SSH 協議版本, 能夠是1 也能夠是2 , CentOS 5.x 預設是僅支持 V2.
安全考慮, 設置爲最新的協議版本
#HostKey /etc/ssh/ssh_host_key
設置包含計算機私人密鑰的文件
SyslogFacility AUTHPRIV
#當有人使用 SSH 登錄系統時, SSH 會記錄信息,這個信息要記錄的類型爲 AUTHPRIV
sshd服務日誌存放在: /var/log/secure
例: 爲何sshd配置文件中沒有指定日誌,但日誌卻存放在了: /var/log/secure ?
[root@xuegodssh]# vim /etc/rsyslog.conf
#LogLevel INFO
#登記記錄的等級! INFO 級別以上
下面是安全調優的重點:
LoginGraceTime 2m #grace 優雅
# 當使用者連上 SSH server 以後, 會出現輸入密碼的畫面, 在該畫面中
# 在多久時間內沒有成功連上 SSH server 就強迫短線! 若無單位則默認時間爲秒!
能夠根據實際狀況來修改
#PermitRootLogin yes
#是否容許root登入! 預設是容許的, 可是建議設定成 no !
真實的生產環境服務器,是不容許 root 帳號直接登錄的!!!
#PasswordAuthentication yes
# 密碼驗證固然是須要的! 因此這裏寫 yes, 也能夠設定爲 no
#在真實的生產服務器上,根據不一樣的安全級別要求,有的是設置不須要密碼登錄的,經過認證密鑰來登錄
#PermitEmptyPasswords no
#若上面那一項設定爲yes 的話,這一項最好設定爲 no
# 這個項目是否容許以空的密碼登入? 固然不準
#PintMotd yes
#登入後是否顯示出一些信息? 例如上次登入的時間,地點等等等,預設是yes
# 也就是打印出 /etc/motd 這個文檔的內容
例: 給sshd服務添加一些警告信息
[root@xuegod ~]# cat /etc/motd [root@xuegod ~]# echo 'Warning ! From now on, all of your operation has been record!'> /etc/motd
測試:
ssh 192.168.0.64 root@192.168.0.64's password: Last login: Thu Jun 23 14:02:38 2016 from 192.168.0.1 Warning ! From now on, all of your operation has been record!
警告! 從如今開始,你全部的操做已經被記錄!
# PrintLastLog yes
# 顯示上次登入的信息 因而也是yes
例:
ssh 192.168.0.63 Last login: Tue Nov 4 19:57:31 2014 from 192.168.1.107 #就是這個信息
# UseDNS yes
# 通常來講, 爲了要判斷客戶端來源是否合法, 所以會使用 DNS 去反查客戶端的主機名
# 不過若是是在內網互聯, 這項目設定爲 no 會讓聯機速度比較快
防止暴力破解的方法有三種
配置安全的 sshd 服務
1.密碼足夠複雜,密碼的長度要大於8位最好大於20位. 密碼的複雜度是密碼要儘量有數字,大小寫字母和特殊符號混合組成
2.修改默認端口號
3.不容許root帳號直接登錄,添加普通用戶,授予root權限
互動: 是否能夠禁止 root 身份登錄?
不行, 由於有些程序須要使用 root 身份登錄並運行.另外判斷一個用戶是否是超級管理員,看的是用戶的ID 是否爲 0.
4. 不容許密碼登錄,只能經過認證的密鑰來登錄系統
實驗環境:
服務端:xuegod63 IP:192.168.0.63
客戶端:xuegod64 IP:192.168.0.64
客戶端生成密鑰對, 而後把公鑰傳輸到服務器
[root@xuegod64 ~]# ssh-keygen Generating public/private rsa key pair. Enter file in which to save the key (/root/.ssh/id_rsa): #提示輸入密匙文件的保存路徑,選擇默認繼續哈~ Enter passphrase (empty for no passphrase): 下面要求輸入密碼,這裏的passphrase 密碼是對生成的私匙文件(/root/.ssh/id_dsa) 的保護口令,若是不設置能夠回車。 Enter same passphrase again: Your identification has been saved in /root/.ssh/id_rsa. Your public key has been saved in /root/.ssh/id_rsa.pub. The key fingerprint is: da:2c:d8:53:92:6e:ff:4a:54:14:cd:23:28:b3:bb:3b root@xuegod64 The key's randomart image is: +--[ RSA 2048]----+ | .o+ | | o ... + | | + .. . | | .. . | | o.S | | +.B | | . B.+ | | .E= | | .ooo. | +-----------------+ root@xuegod64 ~]# cd /root/.ssh/ [root@xuegod64 .ssh]# ls id_rsa id_rsa.pub known_hosts
發佈公鑰到服務器
使用ssh-copy-id 命令將客戶端生成的公鑰發佈到遠程服務器 192.168.0.63 xuegod63
[root@xuegod64 .ssh]# ssh-copy-id -i 192.168.0.63 The authenticity of host '192.168.0.63(192.168.0.63)' can't be established. RSA key fingerprint is d9:17:d7:db:38:7c:e8:56:9c:4b:7e:00:7f:9e:1c:74. Are you sure you want to continue connecting (yes/no)? yes Warning: Permanently added '192.168.0.64' (RSA) to the list of known hosts. root@192.168.0.64's password: Now try logging into the machine, with "ssh '192.168.0.63'", and check in: .ssh/authorized_keys to make sure we haven't added extra keys that you weren't expecting #這個時候能夠經過ssh 無密鑰直接登錄主機
注意: 若是服務器不是監聽 22 端口, 則須要這樣傳輸密鑰:
ssh-copy-id -i ~/.ssh/id_rsa.pub "-p 222 root@192.168.0.63"
簡單,靈活,功能強大
實戰背景:
最近公網網站一直被別人暴力破解sshd服務密碼。雖然沒有成功,但會致使系統負載很高,緣由是在暴力破解的時候,系統會不斷地認證用戶,從而增長了系統資源額外開銷,致使訪問公司網站速度很慢。
fail2ban能夠監視你的系統日誌,而後匹配日誌的錯誤信息(正則式匹配)執行相應的屏蔽動做(通常狀況下是防火牆),並且能夠發送e-mail通知系統管理員,很好、很實用、很強大!
#ban (bæn)禁令
簡單來講其功能就是防止暴力破解。工做的原理是經過分析必定時間內的相關服務日誌,將知足動做的相關IP利用iptables加入到dorp列表必定時間。
注:重啓iptables服務的話,全部DORP將重置。
下載軟件包:
官方地址:
http://www.fail2ban.org
http://www.fail2ban.org/wiki/index.php/Downloads
安裝:
互動:
這個陌生的安裝包如何安裝?
解壓查看readme文件
[root@xuegod63 ~]# tar -zxvf fail2ban-0.8.14.tar.gz [root@xuegod63 fail2ban-0.8.14]# vim README.md #查看如下內容
須要安裝python 開發環境, 而且版本要大於2.4
查看當前系統種的python 版本
[root@xuegod63 fail2ban-0.8.14]# python -V Python 2.6.6
安裝
[root@xuegod63 ~]# cd fail2ban-0.8.14 [root@xuegod63 fail2ban-0.8.14]#python setup.py install
相關主要文件說明:
/etc/fail2ban/action.d #動做文件夾, 內含默認文件. iptables以及mail等動做設置
/etc/fail2ban/fail2ban.conf #定義了fai2ban日誌級別,日誌位置及sock文件位置
/etc/fail2ban/filter.d #條件文件夾, 內含默認文件, 過濾日誌關鍵內容設置
/etc/fail2ban/jail.conf #主要配置文件,模塊化. 主要設置啓用ban動做的服務及動做閾值
# jail [dʒeɪl]監獄
生成服務啓動腳本
[root@xuegod63 fail2ban-0.8.14]# pwd /root/fail2ban-0.8.14 [root@xuegod63 fail2ban-0.8.14]# cp files/redhat-initd /etc/rc.d/init.d/fail2ban [root@xuegod63 fail2ban-0.8.14]#chkconfig --add fail2ban #開機自動啓動
互動: 你怎麼知道要複製這個文件? 一個新的軟件包,後期怎麼能夠知道哪一個文件是啓動腳本文件?
這就要找服務器啓動腳本的文件中有什麼特色,而後過濾處理啊對應的文件名那個
[root@xuegod63 fail2ban-0.8.14]# grep chkconfig ./* -R --color ./files/redhat-initd:# chkconfig: - 92 08
啓動腳本里都含有 chkconfig 字段
設置條件:ssh遠程登陸5分鐘內3次密碼驗證失敗,禁止用戶IP訪問主機1小時,1小時該限制自動解除,用戶可從新登陸。
由於動做文件(action.d/iptables.conf)以及日誌匹配條件文件(filter.d/sshd.conf )安裝後是默認存在的。基本不用作任何修改。全部主要須要設置的就只有jail.conf文件。啓用sshd服務的日誌分析,指定動做閥值便可。
實例文件/etc/fail2ban/jail.conf及說明以下:
[DEFAULT] #全局設置 ignoreip = 127.0.0.1/8 #忽略的IP列表,不受設置限制 bantime = 600 #屏蔽時間,單位:秒 findtime = 600 #這個時間段內超過規定次數會被ban掉 maxretry = 3 #最大嘗試次數 backend = auto #日誌修改檢測機制(gamin、polling和auto這三種) [ssh-iptables] #單個服務檢查設置,如設置bantime、findtime、maxretry和全局衝突,服務優先級大於全局設置。 enabled = true #是否激活此項(true/false)修改爲 true filter = sshd #過濾規則filter的名字,對應filter.d目錄下的sshd.conf action = iptables[name=SSH, port=ssh, protocol=tcp] #動做的相關參數,對應action.d/iptables.conf文件 sendmail-whois[name=SSH, dest=you@example.com, sender=fail2ban@example.c om, sendername="Fail2Ban"] #觸發報警的收件人 logpath = /var/log/secure #檢測的系統的登錄日誌文件。這裏要寫sshd服務日誌文件。 默認爲logpath = /var/log/sshd.log
#5分鐘內3次密碼驗證失敗,禁止用戶IP訪問主機1小時。 配置以下 bantime = 3600 #禁止用戶IP訪問主機1小時 findtime = 300 #在5分鐘內內出現規定次數就開始工做 maxretry = 3 #3次密碼驗證失敗
啓動服務
[root@xuegod63 fail2ban-0.8.14]# systemctl start fail2ban [root@xuegod63 fail2ban-0.8.14]# systemctl enable fail2ban
測試:
[root@xuegod63 fail2ban]# > /var/log/secure #清日誌。 從如今開始
[root@xuegod63 fail2ban]# systemctl restart fail2ban
Stopping fail2ban: [ OK ]
Starting fail2ban: [ OK ]
[root@xuegod63 fail2ban]# iptables -L -n
會多生成一個規則鏈
測試: 故意輸入錯誤密碼3次, 再進行登錄時,會拒絕登錄
[root@xuegod64 ~]# ssh 192.168.1.63 root@192.168.1.63's password: Permission denied, please try again. root@192.168.1.63's password: Permission denied, please try again. root@192.168.1.63's password: Permission denied (publickey,password). [root@xuegod64 ~]# ssh 192.168.1.63 ssh: connect to host 192.168.1.63 port 22: Connection refused [root@www.linuxidc.com ~]# iptables -L |tail -4 Chain fail2ban-SSH (1 references) target prot opt source destination DROP all -- 192.168.7.142 anywhere RETURN all -- anywhere anywhere
#配置好以後咱們檢測下fail2ban是否工做。
[root@xuegod63 fail2ban]# fail2ban-client status
Status |- Number of jail: 1 `- Jail list: ssh-iptables
#具體看某一項的狀態也能夠看,若是顯示被ban的ip和數目就表示成功了,若是都是0,說明沒有成功。 [root@xuegod63 fail2ban]# fail2ban-client status ssh-iptables Status for the jail: ssh-iptables |- filter | |- File list: /var/log/secure | |- Currently failed: 0 | `- Total failed: 3 `- action |- Currently banned: 1 | `- IP list: 192.168.1.64 `- Total banned: 1
查看fail2ban的日誌可以看到相關的信息 [root@xuegod63 fail2ban]# tail /var/log/fail2ban.log 2015-03-03 19:43:59,233 fail2ban.actions[12132]: WARNING [ssh-iptables] Ban 192.168.1.64
須要注意的四點:
1.若是作錯了,想清空一下記錄,還原:
只須要 > /var/log/secure 清空就能夠了
service fail2ban restart
2.另外若是後期須要把iptables清空或iptables重啓後,也須要把fail2ban重啓一下
3.若是修改ssh默認端口 22 爲2015後. 配置fail2ban來監控sshd服務
須要修改配置文件
[root@xuegod63 fail2ban]# vim jail.conf #修改iptables動做中的端口號。 默認爲ssh。 改:port=ssh 爲 port=2015
[root@xuegod63 fail2ban]# vim /etc/fail2ban/action.d/iptables.conf
#修改動做文件中默認端口號。
改: port=ssh 爲port=2015
重啓服務便可
4.若是想要fail2ban發送告警郵件, 請確保系統的郵件服務可以正常發送郵件
能夠發一封測試郵件
echo 「test mail」|mail -s test cat@xuegod.cn
1. 經過自定義的shell腳原本防禦安全
2. 經過 pam 模塊來防止暴力破解 ssh
[root@xuegod63 ~]# vim /etc/pam.d/sshd 在第一行下面添加一行: auth required pam_tally2.so deny=3 unlock_time=600 even_deny_root root_unlock_time=1200
說明:嘗試登錄失敗超過3次,普通用戶600秒解鎖,root用戶1200秒解鎖
手動解除鎖定:
查看某一用戶錯誤登錄次數:
pam_tally –-user
例如,查看work用戶的錯誤登錄次數:
pam_tally –-user work
清空某一用戶錯誤登錄次數:
pam_tally –-user –-reset
例如,清空 work 用戶的錯誤登錄次數,
pam_tally –-user work –-reset
3. denyhosts 軟件防禦
當咱們的服務器對外提供服務的時候,不免的會受到其餘用戶的掃描和試圖登陸的操做,以侵入服務器,這樣不只會浪費系統的資源,有可能還會被其餘用戶進行N屢次嘗試後登陸系統,對系統形成破壞影響業務系統的正常運行。DenyHosts是一個使用python編寫的腳本文件,經過運行這個腳本(能夠經過命令行運行、計劃任務或者是做爲服務運行)能夠有效的阻止對SSH服務器的攻擊。
DenyHosts具備以下特性:
1. 對/var/log/secure日誌文件進行分析,查找全部的登陸嘗試,而且過濾出失敗和成功的嘗試。
2.記錄下全部失敗的登陸嘗試的用戶名和主機,若是超過閥值,則記錄主機。
3.保持對每個登陸失敗的用戶(存在系統中或不存在系統中的用戶)的跟蹤
4.對每個可疑的登陸進行跟蹤。(雖然登陸成功,可是有不少次登陸失敗的記錄)
5.將可疑地址的主機加入到/etc/hosts.deny文件中。