功能
过滤数据包
地址转换
端口转换
QoS
硬件防火墙
软件防火墙
节点
数据包流向
目标地址就是防火墙
源地址就是防火墙
经过防火墙
iptables的结构
1.表(-t)处理顺序由高到低
raw表:做链接跟踪(OUTPUT,PREROUTING)
mangle表:给数据做标记,实现QoS功能(INPUT,OUTPUT,FORWARD,PREROUTING,POSTROUTING)
nat表:实现地址转换(源地址转换,目标地址转换,端口转换)(PREROUTING,POSTROUTING,OUTPUT)
filter表:实现数据包过滤功能(INPUT,OUTPUT,FORWARD)
2.链---描述数据的流向
INPUT:处理进入防火墙的数据包(目标地址是防火墙)
OUTPUT:处理从防火墙出去的数据包(源地址是防火墙的数据包)
FORWARD:处理由防火墙转发的数据包
PREEOUTING:进行目标地址转换(在路由前处理)
POSTROUTING:进行源地址转换(在路由后处理)
iptables的基本语法
iptables -t 表名 操作命令 链名 匹配规则 -j 跳转处理方法
例:设置服务器拒绝源地址为172.16.0.220进行ping测试
iptables -t filter -A INPUT -s 172.16.0.220 -p icmp -j DROP
例:设置服务器只允许源地址为172.16.0.220进行ping测试(先拒绝,后允许)
# iptables -t filter -P INPUT DROP
# iptables -t filter -A -s 172.16.0.220 -p icmp -j ACCEPT
iptables的操作命令
-A 添加规则
-D 删除规则
-R 替换规则
-N 新建规则链
-L 列出防火墙规则
-I 插入规则
-F 清空标准规则链
-Z 计算器清零
-X 删除自定义链
-P 设置默认规则
-E 重命名规则链
常见匹配项
-s 指定源地址
-d 指定目标地址
--sport 指定源端口
--dport 指定目标端口
-p 指定协议
-i 指定进入的网卡
-o 指定出去的网卡
跳转处理方法
ACCEPT 允许通过
DROP 丢弃数据包
REJECT 退回数据包
SNAT 源地址转换
DNAT 目标地址转换
MASQUERADE 自动匹配地址masquerade
REDIRECT 端口重定向
保存防火墙设置
service iptables save 将防火前辈个规则保存到/etc/sysconfig/iptables
iptables-save > /iptables 把设置重定向到某个文件
iptables-restore < /iptables 从某个文件恢复防火墙设置
练习:设置服务器防火墙只允许172.16.0.0/16的地址段进ping测试,ftp连接,ssh连接,所有其它的访问全部拒绝
设置服务器的防火墙,要求满足如下要求
1.允许任何地址进行web访问
2.只允许从172.16.0.220进行ssh连接
3.允许从172.16.0.0/16进行ping连通性测试
4.允许本机环回地址进行通信
5.决绝其他任何地址访问
iptables扩展
1.多端口扩展
-m multiport --dport 20,21,22
2.状态扩展
NEW,ESTABLISHED,INVALID(无效连接),RELATED(关联连接)
UNTRACKED(不进行跟踪)
-m state --state NEW
建立关联连接时,要建立数据跟踪(加载跟踪模块)
modprobe nf_conntrack_ftp
modprobe -l | grep XXX
3.多地址匹配
-m iprange --src-range 172.16.0.100-172.16.0.200
练习:设置你的服务器拒绝10.0.0.x--->10.0.0.y之间的地址进行ping,x和y的差值在10之间
4.tcp标记扩展
--tcp-flags syn,ack,fin(同时检查) syn(只有它为1)
5.时间扩展
--timestart 08:30:00
--timestop 17:30:00
--datestart 2015/06/01
--datestop 2015/06/30
--monthdays 1,20
--weekdays 1,2,3,4,5
6.字符匹配扩展
-m string
-m string --algo(指定算法) kmp --string "sex" -j DROP
7.limit限制扩展
-m limit --limit 5/s(每秒5个包) --limit-burst 8(最大并发包) --- 当出现最大并发时,会用后续的时间进行补偿
8.nat表实现地址转换
#iptables -t nat -A POSTROUTING -s 172.16.0.0/16 -j SNAT --to-source 192.168.1.201
#iptables -t nat -A POSTROUTING -o eth1 -s 172.16.0.0/16 -j MASQUERADE
#iptables -t nat -A PREROUTING -s 172.16.0.0/16 -p tcp --dport 80 -j REDIRECT --to-port 3128
#iptables -t nat -A PREROUTING -d 10.0.0.10(目的网关) -p tcp --dport 80 -j DNAT --to-destination 192.168.10.100
nat表的转换信息
cat /proc/net/nf_conntrack
/proc/sys/net/nf_conntrack_max
/proc/sys/net/netfilter/
9.raw表的连接控制跟踪
# iptables -t raw -A OUTPUT -p tcp --sport 80 -j NOTRACK(不跟踪)
#iptables -t raw -A PREROUTING -p tcp --dport 80 -j NOTRACK
#iptables -t filter -A INPUT -m state --state --state ESTABLISHED,RELATED,UNTRACKED -j ACCEPT
10.使用mangle表给数据包加标记
策略路由:根据不同的情况,选择不同的网关(如,选择电信还是联通)
#iptables -t mangle -A FORWARD -m iprange --srcrange 192.168.10.1-192.168.10.100 -p tcp --dport 80 -j MARK --set-mark 10
添加策略路由
#ip rule add from all fwmark 10 table 10
#ip route add default via 10.0.0.10 dev eth0 table 10
#iptables -t mangle -A FORWARD -m iprange --srcrange 192.168.10.1-192.168.10.100 -p tcp --dport 80 -j MARK --set-mark 20
添加策略路由
#ip rule add from all fwmark 20 table 20
#ip route add default via 10.0.0.20 dev eth0 table 20
实验:
1.使用一台机器做服务器,包括WEB服务和FTP服务
2.要求这台服务器能够正常上网,但是对访问本机的WEB服务和FTP服务不进行连接跟踪
3.要求能进行ping测试和ssh连接,除此以外拒绝所有其他访问
4.允许回环地址进行网络测试
iptables -A INPUT -p tcp -m multiport --dport 21,22,80 -j ACCEPT
iptables -t raw -A OUTPUT -p tcp -m multiport --sport 21,80 -j NOTRACK
iptables -t raw -A OUTPUT -p tcp -m state --state ESTABLISHED,RELATED,UNTRACKED -j NOTRACK
iptables -t raw -A PREROUTING -p tcp -m multiport --dport 21,80 -j NOTRACK
iptables -t filter -A INPUT -m state --state ESTABLISHED,RELATED,UNTRACKED -j ACCEPT
iptables -A INPUT -p icmp -j ACCEPT
iptables -P INPUT DROP