iptables filter表案例、iptables nat表应用 使用介绍
第7周第4次课(5月10日)
课程内容:
10.15 iptables filter表案例
10.16/10.17/10.18 iptables nat表应用
扩展
1. iptables应用在一个网段 http://www.aminglinux.com/bbs/thread-177-1-1.html
2. sant,dnat,masquerade http://www.aminglinux.com/bbs/thread-7255-1-1.html
3. iptables限制syn速率 http://www.aminglinux.com/bbs/thread-985-1-1.html
10.15 iptables filter表案例
案例需求:需要把80、22、21端口放行,但是22端口需要指定一个IP段,只有这个IP段的IP访问的时候才可以访问到,其他IP段的一概拒绝。
可以通过一个脚本实现,脚本其实就是批量执行一些命令。
操作实例如下:
vim /usr/local/sbin/iptables.sh 编辑这个文件,加入如下内容。
#! /bin/bash
ipt="/usr/sbin/iptables" ipt定义一个变量,以全局的绝对路径方式。
$ipt -F -F把之前的规则清空
$ipt -P INPUT DROP 把默认的策略定义一下
$ipt -P OUTPUT ACCEPT
$ipt -P FORWARD ACCEPT
$ipt -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
$ipt -A INPUT -s 192.168.133.0/24 -p tcp --dport 22 -j ACCEPT
$ipt -A INPUT -p tcp --dport 80 -j ACCEPT
$ipt -A INPUT -p tcp --dport 21 -j ACCEPT
PS:第一条规则目的是为了把相关数据包进行连接,通讯更加顺畅。
第二条规则指定IP段的数据包放行
第三条规则把80端口放行
第四条规则把21端口放行
因为有一个DROP,所以需要使用脚本,可以批量执行命令,如果不用脚本那么客户端就会断开。
ICMP案例 iptables -I INPUT -p icmp --icmp-type 8 -j DROP 可以ping通公网,但是无法ping本机IP,主要实现的目的就是禁止ping本机,type 8表示有8种类型。
10.16/10.17/10.18 iptables nat表应用
需求1:可以让B机器连接外网
操作实例如下:
1、首先需要准备2台机器并配置网卡,可以在虚拟机jimmylinux-001上面添加一个虚拟网卡。
按照默认方式添加后点完成
按如下图顺序操作
2、同样把jimmylinux-002添加一块虚拟网卡,方法同上,需要特别注意的是2台机器必须要选择同一个区段,同一个交换机。
添加完2台机器的虚拟网卡后都需要重启系统,重启好后再连接查看网卡信息。
需要给ens37网卡添加一个IP地址,我们可以通过命令方式修改IP或者copy一份ens33网卡配置文件修改IP和netmask即可。
[root@jimmylinux-002 ~]# ifconfig ens37 192.168.100.1/24 手动命令行方式修改IP
这个IP重启系统就自动失效了,如果想永久生效,就是copy一份ens33的网卡配置文件并修改IP。
第二台机器因为把网卡连接断开了,所以无法直接从远程终端登录,只能够到VMware虚拟机登录。
登录后同样使用命令行方式修改ens37网卡的IP
下面开始排查无法ping通A机器的问题
在虚拟机先看看B机器是否可以ping通自己
然后在远程终端看看A机器ens37网卡状态
[root@jimmylinux-002 ~]# ifconfig ens37 192.168.100.1/24 重新使用命令指定IP
[root@jimmylinux-002 ~]# ping 192.168.100.100 再ping B机器就可以ping通了
同样在虚拟机上面ping A机器也可以ping通了
通过上面的操作,已经把准备工作做好了。
1、要想使用nat表网络转发,必须要修改内核参数,默认这个文件/proc/sys/net/ipv4/ip_forward是0,如果是0表示它没有开启内核转发。
2、增加一条规则,有了这条规则就可以实现上网了。
[root@jimmylinux-002 ~]# iptables -t nat -A POSTROUTING -s 192.168.100.0/24 -o ens33 -j MASQUERADE
这条规则就是想让192.168.100.0这个网段能够上网
3、B机器上需要设置网关为192.168.100.1
再去ping A机器的ens33网卡IP就可以ping通了
在B机器上面修改vi /etc.resolve.conf 添加DNS nameserver 119.29.29.29保存退出
如果可以ping通119.29.29.29或www.qq.com,就说明可以访问公网了。
在这个场景里面,A机器就好比路由器,B机器就是客户端,比如是手机。
需求2:C机器只能和A通信,让C机器可以直接连通B机器的22端口
在cmd里面ping B机器还是不通,每次操作都需要在虚拟机操作太麻烦,我想在远程终端登录,这个时候既然不能够直接连接192.168.100.100,但是可以连接192.168.52.129,A机器可以连,那我可以通过A机器跳转到B机器做一个跳转,这个就叫端口隐射。
1、第一步同样是打开端口转发
2、添加规则,但是需要把先前添加的规则删除,避免影响到现在的操作。
[root@jimmylinux-002 ~]# iptables -t nat -D POSTROUTING -s 192.168.100.0/24 -o ens33 -j MASQUERADE
删除之前的规则后重新添加新的规则,把进来的包做一个转发,到100.100:22端口。
[root@jimmylinux-002 ~]# iptables -t nat -A PREROUTING -d 192.168.52.129 -p tcp --dport 1122 -j DNAT --to 192.168.100.100:22
在添加一个回来的包的规则
[root@jimmylinux-002 ~]# iptables -t nat -A POSTROUTING -s 192.168.100.100 -j SNAT --to 192.168.52.129
从100.100回来的包经过A机器再做一个SNAT操作,把目标地址改成192.168.52.129
3、在B机器上面添加网关192.168.100.1 需求1已经添加,所以这里不用在添加了。
都设置好以后,在使用远程终端连接,如果可以连接成功并且能够ping通公网www.qq.com 说明实验成功。