Iptables规则
iptables防火墙
一、防火墙的功能
1、过滤数据包
2、进行地址转换
3、实现QoS功能
4.链接跟踪
二、iptables的结构
1、表(-t)
raw表:做链接跟踪(OUTPUT,PREROUTING)
filter表:实现数据包过滤功能(INPUT,OUTPUT,FORWARD)
nat表:实现地址转换(源地址转换、目标地址转换、端口转换)(PREROUTING,POSTROUTING,OUTPUT) prerouting postrouting
mangle表:给数据做标记,实现QoS功能(INPUT,OUTPUT,FORWARD,PREROUTING,POSTROUTING)
2、链
INPUT:处理进入防火墙的数据包(目标地址是防火墙)
OUTPUT:处理从防火墙出去的数据包(源地址是防火墙的数据包)
FORWARD:处理由防火墙转发的数据包
PREROUTING:进行目标地址转换(在路由前处理)
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 -P INPUT DROP
# iptables -A INPUT -s 172.16.0.220 -p icmp -j ACCEPT
# iptables -A INPUT -s 0.0.0.0/0 -p icmp -j DROP
3、iptables的操作命令
-A 添加规则
-D 删除规则
-R 替换规则
-N 新建规则链
-L 列出防火墙规则
-I 插入规则
-F 清空标准规则链
-X 删除自定义链
-Z 计数器清零
-P 设置默认规则
-E 重命名规则链
例:设置允许环回地址127.0.0.1进行所有的数据通信
设置允许172.16.0.254进行ssh链接
设置进入防火墙数据包的默认规则为DROP
在第二条规则的前面插入一条规则,允许进行web访问
# iptables -P INPUT DROP
# iptables -t filter -A INPUT -s 127.0.0.1 -j ACCEPT
# iptables -A INPUT -s 172.16.0.254 -p tcp --dport 22 -j ACCEPT
# iptables -I INPUT 2 -p tcp --dport 80 -j ACCEPT
4、常见匹配项
-s 指定源地址
-d 指定目标地址
--sport 指定源端口
--dport 指定目标端口
-p 指定协议
-i 指定进入的网卡
-o 指定出去的网卡
5、跳转处理方法
ACCEPT 允许通过
DROP 丢弃数据包
REJECT 退回数据包
SNAT 源地址转换
DNAT 目标地址转换
MASQUERADE 自动匹配地址
REDIRECT 端口重定向
例:设置服务器拒绝从接口eth0、源地址为172.16.0.220进行web连接
# iptables -A INPUT -i eth0 -s 172.16.0.220 -p tcp --dport 80 -j DROP
6、保存防火墙设置
# service iptables save \\将防火墙规则保存到/etc/sysconfig/iptables
# iptables-save > /iptables/server \\保存防火墙到指定的文件
# iptables-restore < /iptables/server \\从指定的文件中恢复防火墙
练习:设置服务器防火墙只允许172.16.0.0/16的地址段进行ping测试,ftp连接,ssh连接,所有其它的访问全部拒绝
# iptables -F
# iptables -Z
# iptables -A INPUT -s 127.0.0.1 -j ACCEPT
# iptables -A INPUT -s 172.16.0.0/16 -p icmp -j ACCEPT
# iptables -A INPUT -s 172.16.0.0/16 -p tcp --dport 20:22 -j ACCEPT 或者
# iptables -A INPUT -s 172.16.0.0/16 -p tcp -m multiport --dport 20,21,22 -j ACCEPT
# iptables -P INPUT DROP
练习:设置服务器的防火墙,要求满足如下要求
(1)、允许任何地址进行web访问
# iptables -t filter -A INPUT 0.0.0.0/0 -p tcp --dport 80 -j ACCEPT
(2)、只允许从172.16.0.220进行ssh连接
# iptables -t filter -A INPUT 172.16.0.220 -p tcp --dport 22 -j ACCEPT
(3)、允许从172.16.0.0/16进行ping连通性测试
#iptables -t filter -A INPUT 172.16.0.0/16 -p icmp -j ACCEPT
(4)、允许本机环回地址进行通信
#iptables -t filter -A INPUT 127.0.0.1 -j ACCEPT
(5)、拒绝其它任何地址访问
#iptables -t filter -A INPUT 0.0.0.0/0 -j DROP
7、iptables扩展
(1)多端口扩展
-m multiport --dport 23,25,80
(2)状态扩展
NEW,ESTABLISHED,INVALID,RELATED
-m state --state NEW
(3)多地址匹配
-m iprange --src-range 172.16.0.100-172.16.0.200
-m iprange --dst-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
(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 --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.10.10 -p tcp --dport 80 -j DNAT 192.168.10.100
/proc/net/nf_conntrack 连接跟踪表
9、raw表控制连接跟踪
# iptables -t raw -A OUTPUT -p tcp --sport 80 -j NOTRACK
# iptables -t raw -A PREROUTING -m tcp --dport 80 -j NOTRACK
# iptables -t filter -A INPUT -m state --state ESTABLISHED,RELATED,UNTRACKED -j ACCEPT
10、使用mangle表给数据包加标记(实现策略路由)
# iptables -t mangle -A FORWARD -m iprange --src-range 192.168.10.1-192.168.10.100 -p tcp -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 --src-range 192.168.10.101-192.168.10.200 -p tcp -j MARK --set-mark 20
# ip rule add from all fwmark 20 table 20
# ip route add default via 10.0.10.10 dev eth0 table 20
实验:
(1)使用一台机器做服务器,包括web服务和ftp服务
(2)要求这台服务器能够正常上网
(3)但是对访问本机的web服务和ftp服务不进行连接跟踪
(4)允许 环回地址进行网络测试
(5)要求能进行ping测试和ssh连接,除此以外拒绝所有其它访问
# service httpd start
# service vsftpd start
# iptables -P INPUT DROP
# iptables -A INPUT -s 127.0.0.1 -j ACCEPT
# iptables -A INPUT -p icmp -j ACCEPT
# iptables -A INPUT -p tcp --dport 22 -j ACCEPT
# iptables -t raw -A PREROUTING -p tcp -m multiport --dport 21,80 -j NOTRACK
# iptables -t raw -A OUTPUT -p tcp -m multiport --sport 21,80 -j NOTRACK
# iptables -A INPUT -p tcp -m state --state ESTABLISHED,RELATED,UNTRACKED -j ACCEPT