学习linux 服务器安全这一篇文章就够了

Posted 宝山的博客

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了学习linux 服务器安全这一篇文章就够了相关的知识,希望对你有一定的参考价值。

linux 服务器安全

在这里插入图片描述

作为Linux 运维工程师,如何对网站或者业务系统试试安全加固呢?安全加固手段有哪些?

​ 1. Linux服务器内核定期升级稳定版本,及时打补丁包(安装程序);

​ 2.禁止不必要的Linux用户,关闭一些不常用的用户和组;

​ 3.设置Linux用户和密码复杂度,定期修改服务器的密码;

​ 4.禁止ROOT用户登录Linux系统,启用普通用户或者sudo用户;

​ 5.隐藏远程登录SSH 22端口,修改为6022或者60022等;

​ 6.定期升级SSH远程服务端版本,允许特定IP访问或者通过秘钥方式或者短信验证方式登录;

​ 7.关闭Linux系统不常用的软件服务,不必要的端口和进程等;

​ 8.隐藏常用软件程序的版本号:nginx、Apache、Tomcat、mysql等;

​ 9.开启Linux系统级别防火墙规则:Iptables、Firewalld限制端口访问和网络流量等;

​ 10.设置应用程序、网站代码读写权限,尽量将权限控制到最小;

​ 11.开启Linux应用层级的安全措施:Selinux安全策略配置等;

iptables 入门简介

  • 相关概念

    1.Iptables是Linux内核级别软件级防火墙,区别于硬件设备的防火墙,IPtables是开源的、免费的,硬件防火墙收费的,成本比较高;一般工作在OSI层次的二、三、四层
    
    2.Netfilter/iptables看成是统一基于Linux级别防火墙,其实基于IP数据包做过滤的,有两个组成部分:Netfilter和IPtables,其中Netfilter主要是集成在Linux内核中模块,而iptables是用于管理Netfilter模块的;
    
    3.Iptables防火墙由表和链构成的,其中表是存储在Linux内核中(Netfilter模块),链是存在表中的,链中由单个规则或者多个规则组成的,规则是什么呢?规则(约定)允许访问、不允许访问等;
    
    4.Netfilter主要是作用于内核空间,属于Linux内核中一个数据包过滤模块,而Iptables是用于管理Netfilter模块的(管理Netfilter中的表和链(规则)),通常称防火墙不是Netfilter/Iptables,而是直接称为Iptables(统称);
    
    5. iptables 组件是一种工具,也称为用户空间(userspace),它使插入、修改和除去信息包过滤表中的规则变得容易。
    
  • iptables 防火墙关工作原理

    首先 数据包请求来了,要么进入 input链 ,要么进入 forward 链。
    请求进入input 链,一般需要 通过output链。
    
    什么时候走froward 链呢。更具内核判断,如果请求的是自己,就进入input链,如果内核判断球球
    的不是自己,就进入 forward 链。
    
    
    据包先经过 preouting ,有该链确定数据包走向:
    	1.如果目的地址 是自己,则发送给 inPut 链。然后经过 output 链 发出去
    	2.若满足nat 表上的转发规则, 则发给foreard  在经过postrouting 发出去。
    

在这里插入图片描述

  • Iptables 四表五链
    在这里插入图片描述

iptables filter表详解

  • Filter表示iptables的默认表,因此如果你没有自定义表,那么就默认使用filter表,它具有以下三种内建链:
    • INPUT链 :处理来自外部的数据。
    • OUTPUT链 : 处理向外发送的数据。
    • FORWARD链 : 将数据转发到本机的其他网卡设备上。

iptables nat表详解

  • NAT表有三种内建链:

    • PREROUTING链 :处理刚到达本机并在路由转发前的数据包。它会转换数据包中的目标IP地址(destination ip address),通常用于DNAT(destination NAT)。

    • POSTROUTING链 :处理即将离开本机的数据包。它会转换数据包中的源IP地址(source ip address),通常用于SNAT(source NAT)。

    • OUTPUT链 :处理本机产生的数据包。

iptables mangle 表详解

  • Mangle表用于指定如何处理数据包。它能改变TCP头中的QoS位。Mangle表具有5个内建链:
    • PREROUTING
    • OUTPUT
    • FORWARD
    • INPUT
    • POSTROUTING

IPtables RAW表详解

  • Raw表用于处理异常,它具有2个内建链:
    • PREROUTING chain
    • OUTPUT chain

iptables 常用命令

  • 常用命令图解
    在这里插入图片描述

  • 常用命令解析

    1.命令
    
    -A 顺序添加,添加一条新规则
    -I 插入,插入一条新规则 -I 后面加一数字表示插入到哪行
    -R 修改, 删除一条新规则 -D 后面加一数字表示删除哪行
    -D 删除,删除一条新规则 -D 后面加一数字表示删除哪行
    -N   新建一个链
    -X   删除一个自定义链,删除之前要保证次链是空的,而且没有被引用
    -L 查看
    -E   重命名链
    -F 清空链中的所有规则
    -Z   清除链中使用的规则
    -P 设置默认规则
    
    2.匹配条件
    隐含匹配:
       -p  tcp udp icmp
       --sport指定源端口
       --dport指定目标端
       -s 源地址
       -d 目的地址
    -i 数据包进入的网卡
    -o 数据包出口的网卡
    
    扩展匹配 匹配状态的 -m
    
    -m mutiport --source-port   端口匹配 ,指定一组端口
    -m limit --limit 3/minute   每三分种一次
    -m limit --limit-burst  5   只匹配5个数据包
    -m string --string --algo bm|kmp --string"xxxx"  匹配字符串
    -mtime--timestart 8:00 --timestop 12:00  表示从哪个时间到哪个时间段
    -mtime--days    表示那天
    -m mac --mac-sourcexx:xx:xx:xx:xx:xx 匹配源MAC地址
    -m layer7 --l7proto qq   表示匹配腾讯qq的 当然也支持很多协议,这个默认是没有的,需要我们给内核打补丁并重新编译内核及iptables才可以使用 -m layer7 这个显示扩展匹配
    
    3.动作:
    -j
    DROP 直接丢掉
    ACCEPT 允许通过
    REJECT 丢掉,但是回复信息
    LOG --log-prefix"说明信息,自己随便定义" ,记录日志
    SNAT       源地址转换
    DNAT       目标地址转换
    REDIRECT   重定向
    MASQUERAED  地址伪装
    
    4.查看规则
    
    [root@localhost ~]# iptables -L -v  详细查看
    [root@localhost ~]# iptables -L -n  以数字的方法查看
    

iptables 实验

  • 安装iptables软件(iptables ,iptables-devel ,iptables-services ,iptables-utils)

    [root@localhost ~]# yum -y install iptables iptables-devel
    [root@localhost ~]# yum -y install iptables-services iptables-utils
    
    [root@localhost ~]# cat /etc/sysconfig/iptables
    # sample configuration for iptables service
    # you can edit this manually or use system-config-firewall
    # please do not ask us to add additional ports/services to this default configuration
    *filter
    :INPUT ACCEPT [0:0]
    :FORWARD ACCEPT [0:0]
    :OUTPUT ACCEPT [0:0]
    -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
    -A INPUT -p icmp -j ACCEPT
    -A INPUT -i lo -j ACCEPT
    -A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
    -A INPUT -j REJECT --reject-with icmp-host-prohibited
    -A FORWARD -j REJECT --reject-with icmp-host-prohibited
    COMMIT
    [root@localhost ~]# 
    [root@localhost ~]# vim /etc/sysconfig/iptables  #首先删除所有的规则。
    [root@localhost ~]# cat /etc/sysconfig/iptables
    # sample configuration for iptables service
    # you can edit this manually or use system-config-firewall
    # please do not ask us to add additional ports/services to this default configuration
    *filter
    :INPUT ACCEPT [0:0]
    :FORWARD ACCEPT [0:0]
    :OUTPUT ACCEPT [0:0]
    
    COMMIT
    [root@localhost ~]# 
    
  • 1.禁止本地windows 访问服务器的 80端口

在这里插入图片描述

  • 写规则

    [root@localhost ~]# vim  /etc/sysconfig/iptables
    [root@localhost ~]# cat /etc/sysconfig/iptables 
    # sample configuration for iptables service
    # you can edit this manually or use system-config-firewall
    # please do not ask us to add additional ports/services to this default configuration
    *filter
    :INPUT ACCEPT [0:0]
    :FORWARD ACCEPT [0:0]
    :OUTPUT ACCEPT [0:0]
    -A INPUT -s 192.168.10.1 -p tcp --dport 80 -j DROP
    COMMIT
    默认规则允许所有,优先级是最低的,一旦我们配置了规则,同种规则,从上往下匹配,只匹配到第一条。
    不同种规则
    [root@localhost ~]# systemctl restart iptables
    
  • 测试

在这里插入图片描述

  • 如果默认INPUT规则是DROP,就需要写进/出的规则

    *filter
    :INPUT DROP [0:0]   #这里的规则拒绝了
    :FORWARD ACCEPT [0:0]
    :OUTPUT DROP [0:0]   #这里拒绝了
    -A INPUT -s 192.168.10.1 -p tcp --dport 22 -j ACCEPT
    -A OUTPUT -s 192.168.10.11 -p tcp --sport 22 -j ACCEPT
    不建议,这样写
    
    ----
    *filter
    :INPUT DROP [0:0]     #input 是drop的话
    :FORWARD ACCEPT [0:0]
    :OUTPUT ACCEPT [0:0]
    -A INPUT -s 192.168.10.1 -p tcp --dport 80 -j DROP #  
    
    -A INPUT -s 192.168.10.1/32 -p tcp -m tcp --dport 8090 -j ACCEPT
    -m 静态模块,匹配状态的。允许192.168.10.1 使用tcp 协议访问8090服务
    
    -A INPUT -s 192.168.10.0/24 -P tcp -m tcp --dport 8080 -j ACCEPT
    允许192.168.10.0 网段 使用tcp 协议访问8080服务
    -A INPUT -m mac --mac-source 02:42:a8:83:36:ec  -p tcp --dport 22 -j ACCEPT
    拒绝 mac地址是02:42:a8:83:36:ec 远程连接自己
    -A INPUT s 111.111.110.111 -j ACCEPT
    允许111.111.110.111  访问所有
    

iptables 企业案列

  • WEB服务器,开启80端口

    [root@localhost ~]# iptables -A INPUT -p tcp --dport 80 -j ACCEPT
    
  • 邮件服务器,开启25,110端口

    [root@localhost ~]# iptables -A INPUT -p tcp --dport 110 -j ACCEPT
     [root@localhost ~]# iptables -A INPUT -p tcp --dport 25 -j ACCEPT
    
  • FTP服务器,开启21端口

    [root@localhost ~]# iptables -A INPUT -p tcp --dport 21 -j ACCEPT
    [root@localhost ~]# iptables -A INPUT -p tcp --dport 20 -j ACCEPT
    
  • DNS服务器,开启53端口

    [root@localhost ~]# iptables -A INPUT -p tcp --dport 53 -j ACCEPT
    
  • 允许icmp包通过,也就是允许ping

    [root@localhost ~]# iptables -A OUTPUT -p icmp -j ACCEPT (OUTPUT设置成DROP的话)
    [root@localhost ~]# iptables -A INPUT -p icmp -j ACCEPT    (INPUT设置成DROP的话)
    
    
  • 将本机的8080端口转发至其他主机,主机IP:192.168.10.12,目标主机IP和端口:192.168.10.11:8088

    规则如下;
    iptables -t nat -A PREROUTING -p tcp -m tcp --dport 8080 -j DNAT --to-destination 192.168.1.11:8088
    iptables -t nat -A POSTROUTING -p tcp -m tcp --dport 8088 -j SNAT --to-source 192.168.1.12
    echo 1 > /proc/sys/net/ipv4/ip_forward
    
    

    在这里插入图片描述

firewalld 防火墙入门简介

firewalld 基础概念

Firewalld提供更加智能化的防火墙管理规则,优化策略配置方案,支持网络“zones(域)”,并为网络及其关联的链接、接口或源分配信任级别,不同信任级别默认开放服务不同。

支持IPV4,IPV6,以太网桥以及IPSET防火墙设置。

运行时态与永久配置分离,运行时态可手动更改,重置后回到永久配置(文件配置)

优化iptables添加规则,还支持图形界面(本文不介绍),除了iptables,还有ip6tables和ebtables规则。

firewall的 实验

  • Reinwald 软件安装

    [root@localhost ~]# yum -y install firewalld
    
  • firewall d 基础命令

    systemctl status firewalld      查看防火墙状态
    systemctl stop firewalld        关闭防火墙
    systemctl start firewalld       开启防火墙
    systemctl restart firewalld     重启防火墙
    
    systemctl enable firewalld.service     开机时自动启动 firewall 服务
    systemctl disable firewalld.service     开机时自动禁用 firewall 服务
    ystemctl is-enabled firewalld       查看 firewall 服务是否开机启动
    
    查看 firewall-cmd 状态,即查看 firewall 防火墙程序是否正在运行: 
    firewall-cmd --state
    开启一个端口:firewall-cmd --zone=public --add-port=80/tcp --permanent
    关闭 80端口:firewall-cmd --zone=public --remove-port=80/tcp --permanent
    重新加载firewalld:  firewall-cmd --reload 
    
    
  • firewlld 基础操作

总结

从事Linux技术,安全是我么必须掌握的技术。我们通常考虑从 硬件、软件、系统和网络方面准备。

  • 硬件:ID C机房门禁、设备静电、灭火器、管理人员权限、摄像头监控、操作权限、供电系统、空调、大风扇、服务器硬件等;
  • 软件:应用程序可读、可写、执行、控制访问权限、软件自身BUG、软件代码、网站程序代码、软件数据涉密、软件备份;
  • 系统:系统稳定性、系统补丁、系统用户、用户密码登录、密码复杂度、目录文件授权管理、开放端口、系统启动进程等;
  • 网络:网络流量、网络的连通性、网线、广域网链路、网络设备高可用、互备机制等;

在这里插入图片描述

创作不易,点个赞,收藏下哦。以后说不定还需要我呢

以上是关于学习linux 服务器安全这一篇文章就够了的主要内容,如果未能解决你的问题,请参考以下文章

Flutter入门这一篇效率文章就够了

关于linux系统调优这一篇文章就够了

关于linux系统调优这一篇文章就够了

学习Python装饰器,看这一篇文章就够了

linux常用的命令,学习linux,这一篇就够了

2023网络安全入门学习路线,收藏这一篇就够了