iptables中规则的关系——以只允许某些IP段访问为例
最近遇到一个问题:服务器被全球的IP频繁试图通过ssh登录。
于是想到通过iptables防火墙限制访问,达到:仅允许指定ip段访问ssh服务(22端口)。
关于iptables添加规则的文章有很多,而鲜有介绍规则之间的顺序。因此希望通过这篇文章介绍iptables多条规则之间是如何协同工作的。
注:作者并没有在此投入很多时间调研,因而以下仅仅是个人理解,有错误之处希望不吝指出。
假设希望仅仅允许 111.111.0.0/16 IP段ssh登录,而禁止其他所有ip登录。
最简单的命令是:
iptables -I INPUT -p tcp --dport 22 -j DROP
iptables -I INPUT -s 111.111.0.0/16 -p tcp --dport 22 -j ACCEPT
第一句 禁止了所有对22端口的入访问,第二句允许111.111.0.0/16的访问。
这两句命令的关键在于 “-I” 选项,这个选项表示将当前规则插入到第一条,因此上面两条执行完之后,新增的两条规则是(用iptables -L 列出所有规则):
ACCEPT tcp -- 111.111.0.0/16 anywhere tcp dpt:ssh
DROP tcp -- anywhere anywhere tcp dpt:ssh
当有新链接请求时,iptables就使用这些规则:
首先查看第一条:ACCEPT tcp -- 111.111.0.0/16 anywhere tcp dpt:ssh
如果这个ip在地址段里,那么允许。如果不在,才查看下一条规则:
DROP tcp -- anywhere anywhere tcp dpt:ssh
也就是禁止访问。
这样就实现了最初设定的目标。
这两条命令存在一个问题,当用户以 ssh登录身份执行时,执行了第一条:iptables -I INPUT -p tcp --dport 22 -j DROP
后,这条命令被置顶了,从而此时等价实现了“禁止一切ssh”,然后用户就被断开连接了。。。。悲剧
所以更安全的命令应该如下:
iptables -I INPUT -s 111.111.0.0/16 -p tcp --dport 22 -j ACCEPT
iptables -I INPUT 2 -p tcp --dport 22 -j DROP
即先执行允许访问,再显式的将禁止访问放在第二条。
通过以上简单分析可以得出:
iptables对新链接一条一条的查看,直到得出允许/禁止结论,如果在前一条就得出了结论,那么后面的规则都不会起作用。
iptables中规则的关系——以只允许某些IP段访问为例的更多相关文章
- iptables只允许指定ip地址访问指定端口
首先,清除所有预设置 iptables -F#清除预设表filter中的所有规则链的规则 iptables -X#清除预设表filter中使用者自定链中的规则 其次,设置只允许指定ip地址访问指定端口 ...
- linux下通过iptables只允许指定ip地址访问指定端口的设置方法
这篇文章主要介绍了linux下通过iptables只允许指定ip地址访问指定端口的设置方法,需要的朋友可以参考下. 首先,清除所有预设置 iptables -F#清除预设表filter中的所有规则链的 ...
- Ubuntu下Iptables的简单运用,开放/关闭端口,禁止/允许IP或IP段访问...
首先添加规则有两个参数:-A和-I,其中-A是添加到规则的末尾:-I可以插入到指定位置,没有指定位置的话默认插入到规则的首部,由于匹配规则是从上往下,依次查找的,可能出现配置的规则冲突导致后续的规则不 ...
- php中限制ip段访问、禁止ip提交表单的代码
在需要禁止访问或提交表单的页面添加下面的代码进行判断就可以了. 注意:下边只是一个PHP限制IP的实例代码,如果您打算应用到CMS中,请自行修改. <?php /加IP访问限制 if(geten ...
- php中禁止单个ip与ip段访问的代码小结
1.禁止单个IP <?php //IP访问限制 if(getenv('HTTP_CLIENT_IP') && strcasecmp(getenv('HTTP_CLIENT_IP' ...
- 阿里云安全组规则授权对象设置为固定IP段访问
阿里云的ESC建站需要在安全组放通一些端口才能正常访问,所以我们在开放端口的时候就直接设置了全部ip可访问,授权对象填入0.0.0.0/0,意味着允许全部ip访问或者禁止全部ip访问. 但是我们有了一 ...
- 在Linux系统中如何设置APACHE服务器里的后台页面只允许某个IP地址访问
补充资料 本网络中使用LINUX服务器,web服务器是由APACHE搭建,IP地址为192.168.1.5,后台页面为/admin/login.jsp . 如何设置后台页面LOGIN.JSP只允许19 ...
- Iptables防火墙规则使用梳理
iptables是组成Linux平台下的包过滤防火墙,与大多数的Linux软件一样,这个包过滤防火墙是免费的,它可以代替昂贵的商业防火墙解决方案,完成封包过滤.封包重定向和网络地址转换(NAT)等功能 ...
- Iptables防火墙规则使用
iptables是组成Linux平台下的包过滤防火墙,与大多数的Linux软件一样,这个包过滤防火墙是免费的,它可以代替昂贵的商业防火墙解决方案,完成封包过滤.封包重定向和网络地址转换(NAT)等功能 ...
随机推荐
- 集合:在我的世界里,你就是唯一 - 零基础入门学习Python027
集合:在我的世界里,你就是唯一 让编程改变世界 Change the world by program 好,上课之前小甲鱼考考大家还记不记得上节课的内容?上节课我们讲Python中的"字典& ...
- 字符串:各种奇葩的内置方法 - 零基础入门学习Python014
字符串:各种奇葩的内置方法 让编程改变世界 Change the world by program 字符串:各种奇葩的内置方法 或许现在又回过头来谈字符串,有些朋友可能会觉得没必要,也有些朋友会觉得不 ...
- Django的 select_related 和 prefetch_related 函数对 QuerySet 查询的优化(一)
在数据库有外键的时候,使用 select_related() 和 prefetch_related() 可以很好的减少数据库请求的次数,从而提高性能.本文通过一个简单的例子详解这两个函数的作用.虽然Q ...
- 用委托、匿名函数、Lambda的方式输出符合要求的数
最近看了一些博客,对委托和匿名函数和Lambda的方式有了一些更深的理解,在前人的基础上.我也写3个例子 using System; using System.Collections.Generic; ...
- ORA-19573: cannot obtain exclusive enqueue for datafile 1
还原Oracle数据库时出现ORA-19870和ORA-19573错误,如: RMAN> restore database; Starting restore at 11-DEC-12 usin ...
- VS2008资源问题解决方法
错误提示:C:/Program Files/Microsoft SDKs/Windows/v6.0A// Include/PrSht.h(0) error RC2247 : SYMBOL name t ...
- Node.js 和Socket.IO 实现chat WEBIM
socket官方: http://socket.io/ 需求:实现WEB IM功能,数据从服务器PUSH 不是PULL websocket是基于HTML5的新特性,不兼容IE6,7,8 .. ...
- 高精度快速幂(Java版)
import java.io.*; import java.math.*; import java.util.*; import java.text.*; public class Main { pu ...
- Python开发过程中17个坑
一.不要使用可变对象作为函数默认值 复制代码代码如下: In [1]: def append_to_list(value, def_list=[]): ...: def_list. ...
- Unity 命令行参数
通常情况下,Unity可以通过双击桌面上的图标启动,也可以通过输入命令行启动(例如,MacOS终端或者Windows的CMD窗口),通过这种方式在启动时会接受命令和信息.我们可以制作一些小工具跟Uni ...