last 查看登录成功的用户信息,最新的登录记录在最前面last | less,查看登录失败的用户信息lastb
查看登录日志
tail /var/log/secure
列出登录失败的记录:
cat /var/log/secure | grep Failed
ubuntu是这个
cat /var/log/auth.log | grep Failed
使用/etc/hosts.aloow和/etc/hosts.deny
比如我们在 /etc/hosts.allow中加入
all:218.24.129.
这样就会允许来自218.24.129.*域的所有的客户来访问。
如果我们在 /etc/hosts.deny中加入
all:218.24.129.134,这样就限制了所有在218.24.129.134中的所有的用户的访问。
还可以在allow中添加可以操作的IP,然后在deny中加入如下代码,拒绝一切其他连接。
# no sshd
sshd : ALL
防火墙添加禁止IP
firewall-cmd --zone=drop --add-source=138.122....
firewall-cmd --reload
firewall-cmd --zone=drop --add-rich-rule="rule family="ipv4" source address="60.13.230.0/24" reject"
自动处理的代码
#!/bin/bash
#第一次运行创建记录文件
-f 1.txt || touch 1.txt
while :
do
#查看日志中登陆失败的ip次数超过10次的用户ip
fip=`awk '/Failed/{ip[$11]++;}END{for (i in ip){if (ip[i]>10){print i}}}' /var/log/secure`
#循环取出登陆失败超过十次的ip进行处理
for i in $fip
do
#查看处理记录文件如果该ip没有存在处理记录中说明是没有处理过该ip
a=`awk -F: -v i=$i '$2==i{print}' 1.txt | wc -l`
#如果有查到结果则说明已经处理过该ip
if [ "$a" -ne 0 ]
then
echo "服务器安全"
else
#将新的***ip加入防火墙阻止(方入drop的区域则该ip发送的数据包会立刻丢弃不做回应)区域
firewall-cmd --zone=drop --add-source=$i && echo "成功将:$i:加入防火墙block区域" >> 1.txt
fi
done
#120s执行一次
sleep 120
done
另一种方法
1.先添加allow,避免把自己给干掉了,allow是优先的
sshd:19.16.18.1:allow
sshd:19.16.18.2:allow
#网段
sshd:132.213.:allow
2、脚本 /usr/local/bin/secure_ssh.sh
#! /bin/bash
cat /var/log/secure|awk '/Failed/{print $(NF-3)}'|sort|uniq -c|awk '{print $2"="$1;}' > /usr/local/bin/black.list
for i in `cat /usr/local/bin/black.list`
do
IP=`echo $i |awk -F= '{print $1}'`
NUM=`echo $i|awk -F= '{print $2}'`
if [ ${#NUM} -gt 1 ]; then
grep $IP /etc/hosts.deny > /dev/null
if [ $? -gt 0 ];then
echo "sshd:$IP:deny" >> /etc/hosts.deny
fi
fi
done
3、将secure_ssh.sh脚本放入cron计划任务,每1分钟执行一次。
*/1 * * * * sh /usr/local/bin/secure_ssh.sh
4.测试一下效果
cat /usr/local/bin/black.txt
cat /etc/hosts.deny
///////////////////////////////////////////////////////////////////////////////////
方法二:限制登录IP
如果你的公司或者常常需要登录服务器的工作网络环境拥有固定的IP地址时,限制登录IP地址就可以很好的保护服务器免受黑客攻击。如果没有上述的条件,我们也可以通过搭建堡垒机,将所有服务器都设置为允许堡垒机的IP地址登录即可保护您的服务器。
操作起来相当简单,首先在/etc/hosts.allow中加入如下信息:
sshd:172.16.*.*
这条信息表示sshd服务允许向IP地址为172.16开头的IP地址提供服务。
其次在/etc/hosts.deny中加入如下信息:
sshd:all:deny
这条信息表示sshd服务不允许向所有IP地址提供服务。
如此一来服务器将只有指定的IP地址可以访问。
///////////////////////////////////////////////////////////////////
一.前言
Centos7以上的发行版都试自带了firewalld防火墙的,firewalld去带了iptables防火墙。其原因是iptables的防火墙策略是交由内核层面的netfilter网络过滤器来处理的,而firewalld则是交由内核层面的nftables包过滤框架来处理。 相较于iptables防火墙而言,firewalld支持动态更新技术并加入了区域(zone)的概念。简单来说,区域就是firewalld预先准备了几套防火墙策略集合(策略模板),用户可以根据生产场景的不同而选择合适的策略集合,从而实现防火墙策略之间的快速切换。
区域对于 firewalld 来说是一大特色,但是对于我们使用Centos7一般是在服务器上,需要切换zone的需求比较少,所以本文不做介绍了,网上资料也比较多,大家可以去百度找找资料。
二.操作与配置
1.服务操作
启动服务:
systemctl start firewalld
这里不用担心启用了防火墙以后无法通过ssh远程,22端口默认加入了允许规则
停止服务:
systemctl stop firewalld
重启服务:
systemctl restart firewalld
查看服务状态:
systemctl status firewalld
2.配置文件说明
firewalld 存放配置文件有两个目录,/usr/lib/firewalld
和 /etc/firewalld
,前者存放了一些默认的文件,后者主要是存放用户自定义的数据,所以我们添加的service或者rule都在后者下面进行。
server
文件夹存储服务数据,就是一组定义好的规则。
zones
存储区域规则
firewalld.conf
默认配置文件,可以设置默认使用的区域,默认区域为 public,对应 zones目录下的 public.xml
三.命令
这里需要首先说明的是,在执行命令时,如果没有带 --permanent
参数表示配置立即生效,但是不会对该配置进行存储,相当于重启服务器就会丢失。如果带上则会将配置存储到配置文件,,但是这种仅仅是将配置存储到文件,却并不会实时生效,需要执行 firewall-cmd --reload
命令重载配置才会生效。
1.重载防火墙配置
firewall-cmd --reload
2.查看防火墙运行状态
firewall-cmd --state
3.查看默认区域的设置
firewall-cmd --list-all
4.应急命令
firewall-cmd --panic-on # 拒绝所有流量,远程连接会立即断开,只有本地能登陆
firewall-cmd --panic-off # 取消应急模式,但需要重启firewalld后才可以远程ssh
firewall-cmd --query-panic # 查看是否为应急模式
5.服务
firewall-cmd --add-service=<service name> #添加服务
firewall-cmd --remove-service=<service name> #移除服务
6.端口
firewall-cmd --add-port=<port>/<protocol> #添加端口/协议(TCP/UDP)
firewall-cmd --remove-port=<port>/<protocol> #移除端口/协议(TCP/UDP)
firewall-cmd --list-ports #查看开放的端口
7.协议
firewall-cmd --add-protocol=<protocol> # 允许协议 (例:icmp,即允许ping)
firewall-cmd --remove-protocol=<protocol> # 取消协议
firewall-cmd --list-protocols # 查看允许的协议
8.允许指定ip的所有流量
firewall-cmd --add-rich-rule="rule family="ipv4" source address="<ip>" accept"
例:
firewall-cmd --add-rich-rule="rule family="ipv4" source address="192.168.2.1" accept" # 表示允许来自192.168.2.1的所有流量
9.允许指定ip的指定协议
firewall-cmd --add-rich-rule="rule family="ipv4" source address="<ip>" protocol value="<protocol>" accept"
例:
firewall-cmd --add-rich-rule="rule family="ipv4" source address="192.168.2.208" protocol value="icmp" accept" # 允许192.168.2.208主机的icmp协议,即允许192.168.2.208主机ping
10.允许指定ip访问指定服务
firewall-cmd --add-rich-rule="rule family="ipv4" source address="<ip>" service name="<service name>" accept"
例:
firewall-cmd --add-rich-rule="rule family="ipv4" source address="192.168.2.208" service name="ssh" accept" # 允许192.168.2.208主机访问ssh服务
11.允许指定ip访问指定端口
firewall-cmd --add-rich-rule="rule family="ipv4" source address="<ip>" port protocol="<port protocol>" port="<port>" accept"
例:
firewall-cmd --add-rich-rule="rule family="ipv4" source address="192.168.2.1" port protocol="tcp" port="22" accept" # 允许192.168.2.1主机访问22端口
12.将指定ip改为网段
8-11 的各个命令都支持 source address
设置为网段,即这个网段的ip都是适配这个规则:
例如:
firewall-cmd --zone=drop --add-rich-rule="rule family="ipv4" source address="192.168.2.0/24" port protocol="tcp" port="22" accept"
表示允许192.168.2.0/24网段的主机访问22端口 。
13.禁止指定ip/网段
8-12 各个命令中,将 accept
设置为 reject
表示拒绝,设置为 drop
表示直接丢弃(会返回timeout连接超时)
例如:
firewall-cmd --zone=drop --add-rich-rule="rule family="ipv4" source address="192.168.2.0/24" port protocol="tcp" port="22" reject"
表示禁止192.168.2.0/24网段的主机访问22端口 。
四.参考资料
firewalld防火墙详解 by xuad88.