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

相关推荐

  • Linux之文件管理命令

      Linux文件管理类命令 Linux一切皆文件,所以熟悉文件管理命令对我们来说至关重要 文件查看命令 cat命令:文本文件查看工具 命令用法:         cat [OPTION]… [FILE]… 常用选项:  &nbsp…

    Linux干货 2016-11-04
  • 内核编译之增加ntfs文件系统

    内核编译 内核编译 单内核体系设计,但充分借鉴了微内核设计体系的优点,为内核引入模块化机制。 内核组成部分:     Kernel,内核核心,一般为bzImage,通常在/boot目录下,名称为vmlinuz-WERSION- RELEASE;     Kernel object…

    Linux干货 2016-09-13
  • 运筹帷幄之中,决胜与千里之外!

           运筹帷幄之中,决胜与千里之外,决定改变一生。        自从2016年年后学校要求产参加毕业实习,但对linux一窍不通的我,阴差阳错的被一家网络公司给录取了。        安排在一家企业做驻场运维工程师,刚去驻场的时候并没有给我分配相应的工作只是给了一些关于数据库,网络,和系统的一些资料,要求进行自学。我想了想,就决定选择了系统进行了解…

    2018-03-26
  • CentOS7常用网络管理命令总结

    一、CentOS7网络接口命名策略(systemd)二、CentOS7的基础网络管理命令2.1 NetworkManager服务2.2 nmtui文本交互式工具2.3 nmcli命令行接口工具nmcli的语法说明NetworkManager整体状态显示显示所有连接或仅活动的连接显示所有设备的状态显示指定设备的所有连接属性添加动态的以太网连接(DHCP)添加静…

    Linux干货 2016-06-09
  • 第三周(3):课堂练习与作业

    课堂练习: 1、找出ifconfig命令结果中本机的所有IPv4地址 [root@centos6 ~]# ifconfig | tr -cs '[0-9].' '\n'|sort -ut. -k3n 127.0.0.1 10.1.…

    Linux干货 2016-08-08
  • 网络配置——路由配置实验

    一、实验环境: 4台虚拟主机,2台CentOS6.8主机做了R1路由器和PC1主机,2台CentOS7.2主机做了R2路由器和PC2主机,4台主机工作在桥接模式下 实验拓扑图: 二、网络配置: ·PC1的网卡配置; ·PC2的网卡配置; ·R1的网卡配置; ·R2的网卡配置; ·启用路由      &nbsp…

    Linux干货 2016-09-07