IP封锁 (防火墙维护一张IP黑名单)

IP封锁是指防火墙维护一张IP黑名单,一旦发现发往黑名单中地址的请求数据包,就直接将其丢弃,这将导致源主机得不到目标主机的及时响应而引发超时,从而达到屏蔽对目标主机的访问的目的。

这里IP封锁指的是国内把国外服务器的IP加入了系统的黑名单,导致大部分地区甚至全国无法直接访问服务器。由于系统是分布式的,所以有可能出现部分地区可以访问,部分地区不能访问的情况。比如现在知名的云存储服务Dropbox的主页,就是遭到了IP封锁。

  首先我们把域名服务器设置为国外的,排除了DNS劫持的问题。之后我们诊断一下dropbox的域名是否遭到了DNS污染:

  C:\>nslookup www.dropbox.com 144.223.234.234

  DNS request timed out.

  timeout was 2 seconds.

  *** Can't find server name for address 144.223.234.234: Timed out

  Server: UnKnown

  Address: 144.223.234.234

  DNS request timed out.

  timeout was 2 seconds.

  DNS request timed out.

  timeout was 2 seconds.

  *** Request to UnKnown timed-out

   显然也没有遭到DNS污染。那么接下去我们可以在没有过滤ICMP协议的网络环境中(有些小区宽带和有些公司的内部网络过滤了ICMP协议,无法使用 tracert),我们可以在Windows命令行cmd中使用Windows自带的网络诊断工具tracert进行一下网络诊断是网站遭到了IP封锁还 是其他的故障:

  C:\>tracert -d www.dropbox.com

  Tracing route to www.dropbox.com [174.36.30.70]

  over a maximum of 30 hops:

  1 18 ms 19 ms 26 ms 58.35.240.1

  2 15 ms 20 ms 29 ms 58.35.240.1

  3 13 ms 10 ms 14 ms 124.74.20.45

  4 14 ms 14 ms 15 ms 124.74.209.137

  5 10 ms 15 ms 14 ms 61.152.86.58

  6 * * * Request timed out.

  7 * * * Request timed out.

  8 * * * Request timed out.

   ……

  我们看到,最后一个IP为61.152.86.58(不同地区的IP不一样),之后就不通了,显然在61.152.86.58附近遭到了IP封锁。那么我们打开ip138查一下61.152.86.58是谁在掌控:

  您查询的IP:61.152.86.58

  * 本站主数据:上海市 电信

  * 参考数据一:上海市 电信

  * 参考数据二:上海市 电信

  显然,问题在上海电信这里(其他地区可能是地区的本地电信),而不是dropbox服务器的问题。

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
封锁IP通常是通过防火墙或者网络设备来实现的,可以使用Python的socket库和iptables(Linux防火墙工具)来实现封锁IP的功能。 首先,你需要安装iptables: ``` sudo apt-get install iptables ``` 然后,使用socket库来监听网络连接,当有恶意IP连接时,使用iptables封锁IP: ```python import socket import os # 监听的IP和端口 HOST = '0.0.0.0' PORT = 8080 # 创建一个TCP socket s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # 将socket绑定到指定的IP和端口 s.bind((HOST, PORT)) # 开始监听 s.listen(1) print('Listening on {}:{}'.format(HOST, PORT)) while True: # 等待连接 conn, addr = s.accept() print('Connected by', addr) # 获取远程IP地址 remote_ip = addr[0] # 检查IP是否在黑名单中 if remote_ip in ['1.2.3.4', '5.6.7.8']: print('Blocked IP:', remote_ip) os.system('iptables -A INPUT -s {} -j DROP'.format(remote_ip)) # 与客户端通信 while True: data = conn.recv(1024) if not data: break conn.sendall(data) # 关闭连接 conn.close() ``` 在上面的代码中,我们监听了指定的IP和端口,并且当有连接时,获取远程IP地址并检查是否在黑名单中,如果是,则使用iptables封锁IP。注意,你需要使用sudo运行Python脚本才能执行iptables命令。 当然,这只是一个简单的示例,实际情况中,你可能需要更复杂的逻辑来判断是否需要封锁IP。而且,封锁IP并不是解决网络安全问题的万能方法,还需要其他的安全措施来保护你的网络。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值