目录
1、发展
2、策略分类
在Iptables防火墙中提供了3种策略规则表:Filter、Mangle和NAT。
- Filter:Filter表示专门过滤包的,内建三个链,可以对包进行DROP、LOG、ACCEPT和REJECT等操作。
- Mangle:这个表主要用来修改数据包包头中的某些值。如:TTL、TOS或MARK。
- NAT: NAT表的主要用处是网络地址转换。
3、原理
- 当一个包进来的时候,也就是从以太网卡进入防火墙,内核首先根据路由表决定包的目标。
- 如果目标主机是本机,则如上图直接进入Input链,再由本地正在等待该包的进程接受。
- 否则,如果从以太网卡进来的包目标不是本机,再看是否内核允许转发,如果不允许则DROP掉,如果允许转发,则送出本机。
- 该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 –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
拓扑图如下:
配置步骤:
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
转载自: 胡老师的PPT 《防火墙技术》