本文介绍下,在linux中通过使用iptables防火墙,禁止某些IP或IP段访问ssh服务的方法,有需要的朋友,参考下吧。
web服务器挂掉了,原因不明,要好好查查了,竟然发现是ssh的问题。
查看nginx的日志,在/var/log/nginx中,没有发现任何出错信息。
也可能是系统内存超了,被OpenVZ内核KILL了吧?
查了一下,果然发现:
uid resource held maxheld barrier limit failcnt
3004536: kmemsize 3626521 4652581 51200000 51200000 0
lockedpages 0 0 2048 2048 0
privvmpages 34041 131231 131200 262200 3
shmpages 1281 1297 128000 128000 0
3004536: kmemsize 3626521 4652581 51200000 51200000 0
lockedpages 0 0 2048 2048 0
privvmpages 34041 131231 131200 262200 3
shmpages 1281 1297 128000 128000 0
私有虚拟页面privvmpages的数值超了,有3次失败请求。一个页面4KB,所以这个VPS的内存是512M.
我在这个VPS上只开启了nginx,vsftpd,Mysqld,php-cgi,xxfpm等服务,不可能占用那么多内存吧。
php的进程数量是用自己写的xxfpm限制死了,只能有3个进程。这些所有的服务一共才占用100多MB内存,怎么可能超了512M呢?
而nginx占用的内存真的很小呀,
复制代码代码示例:
root 22333 0.0 0.1 4988 716 ? Ss Apr29 0:00 nginx: master process /usr/sbin/nginx
www-data 22334 0.0 0.3 5524 1740 ? S Apr29 0:00 nginx: worker process
www-data 22334 0.0 0.3 5524 1740 ? S Apr29 0:00 nginx: worker process
再次查看/var/log下的日志文件,发现auth.log文件体积很大,难道枚举root密码了。
因为sshd会给每个连接fork一个进程,所以当被大量攻击时,ssh的进程会变得很多。
...
Apr 29 11:39:02 293621 CRON[21809]: pam_unix(cron:session): session closed for user root
Apr 29 12:09:01 293621 CRON[21843]: pam_unix(cron:session): session opened for user root by (uid=0)
Apr 29 12:09:01 293621 CRON[21843]: pam_unix(cron:session): session closed for user root
Apr 29 12:25:01 293621 CRON[21861]: pam_unix(cron:session): session opened for user root by (uid=0)
Apr 29 12:25:01 293621 CRON[21861]: pam_unix(cron:session): session closed for user root
Apr 29 12:28:58 293621 sshd[21867]: pam_unix(sshd:auth): authentication failure; logname= uid=0 euid=0 tty=ssh ruser= rhost=208.115.207.253 user=root
Apr 29 12:28:58 293621 sshd[21866]: pam_unix(sshd:auth): authentication failure; logname= uid=0 euid=0 tty=ssh ruser= rhost=208.115.207.253 user=root
Apr 29 12:29:01 293621 sshd[21867]: Failed password for root from 208.115.207.253 port 58931 ssh2
Apr 29 12:29:01 293621 sshd[21866]: Failed password for root from 208.115.207.253 port 56639 ssh2
Apr 29 12:39:01 293621 CRON[21879]: pam_unix(cron:session): session opened for user root by (uid=0)
Apr 29 12:39:01 293621 CRON[21879]: pam_unix(cron:session): session closed for user root
Apr 29 13:09:01 293621 CRON[21913]: pam_unix(cron:session): session opened for user root by (uid=0)
Apr 29 13:09:01 293621 CRON[21913]: pam_unix(cron:session): session closed for user root
Apr 29 13:25:01 293621 CRON[21931]: pam_unix(cron:session): session opened for user root by (uid=0)
Apr 29 13:25:01 293621 CRON[21931]: pam_unix(cron:session): session closed for user root
Apr 29 13:39:01 293621 CRON[21947]: pam_unix(cron:session): session opened for user root
...
Apr 29 11:39:02 293621 CRON[21809]: pam_unix(cron:session): session closed for user root
Apr 29 12:09:01 293621 CRON[21843]: pam_unix(cron:session): session opened for user root by (uid=0)
Apr 29 12:09:01 293621 CRON[21843]: pam_unix(cron:session): session closed for user root
Apr 29 12:25:01 293621 CRON[21861]: pam_unix(cron:session): session opened for user root by (uid=0)
Apr 29 12:25:01 293621 CRON[21861]: pam_unix(cron:session): session closed for user root
Apr 29 12:28:58 293621 sshd[21867]: pam_unix(sshd:auth): authentication failure; logname= uid=0 euid=0 tty=ssh ruser= rhost=208.115.207.253 user=root
Apr 29 12:28:58 293621 sshd[21866]: pam_unix(sshd:auth): authentication failure; logname= uid=0 euid=0 tty=ssh ruser= rhost=208.115.207.253 user=root
Apr 29 12:29:01 293621 sshd[21867]: Failed password for root from 208.115.207.253 port 58931 ssh2
Apr 29 12:29:01 293621 sshd[21866]: Failed password for root from 208.115.207.253 port 56639 ssh2
Apr 29 12:39:01 293621 CRON[21879]: pam_unix(cron:session): session opened for user root by (uid=0)
Apr 29 12:39:01 293621 CRON[21879]: pam_unix(cron:session): session closed for user root
Apr 29 13:09:01 293621 CRON[21913]: pam_unix(cron:session): session opened for user root by (uid=0)
Apr 29 13:09:01 293621 CRON[21913]: pam_unix(cron:session): session closed for user root
Apr 29 13:25:01 293621 CRON[21931]: pam_unix(cron:session): session opened for user root by (uid=0)
Apr 29 13:25:01 293621 CRON[21931]: pam_unix(cron:session): session closed for user root
Apr 29 13:39:01 293621 CRON[21947]: pam_unix(cron:session): session opened for user root
...
对付这种攻击,可以限制IP、用户连接数,也可以取消root账户密码登录,采用证书认证。
之前脚本学堂,发过一篇文章:免口令登录远程SSH服务,就是使用证书登录的。
个人觉得,最有效的方法,还是使用iptables防火墙,在防火墙里设置IP白名单。
即避免了产生大量的流量,也不会产生sshd的连接进程。
在iptables中,添加两个常用的IP段,其他网段的数据包都DROP了,而不是REJECT(REJECT还要发送ICMP回应包给连接方)。
复制代码代码示例:
# iptables -A INPUT -p tcp --dport 22 -s 120.0.0.0/8 -j ACCEPT
# iptables -A INPUT -p tcp --dport 22 -s 183.0.0.0/8 -j ACCEPT
# iptables -A INPUT -p tcp --dport 22 -j DROP
# iptables -A INPUT -p tcp --dport 22 -s 183.0.0.0/8 -j ACCEPT
# iptables -A INPUT -p tcp --dport 22 -j DROP
测试:
在另外一个机子连接这个VPS,数据包被成功DROP了。
复制代码代码示例:
root@293621:~# iptables -vL
Chain INPUT (policy ACCEPT 36 packets, 6257 bytes)
pkts bytes target prot opt in out source destination
222 16280 ACCEPT tcp -- any any 120.0.0.0/8 anywhere tcp dpt:ssh
0 0 ACCEPT tcp -- any any 183.0.0.0/8 anywhere tcp dpt:ssh
4 240 DROP tcp -- any any anywhere anywhere tcp dpt:ssh
Chain INPUT (policy ACCEPT 36 packets, 6257 bytes)
pkts bytes target prot opt in out source destination
222 16280 ACCEPT tcp -- any any 120.0.0.0/8 anywhere tcp dpt:ssh
0 0 ACCEPT tcp -- any any 183.0.0.0/8 anywhere tcp dpt:ssh
4 240 DROP tcp -- any any anywhere anywhere tcp dpt:ssh
又一次体会到iptables的威力,看来这块的内容,得找个时间好好加强下,好用啊。
相关推荐
阿里云CentOS配置iptables防火墙是一项重要的安全措施,尽管阿里云提供了云盾服务,但额外的防火墙层能提供额外的安全保障。以下是配置iptables防火墙的详细步骤: 1. **检查iptables服务状态**: 首先,通过运行`...
### 一键配置CentOS iptables防火墙Shell脚本解析 #### 概述 本文将详细介绍一个用于一键配置CentOS系统中的iptables防火墙的Shell脚本。该脚本可以帮助用户简化新装系统的iptables配置过程,使其更加高效且易于...
Iptables是一个基于命令行的防火墙工具,它使用规则链来允许/阻止网络流量。当一条网络连接试图在你的系统中建立时,iptables会查找其对应的匹配规则。如果找不到,iptables将对其采取默认操作。几乎所有的Linux发行...
另外,还需要在/etc/hosts文件中添加对应的主机名和IP地址映射,方便通过主机名来识别和访问网络中的其他服务器。 关于SSH免密配置,这是实现服务器之间远程无密码登录的关键步骤。配置过程中,需要在每台服务器上...
2. 使用防火墙(如iptables)限制不必要的入站连接。 3. 监控系统日志,及时发现异常行为。 4. 定期更换SSH密钥,避免长时间使用同一密钥。 5. 对敏感数据进行加密存储。 6. 禁止不必要的服务,减少攻击面。 7. 使用...
### Linux防火墙iptables常用规则详解 #### 一、iptables基础操作与配置 ##### 删除现有规则 在使用iptables之前,我们通常需要先清除已有的规则,以便于重新建立新的规则集。这可以通过`iptables -F`命令来实现。...
防火墙使用 iptables 在 Linux 上管理防火墙的脚本。标准用法您只需要运行一个脚本来管理防火墙,但您可以向其传递各种命令。 它们通常应按显示的顺序运行。 请注意,所有命令都需要以 root 权限执行(例如,通过...
【限制IP访问Oracle数据库的方法步骤】 一、概述 在网络安全管理中,限制特定IP或IP范围访问Oracle数据库是一项重要的任务,以确保数据安全和防止未经授权的访问。本文将详细介绍三种方法来实现这一目标:通过`sql...
本文将详细介绍Linux操作系统下SSH默认22端口修改方法,包括限制通过SSH登录Linux的IP、修改配置文件、启用新端口、编辑防火墙配置等步骤。 限制通过SSH登录Linux的IP 在Linux操作系统下,为了提高安全性,可以...
可以使用命令 `/etc/init.d/iptables stop` 关闭防火墙。 2. SSH服务已开启:SSH服务是建立连接的必要条件,需要确保SSH服务已经启动。可以使用命令 `/etc/init.d/sshd start` 启动SSH服务。 二、VMWARE网络设置 ...
如果Ubuntu系统上安装了iptables防火墙,可以通过以下命令卸载: ``` sudo apt-get remove iptables ``` **2. 关闭UFW防火墙** 对于使用UFW(Uncomplicated Firewall)防火墙的Ubuntu系统,可以通过以下命令关闭...
以上介绍了CentOS 6中iptables的基本使用方法及其常用操作。正确配置iptables规则对于提高系统的安全性至关重要。需要注意的是,在实际部署过程中,应根据具体需求灵活调整规则,并确保不会影响到必要的网络通信。
iptables 是基于内核的防火墙,功能非常强大,iptables 内置了 filter,nat 和 mangle 三张表。filter 负责过滤数据包,包括的规则链有,input,output 和 forward;nat 则涉及到网络地址转换,包括的规则链有,...
3. 使用防火墙规则:设置iptables或ufw防火墙规则,限制特定IP或端口的访问。 4. 安装并更新SSH守护进程:保持sshd的最新状态,以抵御已知的安全漏洞。 五、SSH高级用法 1. SSH隧道:可以创建端口转发,如本地端口...
使用iptables或ufw等工具限制SSH只允许特定IP或端口访问。 4. **定期更换密钥:** 定期更新SSH密钥对,提高安全性。 5. **使用密钥管理工具:** 如`ssh-agent`和`ssh-add`,帮助管理密钥,避免频繁输入密码。 ...
4. **防火墙规则**:通过iptables或ufw等防火墙工具,可以限制特定IP地址或范围的SSH访问,进一步增强安全性。 5. **日志监控**:定期检查`/var/log/auth.log`(或对应的日志文件)可以帮助发现异常登录尝试,及时...
6. **防火墙配置**:如果Ubuntu启用了防火墙(ufw或iptables),记得打开SSH端口22,以便允许入站连接: 对于ufw: ``` sudo ufw allow ssh ``` 对于iptables: ``` sudo iptables -A INPUT -p tcp --dport ...
可以暂时禁用iptables防火墙以测试SSH连接: ``` sudo service iptables stop ``` 请注意,这将临时关闭防火墙,可能增加系统风险。如果需要长期开放SSH端口,应配置防火墙规则,允许SSH流量通过。 4. **配置...
### Windows中SSH Secure Shell Client 的使用方法 #### 一、概述 本文档旨在详细介绍如何在Windows环境下使用SSH Secure Shell Client进行安全的远程访问与文件传输。通过本教程,您将学习到从软件的下载安装、...
msg: /bin/sh: /usr/bin/python: No such file or directory\r\nOpenSSH_7.6p1 Ubuntu-4ubuntu0.3, OpenSSL 1.0.2n 7 Dec 2017\r\ndebug1: Reading configuration data /etc/ssh/ssh_config\r\ndebug1: /etc/ssh/...