本文共 2944 字,大约阅读时间需要 9 分钟。
案例:
需求:把80端口22端口21端口放行,22端口指定一个IP段,只有这个IP段的ip访问的时候才可以访问到,其他段的都拒绝。
我们先编写一个shell脚本
vim /usr/local/sbin/iptables.sh
加入如下内容
#! /bin/bashipt="/usr/sbin/iptables"$ipt -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.71.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
每条代码的含义:
ipt="/usr/sbin/iptables" 定义变量,这样就不用每次都打后面这么长的地址。
$ipt -F 把之前的规则清除掉,(没有-f指定表,默认就是filter表)
$ipt -P INPUT DROP 定义默认的策略,这一条是把INPUT链DROP掉
$ipt -P OUTPUT ACCEPT 把OUTPUT链设置成ACCEPT
$ipt -P FORWARD ACCEPT 把FORWARD链设置成ACCEPT
然后我们来添加规则,下面这条规则是让通信更加顺畅
然后把这个这个网段的访问22端口的数据包放行。
把80端口数据包放行。
把21端口数据包放行。
因为这个操作里有一个-p INPUT DROP操作,所以必须要写脚本才行。
wq 保存,执行脚本sh /usr/local/sbin/iptables.sh(放行网段时注意别把自己的远程给断了)
sh /usr/local/sbin/iptables.sh
然后我们可以查看一下,192.168.71.0/24段的IP可以访问22端口,然后打开了80和21端口
icmp示例
你ping外面的机器可以ping通,但是本机ping不通,也就是让别人ping不通你的机器。
做个小实验
A机器两块网卡ens33(192.168.71.131)、ens37(192.168.72.1),ens33可以上外网,ens37仅仅是内部网络,B机器只有ens33(192.168.72.2),和A机器ens37可以通信互联。
需求1:可以让B机器连接外网
首先准备两台机器,(如果担心实验一次性做不好可以做一个快照)
首先给01机器添加一块网卡(就是网络适配器),然后点击添加好的网卡在右侧选择LAN区段(相当于给这个网卡连到了内网的交换机上,这个交换机你的windows是连不上的,这样的话01机器和02机器连上同一台内网交换机,他们两个通信就可以了,其他不用管)
然后点击添加一个LAN区段
然后点击下拉选中你添加的LAN区段,之后点击确定。
然后我们给第二个机器也添加一块网卡,(方法通上)如果已经有了一块编辑好了网卡我们可以把它的启动时连接前面的勾去掉。然后再添加一块新的网卡,使用同一内网LAN段
到这里准备工作就做好了(第一个机器有两个网卡,第二个机器有一个网卡),下面我们把两个机器启动。
启动之后我们查看一下01机器的网卡,可以看到多了一个网卡,然后我们给它设置ip,有两种方法,
1.可以把原来的网卡复制一份改名叫新添加的网卡名,然后vi改ip以及netmask即可。2.使用ifconfig 网卡名 要修改的IP/IP段 修改临时IP 重启后失效
fconfig ens37 192.168.72.1/24
然后我们给02机器新添加的网卡也设置一下ip,方法如上。之后尝试一下01和02能不能互相ping通(应该是通的)。还有Windows能不能ping通两台机器后添加的网卡(应该是不通的),还要试一下02能不能ping通外网。
02ping01(能通)
01ping02(能通)
02ping外网(192.168.71.131就是一个外网IP 不通)
windows去Ping01(不通)
准备工作已经做好,下面我们就开始操作了
要想使用nat表使用网路的转发必须要修改内核参数,打开端口转发,如下(下面文件默认的内容是0,表示没有开启内核参数,1表示开启)
01机器上打开路由转发 echo "1">/proc/sys/net/ipv4/ip_forward
查看是0还是1
cat /proc/sys/net/ipv4/ip_forward
是0没有开启,我们现在打开端口转发
echo "1">/proc/sys/net/ipv4/ip_forward
第二步增加一条规则,有了这个规则就可以实现上网了。(192.168.72.2/24就是02机器的IP,添加进去后iptables -t nat -nvL查看会变成192.168.72.0/24)
iptables -t nat -A POSTROUTING -s 192.168.72.2/24 -o ens33 -j MASQUERADE
然后给02机器设置网关
route add default gw 192.168.72.1
然后我们再用02机器去ping01机器的外网ip应该是可以ping通的。这就意味着它可以和外网通信了。
就是相当于把A机器当成路由器,B可以访问外网,但是外网访问不到B。
需求2:C机器只能和A通信,让C机器可以直接连通B机器的22端口
就是做一个端口映射。
A打开端口转发
echo "1">/proc/sys/net/ipv4/ip_forward
然后删除A原来的规则,
iptables -t nat -D POSTROUTING -s 192.168.72.0/24 -o ens33 -j MASQUERADE
然后添加规则,如下规则意思是,把进来的数据包做一个端口转发,转发给B。
iptables -t nat -A PREROUTING -d 192.168.71.131 -p tcp --dport 1122 -j DNAT --to 192.168.72.2:22
上面是进去的包,还有一个回来的包如下规则意思是:从B回来的包经过A时做一个snat操作,把目标地址改成192.168.71.131
iptables -t nat -A POSTROUTING -s 192.168.72.2 -j SNAT --to 192.168.71.131
然后给B机器加上网关,就完成了
测试
建立一个新的ssh远程连接,端口选择1122,输入01的外网IP转载于:https://blog.51cto.com/13658403/2114469