Linux基线加固

工具篇

1、Pacct
设置日志文件可以对每个用户的每一条命令进行记录,这一功能默认是不开放的,为了打开它,需要安装pacct工具:

accton命令是Linux系统进程管理命令之一,它的作用是打开进程统计,如果不带任何参数,即关闭进程统计,通过yum搜索,实际目前该工具已更名为:pasacct:

Linux基线加固_第1张图片
cct是一个工具包,里面包含有针对用户连接时间、进程执行情况等进行统计的工具。它可以记录用户登录信息。用户所执行的程序,程序执行情况信息等。它包含以下一些命令:

    ac:登录账号的简要信息。

    accton:打开或关闭进程账号记录功能。

    last:显示曾经登录过的用户。

    lastcomm:显示已执行过的命令。

    sa:进程账号记录信息的摘要。

    dump-utmp:输出utmp文件内容。

    dump-acct:输出acct或pacct文件内容。
    
    在Linux系统中启动进程统计使用accton命令,必须用root身份来运行。accton命令的形式为accton file,file必须事先存在。先使用touch命令创建pacct文件。

注意:若要开启指定用户的动作监控,需在该用户环境下创建文件并指定记录,sudo执行accton。

[root@b]# which accton
/sbin/accton
[root@b]#touch /var/log/pacct
[root@b]# accton /var/log/pacct
Turning on process accounting, file set to '/var/log/pacct'.   #开启用户操作监控
[root@b]# lastcomm root -f /var/log/pacct        ##验证
lastcomm               root     pts/0      0.00 secs Mon Nov 18 11:04
ssh              S   X root     pts/1      0.00 secs Mon Nov 18 11:03
ssh              S   X root     pts/1      0.01 secs Mon Nov 18 10:58
timeout                root     __         0.00 secs Mon Nov 18 11:02
df                     root     __         0.00 secs Mon Nov 18 11:02
accton           S     root     pts/0      0.00 secs Mon Nov 18 11:01

一旦accton被激活,就可以使用lastcomm命令监测系统中任何时候执行的命令。若要关闭统计,可以使用不带任何参数的accton命令进行关闭:accton。

2、rsyslog和系统日志工具 Syslog-ng

我的7.4.1708安装:rsyslog.x86_64 0:8.24.0-41.el7_7.2
要想执行syslog命令,需要安装syslog-ng,
CentOS 5.8搭建日志管理服务器(syslog-ng+logzilla)参见:https://www.linuxidc.com/Linux/2012-06/62198.htm

syslog-ng 相比传统的系统工具syslog,具有众多高级的功能:更好的网络支持,更加方便的配置,集中式的网络日志存储,并且更具有弹性。比如,使用syslogd时,所有的iptables日志与其他内核日志一起全部存储到了kern.log文件里。Syslog-ng则可以让你有选择性的将iptables部分分出到另外的日志文件中。Syslogd仅能使用UDP协议,Syslog-ng 可以使用UDP和TCP协议。所以你可以在加密的网络隧道中传输日志到集中日志服务器。

syslog-ng的一个设计原则就是建立更好的消息过滤粒度,syslog-ng能够进行基于内容和优先权/facility的过滤。另一个设计原则是更容易进行不同防火墙网段的信息转发,它支持主机链,即使日志消息经过了许多计算机的转发,也可以找出原发主机地址和整个转发链。最后的一个设计原则就是尽量使配置文件强大和简洁。
wget http://www.balabit.com/downloads/files/eventlog/0.2/eventlog_0.2.12.tar.gz

wget http://www.balabit.com/downloads/files/libol/0.3/libol-0.3.18.tar.gz

wget http://www.balabit.com/downloads/files/syslog-ng/open-source-edition/3.3.5/source/syslog-ng_3.3.5.tar.gz

wget http://php-syslog-ng.googlecode.com/files/logzilla_v2.9.9o.tgz

注意:日志集中管理服务syslog-ng采用的是C/S架构,所以客户端也需要安装syslog-ng;
Linux基线加固_第2张图片
Linux系统中syslog服务采用udp 514端口,但在启动syslog时报以下错误:
Linux基线加固_第3张图片
Linux基线加固_第4张图片
Linux基线加固_第5张图片
去掉配置文件中冲突的内容:log { source(src); }中的source内容,重启服务后正常。
Linux基线加固_第6张图片
Linux基线加固_第7张图片
验证:
在这里插入图片描述
1)如果你用syslog-ng日志服务,编辑/etc/syslog-ng/syslog-ng.conf

@version: maj.min

filter f_msgs {
level(err) or facility(kern) and level(debug) or facility(daemon) and level(notice);
};

destination msgs { file("/var/adm/msgs"); };

filter f_msgs {
level(err) or facility(kern) and level(debug) or facility(daemon) and level(notice);
};

destination msgs { file("/var/adm/msgs");
};

log {
 filter(f_msgs);
 destination(msgs);
 };

配置文件说明:

options {
    flush_lines (0);
    time_reopen (10);
    log_fifo_size (1000);
    long_hostnames (off);
    use_dns (no);
    use_fqdn (no);
    create_dirs (yes);                  #此行改为yes
    keep_hostname (yes);
};
......
source s_log {
        udp(ip(0.0.0.0) port(514));
};
......
destination d_log {
        file("/data/syslog-ng/kevin.log");
};
......
log { source(s_log);  destination(d_log); };  ##注意这里的s_log必须跟上述source后跟的一致
 
配置说明:
options       为全局配置参数
source        是日志从本机的哪个IP哪个端口接收信息
destination   接收到信息保存在哪个文件
log           就是将来源信息写入到目的文件中

现场启动报错:

/etc/init.d/syslog-ng start
Plugin module not found in 'module-path'; module-path='/lib64/syslog-ng', module='afsql'
Plugin module not found in 'module-path'; module-path='/lib64/syslog-ng', module='afsql'
Error in configuration, unresolved source reference; source='src'
                                                           [FAILED]
上述模块报错不用管。

查看配置文件:

options {
        flush_lines (0);
        time_reopen (10);
        log_fifo_size (1000);
        long_hostnames (off);
        use_dns (no);
        use_fqdn (no);
        create_dirs (no);   ##如果这里配置为yes,下面的日志文件会自动创建,权限为666
        keep_hostname (yes);
};

source s_sys {                            ##用于下方日志引用
        file ("/proc/kmsg" program_override("kernel: "));
        unix-stream ("/dev/log");
        internal();
        # udp(ip(0.0.0.0) port(514));   ##默认为udp514
};

destination d_cons { file("/dev/console"); };
destination d_mesg { file("/var/log/messages"); };
destination d_auth { file("/var/log/secure"); };
destination d_mail { file("/var/log/maillog" flush_lines(10)); };
destination d_spol { file("/var/log/spooler"); };
destination d_boot { file("/var/log/boot.log"); };
destination d_cron { file("/var/log/cron"); };
destination d_kern { file("/var/log/kern"); };
destination d_mlal { usertty("*"); };

filter f_kernel     { facility(kern); };
filter f_default    { level(info..emerg) and
                        not (facility(mail)
                        or facility(authpriv)
                        or facility(cron)); };
filter f_auth       { facility(authpriv); };
filter f_mail       { facility(mail); };
filter f_emergency  { level(emerg); };
filter f_news       { facility(uucp) or
                        (facility(news)
                        and level(crit..emerg)); };
filter f_boot   { facility(local7); };
filter f_cron   { facility(cron); };
filter f_msgs {
level(err) or facility(kern) and level(debug) or facility(daemon) and level(notice);
};
destination msgs { file("/var/adm/msgs");  ##如果option里开启自动创建,则无需手动,否则
};
log {source(s_sys); filter(f_msgs); destination(msgs); ##注意这里的source后内容必须与前面的一	致。
};
#log { source(s_sys); filter(f_kernel); destination(d_cons); };
log { source(s_sys); filter(f_kernel); destination(d_kern); };
log { source(s_sys); filter(f_default); destination(d_mesg); };
log { source(s_sys); filter(f_auth); destination(d_auth); };
log { source(s_sys); filter(f_mail); destination(d_mail); };
log { source(s_sys); filter(f_emergency); destination(d_mlal); };
log { source(s_sys); filter(f_news); destination(d_spol); };
log { source(s_sys); filter(f_boot); destination(d_boot); };
log { source(s_sys); filter(f_cron); destination(d_cron); };

另外注意:如果客户端和syslog-ng服务端在同一主机,需建立【管道】,建立两者之间的通信,即将客户端服务器例如nginx等日志通过管道文件传输到日志服务器上。

【syslog-ng客户端配置】:也需要安装syslog-ng

options {
    flush_lines (0);
    time_reopen (10);
    log_fifo_size (1000);
    long_hostnames (off);
    use_dns (no);
    use_fqdn (no);
    create_dirs (yes);                 #修改为yes
    keep_hostname (yes);
};
......
source s_slog {
         pipe("/data/kevin/log.pipe");  ##配置管道,随后手动创建
};
......
destination d_slog { udp(192.168.120.5 port(514)); };              #ip为syslog-ng服务端ip地址
......
log { source(s_sys); destination(msgs); };

然后在客户端创建管道文件:
mkdir /data/kevin && mkfifo /data/kevin/log.pipe
启动syslog-ng服务:/etc/init.d/syslog-ng start
验证测试:例如将客户端nginx服务日志信息导入到管道文件中
tail -f /etc/nginx/logs/access.log >> /data/kevin/log.pipe &
然后去syslon-ng的服务端查看,发现日志是否已经传过来了,执行:
tail -f //var/adm/msgs ##日志传输是实时的
多日志传输或更多详情,参见:https://www.cnblogs.com/kevingrace/p/6519504.html

2)如果用的默认syslog,编辑/etc/syslog.conf

修改:*.err;kern.debug;daemon.notice /var/adm/messages

3)如果用rsyslog服务,编辑etc/rsyslog.conf
*.err;kern.debug;daemon.notice /var/adm/messages

3、弱密码修改
生成环境一般对弱密码零容忍,因此弱密码必须修改加固,那怎样编制无规律的密码呢?Linux提供了一个mkpasswd工具可以按你的需求生成随机密码:
首先需要安装软件expect:
Centos:yum install -y expect
Ubuntu:apt-get install -y expect
Linux基线加固_第8张图片
安装完毕后:执行mkpasswd -l 16 -s 1 -d 2 -c 3-C 4
在这里插入图片描述
附参数说明:
-l:指定长度-d:数字的个数-c:小写字母个数-C:大写字母个数
-s:特殊字符个数

4、禁ping
1)备份配置文件
#cp -p /etc/sysctl.conf /etc/sysctl.conf.bak
2.执行命令
#sysctl -w net.ipv4.conf.all.accept_redirects="0"禁止icmp重定向报文
#sysctl -w net.ipv4.conf.all.accept_source_route="0"禁止icmp源路由

你可能感兴趣的:(安全相关,Linux知识点)