目录

1、发展

2、策略分类 

3、原理 

4、命令用法及格式

5、实例

5.1 允许内部网络访问

5.2 主要完成的内网访问外网的ping, ftp(21,20),telnet(23)的服务,括号中为端口号。外网访问防火墙的相应服务。其中为了使内网网段,内外网卡等作为变量。将它们定义为变量,内网网卡IP为LAN_IP,外网网卡IP为:INET_IP,内网网段IP为LAN_RANGE,允许被访问的外网IP:OUTINET,允许访问防火墙的外网IP:ININET


1、发展


在 Linux2.0 的内核中开始集成了 Ipfwadm,Ipfwadm 通过三个规则栈: INPUT 、 OUTPUT 、和 FORWARD 实现传统的数据包过滤技术。在 2.1 版本以后的 Linux 内核中 Ipfwadm 开始被 Ipchains 所代替, Ipchains 和 Ipfwadm 相比具有两个优势:


在包过滤规则中可以明确定义多种协议,如, ICMP ,而不仅限于 TCP 和 UDP


开发者增加了在几乎任何规则中使用否定的能力,如:可以通过声明一条规则“拒绝所有那些不是来自网络内部的外出数据包”来实现反欺骗。


从 2.3 版本的 Linux 内核开始, Linux 开发者开始致力于 Iptables 的工作, Iptables 主要针对商业环境下带状态检测的包过滤技术进行了增强。


2、策略分类 

在Iptables防火墙中提供了3种策略规则表:Filter、Mangle和NAT。

  • Filter:Filter表示专门过滤包的,内建三个链,可以对包进行DROP、LOG、ACCEPT和REJECT等操作。
  • Mangle:这个表主要用来修改数据包包头中的某些值。如:TTL、TOS或MARK。
  • NAT: NAT表的主要用处是网络地址转换。

3、原理 

iptables 网络时延 iptables man_外网

  1. 当一个包进来的时候,也就是从以太网卡进入防火墙,内核首先根据路由表决定包的目标。
  2. 如果目标主机是本机,则如上图直接进入Input链,再由本地正在等待该包的进程接受。
  3. 否则,如果从以太网卡进来的包目标不是本机,再看是否内核允许转发,如果不允许则DROP掉,如果允许转发,则送出本机。
  4. 该Linux防火墙主机自身产生包,由OUTPUT链出

4、命令用法及格式

#iptables [-t table] command [match] [ target]

其中:

(1)[-t table]选项 [-t table]选项允许使用filter、nat和mangle等3种可用的表选项。该选项不是必须的,如果未指定,则filter用作缺省表。

(2)command命令 command命令是iptables中最重要的部分,它对指定了iptables命令的具体操作,例如,插入规则、将规则添加到规则链的末尾或删除规则。

常用参数:
-A 将一条或多条规则附加到链的末尾。
-P  用于设置规则链中缺省执行的策略,即所有与链中任何规则都不匹配的数据包将被强制使用此链的策略。
-F  用于快速删除规则,如果指定了链名,该命令删除链中的所有规则;如果未指定链名,该命令删除所有链中的所有链中所有规则

(3)match匹配 iptables命令中由 match部分指定数据包所应具有的特征(如源和目的地地址、协议等),用于和规则的匹配。

常用参数:
-i  指定本规则适用的进入/外出网络接口。通常有eth0、eth1、lo、ppp0等
-p 用于检查某些特定协议,包括TCP、UDP、ICMP,或者用逗号分隔的任意这3种协议的组合列表以及ALL ,可以使用!符号,表示不与该项匹配。
-s  用于匹配数据包的源主机名称、源IP地址或网络地址,可以使用!符号,表示不与该项匹配。
-d  用于匹配数据包的目的地主机名、目的地IP地址。该匹配还允许对某一范围内IP地址进行匹配,可以使用!符号,表示不与该项匹配。

(4)target目标选项  目标是规则中所指定的操作,与规则匹配的数据包将按照目标中定义的操作来执行。Match选项中必须使用大写的目标选项,如(ACCEPT、DROP、REJECT等。)
ACCEPT:允许这个数据包通过。
DROP: 丢弃这个数据包。
REFECT:删除通过的数据包,该目标的工作方式与DROP相同,但它和DROP的不同在于,REJECT不会在服务器和客户机上留下死套接字。

5、实例

5.1 允许内部网络访问

iptables 网络时延 iptables man_IP_02

第一步,设置默认策略:
iptables –P INPUT DROP
iptables –P OUTPUT DROP
iptables –P FORWARD DROP
第二步,允许所有来自防火墙的网络流量进入Internet;激活SPI,允许任何相关的返回流量回到防火墙。
iptables –A INPUT –i eth0 –s  202.101.123.1 –d any/0  –j ACCEPT
iptables –A OUTPUT –m state --state  ESTABLISHED,
RELATED –j ACCEPT
第三步,实现内部网络接口和网络外部接口之间的数据转发;激活SPI
iptables –A FORWARD –i eth1 –o eth0 –s 172.16.0.0/16 –d any/0 –j ACCEPT
iptables –A FORWARD –m state --stae ESTABLISHED,RELATED –j ACCEPT

5.2 主要完成的内网访问外网的ping, ftp(21,20),telnet(23)的服务,括号中为端口号。外网访问防火墙的相应服务。其中为了使内网网段,内外网卡等作为变量。将它们定义为变量,内网网卡IP为LAN_IP,外网网卡IP为:INET_IP,内网网段IP为LAN_RANGE,允许被访问的外网IP:OUTINET,允许访问防火墙的外网IP:ININET

拓扑图如下:

iptables 网络时延 iptables man_IP_03

配置步骤:
1)初始化脚本
#清除所有防火墙规则,相当于默认的禁止规则
iptables  –F 
iptables -P INPUT DROP  # 丢弃输入的包
iptables -P OUTPUT DROP  #丢弃输出的包

iptables -P FORWARD DROP  # 丢弃所有转发的包
iptables -A INPUT -i lo -j ACCEPT  #打开本次回环的输入
iptables -A OUTPUT -o lo -j ACCEPT  #打开本地回环的输出
iptables -A INPUT -i eth0 -j ACCEPT  #打开内网网卡的输入
iptables -A OUTPUT -o eth0 -j ACCEPT  #打开内网网卡的输出
iptables -t nat -A POSTROUTING  -s  192.168.10./24 -j SNAT --to  200.200.200.1
#将内网网段的ip地址改变为源地址为外网网卡的ip地址。相当于将内网的ip地址伪装为外网地址。


2)允许内网ping到外网机器
iptables -A FORWARD -i eth0 -p icmp -s 192.168.10.0/24 --icmp-type 8 -d any/0 -j ACCEPT 
iptables -A FORWARD -o eth0 -p icmp -s any/0 --icmp-type 0 -d 192.168.10.0/24 -j ACCEPT

3)允许外网ping到防火墙
iptables -A INPUT -i eth1 -p icmp -s any/0 --icmp-type 8 -d 200.200.200.1 -j ACCEPT
iptables -A OUTPUT -o eth1 -p icmp -s 200.200.200.1 --icmp-type 0 -d amy/0 -j ACCEPT
exit 0

4)允许内网访问外网的telnet服务
iptables -A FORWARD -i eth0 -p tcp -s 192.168.10.0/24 --sport 1024:65535 -d any/0 --dport 23 -j ACCEPT
iptables -A FORWARD -o eth0 -p tcp -s any/0 --sport 23 -d 192.168.10.0/24 --dport 1024:65535 -j ACCEPT

5)允许外网访问防火墙的telnet服务
iptables -A INPUT -i eth1 -p tcp -s any/0 --sport 1024:65535 -d 200.200.200.1 --dport 23 -j ACCEPT
iptables -A OUTPUT -o eth1 -p tcp -s 200.200.200.1 --sport 23 -d any/0 --dport 1024:65535 -j ACCEPT

6)允许内网访问外网的ftp服务
#ftp
#allow intranet ftp internet
OUTINET=$1
LAN_RANGE=$2
UNPPORTS=1024:65535
iptables -A FORWARD -o eth0 -p tcp -s $OUTINET --sport 21 -d $LAN_RANGE - -dport $UNPPORTS -j ACCEPT
iptables -A FORWARD -o eth0 -p tcp -s $OUTINET --sport 20 -d $LAN_RANGE -- dport $UNPPORTS -j ACCEPT
iptables -A FORWARD -i eth0 -p tcp -s $LAN_RANGE --sport $UNPPORTS -d $OUTINET - -dport 21 -j ACCEPT
iptables -A FORWARD -i eth0 -p tcp -s $LAN_RANGE --sport $UNPPORTS -d $OUTINET - -dport 20 -j ACCEPT
exit 0

6)允许内网访问外网的ftp服务
#ftp
#allow intranet ftp internet
OUTINET=$1
LAN_RANGE=$2
UNPPORTS=1024:65535
iptables -A FORWARD -o eth0 -p tcp -s $OUTINET --sport 21 -d $LAN_RANGE - -dport $UNPPORTS -j ACCEPT
iptables -A FORWARD -o eth0 -p tcp -s $OUTINET --sport 20 -d $LAN_RANGE -- dport $UNPPORTS -j ACCEPT
iptables -A FORWARD -i eth0 -p tcp -s $LAN_RANGE --sport $UNPPORTS -d $OUTINET - -dport 21 -j ACCEPT
iptables -A FORWARD -i eth0 -p tcp -s $LAN_RANGE --sport $UNPPORTS -d $OUTINET - -dport 20 -j ACCEPT
exit 0

7)允许外网访问防火墙的ftp服务
#ftp
#allow internet ftp intranet
ININET=$1
INET_IP=$2
UNPPORTS=1024:65535
iptables -A INPUT -i eth1 -p tcp -s $ININET --sport $UNPPORTS -d $INET_IP --dport 21 -j ACCEPT
iptables -A INPUT -i eth1 -p tcp -s $ININET --sport $UNPPORTS -d $INET_IP - -dport 20 -j ACCEPT
iptables -A OUTPUT -o eth1 -p tcp -s $INET_IP --sport 21 -d $ININET --dport $UNPPORTS -j ACCEPT
iptables -A OUTPUT -o eth1 -p tcp -s $INET_IP --sport 20 -d $ININET --dport $UNPPORTS -j ACCEPT
exit 0