[网络服务]:Linux 防火墙 iptables 中 filter和 nat详解
[网络服务]:Linux 防火墙 iptables 中 filter和 nat详解
防火墙iptables
iptables 工具
4个功能(表):
-
raw 不常配置
-
mangle 不常配置
-
nat
-
filter 过滤
filter
包过滤防火墙
查看filter的详细规则
-
iptables -t filter -nvL
filter的3条链
每个表都有专门写规则的地方(链)
INPUT 入站链
注:规则是从上向下逐条进行匹配。
FORWARD 转发规则链
(当源地址192.168.1.1 以及目标地址172.16.1.20 都不是本机)
对iptables -t filter -nvl
-
watch -n1 iptables -t filter -nvl
OUTPUT 出站链
filter规则写入
格式
-
iptables -t filter -I INPUT -p tcp --dport 90 -j ACCEPT
查看filter规则表:
这样,我们就可以在外部访问这台服务器的网站了。
iptables的基本语法
注意事项:
-
不指定表名时,默认指向filter表
-
不指定链名时,默认表内所有链
-
除非设置链的默认策略,负责必须指定匹配条件
-
选项、链名、控制类型使用大小字母,其余均为小写
数据包的基本控制类型
-
ACCEPT 允许通过
-
DOROP 直接丢弃,不给出任何提示
-
REJECT 拒绝通过,必要时给出提示
-
LOG 记录日志信息,然后传给下一条规则继续匹配
我们可以实际操作(icmp协议PING)看一下DOROP的REJECT的区别
REJECT
写入规则
-
iptables -I FORWARD -s 0.0.0.0/0 -d 0.0.0.0/0 -j DROP
DROP
注:相同的规则最上面的生效
添加新的规则
-
-A 在链的末尾追加一条规则
-
-I 在链的开头(或指定序号)插入一条规则
例如:
查看规则列表
-
-L 列出所有规则条目
-
-n 数字的形式显示地址、端口信息
-
-v 以更详细的方式显示规则信息
-
-line-number 查看规则时,显示规则的序号
删除、清空规则
-
-D 删除链内指定序号(或内容)的一条规则
-
-F 清空所有的规则
删除EORWARD链中的序号2对应的规则
-
iptables -D FORWARD 2
清空FORFARD链中所有的规则
-
iptables -F FORWARD
当我们清空后,是不是规则就一直没有了呢
防火墙默认时保存其原来的配置的,只要重启iptables防火墙的服务,它之前的规则就又会出来了
-
service iptables restart
指定默认策略
-
-P
注:默认策略的选择只有DROP和ACCEPT
将FORWARD的默认策略改为DROP
iptables -P FORWARD DROP
匹配条件
常见的通用匹配条件
-
协议匹配 -p [协议名]
-
地址匹配 -s [源地址] -d [目的地址]
-
接口匹配 -i [入站网卡] 、-o [出站网卡]
常见的隐含匹配条件
-
端口匹配 --sport [源端口]、--dport [目的端口]
-
TCP标记端口 --tcp-flags [检查范围] [被设置的标记]
-
ICMP类型匹配 --icmp-type [ICMP类型]
例如:
ICMP类型 : 8 请求 0 回显 3 不可达
常见的显示匹配条件
-
多端口匹配 -m multiport -- sport [源端口列表]、-m multiport -- sport [目的端口列表]
-
IP范围匹配 -m iprange --src-range [IP范围]
-
MAC地址匹配 -m mac --mac-source [MAC地址]
导出备份规则
-
iptables-save工具
-
可结合重定向输出保存到指定文件
将当前状态保存到一个桌面的文件中
导出:
-
iptables-save > /root/Desktop/ipt.txt
导入:
-
iptables-restore < /root/Desktop/ipt.txt
将当前状态保存为默认规则
-
service iptables save
无论你重启多次,它也会一直存在生效
nat
网络地址转换
SNAT模式(源地址转换)
实验
Linux网关服务器
查看nat表
-
iptables -t nat -nvL
-
iptables -t nat -A POSTROUTING -p tcp -o eth1 -s 192.168.1.0/24 -j SNAT --to-source 12.34.56.78
写入成功
配置FORWARD
清空FORWARD即可
-
iptables -F FORWARD
PC访问成功
如果Linux网关服务器ip地址变换,这里我们可以看到PC无法访问
写入新的规则
-
iptables -t nat -A POSTROUTING -p tcp -o eth1 -s 192.168.1.0/24 -j MASQUERADE
写入成功
可以看到这里的-A没有生效,删除它上面的规则,使其生效
-
iptables -t nat -D POSTROUTING 1
PC可以成功访问了
DNAT模式(目标地址转换)
实验
实验原理:
确认是外网的PC访问80带端口
如果不是,就将其扔给filter表的INPUT链
注:这里有个优先级的顺序,我们的nat表中的链的优先级是高于filterl表中的链
Linux网关服务器
设定路由前规则
-
iptables -t nat -A PREROUTONG -i eth1 -d 12.34.56.80 -p tcp --dport 80 -j DNAT --to-destination 192.168.1.1:8080
再结合前面一个实验我们配置好的路由后的规则
外网PC通过80端口成功访问内网服务器的8080端口