五、filter过滤和转发
a、打开内核的IP转发
# sysctl -w net.ipv4.ip_forward=1
或 # echo 1 > /proc/sys/net/ipv4/ip_forward
b、基本匹配条件
・通用匹配
→ 可直接使用,不依赖于其他条件或扩展
→ 包括网络协议、IP地址、网络接口等条件
・隐含匹配
→ 要求以特定的协议匹配作为前提
→ 包括端口、TCP标记、ICMP类型等条件
类别 | 选项 | 用法 |
通用匹配 | 协议匹配 | -p 协议名 |
地址匹配 | -s 源地址 -d 目标地址 | |
接口匹配 | -i 收数据网卡 -o发数据网卡 | |
隐含匹配 | 端口匹配 | --sport 源端口 --dsport 目标端口 |
ICMP类型匹配 | --icmp-type ICMP类型 | |
TCP标记匹配 | --tcp-flags检查哪些位哪些位被设置(!取反) |
c、封禁IP地址、网段(这里加 -p icmp 做测试)
・主机防护,针对入站访问的源地址(源地址:发起访问的地址)
# 在192.168.1.202上ping201
# ping 192.168.1.201
PING 192.168.1.201 (192.168.1.201) 56(84) bytes of data.
64 bytes from 192.168.1.201: icmp_seq=1 ttl=64 time=1.98 ms
64 bytes from 192.168.1.201: icmp_seq=2 ttl=64 time=0.326 ms
# 在192.168.1.201上做策略
# iptables -I INPUT 1 -p icmp -s 192.168.1.202 -j DROP
# 在202上ping201
# ping 192.168.1.201(ping不通,用ctrl+c取消)
PING 192.168.1.201 (192.168.1.201) 56(84) bytes of data.
--- 192.168.1.201 ping statistics ---
3 packets transmitted, 0 received, 100% packet loss, time 2510ms
・网络防护,针对转发访问的源地址(源地址:并非真正发起访问的地址)
# iptables -F
# ping 192.168.1.201
PING 192.168.1.201 (192.168.1.201) 56(84) bytes of data.
64 bytes from 192.168.1.201: icmp_seq=1 ttl=64 time=2.16 ms
64 bytes from 192.168.1.201: icmp_seq=2 ttl=64 time=0.250 ms
# iptables -I FORWARD -p icmp -s 192.168.1.202 -j DROP
# ping 192.168.1.201
PING 192.168.1.201 (192.168.1.201) 56(84) bytes of data.
64 bytes from 192.168.1.201: icmp_seq=1 ttl=64 time=0.408 ms
64 bytes from 192.168.1.201: icmp_seq=2 ttl=64 time=0.341 ms
d、保护指定的网络服务
・限制对指定服务端口的访问
# iptables -A INPUT -s 192.168.1.202/24 -p tcp --dport 22 -j ACCEPT
# iptables -A INPUT -p tcp --dport 22 -j DROP
# iptables -A INPUT ! -s 192.168.1.202/24 -p tcp --dport 20:21 -j DROP
e、禁ping相关策略处理
・允许本机ping其他主机,但是,禁止其他主机ping本机
# iptables -A OUTPUT -p icmp --icmp-type echo-request -j ACCEPT
# iptables -A INPUT -p icmp ! --icmp-type echo-request -j ACCEPT
# iptables -A INPUT ! -s 127.0.0.1 -p icmp --icmp-type echo-request -j DROP
# iptables -A OUTPUT ! -s 127.0.0.1 -p icmp ! --icmp-type echo-request -j DROP
f、TCP标记细分控制
・禁止入站的SYN请求包(第一次握手)
→ 检查4个标记位,其中SYN位被设置
・放行入站访问的其他数据包
# iptables -A INPUT -i eth1 -p tcp --tcp-flags SYN,RST,ACK,FIN SYN -j DROP
# iptables -A INPUT -i eth1 -p tcp ! --syn -j ACCEPT
六、iptables状态匹配
a、扩展匹配的用法
・基本格式
→ -m 扩展模块 --扩展条件 条件值
example:-m mac --mac 00:0D:29:24:EC:19
b、常见的扩展匹配
类别 | 选项 | 用法 |
显示匹配 |
状态匹配 | -m state --state 状态值 |
MAC地址匹配 | -m mac --mac-source MAC地址 | |
多端口匹配 |
-m multiport --sport 源端口列表 | |
-m multiport --dport 目标端口列表 | ||
IP范围匹配 |
-m iprange --src-range IP1-IP2 | |
-m iprange --dst-range IP1-IP2 |
c、iptables状态跟踪
・网络连接的五种状态
→ NEW,请求建立连接的包、完全陌生的包
→ ESTABLISHED,将要或已经建立连接的包
→ RELATED,与已知某个连接相关联的包
→ INVALID,无对应连接,以及连接无效的包
→ UNTRACKED,未跟踪状态的包
d、丢弃陌生的TCP响应
・比如,反射、反弹式攻击
# iptables -A INPUT -m state --state NEW -p tcp ! --syn -j DROP
# iptables -A FORWARD -m state --state NEW -p tcp ! --syn -j DROP
e、识别FTP数据连接
・针对FTP被动模式,数据端口未知
# iptables -A FORWARD -d 192.168.1.201 -p tcp --dport 20:21 -j ACCEPT
# iptables -A FORWARD -d 192.168.1.201 -p tcp --sport 20:21 -j ACCEPT
# iptables -A FORWARD -d 192.168.1.201 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
# iptables -A FORWARD -s 192.168.1.201 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
f、根据MAC地址封锁主机
・适用于交换网络,针对源MAC地址
# iptables -A INPUT -m mac --mac-source 00:0B:29:25:CA:19 -j DROP
g、简化服务开启规则
・一条规则开放多个端口
# iptables -A INPUT -p tcp -m multiport --dport 20:22,25,80,16501:16600 -j ACCEPT
h、根据IP范围封锁主机
・SSH登录的IP范围控制
# iptables -A INPUT -p tcp --dport 22 -m iprange --src-range 192.168.2.10-192.168.2.100 -j ACCEPT
# iptables -A INPUT -p tcp --dport 22 -s 192.168.3.0/24 -j DROP
linux防火墙--iptables(一) http://nmore.blog.51cto.com/9008175/1437118
linux防火墙--iptables(二) http://nmore.blog.51cto.com/9008175/1437304
linux防火墙--iptables(三) http://nmore.blog.51cto.com/9008175/1437540