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 20:52
下一篇 2017-02-04 11:43

相关推荐

  • PXE实践

    本篇只以记录个人部署pxe过程中所遇问题,至于原理,只做部分简单说明。 pxe部署必要软件: syslinux (用于提供引导中所必备文件) tftp(用于提供存放vmlinuz,initrd,syslinux.0等引导类文件) dhcp(用于自动获取IP包括指明去哪个主机获取syslinux.0文件) 最后还需要一个web或者ftp服务,已提供系统安装中所…

    Linux干货 2017-02-05
  • N26 第五周博客作业

    1、显示当前系统上root、fedora或user1用户的默认shell; 演示:     [root@263821a05cd9 /]# grep -E “^(root|fedora|user1)\>” /etc/passwd    root:x:0:0:root:/r…

    Linux干货 2017-03-05
  • 第五周小练习

    1显示当前系统上root,fedora或user1用户的默认shell egrep "^(root|user1|fedora)" /etc/passwd|cut -d ':' -f 1,7 2找出/etc/rc.d/init.d/functions文件中某个单…

    Linux干货 2016-12-12
  • 磁盘管理(二)Raid与LVM逻辑卷

    概述:本章主要讲解raid和逻辑卷 什么是RAID RAID:Redundant Arrays of Inexpensive(Independent) Disks 1988年由加利福尼亚大学伯克利分校( University ofCalifornia-Berkeley) “ A Case for RedundantArrays of Inexpensive …

    Linux干货 2016-09-05
  • NFS服务

    NFS服务:       NFS:Network File System 网络文件系统,基于内核的文件系统。 Sun公司开发,通过使用NFS,用户和程序可以像访 问本地文件一样访问远端系统上的文件,基于RPC(Remote Procedure Call Protocol远程过程调用)实现 。 RPC采用C/S模式。客户机请求程序…

    2017-08-14
  • 软件安装与管理–rpm、yum

    一、rpm包管理器     1、介绍rpm        在linux系统中,服务是要通过程序来提供的,通过调用API接口编写好之后的源码包文件对于普通用户来说,安装起来较为繁琐。于是人们将源码在编译安装的环境下制作了更加高级的rpm包,它的最大特点是避免了对原软件包的编译安装,以更加简便…

    Linux干货 2016-08-22