最近遇到一个问题:服务器被全球的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段访问为例的更多相关文章

  1. iptables只允许指定ip地址访问指定端口

    首先,清除所有预设置 iptables -F#清除预设表filter中的所有规则链的规则 iptables -X#清除预设表filter中使用者自定链中的规则 其次,设置只允许指定ip地址访问指定端口 ...

  2. linux下通过iptables只允许指定ip地址访问指定端口的设置方法

    这篇文章主要介绍了linux下通过iptables只允许指定ip地址访问指定端口的设置方法,需要的朋友可以参考下. 首先,清除所有预设置 iptables -F#清除预设表filter中的所有规则链的 ...

  3. Ubuntu下Iptables的简单运用,开放/关闭端口,禁止/允许IP或IP段访问...

    首先添加规则有两个参数:-A和-I,其中-A是添加到规则的末尾:-I可以插入到指定位置,没有指定位置的话默认插入到规则的首部,由于匹配规则是从上往下,依次查找的,可能出现配置的规则冲突导致后续的规则不 ...

  4. php中限制ip段访问、禁止ip提交表单的代码

    在需要禁止访问或提交表单的页面添加下面的代码进行判断就可以了. 注意:下边只是一个PHP限制IP的实例代码,如果您打算应用到CMS中,请自行修改. <?php /加IP访问限制 if(geten ...

  5. php中禁止单个ip与ip段访问的代码小结

    1.禁止单个IP <?php //IP访问限制 if(getenv('HTTP_CLIENT_IP') && strcasecmp(getenv('HTTP_CLIENT_IP' ...

  6. 阿里云安全组规则授权对象设置为固定IP段访问

    阿里云的ESC建站需要在安全组放通一些端口才能正常访问,所以我们在开放端口的时候就直接设置了全部ip可访问,授权对象填入0.0.0.0/0,意味着允许全部ip访问或者禁止全部ip访问. 但是我们有了一 ...

  7. 在Linux系统中如何设置APACHE服务器里的后台页面只允许某个IP地址访问

    补充资料 本网络中使用LINUX服务器,web服务器是由APACHE搭建,IP地址为192.168.1.5,后台页面为/admin/login.jsp . 如何设置后台页面LOGIN.JSP只允许19 ...

  8. Iptables防火墙规则使用梳理

    iptables是组成Linux平台下的包过滤防火墙,与大多数的Linux软件一样,这个包过滤防火墙是免费的,它可以代替昂贵的商业防火墙解决方案,完成封包过滤.封包重定向和网络地址转换(NAT)等功能 ...

  9. Iptables防火墙规则使用

    iptables是组成Linux平台下的包过滤防火墙,与大多数的Linux软件一样,这个包过滤防火墙是免费的,它可以代替昂贵的商业防火墙解决方案,完成封包过滤.封包重定向和网络地址转换(NAT)等功能 ...

随机推荐

  1. [C入门 - 游戏编程系列] 贪吃蛇篇(三) - 蛇定义

    蛇是这个游戏的主角,要实现的功能也是最复杂的一个.因为蛇不止有属性,还有行为.它会动,还会吃东西,还会长大!而且还会死!这是很要命的.我一向看不懂复杂的代码,也写不出复杂的代码.所以对于蛇,我很纠结, ...

  2. Idea使用记录--每次修改JS文件都需要重启Idea才能生效解决方法

    最近开始使用Idea,有些地方的确比eclipse方便.但是我发现工程每次修改JS或者是JSP页面后,并没有生效,每次修改都需要重启一次Tomcat这样的确不方便.我想Idea肯定有设置的方法,不可能 ...

  3. ByteArrayOutputStream的用法

    ByteArrayOutputStream类是在创建它的实例时,程序内部创建一个byte型别数组的缓冲区,然后利用ByteArrayOutputStream和ByteArrayInputStream的 ...

  4. hasOwnProperty方法的使用

    JavaScript中hasOwnProperty函数方法是返回一个布尔值,指出一个对象是否具有指定名称的属性. 使用方法: object.hasOwnProperty(proName)其中参数obj ...

  5. Windows 下 pip和easy_install 的安装与使用

    最简单的莫过于用vs 开发python 的程序,集成PTVS插件后,果然简单易用,调试也方便. 手工搭建的话: 官网:https://pypi.python.org/pypi/setuptools 主 ...

  6. 2013第50周二eclipse工具尝试

    今天更深入的认识了eclipse开发工具,出现了各种问题在网络的帮助下最终都解决了,感觉似乎明白了很多道理需要总结一下,现在发现晚了,那就先记录下我印象深的几个问题吧: 1.eclipse编辑器设置. ...

  7. Visual Assist X在Windows 8.1下出现中文乱码的解决方法

    这主要是输入法造成的,我的输入法中有US.中文.搜狗输入法三个输入法:通过搜狗输入法管理器把“中文”去掉,或者通过语言首选项把“中文”去掉就不会在出现乱码. 这个办法的思路来自于http://www. ...

  8. RedHat安装GCC问题-解决依赖问题

    RedHat Linux在安装gcc时需要cpp和cloog-ppl但是在安装cpp的时候需要这个依赖:libmpfr.so.1()(64bit) is needed by cpp-4.4.6-3.e ...

  9. 【转】基于DM8168的视频智能分析系统的设计方案

        [导读] 为了实现高清视频的智能分析功能,本文介绍了一种以TI公司的DM8168为核心的高清视频智能分析系统的设计方案,该方案从硬件设计和软件设计两个方面介绍了硬件组成.工作流程.软件架构,并 ...

  10. 在iOS上present一个半透明的viewController

    UIViewController *viewController = [[UIViewController alloc]init]; UIViewController* controller = se ...