1. 程式人生 > 其它 >audit監控 nmap掃描 nginx,tomcat隱藏版本資訊

audit監控 nmap掃描 nginx,tomcat隱藏版本資訊

技術標籤:Linux

文章目錄

nmap tcpdump audit nginx tomcat mysql安全設定

nmap

格式: nmap [掃描型別] [選項] <掃描目標>

  • -sS, TCP SYN掃描(半開) 快但是預設被認為是攻擊行為
  • -sT,TCP 連線掃描(全開)
  • -sU, UDP掃描
  • -sP, ICMP掃描
  • -A,目標系統全面分析
  • -n , 不執行DNS解析 預設是將掃描目標當做域名的

tcpdump

選項說明
-i指定監控的網路介面 預設監聽第一個網絡卡
-A轉換為ASCII碼
-w將資料包資訊儲存到指定檔案
-r從指定檔案讀取資料包資訊

-i具體組合

過濾條件引數
型別host(主機)、net(網段)、port(埠)、portrange(埠範圍)
方向src(源地址)、dst(目標地址)
協議tcp、udp、ip、wlan、arp…

可以使用and or not 來進行組合

舉例:tcpdump -w log -i any src or dst port 3306

audit監控

審計的目的是基於事先配置的規則生成日誌,記錄可能發生在系統上的事件,不能夠提供額外安全保護,但會發現並記錄違反安全策略的人及其對應的行為 記錄行為工具

審計能夠記錄的日誌內容:

  • 日期與事件以及事件的結果
  • 觸發事件的使用者
  • 所有認證機制的使用都可以被記錄,如ssh等
  • 對關鍵資料檔案的修改行為等都可以被記錄

案例

audit基本命令
命令引數說明
auditctl -s查詢狀態
auditctl -l檢視規則
auditctl -D刪除所有規則
auditctl -w path -p permission -k key_name定義臨時檔案系統規則 w指定檔案目錄 p許可權wrx a(檔案或目錄的屬性發生變化)k可選項 指定key_name方便識別哪些規則產生的日誌項
環境配置
yum -y install audit
cat /etc/audit/auditd.conf
======================
local_events = yes
write_logs = yes
log_file = /var/log/audit/audit.log   #日誌位置
log_group = root
log_format = RAW
flush = INCREMENTAL_ASYNC
freq = 50
max_log_file = 8
num_logs = 5
priority_boost = 4
disp_qos = lossy
dispatcher = /sbin/audispd
name_format = NONE
##name = mydomain
max_log_file_action = ROTATE
space_left = 75
space_left_action = SYSLOG
verify_email = yes
action_mail_acct = root
admin_space_left = 50
admin_space_left_action = SUSPEND
disk_full_action = SUSPEND
disk_error_action = SUSPEND
use_libwrap = yes
##tcp_listen_port = 60
tcp_listen_queue = 5
tcp_max_per_addr = 1
##tcp_client_ports = 1024-65535
tcp_client_max_idle = 0
enable_krb5 = no
krb5_principal = auditd
##krb5_key_file = /etc/audit/audit.key
distribute_network = no
=====================================
systemctl enable --now auditd   

定義臨時檔案系統規則

auditctl -w /etc/passwd -p wa -k passwd_change
auditctl -w /etc/selinux/ -p wa -k selinux_change
auditctl -w /usr/sbin/fdisk -p x -k disk_partition
auditctl -w /etc/ssh/sshd_config -p warx -k sshd_config
#            指定檔案或目錄		指定許可權     key_name標識用的
定義永久審計規則,修改規則配置檔案
vim /etc/audit/rules.d/audit.rules
==================================
-w /etc/passwd -p wa -k passwd_changes
-w /usr/sbin/fdisk -p x -k partition_disks     #就是將auditctl 命令寫到配置檔案裡面 永久生效
=================================================
檢索審計日誌
ausearch -k sshd_config -i    #-k   根據key_name檢索 -i  互動式

Nginx安全配置優化

刪除不需要的模組

原始碼編譯時使用–without引數指定不需要的模組

修改版本資訊

curl -I http://192.168.2.5 #檢視伺服器頭部資訊
HTTP/1.1 200 OK
Server: nginx/1.17.6   #含有nginx版本資訊
Date: Tue, 12 Jan 2021 10:45:48 GMT
Content-Type: text/html
Content-Length: 612
Last-Modified: Wed, 06 Jan 2021 10:33:00 GMT
Connection: keep-alive
ETag: "5ff591dc-264"
Accept-Ranges: bytes


vim /usr/local/nginx/conf/nginx.conf
===================================
http{
...
	server_tokens off;         #不在資料包頭部資訊包含版本資訊
....
}
======================================
nginx -s reload #重啟
curl -I http://192.168.2.5  #檢視伺服器響應的頭部資訊
HTTP/1.1 200 OK
Server: nginx                 #版本資訊消失了
Date: Tue, 12 Jan 2021 10:47:59 GMT
Content-Type: text/html
Content-Length: 612
Last-Modified: Wed, 06 Jan 2021 10:33:00 GMT
Connection: keep-alive
ETag: "5ff591dc-264"
Accept-Ranges: bytes

nginx限制併發量 ngx_http_limit_req_module模組 降低DDOS攻擊

vim /usr/local/nginx/conf/nginx.conf
==========================
http{
...				#key值          客戶端IP儲存在名稱為one的共享記憶體 記憶體大小為10M 速度
limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s;
	server {
		listen 80;
		server_name localhost;
		limit_req zone=one burst=5;    #burst 存取5個同一個ip請求 處理一個
	}															
....															
}																
=======================================								
#客戶端測試														   
ab -c 100 -n http://192.168.2.5/   #最後要加/ 測試同時100個請求		
....                          #省略測試不必要資訊
Complete requests:      100   #傳送了100個請求
Failed requests:        94     #94個被拒絕了          100 - 1個處理-5個等待=94個被拒絕
.....

拒絕非法請求頭

vim /usr/local/nginx/conf/nginx.conf
=========================
http{
	server{
		listen 80;
		if($request_method !~ ^(GET|POST)$) {  #檢索請求頭 如果是除了GET POST以外的請求 就返回444
			return 444;
		}
	}
}
===============================
/usr/local/nginx/sbin/nginx -s reload


#客戶端測試
curl -i -X GET http://192.168.2.5 #顯示請求內容和返回資訊      X指定請求方式為GET
#GET方式成功
curl -i -X HEAD http://192.168.2.5
curl: (52) Empty reply from server  #被拒絕了

防止buffer溢位

vim /usr/local/nginx/conf/nginx.conf
================================
http{
	client_body_buffer_size 1k;
	client_header_buffer_size 1k;
	client_max_body_size 1k;
	large_client_header_bffers 2 1k;
	.....
}
====================================
/usr/local/nginx/sbin/nginx -s reload

資料庫安全配置

初始化安全指令碼

mariadb和mysql安裝後root預設沒有密碼且有一個任何人都可以操作的test測試資料庫

systemctl start mariadb
mysql_secure_installation  #執行初始化安全指令碼   禁止root從遠端其他主機登入資料庫,並刪除test資料庫

手動修改資料庫密碼

mysqladmin -uroot -p123456 password 'mysql' #重新設定資料庫root密碼為mysql
mysql -uroot -pmysql #測試新密碼登入
MariDB[(none)]> set password for [email protected]'localhost'=password('123456');  #在資料庫裡面改回123456

通過bash終端修改mysql密碼 和資料庫內命令修改密碼 都可以被看到明文密碼

history
cat .bash_history   #看見歷史命令記錄  看見mysqladmin修改的密碼
cat .mysql_history  #檢視資料庫命令 看見修改的密碼

所以要管理好歷史記錄 不使用明文 資料庫binlog日誌在5.6版本前也有明文密碼

資料庫備份與還原

mysqldump -uroot -p123456 mydb table > table.sql  #匯出mydb資料庫中的table表
mysqldump -uroot -p123456 mydb > mydb.sql   #匯出mydb資料庫中的所有表
mysqldump -uroot -p123456 --all-databases > all.sql #匯出所有資料庫

mysql -uroot -p123456 mydb < table.sql  #將table.sql 表匯入mydb資料庫
mysql -uroot -p123456 mydb < mydb.sql
mysql -uroot -p123456 < all.sql        #匯入資料庫

資料庫測試抓包

環境配置
  • 2.5資料庫 有tom資料庫使用者 密碼123 允許在任何機子上發起訪問 能夠訪問所有表
  • 2.100測試端
  • 2.5 tcpdump監聽3306埠抓包
測試
#2.5
mysql -uroot -p123456
MariaDB [(none)]> grant all on *.* to [email protected]'%' identified by '123';
#                 允許  所有操作  在所有資料庫所有表中     tom使用者使用123密碼在任何主機上登入
tcpdump -w log -i any src or dst port 3306
#抓取源或目標埠是3306埠的資料包儲存在log檔案中

#2.100
mysql -utom -p123 -h192.168.4.5
MariaDB [(none)]> select * from mysql.user; #執行查詢使用者命令
MariaDB [(none)]> exit  #退出

#2.5檢視log
tcpdump -A -r log
09:43:13.837031 IP 192.168.2.100.57480 > proxy.mysql: Flags [S], seq 2877284794, win 29200, options [mss 1460,sackOK,TS val 12322866 ecr 0,nop,wscale 7], length 0
E..<..@[email protected]..y...d..................r............
...2........................
09:43:13.837105 IP proxy.mysql > 192.168.2.100.57480: Flags [S.], seq 4201524256, ack 2877284795, win 28960, options [mss 1460,sackOK,TS val 20129128 ecr 12322866,nop,wscale 7], length 0
E..<..@[email protected]..........d.....n, ......q ...........
.3%h...2....................
09:43:13.837373 IP 192.168.2.100.57480 > proxy.mysql: Flags [.], ack 1, win 229, options [nop,nop,TS val 12322871 ecr 20129128], length 0
E..4..@[email protected]......d.............n,!.....R.....
...7.3%h................
......
#查詢命令資料包省略   有加密的hash值  可以逆向破解
#看前三次通訊    2.100傳送SYN給2.5  2.5返回SYN和ACK給2.100 2.100傳送ACK給2.5  通訊建立了

可以發現有被抓包破解的危險

可以SSH遠端連線伺服器後本地登陸資料庫 或者 使用SSL對mysql伺服器進行加密,類似HTTP+SSL


Tomcat安全配置

隱藏版本資訊

vim /usr/local/tomcat/conf/server.xml
==============================
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000" redirectPort="8443" server="jacob">
================================================================
/usr/local/tomcat/bin/shutdown.sh
/usr/local/tomcat/bin/startup.sh

#測試
curl -I http://192.168.2.100:8080/xx