iptables/netfilter进阶

  在上一章当中我们介绍了iptables的介绍以及它的基本使用,下面我们开始介绍iptables的命令用法以及iptables是如何工作的。

1、回顾

  我们回顾一下上一章节的内容,在上一章节中我们讲述的是iptables的基本概念以及命令格式,同时讲述规则链与表的概念,那么现在我们就要说一下iptables的相关命令。

2、iptables的相关命令

  其实使用iptables命令,都要遵从"四表五链",那么在前一章我们说过,iptables的格式如下

# iptables [-t table] COMMAND [chain] [PARAMETERS] [-m matchname [per-match-options]] [-j targetname [per-target-options]]

  那么下面我们依据这个命令的格式,来用实例熟悉iptables命令。
  (1) 开放本机为192.168.1.16的80端口,然后我们拒绝3306端口进行响应。

# iptables -A INPUT -d 192.168.1.16 -p tcp --dport 80 -j ACCEPT# iptables -A INPUT -d 192.168.1.16 -p tcp --dport 3306 -j DROP

  以上的命令是很简单的,那么为什么在INPUT上将80,3306端口写上去呢?这是因为别人发请求的时候,我响应给客户端时,我变成了"目标",而我并不知道源地址,更别说客户端用那个端口给我进行响应了,但是我知道目标IP和目标端口是谁,只要在入栈报文处进行处理给它实施拦截,就可以得到有效的控制。
不过以上的规则当中,我们可以使用显式扩展-m当中的multiport以离散或连续的方式指定多个端口,最多达到15个,不过必须要统一起来,要么就放行,要么就拦截。

[!] --source-ports, --sports port[,port|,port:port]...  指定多个端口
[!] --destination-ports, --ports port[,port|,port:port]...  指定多个目标端口

  示例如下:

# iptables -A INPUT -d 192.168.1.16 -p tcp -m multiport --dports 80,3306 -j ACCEPT

  同样,在OUTPUT链上,我们可以不允许放行,即使在INPUT链中能进来,但不响应也是不行···的。

# iptables -A OUTPUT -s 192.168.1.15 -p tcp -m multiport --sports 22,80 -j DROP

  注意:这样的实验还是并不推荐,因为这样会把远程回话给拒绝掉,如果说要做这个实验的话,还是把22号端口放行,如果真的做了这个事情,需要在实体机上执行清空规则命令

# iptables -F

  (2) 拒绝从192.168.1.20-30范围的IP地址拒绝访问192.168.1.15的80端口

# iptables -A INPUT -d 192.168.1.15 -p tcp --dport 80 -m iprange --src-range 192.168.1.20-192.168.1.30 -j DROP

  在显示扩展中,iprange是匹配ip的范围,是以连续的方式来指明多个ip地址的匹配条件,一般有两种方式:

[!] --src-range from[-to]
[!] --dst-range from[-to]

  (3) 在周六周日的两点半到六点半期间,所有来源于192.168.24.0/24的范围网段禁止访问192.168.1.15的80端口。

# iptables -A INPUT -s 192.168.24.0/24 -d 192.168.1.15 -p tcp --dport 80 -m time --timestart 14:30 --timestop 18:30 --weekdays 6,7 -j DROP# iptables -A INPUT -s 192.168.24.0/24 -d 192.168.1.15 -p tcp --dport 80 -m time --timestart 14:30 --timestop 18:30 --weekdays 6,7 --kerneltz -j DROP

  以上这两种命令的意思大致是一样的,time就是显示扩展之一的选项,--timestart是开始的时间,那么--timestop是停止的时间,--weekdays表示日期,可以用数字表示或者是单词,与众不同的是第二个是多个--kerneltz,那么这个意思是转换成内核所设置的时间,也就是说,第一段命令使用的是UTC时间。
  (4) 带有凡事从192.168.1.15响应为"gay"字符串,从80端口响应出去的全部屏蔽掉。

# iptables -A OUTPUT -s 192.168.1.15 -p tcp --sport 80 -m string --algo bm --string "gay" -j DROP

  显示扩展string是报文中的应用层数据作为字符串模式的匹配检测,以上的命令中如果匹配到的话就丢弃掉,其中--algo是指明算法的,算法共有两个,一个是bm,另一个是kmp;检测的模式也有两种,一个是检测字符串的模式,另一个是要检测字符串的模式,但是是16进制的,如下以此显示:

[!] --string pattern    要检测的字符串模式[!] 
--hex-string pattern    要检测字符串模式,16进制

  (5) ping请求最少达到3个,最多不能达到5个。

# iptables -A INPUT -d 192.168.1.15 -p icmp --icmp-type 8 -m limit --limit 3/minute --limute-burst 5 -j ACCEPT

  这是limit扩展,基于收发报文的速率匹配,在这里面,还有令牌桶过滤器,有了这个过滤器,我们可以限制它的数量,以这段命令为例,从iptables的角度看,就是开始的时候,有五个通行证,用完之后每20秒增加一个,以用户的角度看,就是每一分钟增加三个或每分钟只能过三个,要是想20分钟过一个,只能写成–limit 3/hour –limit-burst 5。所以,以下子命令的显示为:

--limit rate[/second|/minute|/hour|/day]
--limit-burst number

  (6) 访问192.168.1.15的22号端口和80端口的NEW状态以及ESTABLISHED状态进入,之后只能允许ESTABLISHED放行。

# iptables -A INPUT -d 192.168.1.26 -p tcp -m multiport --dports 22,80 -m state --state NEW,ESTABLISHED -j ACCEPT# iptables -A OUTPUT -s 192.168.1.26 -p tcp -m multiport --sports 22,80 -m state --state ESTABLISHED -j ACCEPT# iptables -P INPUT DROP# iptables -P FORWARD DROP# iptables -P OUTPUT DROP

  这属于是state扩展,这才使得让iptables拥有带状态控制的防火墙功能,它是根据"连接追踪机制"去检查防火墙的状态,我们称之为conntrack机制,它是去检查连接状态,去追踪本机上的请求和响应之间的关系,状态有如下几种:

NEW 发出新请求,连接追踪模版中不存在此连接的相关信息条目;因此,将其识别为第一次发出请求(新连接请求)
ESTABLISHED 这是NEW状态之后,连接追踪模版中为其建立的条目失败之前期间内所进行的通信状态(已建立的连接)
INVALID 无法识别的连接
RELATED 相关联的连接,当前是一个新请求,但附属于某个已存在的连接
UNTRACKED   未追踪的连接

原创文章,作者:刘 祥宇,如若转载,请注明出处:http://www.178linux.com/67487

(0)
刘 祥宇刘 祥宇
上一篇 2017-02-03
下一篇 2017-02-04

相关推荐

  • 第一周博客作业

    前言:这几周的课程大部分开班前就掌握了的,这次学的细一点,顺便学一下markdown写博客、排版。内容有部分是前几期学员写的,觉得写得不错,就斗胆截取了,还有部分是自己写的,也有一些是百度到的内容。 目录 一、描述计算机的组成及其功能 二、linux发行版 三、linux哲学思想 四、常用命令 五、如何获取命令的帮助信息 六、linux发行版的基础目录名称命…

    Linux干货 2017-01-09
  • ldd 的一个安全问题

    我们知道“ldd”这个命令主要是被程序员或是管理员用来查看可执行文件所依赖的动态链接库的。是的,这就是这个命令的用处。可是,这个命令比你想像的要危险得多,也许很多黑客通过ldd的安全问题来攻击你的服务器。其实,ldd的安全问题存在很长的时间了,但居然没有被官方文档所记录来下,这听上去更加难以理解了。怎么?是不是听起来有点不可思议?下面,让我为你细细道来。 首…

    Linux干货 2016-05-05
  • N25第六周总结:vim编辑器详解

    vim编辑器 一、      大纲 1、   什么是vim编辑器 2、   为什么要使用vim编辑器 3、   vim编辑器能实现哪些功能 4、   vim编辑器详解   二、   &nbs…

    Linux干货 2017-01-12
  • 什么是网站流量、UV、PV、IP

    什么是网站流量,什么叫网站流量?     通常说的网站流量(traffic)是指网站的访问量,是用来描述访问一个网站的用户数量以及用户所浏览的网页数量等指标,常用的统计指标包括网站的独立用户数量、总用户数量(含重复访问者)、网页浏览数量、每个用户的页面浏览数量、用户在网站的平均停留时间等。     …

    Linux干货 2015-03-20
  • 网络班N22期第三周博客作业

    一、列出当前系统所有已经登录的用户名,且同一个用户登录多次只显示一次 [root@bogon ~]# w  15:17:44 up 15:28,  2 users,  load average: 0.00, 0.00, …

    Linux干货 2016-08-29
  • 磁盘管理之MBR,GPT的概念及MBR和GPT分区工具的使用

    一,概述 设备文件 I/O ports: I/O设备地址 一切皆文件 open() read() write()close() 设备类型: 块设备:block,存取单位“块”,磁盘 字符设备:char,存取单位”字符“,键盘 块设备和字符设备的区别 块设备可以随机访问,字符设备必须连续访问,如,/dev/null 块设备有缓存,字符设备没有缓存,因为字符设备…

    Linux干货 2016-09-06