Linux防火墙之iptables(1)

1、iptables功能

iptables的作用在于为包过滤的实现提供规则(或称策略),通过各种不同的规则,告诉netfiter对来自有些源、前往某些目的地或具有某些协议特征的数据包应该如何处理。为了更方便地组织和管理防火墙策略,iptables采用了“表”和“链”的分层结构。每个规则“表”相当于内核空间的一个容器,根据处理数据包的时机不同,表容器内包括不同的规则“链”。针对特定数据包的各种防火墙规则,按顺序依次放入对应的规则“链”中。

2、规则表

按照防火墙策略的不同用途,iptables管理着四个不同的规则表,其功能分别由独立的内核模块实现。

(1)filter表,包含三个规则链:INPUT,FORWARD,OUTPUT。

filter表主要用于对数据包进行过滤,根据具体的规则决定是否放行该数据包。filter 表对应的内核模块为 iptable_filter。

(2)nat表,包含三个规则链:

PREROUTING,POSTROUTING,OUTPUT。

nat (Network Address Translation,网络地址转换)表主要用于修改数据包的IP地址、端口号等信息。nat 表对应的内核模块为 iptable_nat。

(3)mangle表,包含五个规则链:

PREROUTING,POSTROUTING,INPUT,OUTPUT,FORWARD。

mangle表主要用于修改数据包的TOS(Type Of Service,服务类型)、TTL(Time To Live,生存周期)指以及为数据包设置Mark标记,以实现Qos(Quality Of Service,服务质量)调整以及策略路由等应用,由于需要相应的路由设备支持,因此应用并不广泛。mangle 表对应的内核模块为 iptable_mangle。

(4)raw表,包含两条规则链:OUTPUT、PREROUTING。

raw表是自1.2.9以后版本的iptables新增的表,主要用于决定数据包是否被状态跟踪机制处理。在匹配数据包时,raw表的规则要优先于其他表。raw表对应的内核模块为iptable_raw。

3、规则链

在处理各种数据包时,根据防火墙规则的不同介入时机,iptables共涉及5种默认规则链,其应用时间点分别对应如下。

(1)INPUT链:当接收到防火墙本机地址的数据包(入站)时,应用此链中的规则。

(2)OUTPUT链:当防火墙本机向外发送数据包(出战)时,应用此链中的规则。

(3)FORWARD链:当接收到需要通过防火墙发送给其他地址的数据包(转发)时,应用此链中的规则。

(4)PREROUTING链:在对数据包作路由选择之前,应用此链中的规则。

(5)POSTROUTING链:在对数据包作路由选择之后,应用此链中的规则。

4、iptables主要参数

-F 清空规则链

eg:iptables -F

#ssh远程登录下使用该命令将清除ssh登录规则,将导致设备无法远程登录

-L 查看规则链,一般与nv配合使用

eg:iptables -L INPUT

-A 追加规则

iptables -A INPUT -p tcp -j ACCEPT

-D 删除规则

eg:iptables -D INPUT 1

-R 修改规则

eg:iptable -R INPUT 1 -p udp -j ACCEPT

-I 在头部插入规则

eg:iptables -I INPUT 1 -p udp --dport 22 -j ACCEPT

-N 新的规则

eg:iptables -N allowed #filter表创建新的规则链

-V 查看iptables版本 iptables -V

-p 协议(tcp/udp/icmp)

eg:iptables -A INPUT -p tcp --sport 111 -j ACCEP

-s 匹配原地址,加" ! "表示除这个IP外

eg:iptables -A INPUT -s 192.168.1.10 -j DROP

-d 匹配目的地址

eg:iptables -A INPUT -d 192.168.1.10 -j ACCEPT

–sport 匹配源端口流入的数据

eg:iptables -A INPUT -p tcp --sport 22 -j DROP

–dport 匹配目的端口流出的数据

eg:iptables -A INPUT -p tcp --dport 22 -j ACCEPT

-i 匹配入口网卡流入的数据

eg:iptables -A INPUT -i eth0 -p tcp --dport 22 -j ACCEPT

-o 匹配出口网卡流出的数据

eg:iptables -A FORWARD -o eth0 -p tcp --sport 22 -j ACCEPT

-j 要进行的处理动作:DROP(丢弃),REJECT(拒绝),ACCEPT(接受),SANT(基于原地址的转换)

eg:iptable -A INPUT 1 -s 192.168.1.10 -j DROP

–to-source 指定SANT转换后的地址

eg:iptables -t nat -A POSTROUTING -s 192.168.10.0/24 -j SANT --to-source 172.168.0.10

-t 表名(raw、mangle、nat、filter)

eg:iptables -t nat -nvL --line 查看nat规则

-m 使用扩展模块来进行数据包的匹配(multiport/tcp/state/addrtype)

eg:iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT

5、iptables规则动作说明

ACCEPT 允许封包通过,此操作后,不再比对其它规则,直接跳往下一个规则链;

REJECT 拒绝封包,并回传封包通知对方,可以传送的封包有几个选择:ICMP port-unreachable、ICMP echo-reply 或 tcp-reset,该处理动作完成后,将直接中断过滤程序。

eg:iptables -A FORWARD -p TCP --dport 22 -j REJECT --reject-with tcp-reset

DROP 丢弃封包不予处理,不回包。该处理动作完成后,将直接中断过滤程序。

REDIRECT 将封包重新导向到另一个端口(PNAT),该处理动作完成后,继续比对其它规则。该功能可以用来实现通透式 porxy 或用来保护 web 服务器。

eg:iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-ports 8080

MASQUERADE 改写封包来源IP为防火墙NIC IP,可以指定port对应的范围,进行完此处理动作后,直接跳往下一个规则链(mangle:postrouting)。这个功能与SNAT略有不同,当进行IP伪装时,不需指定要伪装成哪个IP,IP会从网卡直接读取,当使用拨接连线时,IP通常是由ISP公司的DHCP服务器指派的.

eg:iptables -t nat -A POSTROUTING -p TCP -j MASQUERADE --to-ports 30000-65534

LOG 将封包相关讯息纪录在 /var/log 中,该处理动作完成后,将会继续比对其它规则。

eg:iptables -A INPUT -p tcp -j LOG --log-prefix “INPUT packets”

SNAT 原地址转换,改写封包来源IP为某特定IP或IP范围,可以指定port对应的范围,进行完此处理动作后,将直接跳往下一个规则链(mangle:postrouting)。eg:iptables -t nat -A POSTROUTING -p tcp -o eth0 -j SNAT --to-source 192.168.0.10-192.168.0.20:30000-31000

DNAT 目的地址转换,改写封包目的地IP为某特定IP或IP范围,可以指定port对应的范围,进行完此处理动作后,将会直接跳往下一个规则链(filter:input或 filter:forward)。

eg:iptables -t nat -A PREROUTING -p tcp -d 192.168.0.10 --dport 80 -j DNAT --to-destination 172.168.0.10-172.168.0.20:80-100

MIRROR 镜射封包,也就是将来源IP与目的地IP对调后,将封包送回,进行完此处理动作后,将会中断过滤程序。

QUEUE 中断过滤程序,将封包放入队列,交给其它程序处理。通过自行开发的处理程序,可以进行其它应用,例如:计算联机费用……等。

RETURN 结束在目前规则链中的过滤程序,返回主规则链继续过滤,如果把自定义规则链看成是一个子程序,那么这个动作,就相当于提早结束子程序并返回到主程序中。

MARK 将封包标上某个代号,以便提供作为后续过滤的条件判断依据,进行完此处理动作后,将会继续比对其它规则。

eg:iptables -t mangle -A PREROUTING -p tcp --dport 22 -j MARK --set-mark 2

个人公众号:
Linux防火墙之iptables(1)