audit監控 nmap掃描 nginx,tomcat隱藏版本資訊
阿新 • • 發佈:2021-01-13
技術標籤: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