Linux 安全工具

Linux 安全工具

主机|端口扫描

nmap

https://nmap.org/

主要功能:

  1. 主机发现
  2. 端口扫描
  3. 版本检测
  4. OS猜测

主机发现

类似于ping,发送探测包到指定主机,如果得到回复则说明主机在线

nmap -sn IP|CIDR

原理:

  • 内网

    • 发送arp广播
      Address Resolution Protocol 地址解析协议
  • 外网

    • 发送ICMP echo request

    • 发送tcpSYN443

    • 发送tcpACK80
      Why ACK to 80 and SYN to 443?
      提供SYN和ACK两种ping探测的原因是使通过防火墙的机会尽可能大。

    • 许多管理员会配置他们的路由器或者其它简单的防火墙来封锁SYN报文,除非 连接目标是那些公开的服务器像公司网站或者邮件服务器。 这可以阻止其它进入组织的连接,同时也允许用户访问互联网。 这种无状态的方法几乎不占用防火墙/路由器的资源,因而被硬件和软件过滤器 广泛支持。当这样的无状态防火墙规则存在时,发送到关闭目标端口的SYN ping探测 (-PS) 很可能被封锁。这种情况下,ACK探测格外有闪光点,因为它正好利用了这样的规则。

      另外一种常用的防火墙用有状态的规则来封锁非预期的报文。 这一特性已开始只存在于高端防火墙,但是这些年类它越来越普遍了。 SYN探测更有可能用于这样的系统,由于没头没脑的ACK报文 通常会被识别成伪造的而丢弃。解决这个两难的方法是通过即指定 -PS又指定-PA来即发送SYN又发送ACK。

    • 发送ICMP timestamp request

只要获取到一个回应包,就认为此主机在线

端口扫描

nmap -sS -SU IP|CIDR -p T:TCP-PORT,U:UDP-PORT
image

原理:

  • TCP SYN 扫描 (-sS):TCP半开放扫描,不建立完整的TCP连接。向目标端口发送SYN,如果收到SYNACK回复,认为端口开放(open);如果收到RST,认为端口关闭(closed);如果无回应,认为端口被防火墙屏蔽(filtered)。
  • UDP扫描(-sU):向目标端口发送探测包,如果收到ICMP port unreachable,则说明端口未开放;如果无回应,则端口可能开放或被拦截(open|filtered)。

-p PORT-RANGE

--top-ports NUM

版本检测

nmap -sV IP|CIDR -p PORT 

OS猜测

不同OS对tcp/IP协议的实现方式可能有些许差异,nmap就利用这一点,向目标主机发送精心设计的TCP/UDP/ICMP数据包,根据返回的数据包生成一份系统指纹。

而nmap有一个常见OS指纹特征数据库,将获取到的指纹进行对比,如果匹配就直接返回OS信息,如果无匹配就会进行猜测。

当目标主机至少存在一个开放端口和一个关闭端口时,OS猜测才能正常进行。

nmap -O IP|CIDR

防火墙

iptables

CentOS 7及之后默认安装了firewalld替代iptables作为防火墙工具。

个人习惯换回iptables:

systemctl stop firewalld
systemctl disable firewalld
systemctl mask firewalld

yum -y install iptables-services
systemctl enable iptables
systemctl restart iptables

Linux系统中真正实现防火墙功能的是系统的netfilter框架,而不论是firewalld还是iptables-services都只是一个类似于用户代理的身份,方便用户使用它向内核管理规则。

table

根据规则功能的不同可分为四表:

  1. raw:控制数据包是否被追踪
  2. mangle:修改数据包的类型、TTL等
  3. nat:网络地址转换
  4. filter:过滤数据包

CHAIN

默认有5个Chain:INPUTOUTPUTFORWARDPREROUTINGPOSTROUTING

match

  • 基本:源ip地址(source ip,-s)、目标ip地址(destination ip,-d)
  • 扩展:源端口(--sport)、目标端口(--sport)
  • 协议:-p {tcp|udp|all|icmp ...}

TARGET

  1. ACCEPT:放行

  2. DROP:丢弃

  3. REJECT:拒绝

    ...

iptables命令

iptables OPTIONS [CHAIN_NAME]查看(某个chain)的规则

-L 显示规则列表,如果后面接CHAIN_NAME则表示只查看某个chain的

-n 禁用域名解析

--line或--line-numbers 显示序号

-v 显示更多信息

-t 查看某个表,默认filter

iptables {-I|-A} [number] [-s|-d ipaddress] [-p {tcp|udp|all}] [--dport|sport port] -j {ACCEPT|DROP...}

在每条Chain中,遵循从上到下的顺序进行匹配,因此顺序是非常重要的

iptables -D {rule_details | number}

使用iptables进行的规则操作都是临时的,重启或reload都会丢失当前配置的规则。要永久生效需要保存规则到/etc/sysconfig/iptables

iptables-save打印配置到屏幕,配合重定向>即可保存到文件

口令破解

John the Ripper

破解加密密码

Linux下用户和密码存储在/etc/shadow/etc/passwd下,采用SHA-512加密,同时采用了salt盐值,保证相同的密码其加密后的字符串也不同。

john --single

john --wordlist=password.lst

hydra

[图片上传失败...(image-9de074-1584971513588)]

密码爆破工具。

  • 可对多种服务的账号及密码进行爆破,如web登录、SSH、数据库、FTP、RDP(Windwos远程桌面)等等。
  • 支持多线程。

SSH安全

[图片上传失败...(image-e162f9-1584971513588)]

fail2ban

介绍

基于认证日志工作,通过扫描日志中的关键字,来更新防火墙规则,从而在指定时间内拒绝某ip的连接。

配置

配置目录/etc/fail2ban/

主配置文件/etc/fail2ban/jail.conf

自定义配置文件目录/etc/fail2ban/jail.d/

jail.conf可能会随着版本更新被覆盖。
因此建议把自定义的配置放置在jail.d下,而不是直接修改jail.conf。
jail.d下的配置(*.local或*.conf)会覆盖jail.conf的相关配置。

过滤器目录/etc/fail2ban/filter.d

动作配置文件目录/etc/fail2ban/action.d

fail2ban日志/var/log/fail2ban.log

fail2ban能够降低暴力破解的速度,但不能减弱弱口令的风险。

在SSH上的应用

自定义配置文件/etc/fail2ban/jail.d/sshd.local

[sshd]
enabled = true
port = 22
findtime = 60
maxretry = 10
bantime = 120
filter = sshd
banaction = iptables-allports
ignoreip = 127.0.0.1/8 192.168.0.0/16
logpath = /var/log/secure

使用systemctl restart fail2ban 运行fail2ban服务

修改配置后,使用systemctl reload fail2ban 重载配置

fail2ban通过向iptables内添加规则来达到效果,如果重启了iptables,fail2ban添加的规则会消失(因为这些规则并未持久化到iptables规则文件中),fail2ban便会失效,因此重启iptables后也需要重启fail2ban服务

fail2ban-client命令

fail2ban-client status 当前运行的jail

fail2ban-client reload

fail2ban-client status JAIL_NAME 某个jail的状态

会显示当前时间段内失败的次数,以及被ban掉的ip

fail2ban-client set JAIL_NAME banip IPADDR 手动ban掉某个ip

fail2ban-client set JAIL_NAME unbanip IPADDR 手动unban某个ip

fail2ban-client set JAIL_NAME addignoreip IPADDR 将某个ip加到白名单内(重启失效)

fail2ban-client set JAIL_NAME delignoreip IPADDR 从白名单内删除某个ip

fail2ban-client get JAIL_NAME ignoreip 查看白名单

在nginx上的应用

一个非常简单的示例:限制某个ip在单位时间内的请求次数,防止某些攻击

  1. 新建过滤器 /etc/fail2ban/filter.d/nginx-test-limit.conf

    [Definition]
    failregex = .*HTTP/1.1
    

    使用正则表达式来匹配

  2. 新建jail /etc/fail2ban/jail.d/nginx-test-limit.local

    [nginx-test-limit]
    enabled = true
    port = http,https
    findtime = 60
    maxretry = 10
    bantime = 20
    logpath = /data/log/nginx_access.log
    banaction = iptables-allports
    

    jail名需要与过滤器文件名相同

沙箱

firejail

介绍

https://firejail.wordpress.com/

firejail为不受信任的应用程序提供有限的运行环境和资源。

安装

wget https://phoenixnap.dl.sourceforge.net/project/firejail/firejail/firejail-0.9.60-1.x86_64.rpm && yum localinstall firejail-0.9.60-1.x86_64.rpm

使用

  • firejail 启动一个bash沙箱

  • firejail COMMAND 在沙箱里运行指定的命令

  • firejail [OPTIONS] COMMAND

    --help                    https://firejail.wordpress.com/features-3/man-firejail/
    
    --blacklist=filename  将某文件/路径加到黑名单,使沙箱程序不能访问
    --whitelist=filename  将某文件/路径加到白名单(只有程序指定的路径能被加到白名单)
    --env=name=value      配置环境变量
    --private                 禁止沙箱读取home下的文件,创建一个新的空的home目录,家目录中的文件会在沙箱退出后被删除
    --get=name|pid filename   从沙箱中提取某个文件
    --put=name|pid src-filename dest-filename
                          向沙箱里发送文件
    --name=name               命名
    --list
    --join=name|pid           连接到沙箱       
    --net=none                禁止此沙箱联网
    --shutdown=name|pid       关闭某个沙箱
    

配置

目录 /etc/firejail下有很多(约800+)配置文件,对应不同的命令沙箱配置

配置文件man页面

漏洞扫描

nessus

官网: http://www.nessus.org/

免费版:最多扫描16个ip

你可能感兴趣的:(Linux 安全工具)