yum install -y iptables iptables-services
iptables -V 查看版本:
配置文件:
/etc/sysconfig/iptables-config
/etc/sysconfig/iptables #记录规则文件
-L:列出一个链或所有链中的规则信息
-n:以数字形式显示地址、端口等信息
-v:以更详细的方式显示规则信息
--line-numbers:查看规则时,显示规则的序号(方便之处,通过需要删除规则-D INPUT 1
-F:清空所有的规则(-X是清理自定义的链,用的少;-Z清零规则序号)
-D:删除链内指定序号(或内容)的一条规则
-P:为指定的链设置默认规则
-A:在链的末尾追加一条规则
-I:在链的开头(或指定序号)插入一条规则,指定行号就在指定行添加
-t: 指定表名,默认filter表
不使用-t指定表,默认使用filter表
iptables -t nat -L //指定查看nat表的规则
iptables -L //默认查看规则
iptables -nL //以数字的形式显示ip和端口与协议
iptables -nL --line //显示规则行号
iptables -F //清空规则
iptables -F 链名 //清空单独的某一个链里面的规则
保存规则:
# service iptables save
iptables-save > /etc/sysconfig/iptables //保存规则到/etc/sysconfig/iptables文件
iptables-restore < /etc/sysconfig/iptables //从/etc/sysconfig/iptables读取规则
iptables -t 表名 动作 [链名] [-p 匹配条件] [-j 控制类型]
动作
修改默认规则: -P (大p)
删除规则:-D
修改规则:-R
追加规则: -A 默认追加到链的末尾
插入规则:-I (大i),在链的开头(或指定序号)插入一条规则
iptables -t filter -A INPUT -p tcp -j ACCEPT #最后一行
iptables -I INPUT -p udp -j ACCEPT #第一行
iptables -I INPUT 4 -p icmp -j ACCEPT #(插入到第4行)
iptables -D INPUT 3 #删除第三行
systemctl restart iptables #重启
协议:-p (小p)
tcp ---用的最多
udp
icmp ---ping的时候用的协议
#使用协议的时候可以不指定端口,使用端口的时候必须指定协议。
iptables -A INPUT -p icmp -j REJECT ----拒绝被ping
端口:
--sport ---源端口
--dport --目标端口
案例:
拒绝192.168.246.201这台机器通过ssh连接到这台服务器
# iptables -I INPUT -s 192.168.246.201 -p tcp --dport 22 -j REJECT
例子:端口的范围: 拒绝22端口到80端口的访问,包括22和80端口在内
# iptables -I INPUT -s 192.168.246.201 -p tcp --dport 22:80 -j REJECT
禁止源主机进来
#iptables -I INPUT -s 192.168.246.201 -p icmp -j REJECT
-s: 源ip地址
===========================================================================
拒绝多个ip地址:后面跟ip地址可以更多个ip地址用逗号隔开
# iptables -t filter -I INPUT -s 192.168.246.201,192.168.246.133 -p icmp -j REJECT
============================================================
限制源10网段的数据包。
# iptables -I INPUT -s 192.168.10.0/24 -j REJECT
将修改第二条规则访问80端口:
# iptables -R INPUT 2 -p tcp --dport 80 -s 192.168.246.201 -j ACCEPT
禁止ping策略原则
iptables服务器是ping命令发起者或是接受者
-i --in-interface:在INPUT链配置规则中,指定从哪一个网卡接口进入的流量(只能配置在INPUT链上)
-o --out-interface:在OUTPUT链配置规则中,指定从哪一个网接口出去的流量(只能配置在OUTPUT链上)
====================================================
icmp的类型:
0: Echo Reply——回显应答(Ping应答)ping的结果返回。
8: Echo request——回显请求(Ping请求),发出去的请求。
=====================================================
本机可以ping其他机器。其他机器不能ping通本机:
iptables -I OUTPUT -o ens33 -p icmp --icmp-type 8 -j ACCEPT #允许自己ping别人
iptables -I INPUT 2 -p icmp --icmp-type 8 -j DROP #将进来的ping请求给丢弃了。
=====================================================
拒绝任何ping的协议:
[root@iptables-server ~]# iptables -A INPUT -p icmp -j DROP
语法: -m iprange --src-range
# iptables -I INPUT -p tcp --dport 80 -m iprange --src-range 192.168.246.199-192.168.246.206 -j REJECT
语法:
-m multiport --sports #源端口
-m multiport --dports #目的端口
# iptables -A INPUT -p tcp -m multiport --dports 22,80 -s 192.168.246.133 -j REJECT
语法: -m mac --mac-source
# iptables -I INPUT -m mac --mac-source 00:0C:29:64:E3:8D -j REJECT #将指定的MAC地址服务请求全部禁止了
# iptables -I INPUT -i ens33 -j DROP #谁也连不上了.
删除:
# iptables -D INPUT 3 #通过查看行号,指定行号删除;
# iptables -D INPUT -p icmp -j REJECT #方式二
===============================================================
保存:
iptables-save > /etc/sysconfig/iptables #保存到文件里面,方式一
service iptables save #第二种方式,推荐
iptables -t nat -A PREROUTING -p tcp --dport 8080 -j REDIRECT --to-ports 80
iptables -I INPUT -p tcp --dport 80 -j ACCEPT
案例图:
SNAT:把内网地址转换成公网地址(源地址转换)
一个数据包在经过路由之后(或者说在通过防火墙的过滤之后)才被知道他的源IP是谁,在路由之前只能看到目标IP,如果我看不到你的源IP,那怎么匹配想过滤的数据包并进行源地址转换?我防火墙根本就不能确定你是否是符合匹配条件的IP,所以只能使用POSTROUTING
DNAT:要把公网ip换到内网IP -----公网ip只有一个, 内网ip有多个。(目标地址转换)
如果我不在路由之前就把目标地址转换完成,很显然当数据包到达入口IP之后,他的目的已经达到了,因为他本来的目标IP就是防火墙的对外公网IP,那么数据包还会往里面走吗?显然不可能了,所以只能使用PREROUTING
用户虚拟机1 ens33 192.168.73.128/24
出口虚拟机2 ens36 192.168.73.129/24 ens33 10.12.153.54/24
代理虚拟机3 ens33 10.12.153.42/24 ens36 192.168.110.129/24
后端虚拟机4 ens33 192.168.110.128/24
1-2 同一网段
2-3 同一网段
3-4 同一网段
其中2-3分别拥有两张网卡可以与1,4台服务器通信,还有一张网卡可以连接公网
虚拟机3,4
vim /etc/sysctl.conf
net.ipv4.ip_forward = 1
sysctl -p
ip r add 10.12.153.54 via 192.168.73.129
ip r add 10.12.153.42 via 192.168.110.128
1号ip 192.168.73.128
2与1同网段ip 192.168.73.129
2与3同网段ip 10.12.153.54
3与2同网段ip 10.12.153.42
3与4同网段ip 192.168.110.129
4号ip 192.168.110.128
2号主机
iptables -t nat -A PREROUTING -d 192.168.73.129 -j DNAT --to-destination 10.12.153.42 //2与1号同网段ip转换3与2号同网段ip
iptables -t nat -A POSTROUTING -s 192.168.73.128 -j SNAT --to-source 10.12.153.54 //1号ip转换2与3号同网段ip
3号主机
iptables -t nat -A PREROUTING -d 10.12.153.42 -j DNAT --to-destination 192.168.110.128 //3与2同网段ip转换4号ip
iptables -t nat -A POSTROUTING -s 10.12.153.54 -j SNAT --to-source 192.168.110.129 //2与3同网段ip转换3与4同网段ip
3号主机
iptables -t nat -A PREROUTING -d 192.168.110.129 -j DNAT --to-destination 10.12.153.54 //3与4同网段ip转换2与3号同网段ip
iptables -t nat -A POSTROUTING -s 192.168.110.128 -j SNAT --to-source 10.12.153.42
//4号ip转换3与2号同网段ip
2号主机想
iptables -t nat -A PREROUTING -d 10.12.153.54 -j DNAT --to-destination 192.168.73.129 //2与3同网段ip转换2与1号同网段ip
iptables -t nat -A POSTROUTING -s 10.12.153.42 -j SNAT --to-source 192.168.73.128 //3与2同网段ip转换1号ip
在一号主机访问二号主机的与一号主机同一网段的ip
curl 192.168.73.129 //访问到四号主机的nginx页面就证明转发成功