【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服务

二、账号和口令

查看账号

在我们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

比如

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

字段解释:

  • 用户名 (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 用户名

禁用或删除无用账号

#删除不必要的账号。
userdel 用户名 
#锁定不必要的账号。
passwd -l 用户名 
#解锁必要的账号。
passwd -u 用户名 
#给账户设置密码
passwd 用户名

检查特殊账号

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

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

加固空口令账号:

#给账户设置密码
passwd 用户名

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

添加口令策略

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

1.使用命令 vi /etc/login.defs 修改配置文件。

PASS_MAX_DAYS 90 #新建用户的密码最长使用天数

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

PASS_WARN_AGE 7 #新建用户的密码到期提前提醒天数

2.使用chage命令修改用户设置。

例如:

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

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

3.禁止用户不能重复使用最近5次(含5)内已使用的密码。

vi /etc/pam.d/system-auth

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

password sufficient pam_unix.so use_authtok md5 shadow remember=5

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

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

vi /etc/pam.d/system-auth

找到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

解释:

  • 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

在第一个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

解释:

  • 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

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

#1800秒
export TMOUT=1800

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

source /etc/profile

三、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

最后重启服务

service sshd restart

2.指定SSH协议版本(禁用sshv1,使用sshv2)

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

vi /etc/ssh/sshd_config

在文件中增加以下内容

Protocol 2

重启服务生效

systemctl restart sshd

3.配置或修改SSH端口号(默认端口号22)

Port 2026

重启服务生效

systemctl restart sshd

4.配置SSH登录超时限制

vi /etc/ssh/sshd_config
ClientAliveInterval 120
ClientAliveCountMax 5

重启服务生效

systemctl restart sshd

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

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

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

vi /etc/pam.d/sshd

在#%PAM-1.0下添加一行

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

解释:

  • 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

6.基于公钥的身份验证

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

vi /etc/ssh/sshd_config
PubkeyAuthentication yes

重启服务生效

systemctl restart sshd

7.配置公钥存储路径

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

vi /etc/ssh/sshd_config
AuthorizedKeysFile      .ssh/authorized_keys

重启服务生效

systemctl restart sshd

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

#不允许密码登录
PasswordAuthentication no
#不允许root认证登录
PermitRootLogin no
#允许RSA数字证书
RSAAuthentication yes
#允许公钥登录
PubkeyAuthentication yes
#修改默认公钥存放的位置 
AuthorizedKeysFile  .ssh/authorized_keys

重启服务生效

systemctl restart sshd

8.允许SSH远程登录的用户

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

vi /etc/ssh/sshd_config
AllowUsers honor

重启服务生效

systemctl restart sshd

9.拒绝SSH远程登录的用户

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

vi /etc/ssh/sshd_config
DenyUser root

重启服务生效

systemctl restart sshd

10.限定SSH服务远程登录IP

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

vi /etc/ssh/sshd_config
ListenAddress 10.0.0.10

11.启用严格(强制安全性)模式

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

vi /etc/ssh/sshd_config
StrictMode yes

重启服务生效

systemctl restart sshd

12.禁用X11转发

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

vi /etc/ssh/sshd_config
X11Forwarding no

重启服务生效

systemctl restart sshd

13.配置SSH登录标语(Banner信息)

vi /etc/ssh/sshd_config

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

Banner NONE

重启服务生效

systemctl restart sshd

14.最多允许密码错误次数(默认6次)

vi /etc/ssh/sshd_config

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

MaxAuthTries 3

重启服务生效

systemctl restart sshd

15.配置SSHD的PID档案存放地

vi /etc/ssh/sshd_config
PidFile /var/run/sshd.pid

重启服务生效

systemctl restart sshd

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

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

crontab -e

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

50 7 * * * /etc/init.d/sshd start
50 22 * * * /etc/init.d/sshd stop
30 7 * * 6 /etc/init.d/sshd start

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

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

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

四、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

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

service telnet
{
        socket_type     = stream
        wait            = no
        user            = root
        server          = /usr/sbin/in.telnetd
        instances       = 10
        per_source      = 1
}

解释:

  • 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

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

nopriv_user=pyftp

3.限制客户端连接的端口范围在 50000-60000

vi /etc/vsftpd/vsftpd.conf

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

pasv_min_port=50000
pasv_max_port=60000

4.限制本地用户登录活动范围限制在 home 目录

vi /etc/vsftpd/vsftpd.conf

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

chroot_local_user=YES

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

6.vsftpd禁止匿名用户登录

vi /etc/vsftpd/vsftpd.conf

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

anonymous_enable=NO

7.vsftpd禁止匿名用户上传

vi /etc/vsftpd/vsftpd.conf

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

anon_upload_enable=NO

8.vsftpd禁止匿名用户创建目录的权限

vi /etc/vsftpd/vsftpd.conf

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

anon_mkdir_write_enable=NO

9.vsftpd禁止匿名用户删除和重命名的权限

vi /etc/vsftpd/vsftpd.conf

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

anon_other_write_enable=NO

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

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

vi /etc/vsftpd/vsftpd.conf

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

anon_umask=022

11.vsftpd设置无任何操作的超时时间为5分钟

vi /etc/vsftpd/vsftpd.conf

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

#单位是秒
data_connection_timeout=300

拓展:

  • 主动模式连接超时时长,单位为秒 connect_timeout=300
  • 被动模式连接超时时长,单位为秒 accept_timeout=300
  • 数据连接无数据超时时长,单位为秒 data_connection_timeout=300
  • 无命令操作超时时长,单位为秒idle_session_timeout=300

12.vsftpd设置匿名用户访问的最大传输速率为512KB/S

vi /etc/vsftpd/vsftpd.conf

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

anon_max_rate=512000

13.vsftpd设置用户访问的最大传输速率为1M

vi /etc/vsftpd/vsftpd.conf

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

local_max_rate=1000000

六、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

2.设置禁止目录浏览

vi /etc/httpd/conf/httpd.conf

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

Options  FollowSymLinks
  • Indexes表示若当前目录没有index.html就会显示目录结构。

3.隐藏Apache版本号

vi /etc/httpd/conf/httpd.conf

添加如下代码

#隐藏Apache版本号
ServerTokens Prod
#隐藏操作系统版本信息
ServerSignature OFF 

4.将Apache服务降权,用户为apache,用户组为www

vi /etc/httpd/conf/httpd.conf

修改成如下

User apache
Group www

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

User root
Group root

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

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

[root@localhost httpd]# find / -name rotatelogs
/usr/sbin/rotatelogs
vi /etc/httpd/conf/httpd.conf

修改成如下

#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

七、BIND服务

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

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

1. 隐藏bind版本号

vi /etc/named.conf

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

options {
directory "/var/named";
version "[no about your business]";
};

2. 设置不提供递归服务

vi /etc/named.conf

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

options {
allow-recursion { none; };
};

八、文件系统

1.设置umask值

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

vi /etc/profile

添加行,

umask 027

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

九、防火墙策略

保障数据的安全性是继保障数据的可用性之后最为重要的一项工作。防火墙作为公网与内网之间的保护屏障,在保障数据的安全性方面起着至关重要的作用。旧版本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

2.Linux系统使用iptables禁止别人ping通

直接丢弃 icmp 的请求包

iptables -A INPUT -p icmp --icmp-type echo-request -j DROP

3.为防止Nmap扫描软件探测到关键信息,设置iptables防火墙策略对3306号端口进行流量处理

iptables -A INPUT -s 172.16.1.1 -p 3306 -j DROP

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

5.为防御IP碎片攻击,设置iptables防火墙策略限制IP碎片的数量,仅允许每秒处理1000个数据包

iptables -A FORWARD -f -m limit --limit 1000/s --limit-burst 1000 -j ACCEPT

6.设置防火墙允许本机转发除ICMP协议以外的所有数据包

iptables -A FORWARD -p ! icmp -j ACCEPT

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

iptables -A INPUT -m limit --limit 3/minute --limit-burst 6 -j ACCEPT

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

9.禁止转发来自MAC地址为29:0E:29:27:65:EF主机的数据包

iptables -A FORWARD -m mac --mac-source 29:0E:29:27:65:EF -j DROP

10.禁止本机ping任何机器

直接丢弃流出icpm数据包

iptables -A OUTPUT -p icmp --icmp-type echo-request -j DROP

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

12.设置防火墙允许本机对外开放TCP端口21以及被动模式FTP端口1250-1280

iptables -A INPUT -p tcp -m multiport --dport 21,1250:1280 -j ACCEPT

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

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

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

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

17.拒绝访问防火墙的新数据包,但允许响应连接或与已有连接相关的数据包

iptables -A INPUT -p tcp -m state --state NEW -j DROP
iptables -A INPUT -p tcp -m state --state ESTABLSHED,RELATED -j ACCEPT

十、Mysql数据库安全策略

Mysql基础命令

1.root用户登录

mysql -u root -p

2.查看所有数据库

show databases;

3.使用某个数据库

use 数据库名;

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

show tables;

5.查看表结构

describe 表名;

6.删除某个数据库

drop database 数据库名;

7.新建Mysql用户

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

8.查看Mysql用户表

select user,host from mysql.user;

9.删除Mysql用户

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

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

flush privileges;

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

select * from 表名;

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

create database if not exists 数据库名称;

例题:

1.以普通帐户mysql安全运行mysql服务,禁止mysql以管理员帐号权限运行

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

vi /etc/my.cnf
[mysql.server]
user=mysql

2.删除默认数据库(test)

drop database test

3.改变默认mysql管理员用户为:SuperRoot

update user set user="SuperRoot" where user="root";

4.使用mysql内置MD5加密函数加密用户user1的密码为(P@ssw0rd1!)

update user set password=md5(password) where user="user1";

十一、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

添加如下代码

server tokens off;

2.限制 HTTP 请求方式,只允许 GET、HEAD、POST

vi /etc/nginx/conf.d/default.conf

添加如下代码

server {
    if ($request_method !~ ^(GET|HEAD|POST)$){
		return 501;
	}
}

3.设置客户端请求主体读取超时时间为 10

vi /etc/nginx/nginx.conf

添加如下代码

client_body_timeout 10;

4.设置客户端请求头读取超时时间为 10

vi /etc/nginx/nginx.conf

添加如下代码

client_header_timeout 10;

5.将 Nginx 服务降权,使用 www 用户启动服务

vi /etc/nginx/nginx.conf

添加如下代码

user www www;

你可能感兴趣的:(网络安全,Linux,linux,安全,web安全)