链接:https://blog.51cto.com/u_14249042/8207685
为了加强集团服务器的安全性,近期启用了堡垒机,同时就需要对所有业务服务器的ssh进行访问限制,仅允许指定IP访问(堡垒机),其他IP来源则不允许放行。

修改配置文件,实现允许指定用户/用户组或者IP登录

允许指定用户进行登录(白名单)

在/etc/ssh/sshd_config 配置文件中设置AllowUsers选项,
在配置文件末尾添加行格式如下(例如允许用户jituan01通过192.168.1.11登录)。
AllowUsersjituan01@192.168.1.11
配置了指定用户或者用户组允许登录后,默认拒绝其他所有用户或者用户组。

禁止指定用户登录(黑名单)

在 /etc/ssh/sshd_config 配置文件中设置DenyUsers选项,
在配置文件末尾添加行格式如下(例如禁止用户jituan01登录)。
DenyUsers jituan01
上述修改需要重启sshd服务。
CentOS 6系列执行以下命令进行重启:
# service sshd restart
Centos 7/EulerOS系列执行以下命令进行重启:
# systemctl restart sshd

使用DenyHosts
允许或者禁止指定IP通过SSH登录

linux 服务器通过设置 /etc/hosts.allow 和 /etc/hosts.deny 这个两个文件,
可以限制或者允许某个或者某段IP地址远程SSH登录服务器.方法比较简单,具体如下:
允许192.168.1.10 这个IP地址ssh登录,打开/etc/hosts.allow,添加如下行:
sshd: 192.168.1.10
禁止所有ip通过ssh登录,打开/etc/hosts.deny,添加如下行:
sshdALL
hosts.allow 和hosts.deny 两个文件同时设置规则的时候,hosts.allow 文件中的规则优先级高,假设按照上述方法设置后服务器只允许192.168.1.10这个IP地址的SSH登录,其它的 IP 都会拒绝。

 开启
iptable
防火墙,禁止指定IP访问

配置允许访问的端口

例如默认SSH端口为22,我们可以通过命名:
[root@iZuf63tu3fn1swasqa62h8Z ~]# iptables -A INPUT -p tcp --dport 22 -j ACCEPT
开放22端口。我们通过-L -n 就可看到新增加的规则了:
[root@iZuf63tu3fn1swasqa62h8Z~]# iptables -L -nChainINPUT (policy ACCEPT)targetprot opt source destination ACCEPTall -- 0.0.0.0/0 0.0.0.0/0 ACCEPTtcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:22ChainFORWARD (policy ACCEPT)targetprot opt source destination ChainOUTPUT (policy ACCEPT)targetprot opt source destination
如果,你想删除该端口配置。那么可以通过:iptables -D INPUT 2 进行删除。
ps:每一条规则是按照顺序从1开始进行排序的。我们如果想删除哪条。就选择删除哪个就可以了。
如果想删除OUTPUT或FORWARD,可以设置为:
iptables -D OUTPUT 1 或 iptables -D FORWARD1
我们如果SSH端口 不是22,可以改为指定的端口。
还可以配置允许 443端口(https请求),80端口(http请求)
[root@iZuf63tu3fn1swasqa62h8Z ~]#iptables-AINPUT-ptcp--dport 80 -jACCEPT[root@iZuf63tu3fn1swasqa62h8Z ~]#iptables-AINPUT-ptcp--dport 443 -jACCEPT
允许已建立的或相关连的通行
[root@iZuf63tu3fn1swasqa62h8Z ~]#iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
上面这个也是必须的,它是允许所有对外请求的返回包。例如在服务器上执行下载或者安装命令,那么服务器就需要访问外网数据,那得到的返回数据包对于我们本地服务器来说,就是一个INPUT事件了。
添加成功后在规则中的展示效果如下:
[root@iZuf63tu3fn1swasqa62h8Z~]# iptables -L -nChainINPUT (policy ACCEPT)targetprot opt source destination ACCEPTall -- 0.0.0.0/0 0.0.0.0/0 ACCEPTtcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:22ACCEPTtcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:443ACCEPTall -- 0.0.0.0/0 0.0.0.0/0 state ESTABLISHED

过滤其他规则

当我们配置完毕允许开放的规则之后,添加过滤规则。有两种添加方式:
过滤所有非以上规则的请求:iptables -P INPUT DROP。
其他访问规则禁止访问:iptables -A INPUT -j REJECT。
上面两个命令,执行其中一个都可以了。执行第一个命名后的效果:
[root@iZuf63tu3fn1swasqa62h8Z ~]# iptables -L -nChain INPUT (policy DROP)target prot opt source destination ACCEPTall-- 0.0.0.0/0 0.0.0.0/0 ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:22ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:443ACCEPTall-- 0.0.0.0/0 0.0.0.0/0 state ESTABLISHEDACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:80
我们会看到Chain INPUT (policy ACCEPT) 变成了Chain INPUT (policy DROP)
而如果执行的第二条命名就会:
Chain INPUT (policy ACCEPT)target prot opt source destination ACCEPT all -- 0.0.0.0/00.0.0.0/0ACCEPT tcp -- 0.0.0.0/00.0.0.0/0 tcp dpt:22ACCEPT tcp -- 0.0.0.0/00.0.0.0/0 tcp dpt:443ACCEPT all -- 0.0.0.0/00.0.0.0/0 state ESTABLISHEDACCEPT tcp -- 0.0.0.0/00.0.0.0/0 tcp dpt:80 REJECT all -- 0.0.0.0/00.0.0.0/0 reject-with icmp-port-unreachable
到这里,我们的端口开放就配置完毕了。也就是说只有这三个端口才能访问服务器,如果是其他端口。就会直接被拒绝。
PS:我们可以通过开放和关闭80端口,来验证一下防火墙是否正常拦截。
注意:你如果是使用的阿里云服务器,在阿里云后台中的安全组中也要开放相关的端口。否则仍然无法访问。
屏蔽IP
我们上面指定了固定开放的端口。其他端口全部禁止访问。如果有攻击的ip地址,例如通过lastb 命令查询到的大量工具访问的ip。我们如何添加到防火墙配置中呢?很简单,直接指定IP禁止访问即可:
[root@iZuf63tu3fn1swasqa62h8Z ~]# iptables -I INPUT -s 85.31.46.0/24 -j DROP[root@iZuf63tu3fn1swasqa62h8Z ~]# iptables -I INPUT -s 170.64.130.0/24 -j DROP
0/24 代表屏蔽了:
170.64.130.0~170.64.130.255 之间的全部ip。

保存iptables 配置

当我们配置完毕后,需要执行保存操作。否则重启系统后。规则会丢失。因为当前操作只是存储在了内存中。
关键命令为:service iptables save。具体示例如下所示:
[root@iZuf63tu3fn1swasqa62h8Z ~]# service iptables saveiptables: Saving firewall rules to /etc/sysconfig/iptables:[ OK ]
就代表保存成功了。我们还可以将iptables添加到自启动chkconfig中,示例如下:
[root@iZuf63tu3fn1swasqa62h8Z ~]# chkconfig iptables onNote: Forwarding request to 'systemctl enable iptables.service'. Created symlink /etc/systemd/system/multi-user.target.wants/iptables.service → /usr/lib/systemd/system/iptables.service. [root@iZuf63tu3fn1swasqa62h8Z ~]#
好了,今天的小知识你学会了吗?
END
官方站点:www.linuxprobe.com
Linux命令大全:www.linuxcool.com
刘遄老师QQ:5604215
Linux技术交流群:2636170
(新群,火热加群中……)
想要学习Linux系统的读者可以点击"阅读原文"按钮来了解书籍《Linux就该这么学》,同时也非常适合专业的运维人员阅读,成为辅助您工作的高价值工具书!
继续阅读
阅读原文