防火墙类型
- 包过滤防火墙:包过滤是 IP 层实现,包过滤根据数据包的源 IP、目的 IP、协议类型(TCP/UDP/ICMP)、源端口、目的端口等包头信息及数据包传输方向灯信息来判断是否允许数据包通过。
- 应用层防火墙:也称为应用层代理防火墙,基于应用层协议的信息流检测,可以拦截某应用程序的所有封包,提取包内容进行分析。有效防止 SQL 注入或者 XSS(跨站脚本攻击)之类的恶意代码。
- 状态检测防火墙:结合包过滤和应用层防火墙优点,基于连接状态检测机制,将属于同一连接的所有包作为一个整体的数据流看待,构成连接状态表(通信信息,应用程序信息等),通过规则表与状态表共同配合,对表中的各个连接状态判断。
iptables介绍
iptables 是 Linux 下的配置防火墙的工具,用于配置 Linux 内核集成的 IP 信息包过滤系统,使增删改查信息包过滤表中的规则更加简单。
iptables 分为四表五链,表是链的容器,链是规则的容器,规则指定动作。
四表
表名 |
作用 |
filter |
用于包过滤 |
nat |
网络地址转发 |
mangle |
对特定数据包修改 |
raw |
不做数据包链路跟踪 |
五链
链路名 |
作用 |
INPUT |
本机数据包入口 |
OUTPUT |
本机数据包出口 |
FORWARD |
经过本机转发的数据包 |
PREROUTING |
防火墙之前,修改目的地址(DNAT) |
POSTROUTING |
防火墙之后,修改源地址(SNAT) |
表中的链
表 |
链 |
filter |
INPUT/OUTPUT/FORWARD |
nat |
PREROUTING/POSTROUTING/OUTPUT |
mangle |
PREROUTING/POSTROUTING/INPUT/OUTPUT/FORWARD |
raw |
PREROUTING/OUTPUT |
命令格式
iptables [-t table] 命令 [chain] 匹配条件 动作
命令 |
描述 |
-A, append |
追加一条规则 |
-I, insert |
插入一条规则,默认链头,后跟编号,指定第几条 |
-D, delete |
删除一条规则 |
-F, flush |
清空规则 |
-L, list |
列出规则 |
-P, policy |
设置链缺省规则 |
-m, module |
模块,比如state、multiport |
-i |
入口网卡 |
-o |
出口网卡 |
-s |
源地址 |
-d |
目标地址 |
-p |
协议类型 |
--sport |
源端口 |
--dport |
目的端口 |
动作
动作 |
描述 |
ACCEPT |
允许数据包通过 |
DROP |
丢弃数据包不做处理 |
REJECT |
拒绝数据包,并返回报错信息 |
SNAT |
一般用于nat表的POSTROUTING链,进行源地址转换 |
DNAT |
一般用于nat表的PREROUTING链,进行目的地址转换 |
MASQUERADE |
动态源地址转换,动态IP时使用 |
模块
模块 |
描述 |
state |
包状态,有四个:NEW/RELATED/ESTABLISHED/INVALLD |
mac |
源MAC地址 |
limit |
包速率限制 |
multiport |
多端口,以逗号分隔 |
iprange |
端口范围,以逗号分隔 |
示例
iptables -F
iptables -t nat -F
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
iptables -I INPUT -p udp --dport 53 -j ACCEPT
iptables -A INPUT -p tcp --dport 22:25 -j ACCEPT
iptables -D INPUT -p tcp --dport 22:25 -j ACCEPT
iptables -A INPUT -p tcp -m multiport --dports 22,80,8080 -j ACCEPT
iptables -A INPUT -s 192.168.1.0/24 -j ACCEPT
iptables -A INPUT -s 192.168.1.10 -j DROP
iptables -A INPUT -i eth0 -p icmp -j DROP
iptables -A INPUT -i lo -j ACCEPT
iptables -I INPUT -p tcp --syn --dport 80 -m connlimit --connlimit-above 30 -j REJECT
iptables -I INPUT -p tcp --syn -m limit --limit 1/s --limit-burst 3 -j ACCEPT
iptables -A FORWARD -p tcp --syn -m limit --limit 1/s -j ACCEPT
iptables –t nat -A POSTROUTING -s [内网 IP 或网段] -j SNAT --to [公网 IP]
iptables –t nat -A PREROUTING -d [对外 IP] -p tcp --dport [对外端口] -j DNAT --to [内网 IP:内网端口]
iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-ports 8080
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o pppo -j MASQUERADE
iptables -P INPUT DROP