搭建安全的Syslog-ng服务器:SSL密钥配置与系统搭建全指南
1. 邮件服务器故障排查
在使用邮件服务器时,我们可以从SMTP服务器给自己发送一些消息,检查POP3服务器是否能接收。如果两者在同一台机器上,而POP3服务器未收到消息,那很可能是配置问题;若在不同机器上,则可能是连接问题或配置问题。在排查其他问题之前,务必确保服务器正常运行。同时,有些管理员认为在NAT防火墙后运行就无需关注内部服务器的访问控制,这种想法是错误的,应尽可能严格限制服务器的访问控制。
2. 在Debian上为Syslog-ng服务器创建SSL密钥
2.1 问题提出
当你想搭建一个安全的Syslog-ng服务器时,需要使用stunnel和OpenSSL,但创建和管理OpenSSL证书十分复杂且耗时。如果你使用的是Debian或其衍生版本(除Fedora或Red Hat),就会面临这样的困扰。
2.2 解决方案
- 准备工作 :确保OpenSSL已安装,创建存储证书和密钥的目录,如
/etc/syslog-ng和/etc/syslog-ng/keys。 - 编辑脚本和配置文件 :
- 找到OpenSSL的CA.sh脚本,编辑以下两行:
DAYS="-days 3650" # 10 years
CATOP=./syslog-ng-CA
- 编辑openssl.cnf文件,使CA的顶级目录和默认天数与CA.sh一致:
[ CA_default ]
dir = ./syslog-ng-CA # Where everything is kept
[...]
default_days = 3650 # how long to certify for
- 编辑个人信息:
countryName_default = US
stateOrProvinceName_default = OR
0.organizationName_default = Alrac's Fine Hooves
- 注释掉以下行:
[ req_attributes ]
#challengePassword = A challenge password
#challengePassword_min = 4
#challengePassword_max = 20
#unstructuredName = An optional company name
- 创建证书颁发机构(CA) :
# cd /etc/syslog-ng
# /usr/lib/ssl/misc/CA.sh -newca
创建过程中需要设置强密码,后续创建新密钥对时会用到。
- 创建服务器和客户端密钥对 :
- 创建签名请求:
# openssl req -new -nodes -out syslogserver-xena_req.pem -keyout syslogserver-xena.pem
# openssl req -new -nodes -out uberpc_req.pem -keyout uberpc.pem
- 签署请求并创建新密钥对:
# openssl ca -out syslogserver-xena_cert.pem -infiles syslogserver-xena_req.pem
# openssl ca -out uberpc_cert.pem -infiles uberpc_req.pem
- 整理密钥文件 :
- 删除不需要的
.req.pem文件。 - 将客户端的公钥证书复制到一个新文件,并将其合并到私钥文件中。
- 对服务器的密钥对进行同样操作。
- 删除不需要的
- 复制密钥文件 :
# scp uberpc.pem root@uberpc:/etc/syslog-ng/keys/
root@xena:/etc/syslog-ng# scp syslogserver-xena.pem keys/
- 保护私钥 :
# chmod 0400 uberpc.pem
# chmod 0400 syslogserver-xena.pem
对于新客户端,重复以下步骤:
# openssl req -new -nodes -out newclient_req.pem -keyout newclient.pem
# openssl ca -out newclient_cert.pem -infiles newclient_req.pem
并完成私钥和公钥的合并、文件复制和权限调整。
2.3 讨论
虽然不加密Syslog-ng流量也能正常工作,但网络流量很容易被嗅探,尤其是有无线接入点的网络,因此加密是必要的。使用CA.sh脚本创建证书颁发机构可以简化文件创建过程,也可以使用openssl命令,它更具灵活性。CA.pl脚本的功能与CA.sh类似,只是它是Perl脚本。
以下是创建密钥对时各选项的含义:
| 命令选项 | 含义 |
| ---- | ---- |
| req -new -nodes | 创建一个无密码的私钥签名请求 |
| -out | 新签名请求的文件名,需使用 .pem 扩展名 |
| -keyout | 新私钥的文件名 |
| ca -out | 使用CA签署新私钥,并指定文件名 |
| -infiles | 使用现有的签名请求文件 |
3. 在Fedora上为Syslog-ng服务器创建SSL密钥
3.1 问题提出
在Fedora上搭建安全的Syslog-ng服务器时,OpenSSL的使用与其他Linux发行版不同,没有CA.sh或CA.pl脚本,使用 /etc/pki 目录,让人感到困惑。
3.2 解决方案
- 查看Makefile功能 :
# cd /etc/pki/tls/certs
# make
- 创建服务器和客户端证书 :
# make syslogserver-xena.pem
# make uberpc.pem
使用服务器的完全限定域名作为通用名,避免客户端出现问题。
- 复制公钥证书 :将客户端的公钥证书复制到一个新文件,并将所有客户端的公钥证书合并到 /etc/syslog-ng/clientkeys 文件中。
- 复制密钥文件 :
# scp uberpc.pem root@uberpc:/etc/syslog-ng/keys/
root@xena:/etc/syslog-ng# scp syslogserver-xena.pem keys/
- 保护私钥 :
# chmod 0400 uberpc.pem
# chmod 0400 syslogserver-xena.pem
对于新客户端,重复创建密钥文件、复制文件、调整权限和复制公钥证书的步骤。
3.3 讨论
与Debian不同,Fedora的Makefile创建的密钥文件格式符合stunnel要求,无需额外处理。虽然不加密Syslog-ng流量也可行,但存在安全风险。
4. 为Syslog-ng设置stunnel
4.1 问题提出
在完成SSL基础设施设置后,需要配置stunnel以与Syslog-ng服务器配合使用。
4.2 解决方案
- 安装stunnel :
- 在Debian上:
# aptitude install stunnel4
- 在Fedora上:
# yum install stunnel
- 配置服务器的stunnel.conf文件 :
cert = /etc/syslog-ng/syslogserver-xena.pem
CAfile = /etc/syslog-ng/clientkeys
client = no
verify = 3
setgid = stunnel4
setuid = stunnel4
[syslog-ng]
#server address
accept = 192.168.1.50:5140
connect = 127.0.0.1:514
如果系统未创建stunnel的非特权用户和组,可手动创建:
# groupadd stunnel
# useradd -d /var/run/stunnel -m -g stunnel -s /bin/false stunnel
- 配置客户端的stunnel.conf文件 :
cert = /etc/syslog-ng/uberpc.pem
client = yes
verify = 3
setuid = stunnel4
setgid = stunnel4
[syslog-ng]
accept = 127.0.0.1:514
#server address
connect = 192.168.1.50:5140
4.3 讨论
stunnel的默认配置会监听所有接口,若需要可指定IP地址,但必须指定监听的端口。可通过查看 /etc/services 文件来确定可用端口。
以下是搭建过程的mermaid流程图:
graph LR
A[邮件服务器故障排查] --> B[在Debian上创建SSL密钥]
B --> C[在Fedora上创建SSL密钥]
C --> D[设置stunnel]
5. 搭建Syslog服务器
5.1 问题提出
传统的Linux syslog在网络日志记录方面存在不足,缺乏灵活性和内置的远程日志记录功能。我们需要一个现代化的日志服务器,支持加密和精细配置,且SSL证书和stunnel已配置好,现在要设置Syslog-ng本身。
5.2 解决方案
- 安装Syslog-ng :
- 在Debian上:
# aptitude install syslog-ng
- 在Fedora上:
# yum install syslog-ng
安装过程会自动移除旧的syslog并设置默认配置。同时,所有客户端主机也需要安装Syslog-ng、OpenSSL和stunnel。
- 配置Syslog-ng服务器 :
在 /etc/syslog-ng/syslog-ng.conf 文件的 options 部分添加以下内容:
options {
sync (0);
log_fifo_size (2048);
time_reopen(10);
time_reap(360);
create_dirs (yes);
perm (0640);
dir_perm (0750);
chain_hostnames(0);
use_dns(no);
use_fqdn(no);
};
在 source 部分添加以下内容,使Syslog-ng通过stunnel监听消息,并为每个远程主机在 /var/log/hosts/ 目录下创建单独的文件:
source stunnel {tcp(ip("127.0.0.1")port(514) max-connections(1));};
destination d_clients {file("/var/log/hosts/$HOST/$DATE_$FACILITY"); };
log {source(stunnel); destination(d_clients);};
- 配置客户端的syslog-ng.conf文件 :
options
{long_hostnames(off);
sync(0);};
source s_local {unix-stream("/dev/log"); pipe("/proc/kmsg"); internal( );};
destination stunnel {tcp("127.0.0.1" port(514));};
log { source(s_local); destination(stunnel); };
- 启动服务并测试 :
# stunnel
# /etc/init.d/syslog-ng
使用 logger 命令在服务器和客户端进行测试:
$ logger "this is a test!"
查看 /var/log/messages 文件,若出现测试消息,则表示测试成功。同时, /var/log/hosts/ 目录下会为客户端创建新文件,客户端的 /var/log/messages 文件也会记录测试消息。
5.3 讨论
这种配置方式接近标准日志设置,适合大多数情况。客户端文件以主机名、日期和日志设施命名,方便查找。 syslog-ng.conf 文件包含五个部分:
| 部分名称 | 功能 |
| ---- | ---- |
| options{} | 全局选项,可在其他部分被覆盖 |
| source{} | 消息源,如文件、本地套接字或远程主机 |
| destination{} | 消息目的地,如文件、本地套接字或远程主机 |
| filter{} | 强大灵活的过滤器,可根据日志消息的各个方面进行过滤 |
| log{} | 连接源、目的地和过滤器语句,指示Syslog-ng如何处理消息 |
在实际配置中,可根据任务分组语句,而非按语句类型组织。
以下是Syslog-ng搭建的详细步骤列表:
1. 安装Syslog-ng:在Debian和Fedora上分别使用相应命令安装。
2. 配置服务器:在 syslog-ng.conf 文件中设置 options 、 source 和 destination 部分。
3. 配置客户端:在客户端的 syslog-ng.conf 文件中设置相应内容。
4. 启动服务:启动stunnel和Syslog-ng服务。
5. 测试服务:使用 logger 命令进行测试,检查日志文件。
以下是整个搭建流程的mermaid流程图:
graph LR
D[设置stunnel] --> E[搭建Syslog服务器]
E --> E1[安装Syslog-ng]
E1 --> E2[配置服务器]
E2 --> E3[配置客户端]
E3 --> E4[启动服务]
E4 --> E5[测试服务]
通过以上步骤,我们可以成功搭建一个安全、灵活的Syslog-ng服务器,实现网络日志的集中管理和加密传输。在实际应用中,可根据具体需求对配置进行调整和优化。
超级会员免费看
6

被折叠的 条评论
为什么被折叠?



