linux防火墙之iptables和NAT
iptables
1.1.定义:
防火墙,其实说白了讲,就是用于实现Linux下访问控制的功能的,它分为硬件的或者软件的防火墙两种。无论是在哪个网络中,防火墙工作的地方一定是在网络的边缘。而我们的任务就是需要去定义到底防火墙如何工作,这就是防火墙的策略,规则,以达到让它对出入网络的IP、数据进行检测。
功能:
1.filter 定义允许或者不允许的
对于filter来讲一般只能做在3个链上:INPUT ,FORWARD ,OUTPUT
2.nat 定义地址转换的
对于nat来讲一般也只能做在3个链上:PREROUTING ,OUTPUT ,POSTROUTING
规则链:
1.INPUT——进来的数据包应用此规则链中的策略
2.OUTPUT——外出的数据包应用此规则链中的策略
3.FORWARD——转发数据包时应用此规则链中的策略
4.PREROUTING——对数据包作路由选择前应用此链中的规则 (记住!所有的数据包进来的时侯都先由这个链处理)
5.POSTROUTING——对数据包作路由选择后应用此链中的规则 (所有的数据包出来的时侯都先由这个链处理)
1.2.基本操作:
-t 指定表名称
-n 不作解析
-L 列出指定表中的策略
-A 增加策略
-p 网络协议
--dport 端口
-s 数据来源
-j 动作
ACCEPT 允许
REJECT 拒绝
DROP 丢弃
-N 增加链
-E 修改链名称
-X 删除链
-D 删除指定策略
-I 插入
-R 修改策略
-P 修改默认策略
iptables -t filter -nL 查看filter表中的策略
iptable -F 刷掉filter表中的所有策略,当没有用-t指定表名称时默认时filter
service iptables save 保存当前策略
iptables -A INPUT -i lo -j ACCEPT 允许lo
iptables -A INPUT -p tcp --dport 22 -j ACCEPT 允许访问22端口
iptables -A INPUT -s 172.25.254.250 -j ACCEPT 允许250主机访问本机所有端口
iptables -A INPUT -j REJECT 拒绝所有主机的数据来源
iptables -N redhat 增加链redhat
iptables -E redhat westos 改变链名称
iptables -X westos 删除westos链
iptable -D INPUT 2 删除INPUT链中的第二条策略
iptables -I INPUT -p tcp --dport 80 -j REJECT 插入策略到INPUT中的第一条
iptables -R INPUT 1 -p tcp --dport 80 -j ACCEPT 修改第一条策略
iptable -P INPUT DROP 把INPUT表中的默认策略改为drop
1.3 数据包状态:
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A INPUT -i lo -m state --state NEW -j ACCEPT
iptables -A INPUT -p tcp --dport 22 -m state --state NEW -j ACCEPT
iptables -A INPUT -p tcp --dport 80 -m state --state NEW -j ACCEPT
iptables -A INPUT -p tcp --dport 443 -m state --state NEW -j ACCEPT
iptables -A INPUT -p tcp --dport 53 -m state --state NEW -j ACCEPT
iptables -A INPUT -j REJECT
2.1 iptables的NAT地址转换
2.2 基础知识:
第一种情况:入站数据流向
从外界到达防火墙的数据包,先被PREROUTING规则链处理(是否修改数据包地址等),之后会进行路由选择(判断该数据包应该发往何处),如果数据包 的目标主机是防火墙本机(比如说Internet用户访问防火墙主机中的web服务器的数据包),那么内核将其传给INPUT链进行处理(决定是否允许通 过等),通过以后再交给系统上层的应用程序(比如Apache服务器)进行响应。
第二冲情况:转发数据流向
来自外界的数据包到达防火墙后,首先被PREROUTING规则链处理,之后会进行路由选择,如果数据包的目标地址是其它外部地址(比如局域网用户通过网 关访问QQ站点的数据包),则内核将其传递给FORWARD链进行处理(是否转发或拦截),然后再交给POSTROUTING规则链(是否修改数据包的地 址等)进行处理。
第三种情况:出站数据流向
防火墙本机向外部地址发送的数据包(比如在防火墙主机中测试公网DNS服务器时),首先被OUTPUT规则链处理,之后进行路由选择,然后传递给POSTROUTING规则链(是否修改数据包的地址等)进行处理。
2.3配置:
echo "net.ipv4.ip_forward = 1" >>/etc/sysctl.conf
sysctl -p 加载配置使其生效
[[email protected] ~]# sysctl -a | grep forward
iptables -t nat -A POSTROUTING -o eth1 -j SNAT --to-source 172.25.254.121
测试:主机ip地址172.25.254.1 测试虚拟机IP172.25.21.121 有NAT的虚拟机的IP 是172.25.254.121和172.25.21.21