PCI-DSS标准服务器初始化
挂载数据盘
fdiks -l #查看硬盘
fstab -u /dev/vdb #执行分区,输入命令n后面都采用默认值,然后输入w完成写入
mkfs.ext4 /dev/vdb1 #格式化文件系统
mount /dev/vdb1 /xxx #完成挂载
echo `blkid /dev/vdb1 | awk '{print $2}' | sed 's/\"//g'` /xxx ext4 defaults 0 0 >> /etc/fstab
##自动挂载
ssh加固
创建独立用户
useradd xxx
su xxx
cd
mkdir .ssh
vi .ssh/authorized_keys #添加SSH公钥
chmod 600 .ssh/authorized_keys
chmod 700 .ssh
添加sudoer权限
visudo
添加一行:
xxx ALL=(ALL) NOPASSWD: ALL
加固openssh
ssh -Q cipher
#查看ssh支持的算法,复制并剔除弱算法
#去除所有包含cbc或arcfour的,将剩下的用逗号连接
vi /etc/ssh/sshd_config
修改配置:
Port ??? #修改ssh端口,注意安全组需要同步切换
PermitRootLogin no #禁用root远程登陆(建议先确认新建用户可以登陆以后)
Ciphers aes128-ctr,aes192-ctr,aes256-ctr,aes128-gcm@openssh.com,aes256-gcm@openssh.com,chacha20-poly1305@openssh.com
# 刚刚筛选后的算法
安装docker
yum install -y yum-utils device-mapper-persistent-data lvm2
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
yum install -y docker-ce
service docker start
chkconfig docker on
usermod -aG docker xxx
安装jenkins
#/bin/bash
docker run -d -e JENKINS_USER=$(id -u) -v /var/run/docker.sock:/var/run/docker.sock -p 8080:8080 -p 50000:50000 -v /data/jenkins:/var/jenkins_home -v /usr/bin/docker:/usr/bin/docker --restart unless-stopped --env JENKINS_OPTS="--prefix=/jenkins" jenkins/jenkins:lts
安装ovpn
yum -y install https://as-repository.openvpn.net/as-repo-centos7.rpm
yum -y install openvpn-as
chkconfig openvpnas on
配置ovpn
cd /usr/local/openvpn_as/bin
./ovpn-init
#初始化ssl证书
openssl req -out server.csr -new -newkey rsa:4096 -sha256 -nodes -keyout server.key
# 自签名
openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt
# 备份现有证书
cp -r /usr/local/openvpn_as/etc/web-ssl ./ssl-bak
# 覆盖
cp server.crt /usr/local/openvpn_as/etc/web-ssl/
cp server.key /usr/local/openvpn_as/etc/web-ssl/
然后访问https://ip:943/admin 进入管理后台
如果chrome报ssl错误,可以在错误页面输入thisisunsafe强制忽略https错误
进入管理后台后
– Authentication/General
- 选择Local
- 启用google authenticator
- Configuration/Network Settings
- ip或地址配置为公网ip或域名;
- 关闭Admin Web Server Forwarding(成功从内网访问admin页面后操作)
- Configuration/VPN Settings
- Dynamic IP Address配置到主机网段
- Group Default IP Network 配置到主机网段
- Routing 配置可访问网段
- Routing 关闭internet traffic be routed
- Do not alter client DNS
- Configuration/CWS Settings
关闭API访问
User Management 配置用户,修改密码,修改可访问ip段
开放安全组 TCP:443,UDP:1194; TCP:943内网
配置系统日志采集
前期准备
- 开启阿里云日志采集服务
- 创建log project
- 创建syslog类型logstore
- 创建access key并授权
配置rsyslog
yum install -y rsyslog-gnutls
rsyslogd -v #确认版本,通常是8.x
vi /etc/rsyslog.conf
在文件末尾配置,注意$WorkDirectory在文件中已经配置,大部分配置已经存在只是被注释掉,注意检查文件中现有配置;
其中$DefaultNetstreamDriverCAFile配置为系统根证书所在路径。
注意替换授权信息
# Setup disk assisted queues
$WorkDirectory /var/spool/rsyslog # where to place spool files
$ActionQueueFileName fwdRule1 # unique name prefix for spool files
$ActionQueueMaxDiskSpace 1g # 1gb space limit (use as much as possible)
$ActionQueueSaveOnShutdown on # save messages to disk on shutdown
$ActionQueueType LinkedList # run asynchronously
$ActionResumeRetryCount -1 # infinite retries if host is down
$ActionSendTCPRebindInterval 100 # close and re-open the connection to the remote host every 100 of messages sent.
#RsyslogGnuTLS set to default ca path
$DefaultNetstreamDriverCAFile /etc/ssl/certs/ca-bundle.crt
template(name="LogServiceFormat" type="string"
string="<%pri%>1 %timestamp:::date-rfc3339% %HOSTNAME% %app-name% %procid% %msgid% [logservice project=\"test-project-1\" logstore=\"test-logstore-1\" access-key-id=\"<yourAccessKeyId>\" access-key-secret=\"<yourAccessKeySecret>\"] %msg%\n"
)
# Send messages to Loggly over TCP using the template.
action(type="omfwd" protocol="tcp" target="cn-hangzhou.log.aliyuncs.com" port="10009" template="LogServiceFormat" StreamDriver="gtls" StreamDriverMode="1" StreamDriverAuthMode="x509/name" StreamDriverPermittedPeers="*.log.aliyuncs.com")
service rsyslog restart
logger hello world! #测试日志,然后观察日志服务是否成功采集
安装ossec服务
相关资源
- https://github.com/ossec/ossec-hids/releases
- https://github.com/ossec/ossec-wui
准备服务
# Add Yum repo configuration
wget -q -O - https://updates.atomicorp.com/installers/atomic | sudo bash
# 如果不存在命令,执行yum -y install yum-utils
sudo yum-config-manager --enable atomic
# Server(仅需要在server节点安装)
sudo yum install ossec-hids-server ossec-hids-mysql
# Agent(仅需要在agent节点安装)
sudo yum install ossec-hids-agent
# 停用atomic repo,否则后续yum update更新系统包的时候会出错
sudo yum-config-manager --disable atomic
server端配置
前往ossec-hids下载最新release包(主要获取数据库脚本),创建数据库并配置好用户权限,导入./src/os_dbd/mysql.schema
编辑/var/ossec/etc/ossec.conf,添加数据库配置
<ossec_config>
<database_output>
<hostname>192.168.2.30</hostname>
<username>ossecuser</username>
<password>ossecpass</password>
<database>ossec</database>
<type>mysql</type>
<port>3306</port>
</database_output>
</ossec_config>
配置完毕后执行service ossec-hids start或/var/ossec/bin/ossec-control start
chkconfig ossec-hids on
开启自动启动
配置安全组:
允许局域网访问 TCP/514, TCP/1515, UDP/514, UDP/1514
agent端配置
- 配置ossec conf
编辑/var/ossec/etc/ossec.conf
修改ossec_config/client/server-ip - 服务端注册agent
在server端执行/var/ossec/bin/manage_agents
输入指令A配置对应agent name, ip信息,记录id
完成后输入指令E导出key - 配置agent
回到agent端,执行:
touch /var/ossec/queue/rids/sender #直接执行manage_agent会报错
/var/ossec/bin/manage_agent
输入指令I,输入刚刚导出的key,确认添加 - 启动agent服务
执行
/var/ossec/bin/ossec-control start
chkconfig ossec-hids on
开启自动启动 - 验证
服务端执行/var/ossec/bin/agent_control -l
确认注册的agents状态为active
安装web服务
yum install -y httpd-tools
git clone https://github.com/ossec/ossec-wui.git
## 进入到项目目录执行
sudo ./setup.sh
## 这里使用nginx & php-fpm搭建,所以用户名密码随便写,关联系统用户选择apache
# 生成用户名密码文件,一会配置nginx需要
htpasswd -c /path/to/passwdfile username
新增nginx配置
server {
listen 9001; #使用新端口号避免上下文冲突,然后添加反向代理
server_name _;
auth_basic "OSSEC Admin Login";
auth_basic_user_file /path/to/passwdfile;
root /path/to/ossec-wui/;
index index.php;
location ~* \.(ico|css|js|htm|html|js|gif|jpg|jpeg|svg)(\?.*)?$ {
access_log off;
}
location .git {
return 404;
}
location ~* \.php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}
}
基本完工,再整理一遍安全组,定期执行yum update就没什么问题了