2018年8月27日
22:59
1、规则链
规则的作用在于对数据包进行过滤或处理,根据处理时机的不同,各种规则被组织在不同的“链”中规则链是防火墙规则/策略的集合
默认的5种规则链
INPUT:处理入站数据包
OUTPUT:处理出站数据包
FORWARD:处理转发数据包
POSTROUTING链:在进行路由选择后处理数据包
PREROUTING链:在进行路由选择前处理数据包
2、规则表
具有某一类相似用途的防火墙规则,按照不同处理时机区分到不同的规则链以后,被归置到不同的“表”中规则表是规则链的集合
默认的4个规则表
raw表:确定是否对该数据包进行状态跟踪
mangle表:为数据包设置标记
nat表:修改数据包中的源、目标IP地址或端口
filter表:确定是否放行该数据包(过滤)
3、规则表间的优先顺序
依次为:raw、mangle、nat、filter
raw(PREROUTING、OUTPUT)
mangle(INPUT、OUTPUT、FORWARD、 POSTROUTING、PREROUTING)
nat(POSTROUTING、PREROUTING、OUTPUT)
filter(INPUT、FORWARD、OUTPUT)
规则链间的匹配顺序
入站数据:PREROUTING、INPUT
出站数据:OUTPUT、POSTROUTING
转发数据:PREROUTING、FORWARD、POSTROUTING
规则链内的匹配顺序
按顺序依次进行检查,找到相匹配的规则即停止(LOG策略会有例外)
若在该链内找不到相匹配的规则,则按该链的默认策略处理
4、iptables命令的语法格式
iptables [-t 表名] 管理选项 [链名] [条件匹配] [-j 目标动作或跳转]
几个注意事项
不指定表名时,默认表示filter表
不指定链名时,默认表示该表内所有链
除非设置规则链的缺省策略,否则需要指定匹配条件
案例:常用管理选项
iptables -t filter -A INPUT -p tcp -j ACCEPT
iptables -I INPUT -p udp -j ACCEPT
iptables -I INPUT 2 -p icmp -j ACCEPT
iptables -P INPUT DROP
iptables -L INPUT --line-numbers
iptables -D INPUT 2
iptables -F
iptables -t nat -F
iptables -t raw -N TCP_PACKETS
iptables -t raw -L
5、设置匹配数据包的条件
通用条件匹配
可直接使用,不依赖于其他的条件或扩展模块
包括网络协议、IP地址、网络接口等匹配方式
iptables -I INPUT -p icmp -j REJECT
iptables -A FORWARD -p ! icmp -j ACCEPT
iptables -A FORWARD -s 192.168.1.11 -j REJECT
iptables -A INPUT -i eth1 -s 172.16.0.0/12 -j DROP
iptables -A FORWARD -o eth1 -d 61.35.4.3 -j DROP
隐含条件匹配
一般需要以特定的协议匹配作为前提
包括端口、TCP标记、ICMP类型等匹配方式
iptables -A FORWARD -p tcp --dport 22 -j ACCEPT
iptables -A OUTPUT -p tcp --sport 20:80 -j ACCEPT
iptables -A INPUT -i eth0 -p icmp --icmp-type Echo-Request -j DROP
iptables -A INPUT -p icmp --icmp-type Echo-Reply -j ACCEPT
或者:
iptables -A INPUT -i eth0 -p icmp --icmp-type 8 -j DROP
iptables -A INPUT -p icmp --icmp-type 0 -j ACCEPT
iptables -I INPUT -i eth1 -p tcp - -tcp-flags SYN,RST,ACK SYN -j REJECT
iptables -I INPUT -i eth1 -p tcp - -syn -j REJECT
显式条件匹配
需要使用“-m 扩展模块”的形式明确指定匹配方式
包括多端口、MAC地址、IP地址范围、数据包状态等匹配方式
MAC地址匹配:使用“-m mac”结合“--mac-source MAC地址”的形式
多端口匹配:使用“-m multiport”结合“--sports 源端口列表”或者“--dports 目标端口列 表”的形式,多个端口之间使用逗号“,”分隔,连续的端口也可以使用冒号“:”分隔
IP地址范围匹配:使用“-m iprange”结合“--src-range 源IP范围”或者“--dst-range 目标 IP范围” 的形式以“-”符号连接起始IP地址、结束IP地址
数据包状态匹配: 使用“-m state”结合“--state 状态类型”的形式,同时表示多种状态时以 逗号“,”分隔。常见的数据包状态包括:NEW、ESTABLISHED、RELATED、INVALID
iptables -A FORWARD -m mac --mac-source 00:0C:29:27:55:3F -j DROP
iptables -A INPUT -p tcp -m multiport --dport 20,21,25,110,1250:1280 -j ACCEPT
iptables -A FORWARD -p tcp -m iprange --src-range 192.168.1.20-192.168.1.99 -j DROP
iptables -A FORWARD -m state --state NEW -p tcp ! --syn -j DROP
iptables -A INPUT -p tcp -m state --state NEW -j DROP
iptables -A INPUT -p tcp -m state --state ESTABLISHED,RELATED -j ACCEPT
6、案例需求描述
配置入站链默认拒绝,其它链都是允许
iptables -F
iptables -P INPUT DROP
iptables -P OUTPUT ACCEPT
iptables -P FORWARD ACCEPT
允许入站接口是本地回环接口的任何数据
iptables -A INPUT -i lo -j ACCEPT
允许所有客户机访问Linux服务器的samba共享
iptables -A INPUT -p tcp --dport 139 -j ACCEPT
iptables -A INPUT -p tcp --dport 445 -j ACCEPT
允许响应所有客户机的dns请求
iptables -A INPUT -p udp --dport 53 -j ACCEPT
只允许一台客户机ping通服务器
iptables -A INPUT -p icmp -s 192.168.120.2 -j ACCEPT
7、需求描述
配置入站和出站链默认是拒绝,其它链都是允许
iptables -F
iptables -P INPUT DROP
iptables -P OUTPUT DROP
iptables -P FORWARD ACCEPT
禁止某一个客户机访问Linux服务器的共享(只能使用--tcp-flag实现)
iptables -A INPUT -p tcp --dport 139 - -tcp-flags SYN SYN -j DROP
iptables -A INPUT -p tcp --dport 445 - -tcp-flags SYN SYN -j DROP
但允许服务器访问那个客户机上的共享(只能使用--tcp-flag实现)
iptables -A OUTPUT -d 192.168.120.2 -p tcp --dport 139 - -tcp-flags SYN SYN -j ACCEPT
iptables -A OUTPUT -d 192.168.120.2 -p tcp --dport 445 - -tcp-flags SYN SYN -j ACCEPT
iptables -A INPUT -s 192.168.120.2 -p tcp --sport 139 - -tcp-flags SYN SYN -j ACCEPT
iptables -A INPUT -s 192.168.120.2 -p tcp --sport 445 - -tcp-flags SYN SYN -j ACCEPT
禁止服务器ping那台客户机,但允许那台客户机ping通服务器(只能使用--icmp-type)
iptables -A OUTPUT -d 192.168.120.2 -p icmp --icmp-type 8 -j DROP
iptables -A INPUT -s 192.168.120.2 -p icmp --icmp-type 8 -j ACCEPT
iptables -A OUTPUT -d 192.168.120.2 -p icmp --icmp-type 0 -j ACCEPT
8、需求描述
配置服务器出站链默认是拒绝,其它链都是允许
iptables -F
iptables -P INPUT ACCEPT
iptables -P OUTPUT DROP
iptables -P FORWARD ACCEPT
客户机不能访问服务器上任何资源
iptables -A INPUT -s 192.168.120.2 -j DROP
iptables -A INPUT -s 192.168.120.2 -j DROP
要求服务器能访问任意客户机上的所有资源,例如能ping通客户机,也可以ssh和http访问客户机(只能使用--state实现)
iptables -A OUTPUT -p icmp --icmp-type 8 -j ACCEPT
iptables -A INPUT -p icmp --icmp-type 0 -j ACCEPT
iptables -A INPUT -p tcp -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT -p tcp -m state --state ESTABLISHED,RELATED -j ACCEPT