iptables防火墙禁止某些IP访问ssh的方法分享

本文介绍下,在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

私有虚拟页面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

再次查看/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
...

对付这种攻击,可以限制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

测试:
在另外一个机子连接这个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

又一次体会到iptables的威力,看来这块的内容,得找个时间好好加强下,好用啊。

本文出处参考:http://www.jbxue.com/LINUXjishu/9833.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 可以使用以下命令禁止所有 IP 访问: ``` iptables -P INPUT DROP ``` 这条命令会将防火墙的默认输入策略设置为 DROP,即丢弃所有未被允许的输入流量。 如果需要允许特定 IP 访问,可以使用以下命令: ``` iptables -A INPUT -s [IP_ADDRESS] -j ACCEPT ``` 其中 [IP_ADDRESS] 是允许访问IP 地址。 注意:这些命令只在当前会话有效,重启电脑或服务器后会失效,如需永久生效,需要保存配置。 ### 回答2: 要使用iptables禁止所有IP访问,首先需要打开终端以管理iptables规则。在终端中输入以下命令以禁止所有IP访问: ``` iptables -P INPUT DROP iptables -P OUTPUT DROP iptables -P FORWARD DROP ``` 这些命令将设置默认策略为拒绝所有输入、输出和转发的数据包。 接下来,我们需要确保已经将所有现有的规则清空,以免产生冲突。在终端中输入以下命令: ``` iptables -F iptables -X ``` 这些命令将清空所有的规则和用户定义的链。 最后,我们需要添加一条规则允许本地回环接口的访问。在终端中输入以下命令: ``` iptables -A INPUT -i lo -j ACCEPT iptables -A OUTPUT -o lo -j ACCEPT ``` 这些命令将允许本地回环接口(即127.0.0.1)的访问。 完成以上操作后,iptables禁止所有IP访问,除了本地回环接口。为了使这些规则持久化,需要将规则保存到防火墙配置文件中。具体操作可以根据不同的Linux发行版而有所不同。 需要注意的是,禁止所有IP访问可能会导致互联网连接的完全中断。因此,在执行此操作前应谨慎考虑,并确保您有其他方式维护服务器的远程访问和管理。 ### 回答3: 要禁止所有IP访问,可以使用iptables工具来实现。iptables是Linux系统中的一个防火墙工具,可以用来配置和管理数据包的过滤规则。 首先,我们需要执行以下命令以清除任何现有的iptables规则: ``` sudo iptables -F sudo iptables -X sudo iptables -Z ``` 之后,我们可以使用如下命令来创建一条规则,禁止所有IP访问: ``` sudo iptables -P INPUT DROP ``` 这条规则将设置INPUT链的默认策略为DROP,意味着所有输入数据包将被丢弃,除非其他规则明确允许。因此,在执行这个命令后,除非添加其他允许特定IP访问的规则,系统将禁止所有IP访问。 请注意,这条规则会阻止所有的传入连接,包括SSH和其他服务。如果你仍然需要通过SSH等方式远程连接到系统,可以在执行上述命令之前,加上针对SSH连接的例外规则: ``` sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT ``` 这条规则将允许来自任何IP的TCP连接,目的端口为22(SSH默认端口)。 最后,我们可以使用以下命令来保存iptables规则,以防止重启后失效: ``` sudo iptables-save > /etc/sysconfig/iptables ``` 希望以上解答能够满足您的要求,如有其他问题,请随时提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值