当前位置:   article > 正文

【Linux&网络安全】Linux操作系统安全配置(超全超详细)_linux 安全策略

linux 安全策略

Linux操作系统安全配置

一、服务相关命令

systemctl enable 服务名 #开机自启动
systemctl disable 服务名 #禁用开机自启动
systemctl stop 服务名 #停止服务
systemctl start 服务名 #启动服务
systemctl restart 服务名 #重启服务
systemctl status 服务名 #查看服务状态
service 服务名 start|stop|restart #启动/停止/重启 服务
chkconfig --list #查看启动服务
systemctl list-unit-files #列出systemd服务
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

二、账号和口令

查看账号

在我们Linux系统当中,默认的情况下,所有的系统上的帐号与一般身份使用者,还有root的相关信息,
都是记录在/etc/passwd这个文件内的。至于个人的密码则是记录在/etc/shadow这个文件下。
此外,Linux所有的群组名称都纪录在/etc/group内!这三个文件可以说是Linux系统里面帐号、密码、群组信息的集中地。/etc/passwd文件将每个用户的详细信息写为一行,其中包含七个字段,每个字段之间用冒号
: 分隔。

使用cat /etc/passwd命令查看系统所有用户

[root@localhost ~]# cat /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
polkitd:x:999:998:User for polkitd:/:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
chrony:x:998:996::/var/lib/chrony:/sbin/nologin
test:x:1000:1000::/home/test:/bin/bash
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21

比如

test:x:1000:1000::/home/test:/bin/bash
  • 1

字段解释:

  • 用户名 (test): 已创建用户的用户名,字符长度 1 个到 12 个字符。
  • 密码(x):代表加密密码保存在 /etc/shadow 文件中。
  • 用户ID(1000):代表用户ID号,每个用户都有一个唯一的ID。UID号为0是为root用户保留的,UID号1到99是为系统用户保留,UID号100-999是为系统账户和群组保留。
  • 群组ID(1000):代表群组ID号,每个群组都要有一个唯一的GID,保存在 /etc/group文件中。
  • 用户信息(此处为空):代表描述字段,可以用来描述用户的信息。
  • 家目录(/home/test):代表用户的家目录。
  • Shell(/bin/bash):代表用户使用的 shell 类型。
添加账号
useradd 用户名
  • 1
禁用或删除无用账号
#删除不必要的账号。
userdel 用户名 
#锁定不必要的账号。
passwd -l 用户名 
#解锁必要的账号。
passwd -u 用户名 
#给账户设置密码
passwd 用户名
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
检查特殊账号

查看空口令和root权限账号,确认是否存在异常账号:

#查看空口令账号
awk -F: '($2=="")' /etc/shadow
#查看UID为零的账号,UID为0就是root权限账号
awk -F: '($3==0)' /etc/passwd
  • 1
  • 2
  • 3
  • 4

加固空口令账号:

#给账户设置密码
passwd 用户名
  • 1
  • 2

确认UID为零的账号只有root账号。

添加口令策略

加强口令的复杂度等,降低被猜解的可能性。

1.使用命令 vi /etc/login.defs 修改配置文件。
PASS_MAX_DAYS 90 #新建用户的密码最长使用天数

PASS_MIN_DAYS 0 #新建用户的密码最短使用天数

PASS_WARN_AGE 7 #新建用户的密码到期提前提醒天数
  • 1
  • 2
  • 3
  • 4
  • 5
2.使用chage命令修改用户设置。

例如:

chage -m 0 -M 30 -E 2000-01-01 -W 7 <用户名>
  • 1

表示将此用户的密码最长使用天数设为30,最短使用天数设为0,密码2000年1月1日过期,过期前七天警告用户。

3.禁止用户不能重复使用最近5次(含5)内已使用的密码。
vi /etc/pam.d/system-auth
  • 1

在password sufficient这行后面添加remember=5

password sufficient pam_unix.so use_authtok md5 shadow remember=5
  • 1

4.设置密码复杂程度,允许重试3次,新密码必须与旧密码有4位不同,最小位数6位,大写字母至少包含2位,小写字母至少包含3位,特殊字母个数至少包含1位。

使用pam_pwquality模块设置密码复杂度。

vi /etc/pam.d/system-auth
  • 1

找到password requisite pam_pwquality.so这行(Centos6是password requisite
pam_cracklib这行),在后面添加retry=3 difok=4 minlen=6 ucredit=-2 lcredit=-3 ocrdit=-1

#%PAM-1.0
# This file is auto-generated.
# User changes will be destroyed the next time authconfig is run.
auth        required      pam_env.so
auth        required      pam_faildelay.so delay=2000000
auth        sufficient    pam_unix.so nullok try_first_pass
auth        requisite     pam_succeed_if.so uid >= 1000 quiet_success
auth        required      pam_deny.so

account     required      pam_unix.so
account     sufficient    pam_localuser.so
account     sufficient    pam_succeed_if.so uid < 1000 quiet
account     required      pam_permit.so

password    requisite     pam_pwquality.so try_first_pass local_users_only retry=3 authtok_type= difok=4 minlen=6 ucredit=-2 lcredit=-3 ocrdit=-1
password    sufficient    pam_unix.so sha512 shadow nullok try_first_pass use_authtok
password    required      pam_deny.so

session     optional      pam_keyinit.so revoke
session     required      pam_limits.so
-session     optional      pam_systemd.so
session     [success=1 default=ignore] pam_succeed_if.so service in crond quiet use_uid
session     required      pam_unix.so
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23

解释:

  • retry=3 允许重试3次。
  • difok=4 新密码必须与旧密码有4位不同。
  • minlen=6 密码最小位数。
  • ucredit=2 密码包含大写字母至少2位。
  • lcredit=-3 密码包含小写字母至少3位。
  • ocrdit=-1 密码包含特殊字符至少1位。
  • enforce_for_root 确保即使是root用户设置密码,也应强制执行复杂性策略。
5.用户登录失败策略:密码输入错误次数达到5次,锁定账户30分钟。

注意:此项配置只对控制台登录有效,ssh登录无效。

vi /etc/pam.d/system-auth
  • 1

在第一个auth行下加入一行

auth        required      pam_tally2.so onerr=fail deny=5 unlock_time=1800 root_unlock_time=1800 even_deny_root root_unlock_time=1800



#%PAM-1.0
# This file is auto-generated.
# User changes will be destroyed the next time authconfig is run.
auth        required      pam_tally2.so onerr=fail deny=5 unlock_time=1800 root_unlock_time=1800 even_deny_root root_unlock_time=1800
auth        required      pam_env.so
auth        required      pam_faildelay.so delay=2000000
auth        sufficient    pam_unix.so nullok try_first_pass
auth        requisite     pam_succeed_if.so uid >= 1000 quiet_success
auth        required      pam_deny.so
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

解释:

  • onerr=fail 密码连续输入失败
  • deny=5 密码输入错误次数达到5次
  • unlock_time=1800 普通账户锁定30分钟(单位是秒)
  • even_deny_root 代表包含root用户
  • root_unlock_time=1800 root账户锁定30分钟(单位是秒)
  • 命令:pam_tally2查看被锁定的用户
  • 命令:pam_tally2 --reset -u username可以将被锁定的用户解锁
6.限制用户su

限制能su到root的用户
使用命令 vi /etc/pam.d/su修改配置文件,在配置文件中添加行。
例如:只允许test组用户su到root,则添加 auth required pam_wheel.so group=test

7.设置用户登录超时时间(闲置时间)

针对所有用户设置,修改/etc/profile文件。比如设置超时时间为30分钟。

vi /etc/profile
  • 1

在文件末尾加上(单位是秒)

#1800秒
export TMOUT=1800
  • 1
  • 2

最后刷新配置文件即可生效。

source /etc/profile
  • 1

三、SSH服务

Secure Shell最著名的名称SSH是为远程安全地连接IT系统而开发的协议。SSH的配置文件是/ect/ssh/sshd_config

1.禁止root用户直接登录

首先创建普通权限账号并配置密码,防止无法远程登录。

使用命令 vi /etc/ssh/sshd_config修改配置文件

找到 # Authentication这行的下面,将PermitRootLogin的值改成no,并保存。

# Authentication:

#LoginGraceTime 2m
PermitRootLogin no
#StrictModes yes
#MaxAuthTries 6
#MaxSessions 10
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

最后重启服务

service sshd restart
  • 1
2.指定SSH协议版本(禁用sshv1,使用sshv2)

sshv1是过时不安全协议,已被废弃。

vi /etc/ssh/sshd_config
  • 1

在文件中增加以下内容

Protocol 2
  • 1

重启服务生效

systemctl restart sshd
  • 1
3.配置或修改SSH端口号(默认端口号22)
Port 2026
  • 1

重启服务生效

systemctl restart sshd
  • 1
4.配置SSH登录超时限制
vi /etc/ssh/sshd_config



ClientAliveInterval 120
ClientAliveCountMax 5
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

重启服务生效

systemctl restart sshd
  • 1

解释:除了root之外的所有用户都是120秒登录超时,自动登出。检测到5次不活动就断开连接。

5.配置SSH远程登录失败策略

比如:SSH登录密码错误3次,锁定账户3分钟。

vi /etc/pam.d/sshd
  • 1

在#%PAM-1.0下添加一行

auth required pam_tally2.so deny=3 unlock_time=180 even_deny_root root_unlock_time300
  • 1

解释:

  • deny=3 密码输入错误次数达到3次
  • unlock_time=180 普通账户锁定3分钟(单位是秒)
  • even_deny_root 代表包含root用户
  • root_unlock_time=180 root账户锁定3分钟(单位是秒)
  • 命令:pam_tally2查看被锁定的用户
  • 命令:pam_tally2 --reset -u username可以将被锁定的用户解锁

重启服务生效

systemctl restart sshd
  • 1
6.基于公钥的身份验证

默认情况下,启用公钥身份验证,但是显式启用它会使其更加可靠。

vi /etc/ssh/sshd_config



PubkeyAuthentication yes
  • 1
  • 2
  • 3
  • 4
  • 5

重启服务生效

systemctl restart sshd
  • 1
7.配置公钥存储路径

用户公钥文件保存路径,默认为用户的home目录下.ssh隐藏文件夹中的authorized_keys,建议更换到其他目录,防止丢失或者被恶意登陆者在默认的这个路径中找到篡改。

vi /etc/ssh/sshd_config



AuthorizedKeysFile      .ssh/authorized_keys
  • 1
  • 2
  • 3
  • 4
  • 5

重启服务生效

systemctl restart sshd
  • 1

比如:配置SSH服务,设置RSA证书登录。

#不允许密码登录
PasswordAuthentication no
#不允许root认证登录
PermitRootLogin no
#允许RSA数字证书
RSAAuthentication yes
#允许公钥登录
PubkeyAuthentication yes
#修改默认公钥存放的位置 
AuthorizedKeysFile  .ssh/authorized_keys
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

重启服务生效

systemctl restart sshd
  • 1
8.允许SSH远程登录的用户

默认情况下,系统上创建的所有用户都可以远程登录。 为所有用户提供远程登录机会不是一个好的安全习惯。
我们可以限制指定用户的登录。比如:只允许honor这个用户使用SSH远程登录,其他用户不能。

vi /etc/ssh/sshd_config



AllowUsers honor
  • 1
  • 2
  • 3
  • 4
  • 5

重启服务生效

systemctl restart sshd
  • 1
9.拒绝SSH远程登录的用户

限制用户登录的另一种方法是通过指定没有权限使用ssh远程登录的用户帐户。 除指定用户之外的所有其他用户将具有远程访问权限。

vi /etc/ssh/sshd_config



DenyUser root
  • 1
  • 2
  • 3
  • 4
  • 5

重启服务生效

systemctl restart sshd
  • 1
10.限定SSH服务远程登录IP

默认情况下,启动ssh服务时,它将在所有接口和IP地址上运行。 如果系统具有多个网络接口(其中一些接口不安全),则可能会产生一些安全问题。
我们可以限制ssh服务接口的运行。 ssh服务将不接受来自其他接口的连接。

vi /etc/ssh/sshd_config



ListenAddress 10.0.0.10
  • 1
  • 2
  • 3
  • 4
  • 5
11.启用严格(强制安全性)模式

StrictMode在ssh服务器启动之前检查某些情况。 在ssh守护程序启动之前,将执行ssh密钥,配置文件所有权,权限检查。
如果其中之一失败,ssh服务器守护程序将不会启动。 严格模式默认情况下处于启用状态,但通常由系统管理员关闭。 出于安全原因应启用它。

vi /etc/ssh/sshd_config



StrictMode yes
  • 1
  • 2
  • 3
  • 4
  • 5

重启服务生效

systemctl restart sshd
  • 1
12.禁用X11转发

ssh的最佳功能之一是通过远程连接转发X11。 对于某些系统管理员和用户来说,这是非常有用的功能。 但这会在系统中创建一些安全漏洞。
如果不需要X11转发,请禁用它。

vi /etc/ssh/sshd_config



X11Forwarding no
  • 1
  • 2
  • 3
  • 4
  • 5

重启服务生效

systemctl restart sshd
  • 1
13.配置SSH登录标语(Banner信息)
vi /etc/ssh/sshd_config
  • 1

显示系统banner信息,如果开启会在每次登陆时显示系统信息,减少恶意登陆者获取的信息量,防止被恶意利用。

Banner NONE
  • 1

重启服务生效

systemctl restart sshd
  • 1
14.最多允许密码错误次数(默认6次)
vi /etc/ssh/sshd_config
  • 1

最多登录尝试次数,建议值设置小一点,加大暴力破解难度。

MaxAuthTries 3
  • 1

重启服务生效

systemctl restart sshd
  • 1
15.配置SSHD的PID档案存放地
vi /etc/ssh/sshd_config



PidFile /var/run/sshd.pid
  • 1
  • 2
  • 3
  • 4
  • 5

重启服务生效

systemctl restart sshd
  • 1
16.设置 root 用户的计划任务。每天早上 7:50 自动开启 ssh 服务,22:50 关闭;每周六的 7:30 重新启动 ssh 服务。

本质是设置Linux计划任务(定时任务)

crontab -e
  • 1

按i键进入编辑模式,输入以下内容

50 7 * * * /etc/init.d/sshd start
50 22 * * * /etc/init.d/sshd stop
30 7 * * 6 /etc/init.d/sshd start
  • 1
  • 2
  • 3

保存退出,使用命令crontab -l可查看创建的计划任务。
解释:

crontab [-u username]    #省略用户表表示操作当前用户的crontab
	    -e      #(编辑工作表)
	    -l      #(列出工作表里的命令)
	    -r      #(删除工作作)

我们用crontab -e进入当前用户的工作表编辑,是常见的vim界面,每行是一条命令。
crontab的命令构成为:时间+动作,其时间有分、时、日、月、周五种,操作符有
		* 取值范围内的所有数字
		/ 每过多少个数字
		- 从X到Z
		, 散列数字	    
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
四、Telnet服务

telnet协议是TCP/IP协议族中的一员,是Internet远程登陆服务的标准协议和主要方式。它为用户提供了在本地计算机上完成远程主机工作的能力。在终端使用者的电脑上使用telnet程序,用它连接到服务器。Linux系统默认没有安装该服务,Linux系统安装telnet服务后,配置文件在/etc/xinetd.d/telent
如果配置文件不存在则自己创建。

1.修改Telnet服务端口号

使用命令vi /etc/service找到Telnet,将默认23端口号改成自定义端口号,比如2330。然后使用命令service xinetd restart重启服务。

2.禁用Telnet服务

如果安装了Telnet服务需要禁用,可以在配置文件vi /etc/xinetd.d/telent新增一行disable = yes,然后用命令service xinetd restart重启服务。

3.限制Telnet用户连接,单个IP允许的最大连接数为1,总的最大连接数为10。
vi /etc/xinetd.d/telent
  • 1

在配置文件里面输入如下内容

service telnet
{
        socket_type     = stream
        wait            = no
        user            = root
        server          = /usr/sbin/in.telnetd
        instances       = 10
        per_source      = 1
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

解释:

  • instances:最大连接数,也可赋值为“UNLIMITED”表示不限制。

  • cps:第一个参数表示每秒处理的连接数,第二个参数表示如果连接数超过第一个参数时暂时停止连接请求的秒数。
    比如:

    cps 100 10

  • per_source:单个IP允许的最大连接数。

五、VSFTPD服务

vsftpd 是“very secure FTP daemon”的缩写,安全性是它的一个最大的特点。vsftpd 是一个 UNIX
类操作系统上运行的服务器的名字,它可以运行在诸如 Linux、BSD、Solaris、 HP-
UNIX等系统上面,是一个完全免费的、开放源代码的ftp服务器软件,支持很多其他的 FTP
服务器所不支持的特征。比如:非常高的安全性需求、带宽限制、良好的可伸缩性、可创建虚拟用户、支持IPv6、速率高等。

1.修改ftp端口

ftp服务默认端口是21,通常情况修改成自定义端口会更加安全。
第一步:使用命令vi /etc/service找到ftp,将默认21端口号改成自定义端口号,比如8021。
第二步:vi /etc/vsftpd/vsftpd.conf
如果文件中有Listen_port=21,则将21修改为8021,否则添加一行Listen_port=8021,最后重启服务service vsftpd restart

2.设置运行 vsftpd 的非特权系统用户为 pyftp
vi /etc/vsftpd/vsftpd.conf
  • 1

在配置文件中添加如下一行代码

nopriv_user=pyftp
  • 1
3.限制客户端连接的端口范围在 50000-60000
vi /etc/vsftpd/vsftpd.conf
  • 1

在配置文件中添加如下一行代码

pasv_min_port=50000
pasv_max_port=60000
  • 1
  • 2
4.限制本地用户登录活动范围限制在 home 目录
vi /etc/vsftpd/vsftpd.conf
  • 1

在配置文件中添加如下一行代码

chroot_local_user=YES
  • 1
5.禁止指定用户登录ftp

vsftpd服务通过配置文件/etc/vsftpd/ftpusers限制用户ftp连接服务器。在该文件中的用户都不能通过ftp登录服务器。每个被限制的用户名各占一行,该文件一般只能通过root用户维护。
如果用户名包含在该文件中,那么这个用户使用ftp连接服务器时,一般会报错User xxxxx access denied。为了让某用户能够通过ftp连接服务器,可以在/etc/vsftpd/ftpusers文件中注释掉或者删除该用户名。

[root@localhost vsftpd]# cat /etc/vsftpd/ftpusers
# Users that are not allowed to login via ftp 以下用户不能登录ftp
root
bin
daemon
adm
lp
sync
shutdown
halt
mail
news
uucp
operator
games
nobody
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
6.vsftpd禁止匿名用户登录
vi /etc/vsftpd/vsftpd.conf
  • 1

在配置文件中添加如下一行代码

anonymous_enable=NO
  • 1
7.vsftpd禁止匿名用户上传
vi /etc/vsftpd/vsftpd.conf
  • 1

在配置文件中添加如下一行代码

anon_upload_enable=NO
  • 1
8.vsftpd禁止匿名用户创建目录的权限
vi /etc/vsftpd/vsftpd.conf
  • 1

在配置文件中添加如下一行代码

anon_mkdir_write_enable=NO
  • 1
9.vsftpd禁止匿名用户删除和重命名的权限
vi /etc/vsftpd/vsftpd.conf
  • 1

在配置文件中添加如下一行代码

anon_other_write_enable=NO
  • 1
10.vsftpd设置匿名用户掩码(设置本地用户创建文件的权限)

如umask是022,这时创建一个权限为666的文件,文件的实际权限为666-022=644

vi /etc/vsftpd/vsftpd.conf
  • 1

在配置文件中添加如下一行代码

anon_umask=022
  • 1
11.vsftpd设置无任何操作的超时时间为5分钟
vi /etc/vsftpd/vsftpd.conf
  • 1

在配置文件中添加如下一行代码

#单位是秒
data_connection_timeout=300
  • 1
  • 2

拓展:

  • 主动模式连接超时时长,单位为秒 connect_timeout=300
  • 被动模式连接超时时长,单位为秒 accept_timeout=300
  • 数据连接无数据超时时长,单位为秒 data_connection_timeout=300
  • 无命令操作超时时长,单位为秒idle_session_timeout=300
12.vsftpd设置匿名用户访问的最大传输速率为512KB/S
vi /etc/vsftpd/vsftpd.conf
  • 1

在配置文件中添加如下一行代码

anon_max_rate=512000
  • 1
13.vsftpd设置用户访问的最大传输速率为1M
vi /etc/vsftpd/vsftpd.conf
  • 1

在配置文件中添加如下一行代码

local_max_rate=1000000
  • 1
六、HTTPD(Apache)服务

Apache HTTP
Server(简称Apache)是Apache软件基金会的一个开放源码的Web服务器软件。Linux安装httpd服务后,配置文件在/etc/httpd/conf/httpd.conf
注:配置文件的修改都需要重启服务才会生效。

1.更改默认监听端口为6666

httpd服务默认端口是80

vi /etc/httpd/conf/httpd.conf



Listen 6666
  • 1
  • 2
  • 3
  • 4
  • 5
2.设置禁止目录浏览
vi /etc/httpd/conf/httpd.conf
  • 1

找到配置文件中Options Indexes FollowSymLinks将Indexes删除

Options  FollowSymLinks
  • 1
  • Indexes表示若当前目录没有index.html就会显示目录结构。
3.隐藏Apache版本号
vi /etc/httpd/conf/httpd.conf
  • 1

添加如下代码

#隐藏Apache版本号
ServerTokens Prod
#隐藏操作系统版本信息
ServerSignature OFF 
  • 1
  • 2
  • 3
  • 4
4.将Apache服务降权,用户为apache,用户组为www
vi /etc/httpd/conf/httpd.conf
  • 1

修改成如下

User apache
Group www
  • 1
  • 2

如果要修改网站的httpd服务为root权限

User root
Group root
  • 1
  • 2
5.设置HTTP服务,修改网站的配置文件,配置滚动日志按天记录网站的访问日志和错误日志

rotatelogs是apache自带的日志按日期生成的模块。

[root@localhost httpd]# find / -name rotatelogs
/usr/sbin/rotatelogs



vi /etc/httpd/conf/httpd.conf
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

修改成如下

#ErrorLog logs/error_log  #注释此行,添加下面这行
ErrorLog "|/usr/sbin/rotatelogs /var/log/httpd/error_log%Y%m%d.log 86400 480"

#CustomLog logs/access_log common  
#CustomLog "logs/access_log" combined
#注释上面两行,添加下面这行
CustomLog "|/usr/sbin/rotatelogs /var/log/httpd/access_log%Y%m%d.log 86400 480" common
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
七、BIND服务

bind服务是全球范围内使用最广泛、最安全可靠且高效的域名解析(DNS)服务程序。

  • 主配置文件/etc/named.conf:有效的参数用来定义bind服务程序的运行
  • 区域配置文件/etc/named.rfc1912.zones:用来保存域名和IP地址对应关系的所在文件路径,当需要查看和修改时,可根据这个位置找到相关文件。在这个文件中并没有包含具体的域名、IP地址对应关系等信息。
  • 数据配置文件目录/var/named:该目录用来保存域名和IP地址真实对应关系的数据配置文件。
1. 隐藏bind版本号
vi /etc/named.conf
  • 1

在配置文件中添加如下代码

options {
directory "/var/named";
version "[no about your business]";
};
  • 1
  • 2
  • 3
  • 4
2. 设置不提供递归服务
vi /etc/named.conf
  • 1

在配置文件中添加如下代码

options {
allow-recursion { none; };
};
  • 1
  • 2
  • 3
八、文件系统
1.设置umask值

设置默认的umask值,增强安全性。

vi /etc/profile
  • 1

添加行,

umask 027
  • 1

即新创建的文件属主拥有读写执行权限,同组用户拥有读和执行权限,其他用户无权限。

九、防火墙策略

保障数据的安全性是继保障数据的可用性之后最为重要的一项工作。防火墙作为公网与内网之间的保护屏障,在保障数据的安全性方面起着至关重要的作用。旧版本Linux操作系统防火墙命令用iptables,RHEL
7/8 中新增的firewalld命令。

iptables 服务把用于处理或过滤流量的策略条目称之为规则,多条规则可以组成一个规则链,而规则链则依据数据包处理位置的不同进行分类:

  • 在进行路由选择前处理数据包(PREROUTING)
  • 处理流入的数据包(INPUT)
  • 处理流出的数据包(OUTPUT)
  • 处理转发的数据包(FORWARD)
  • 在进行路由选择后处理数据包(POSTROUTING)

处理匹配流量动作:

  • ACCEPT(允许流量通过)
  • REJECT(拒绝流量通过)
  • LOG(记录日志信息)
  • DROP(拒绝流量通过)

注意:

  1. DROP 是直接将流量丢弃而且不响应;REJECT 则会在拒绝流量后再回复一条“信息已经收到,但是被扔掉了”信息,从而让流量发送方清晰地看到数据被拒绝的响应信息。
  2. 防火墙策略规则是按照从上到下的顺序匹配的,因此一定要把允许动作放到拒绝动作前面,否则所有的流量就将被拒绝掉,从而导致任何主机都无法访问我们的服务。

iptables中常用的参数以及作用:

参数作用
-P设置默认策略
-F清空规则链
-L查看规则链
-A在规则链的末尾加入新规则
-I num在规则链的头部加入新规则
-D num删除某一条规则
-s匹配来源地址 IP/MASK,加叹号“!”表示除这个 IP 外
-d匹配目标地址
-i 网卡名称匹配从这块网卡流入的数据
-o 网卡名称匹配从这块网卡流出的数据
-p匹配协议,如 TCP、UDP、ICMP
- -dport num匹配目标端口号
- -sport num匹配来源端口号
1.Linux系统使用iptables禁用23端口
iptables -A INPUT -p tcp --dport 23 -j DROP
iptables -A INPUT -p udp --dport 23 -j DROP
  • 1
  • 2
2.Linux系统使用iptables禁止别人ping通

直接丢弃 icmp 的请求包

iptables -A INPUT -p icmp --icmp-type echo-request -j DROP
  • 1
3.为防止Nmap扫描软件探测到关键信息,设置iptables防火墙策略对3306号端口进行流量处理
iptables -A INPUT -s 172.16.1.1 -p 3306 -j DROP
  • 1
4.为防止SSH服务被暴力枚举,设置iptables防火墙策略仅允许172.16.10.0/24网段内的主机通过SSH连接本机
iptables –A INPUT –p tcp –dport 22 –s 172.16.10.0/24 –j ACCEPT



iptables –A INPUT –p tcp –dport 22 -j DROP
  • 1
  • 2
  • 3
  • 4
  • 5
5.为防御IP碎片攻击,设置iptables防火墙策略限制IP碎片的数量,仅允许每秒处理1000个数据包
iptables -A FORWARD -f -m limit --limit 1000/s --limit-burst 1000 -j ACCEPT
  • 1
6.设置防火墙允许本机转发除ICMP协议以外的所有数据包
iptables -A FORWARD -p ! icmp -j ACCEPT
  • 1

7.为防御拒绝服务攻击,设置iptables防火墙策略对传入的流量进行过滤,限制每分钟允许3个包传入,并将瞬间流量设定为一次最多处理6个数据包(超过上限的网络数据包将丢弃不予处理)

iptables -A INPUT -m limit --limit 3/minute --limit-burst 6 -j ACCEPT
  • 1
8.只允许转发来自172.16.0.0/24局域网段的DNS解析请求数据包。
iptables -A FORWARD -s 172.16.0.0/24 -p udp --dport 53 -j ACCEPT
iptables -A FORWARD -d 172.16.0.0/24 -p udp --sport 53 -j ACCEPT
  • 1
  • 2
9.禁止转发来自MAC地址为29:0E:29:27:65:EF主机的数据包
iptables -A FORWARD -m mac --mac-source 29:0E:29:27:65:EF -j DROP
  • 1
10.禁止本机ping任何机器

直接丢弃流出icpm数据包

iptables -A OUTPUT -p icmp --icmp-type echo-request -j DROP
  • 1
11.在工作时间,即周一到周五的8:30-18:00,开放本机的ftp给192.168.1.0/24网络中的主机访问
iptables -A INPUT -p tcp --dport 21 -s 192.168.1.0/24 -m time --weekdays 1,2,3,4,5 --timestart 08:30 --timestop 18:00 -j ACCEPT
  • 1
12.设置防火墙允许本机对外开放TCP端口21以及被动模式FTP端口1250-1280
iptables -A INPUT -p tcp -m multiport --dport 21,1250:1280 -j ACCEPT
  • 1
13.禁止转发源IP地址为192.168.1.20-192.168.1.99的TCP数据包
iptables -A FORWARD -p tcp -m iprange --src-range 192.168.1.20-192.168.1.99 -j DROP
  • 1
14.拒绝TCP标志位全部为1及全部为0的报文访问本机
iptables -A INPUT -p tcp --tcp-flags ALL ALL -j DROP
iptables -A OUTPUT -p tcp --tcp-flags ALL NONE -j DROP
  • 1
  • 2
15.配置iptables防火墙过滤规则,以封堵目标网段(172.16.1.0/24),并在两小时后解除封锁
iptables -I INPUT -s 172.16.1.0/24 -j DROP
iptables -I FORWARD -s 172.16.1.0/24 -j DROP
at now +2 hours
at> iptables -D INPUT 1
at> iptables -D FORWARD 1
  • 1
  • 2
  • 3
  • 4
  • 5
16.在工作时间,即周一到周五的8:30-18:00,开放本机的ftp服务给

192.168.1.0网络中的主机访问要求从ftp服务的数据下载请求次数每分钟不得超过 5 个

iptables -A INPUT -s 172.16.0.0/16 -d 192.168.1.111 -p tcp --dport 21 -m time --timestart 8:30 --timestop 18:00 --weekdays 1,2,3,4,5 -m connlimit --connlimit-upto 5 -j ACCEPT
  • 1
17.拒绝访问防火墙的新数据包,但允许响应连接或与已有连接相关的数据包
iptables -A INPUT -p tcp -m state --state NEW -j DROP
iptables -A INPUT -p tcp -m state --state ESTABLSHED,RELATED -j ACCEPT
  • 1
  • 2
十、Mysql数据库安全策略

Mysql基础命令

1.root用户登录

mysql -u root -p
  • 1

2.查看所有数据库

show databases;
  • 1

3.使用某个数据库

use 数据库名;
  • 1

4.查看表(前提是先进入某个数据库)

show tables;
  • 1

5.查看表结构

describe 表名;
  • 1

6.删除某个数据库

drop database 数据库名;
  • 1

7.新建Mysql用户

create user '用户名'@'localhost' identified by '密码';
  • 1

8.查看Mysql用户表

select user,host from mysql.user;
  • 1

9.删除Mysql用户

drop user '用户名'@'localhost';
  • 1

10.刷新权限(例如你改了某个用户密码或者设置某些权限可以刷新)

flush privileges;
  • 1

11.查找某表中的所有记录(表在数据库库中)

select * from 表名;
  • 1

12.创建数据库(数据库不存在则创建)

create database if not exists 数据库名称;
  • 1
例题:
1.以普通帐户mysql安全运行mysql服务,禁止mysql以管理员帐号权限运行

/etc/my.cnf 配置文件中进行设置

vi /etc/my.cnf



[mysql.server]
user=mysql
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
2.删除默认数据库(test)
drop database test
  • 1
3.改变默认mysql管理员用户为:SuperRoot
update user set user="SuperRoot" where user="root";
  • 1
4.使用mysql内置MD5加密函数加密用户user1的密码为(P@ssw0rd1!)
update user set password=md5(password) where user="user1";
  • 1
十一、Nginx安全策略

Nginx (engine x) 是一个高性能的HTTP和反向代理web服务器,同时也提供了IMAP/POP3/SMTP服务。
/etc/nginx/nginx.conf 安装后默认配置文件的路径

/usr/share/nginx/html nginx网站默认存放目录

/usr/share/nginx/html/index.html 网站默认主页路径

1.禁止目录浏览和隐藏服务器版本和信息显示
vi /etc/nginx/nginx.conf
  • 1

添加如下代码

server tokens off;
  • 1
2.限制 HTTP 请求方式,只允许 GET、HEAD、POST
vi /etc/nginx/conf.d/default.conf
  • 1

添加如下代码

server {
    if ($request_method !~ ^(GET|HEAD|POST)$){
		return 501;
	}
}
  • 1
  • 2
  • 3
  • 4
  • 5
3.设置客户端请求主体读取超时时间为 10
vi /etc/nginx/nginx.conf
  • 1

添加如下代码

client_body_timeout 10;
  • 1
4.设置客户端请求头读取超时时间为 10
vi /etc/nginx/nginx.conf
  • 1

添加如下代码

client_header_timeout 10;
  • 1
5.将 Nginx 服务降权,使用 www 用户启动服务
vi /etc/nginx/nginx.conf
  • 1

添加如下代码

user www www;
  • 1

接下来我将给各位同学划分一张学习计划表!

学习计划

那么问题又来了,作为萌新小白,我应该先学什么,再学什么?
既然你都问的这么直白了,我就告诉你,零基础应该从什么开始学起:

阶段一:初级网络安全工程师

接下来我将给大家安排一个为期1个月的网络安全初级计划,当你学完后,你基本可以从事一份网络安全相关的工作,比如渗透测试、Web渗透、安全服务、安全分析等岗位;其中,如果你等保模块学的好,还可以从事等保工程师。

综合薪资区间6k~15k

1、网络安全理论知识(2天)
①了解行业相关背景,前景,确定发展方向。
②学习网络安全相关法律法规。
③网络安全运营的概念。
④等保简介、等保规定、流程和规范。(非常重要)

2、渗透测试基础(1周)
①渗透测试的流程、分类、标准
②信息收集技术:主动/被动信息搜集、Nmap工具、Google Hacking
③漏洞扫描、漏洞利用、原理,利用方法、工具(MSF)、绕过IDS和反病毒侦察
④主机攻防演练:MS17-010、MS08-067、MS10-046、MS12-20等

3、操作系统基础(1周)
①Windows系统常见功能和命令
②Kali Linux系统常见功能和命令
③操作系统安全(系统入侵排查/系统加固基础)

4、计算机网络基础(1周)
①计算机网络基础、协议和架构
②网络通信原理、OSI模型、数据转发流程
③常见协议解析(HTTP、TCP/IP、ARP等)
④网络攻击技术与网络安全防御技术
⑤Web漏洞原理与防御:主动/被动攻击、DDOS攻击、CVE漏洞复现

5、数据库基础操作(2天)
①数据库基础
②SQL语言基础
③数据库安全加固

6、Web渗透(1周)
①HTML、CSS和JavaScript简介
②OWASP Top10
③Web漏洞扫描工具
④Web渗透工具:Nmap、BurpSuite、SQLMap、其他(菜刀、漏扫等)

那么,到此为止,已经耗时1个月左右。你已经成功成为了一名“脚本小子”。那么你还想接着往下探索吗?

阶段二:中级or高级网络安全工程师(看自己能力)

综合薪资区间15k~30k

7、脚本编程学习(4周)
在网络安全领域。是否具备编程能力是“脚本小子”和真正网络安全工程师的本质区别。在实际的渗透测试过程中,面对复杂多变的网络环境,当常用工具不能满足实际需求的时候,往往需要对现有工具进行扩展,或者编写符合我们要求的工具、自动化脚本,这个时候就需要具备一定的编程能力。在分秒必争的CTF竞赛中,想要高效地使用自制的脚本工具来实现各种目的,更是需要拥有编程能力。

零基础入门的同学,我建议选择脚本语言Python/PHP/Go/Java中的一种,对常用库进行编程学习
搭建开发环境和选择IDE,PHP环境推荐Wamp和XAMPP,IDE强烈推荐Sublime;

Python编程学习,学习内容包含:语法、正则、文件、 网络、多线程等常用库,推荐《Python核心编程》,没必要看完

用Python编写漏洞的exp,然后写一个简单的网络爬虫

PHP基本语法学习并书写一个简单的博客系统

熟悉MVC架构,并试着学习一个PHP框架或者Python框架 (可选)

了解Bootstrap的布局或者CSS。

阶段三:顶级网络安全工程师

如果你对网络安全入门感兴趣,那么你需要的话可以点击这里

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/运维做开发/article/detail/842457
推荐阅读
相关标签