iptables学习笔记

前言:
学习iptables,需要知道它的工作原理,我们可以把它归纳成“三表五链”,其中“三表”分别为nat表、filter表以及raw表,“五链”为PREROUTING、FORWARD、POSTROUTING、INPUT、OUTPUT,至于他们到底怎么配置,有什么作用,请看下文。

特别注意:
对于centOS 7最小化系统而言,并没有自带iptables服务,需要手动安装。

目录
一、iptables原理
二、iptables常用参数
三、iptables规则的保存、备份与恢复
四、iptables的nat表应用
五、拓展学习


下面开始进入正题
一、iptables原理
  iptalbes工作流程:
    1.当启动服务时,会从/etc/sysconfig/iptables读取配置启动
    2.当一个数据包进入网卡时,它首先进入PREROUTING链,内核根据数据包目的IP判断是否需要转送出去。
    3.如果数据包就是进入本机的,它就会沿着图向下移动,到达INPUT链。数据包到了INPUT链后,任何进程都会收到它。本机上运行的程序可以发送数据包,这些数据包会经过OUTPUT链,然后到达POSTROUTING链输出。
    4.如果数据包是要转发出去的,且内核允许转发,数据包就会如图所示向右移动,经过FORWARD链,然后到达POSTROUTING链输出。

参考链接:http://www.cnblogs.com/bangerlee/archive/2013/02/27/2935422.html

关于“三表”:
    filter 这个表主要用于过滤包的,是系统预设的表,內建三个链:INPUT,OUTPUT以及FORWARD链的作用是在包刚刚到达防火墙时改变他的目的地址,如果需要的话,OUTPUT链改变本地产生的包的目的地址,POSTROUTING链在包就要离开防火墙之前改变其源地址
    nat 主要作用于修改数据包的TOS(Type Of Service,服务类型),TTL(Time Tolive ,生存周期)值以及为数据包设值MARK标记,以实现Qos(Quality of Service,服务质量)调整以及策略路由等应用,由于需要相应的路由设备支持,因此应用并不广泛。五个链:PREROUTING,POSTROUTING,INPUT,OUTPUT,FORWARD
    raw 对报文设置一个标志,决定数据包是否被状态跟踪机制处理,只有两个链:OUTPUT,PREROUTING


二、iptables常用参数
  因为iptables配置默认是配置filter表,因此本小节只介绍filter表,不过以下参数对于nat、raw表依旧适用。

iptables -A 增加规则
iptables -D 删除规则
iptables -I 插入规则 
iptables -Z 计数器清零
iptables -F 清除当前规则,不能清除规则
iptables -P INPUT DROP 设定默认规则,不能用-F清除规则,只能用iptables -P ACCEPT才能恢复
iptables (-t nat) --line-number-nvL 查看nat表规则(带有ID号)
                  -t为需要配置的表,默认是filter表
  '-j' 跳转到相应的动作,常用有ACCEPT、DROP、REJECT         、MASQUERADE(伪装)
  '-s' 后面跟源地址
  '-d' 后面跟目的地址
  '-p' 后面跟协议,有tcp、udp、icmp等
  '--sport' 后面跟源端口号
  '--dport' 后面跟目的端口号
  '-i' 后面跟输入设备,如eth0
  '-o' 后面跟输出设备,如eth0
  
注意:上面所说的"""目的"(或者成为输入和输出)注意区分,对于INPUT链来说,源是对方,目的是本机,对于OUTPUT链来说则是反过来的,相信这么说你会明白的。如果还是不明白,请继续读一遍工作流程。


三、iptables规则的保存、备份与恢复

规则保存:service iptables save
规则备份:iptables-save > myipt.rule (备份)可以把防火墙规则保存到指定文件中
规则恢复:iptables-restore < myipt.rule (恢复)这样可以已保存到指定文件的规则
关闭服务:service iptables stop   注意:只要有规则的增加,就会自动开启服务

四、iptables的nat表应用
  路由器就是使用iptables的nat原理实现,举两个栗子

 Q1:假设你的机器上有两块网卡eth0,eth1,其中eth0的IP为192.168.10.11,eth1的IP为172.16.10.11,eth0连接了internet但是eth1没有连接,现在又另一台机器172.16.10.12和eth1是互通的,那么如何设置也能够让eth1的这台机器能够连接internet呢?
 解题思路:打开主机的地址转发功能——————>   echo "1"> /proc/sys/net/ipv4/ip_forward
 问题解析:/proc/sys/net/ipv4/ip_forward文件,默认是0。
意为禁止数据包的转发,因此如果把它里面的内容置为1,则允许数据包的转发,用于有一张以上的网卡。
重启服务器之后又会变为0,因此如果想自动执行,可以将该命令写入到脚本/etc/rc.d/rc.local中 A1:iptables -t nat -A POSTROUTING -s 172.16.10.0/24 -o eth0 -j MASQUERADE
Q2:如何将本地80端口的请求转发到8080端口,当前主机ip为192.168.2.18
A2:iptables -t nat -I POSTROUTING -d 192.168.2.18 -p tcp --dport 80 -j DNAT --to 192.168.2.18:8080
    

五、拓展学习

  1.iptables支持时间控制用户的行为,如:指定工作日的8点到18点期间才能访问445端口
    iptables -A INPUT -p tcp --dport 445 -m time --weekdays Mon,Tus,Wed,Thu,Fri --timestart 08:00:00 --timestop 18:00:00 -j ACCEPT
  2.iptables写一条规则,只同时允许443,80,1723,22,3306,11211,25,110,dns,ntp协议,其他端口拒绝,即多端口开放
    iptables -I INPUT -p tcp -m multiport --dport 443,80,1723,22,3306,11211,25,110,53,123 -j ACCEPT
    iptables -P INPUT -j DROP
原文地址:https://www.cnblogs.com/ImJerryChan/p/6155869.html