前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >iptables filter表案例,iptables nat表应用

iptables filter表案例,iptables nat表应用

作者头像
端碗吹水
发布2020-09-23 10:09:21
9340
发布2020-09-23 10:09:21
举报
文章被收录于专栏:程序猿的大杂烩

笔记内容:

l 10.15 iptables filter表案例

l 10.16/10.17/10.18 iptables nat表应用

笔记日期:2017.8.30

10.15 iptables filter表案例

wKioL1nlv9Pj8ilSAAyshTpXKg0684.png
wKioL1nlv9Pj8ilSAAyshTpXKg0684.png

这个案例的需求是把80、22、21端口方放行,然后给22端口指定一个IP段,只有这个指定的IP访问才能访问到22端口,其他IP则一概拒绝访问22端口,这个需求用一个shell脚本来实现。

1.使用此命令新建一个文件: vim /usr/local/sbin/iptables.sh

  2.输入以下内容:

#!/bin/bash

ipt="/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.77.1/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

wKiom1nlworxa9X3AASKOuBtK9g332.png
wKiom1nlworxa9X3AASKOuBtK9g332.png

3.完成后保存退出。

ipt="/usr/sbin/iptables"

这句是定义一个变量,定义变量时使用的路径尽量使用绝对路径,以免出现环境变量的问题,导致命令无法执行。

$ipt -F

清空之前的所有规则,因为没有加-t所以默认修改的是filter表

$ipt -P INPUT DROP

把默认的INPUT策略定义为DROP

$ipt -P OUTPUT ACCEPT

把默认的OUTPUT策略定义为ACCEPT

$ipt -P FORWARD ACCEPT

把默认的FORWARD 策略定义为ACCEPT

$ipt -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT

添加一个规则,使用-m指定一些状态,然后-j指定对 RELATED,ESTABLISHED状态的数据包放行,它的目的是为了相关的数据包能够更方便的连接

$ipt -A INPUT -s 192.168.77.1/24 -p tcp --dport 22 -j ACCEPT

添加一个规则,使用-s指定一个源IP和端口,-p指定连接协议,接着指定放行此IP对22端口访问。

$ipt -A INPUT -p tcp --dport 80 -j ACCEPT

添加一个规则,把80端口放行

$ipt -A INPUT -p tcp --dport 21 -j ACCEPT

添加一个规则,把21端口放行

使用shell脚本是为了能够执行批量的命令,因为脚本中第三句命令就是DROP掉INPUT,如果不使用shell脚本的话会直接断开远程终端的连接,后续的命令就无法在进行输入了。

4.使用sh命令执行写好的shell脚本:sh /usr/local/sbin/iptables.sh

wKioL1nlv9SygXN9AADF_og0MSE106.png
wKioL1nlv9SygXN9AADF_og0MSE106.png

5.执行完脚本后使用iptables -nvL命令就可以查看到添加上去的规则:

wKiom1nlwo2xpKN8AAUM1VmjdE4957.png
wKiom1nlwo2xpKN8AAUM1VmjdE4957.png

介绍一下icmp的作用:

命令:

iptables -I INPUT -p icmp --icmp-type 8 -j DROP

wKioL1nlv9fQExdkAAFlDaDXRPo699.png
wKioL1nlv9fQExdkAAFlDaDXRPo699.png

这个规则就是让你能够ping通别人的机器,别人ping不通你的机器。

ping一个网址,可以ping通:

wKiom1nlwo7DNKj5AAKoOgPAkts852.png
wKiom1nlwo7DNKj5AAKoOgPAkts852.png

但是外面的机器要ping过来就ping不通:

wKioL1nlv9qD4E8LAATs65pGM_g364.png
wKioL1nlv9qD4E8LAATs65pGM_g364.png

把规则删除后其他机器才能ping过来:

wKiom1nlwpDzxZ_qAAKEQKdj45M081.png
wKiom1nlwpDzxZ_qAAKEQKdj45M081.png
wKiom1nlwpOyaFlyAAX3alOmBLI676.png
wKiom1nlwpOyaFlyAAX3alOmBLI676.png

10.16/10.17/10.18 iptables nat表应用

wKioL1nlv-HgNcJGAAkmb1wVezc672.png
wKioL1nlv-HgNcJGAAkmb1wVezc672.png

需求:现在我有两台机器,A机器共有两块网卡,一块是可以连接外网的,一块是可以连接内网的。B机器则只有一个内网网卡,不能连接外网,只能连接内网。现在的需求就是想要B机器能够连接外网,说白了就是想做一个路由器的功能。

  1.首先做这个实验需要两个虚拟机,记得先拍摄一个快照,以免在实验过程中出现问题无法恢复:

wKioL1nlv-aBVNXHAAjXLEe6lQg557.png
wKioL1nlv-aBVNXHAAjXLEe6lQg557.png

2.给其中一台虚拟机添加一个网卡:

wKiom1nlwqSzX8GXAA-5LTiwg8w027.png
wKiom1nlwqSzX8GXAA-5LTiwg8w027.png
wKiom1nlwqrxQ3nyAAw3I7Xa84I314.png
wKiom1nlwqrxQ3nyAAw3I7Xa84I314.png
wKioL1nlv_mARB8JAAx2I6P101I847.png
wKioL1nlv_mARB8JAAx2I6P101I847.png
wKiom1nlwriDSeoAABD6IaeKyAw138.png
wKiom1nlwriDSeoAABD6IaeKyAw138.png
wKioL1nlwAXy2hDYAAd7hmq5ekw476.png
wKioL1nlwAXy2hDYAAd7hmq5ekw476.png
wKioL1nlwA7RMNWgABD6IavjeJI087.png
wKioL1nlwA7RMNWgABD6IavjeJI087.png

3.把另一台虚拟机的网卡禁止掉,然后添加一个新网卡,同样指定刚刚添加的那个LAN区段:

wKiom1nlwsyzzaQoAA_-kiWa8jE472.png
wKiom1nlwsyzzaQoAA_-kiWa8jE472.png
wKiom1nlwtHw3WkeAArsWgKDCLw296.png
wKiom1nlwtHw3WkeAArsWgKDCLw296.png
wKioL1nlwCSQDUi_ABD6IWX8Z_Q908.png
wKioL1nlwCSQDUi_ABD6IWX8Z_Q908.png

4.将两台虚拟机启动起来,然后给新网卡配置IP,先配置CentOS Study1,使用ifconfig命令可以看到新网卡的信息:

wKioL1nlwCyDnxIMAA98dsUrIZQ739.png
wKioL1nlwCyDnxIMAA98dsUrIZQ739.png

接着使用ifconfig命令给新网卡配置一个IP,设置24网段:

wKioL1nlwGHTaqEoAAKcwammOlg876.png
wKioL1nlwGHTaqEoAAKcwammOlg876.png

  但是这种方式配置的IP重启系统就没有了,想要有永久有效就需要把网卡配置文件复制一份出来,将文件名称改为该网卡的名称,然后将里面的配置信息改为这个网卡IP:

wKiom1nlwxjx_xUZAAIZNeR8_mw243.png
wKiom1nlwxjx_xUZAAIZNeR8_mw243.png
wKioL1nlwGXgMNhJAAb8PL7dFmI965.png
wKioL1nlwGXgMNhJAAb8PL7dFmI965.png
wKioL1nlwGXQpn7dAAJ-BzNN2Nc878.png
wKioL1nlwGXQpn7dAAJ-BzNN2Nc878.png

5.配置另一台虚拟机的网卡IP:

wKiom1nlwyCzLLq9AAlrz_951LQ019.png
wKiom1nlwyCzLLq9AAlrz_951LQ019.png

同样的使用ifconfig命令配置IP

wKiom1nlwyCCet6GAAEz_7W35jo541.png
wKiom1nlwyCCet6GAAEz_7W35jo541.png

接着复制网卡文件,并修改为新网卡的信息:

wKioL1nlwGyh0bVcAAJFkg8yKmo810.png
wKioL1nlwGyh0bVcAAJFkg8yKmo810.png
wKiom1nlwySQMG0ZAAeJgcC92Z4342.png
wKiom1nlwySQMG0ZAAeJgcC92Z4342.png

修改完后重启一下网卡服务,但是可能会重启失败,如果重启失败就重启操作系统即可。

以上操作成功后就ping一下CentOS Study1的IP看看是否能ping通:

wKioL1nlwG-hb4SiAAG5DK0T93w996.png
wKioL1nlwG-hb4SiAAG5DK0T93w996.png

  如果无法ping通证明有问题,需要去检查一下,CentOS Study1的IP是否存在,如果CentOS Study1的IP存在的话,就检查一下CentOS Study2的IP是否存在,发现IP不存在的话就重新使用ifconfig命令配置一下即可。我这里ping不通的问题是CentOS Study2的IP不存在,所以我重新用ifconfig配置了IP之后再重启了一下就没问题了:

wKiom1nlwyegNglQAAQZ7GhYvP8592.png
wKiom1nlwyegNglQAAQZ7GhYvP8592.png
wKioL1nlwHHQaaOtAANB9ha7V5Y480.png
wKioL1nlwHHQaaOtAANB9ha7V5Y480.png

如果出现多次使用ifconfig命令配置IP之后,IP却消失的情况,就得查看这个网卡的网卡配置文件是否有问题。

6.准备工作都就绪之后,确保两个网卡都可以互相ping之后,就开始完成需求1:让CentOS Study2可以连接外网:

首先打开CentOS Study1的nat路由中转发,这一步需要修改一下内核参数,需要修改/proc/sys/net/ipv4/ip_forward文件,这个文件默认的值为0,0代表没有开启转发,所以我们要将这个值改为1:

wKioL1nlwHKAqlSxAAFpAr9cP7E783.png
wKioL1nlwHKAqlSxAAFpAr9cP7E783.png
wKiom1nlwyjB27-xAAI3WNjK7QY137.png
wKiom1nlwyjB27-xAAI3WNjK7QY137.png

第二步,增加一条规则:

iptables -t nat -A POSTROUTING -s 192.168.100.0/24 -o eno16777728 -j MASQUERADE

wKioL1nlwHOizwP-AAE4peRlbwE128.png
wKioL1nlwHOizwP-AAE4peRlbwE128.png
wKiom1nlwyzAz2mPAAiS8L-4VU8487.png
wKiom1nlwyzAz2mPAAiS8L-4VU8487.png

这一步要注意的是,网卡的名称看清楚得是能链接外网网卡的那个网卡名称,搞错了后续步骤就会失败。

第三步,给CentOS Study2设置默认网关:

wKiom1nlwy2BrEDzAAGhRL6mtyg700.png
wKiom1nlwy2BrEDzAAGhRL6mtyg700.png

设置了默认网关后可以使用route -n查看一下,是否设置成功:

wKioL1nlwHiAQFOOAALQV5ovruc574.png
wKioL1nlwHiAQFOOAALQV5ovruc574.png

设置了默认网关后ping一下CentOS Study1的外网网卡IP和虚拟机的网关地址看看能不能ping通:

wKiom1nlwzCwCs5XAANdhEkYsf8915.png
wKiom1nlwzCwCs5XAANdhEkYsf8915.png
wKioL1nlwHuAPGIFAAPb-FHr_yA950.png
wKioL1nlwHuAPGIFAAPb-FHr_yA950.png

  能ping通之后,就代表可以连接外网了,但是这时候还不能够ping网址,所以接下来我们给CentOS Study2设置一下DNS,看看能否连接网站:

wKiom1nlwzGiwHgJAAEfv7XZ9I8353.png
wKiom1nlwzGiwHgJAAEfv7XZ9I8353.png
wKioL1nlwHvzRrLjAAGJ1mhwkW0889.png
wKioL1nlwHvzRrLjAAGJ1mhwkW0889.png

然后ping一下DNS的地址看看是否能ping通:

wKiom1nlwzLARdyfAANFPhp60sE937.png
wKiom1nlwzLARdyfAANFPhp60sE937.png

能ping的通就代表没问题,这时候就可以ping一下一些网站了:

wKioL1nlwH2SMLC3AANLzqslMnk667.png
wKioL1nlwH2SMLC3AANLzqslMnk667.png

  能ping通网址的话,就代表这个台内网的机器已经可以通过CentOS Study1的nat转发来连接外网了,现在CentOS Study1就相当于充当了一个路由器的角色,通过这台机器就可以让内网的机器得以连接外网了。

10.18 iptables nat表应用(下)

需求2:现在使用Windows是不能连接CentOS Study2的,所以现在的需求就是能够远程连接CentOS Study2。要实现这个需求需要通过CentOS Study1进行一个跳转,也就是所谓的端口映射,把CentOS Study2的22端口映射到CentOS Study1上。

第一步,打开路由转发:

wKiom1nlwzTx6amuAAI3WNjK7QY214.png
wKiom1nlwzTx6amuAAI3WNjK7QY214.png

  第二步,添加规则,因为之前添加了一条规则,现在先把那条规则删掉以免影响操作:

wKioL1nlwH6RneAVAAFKAxkG1iA113.png
wKioL1nlwH6RneAVAAFKAxkG1iA113.png

添加两条规则:

第一条,是发送过来的包:

iptables -t nat -A PREROUTING -d 192.168.77.130 -p tcp --dport 1122 -j DNAT --to 192.168.100.100:22

wKiom1nlwzXhfMnDAAEv_HVkbt0529.png
wKiom1nlwzXhfMnDAAEv_HVkbt0529.png

这条规则是把192.168.77.130的1122端口的数据包,转发到192.168.100.100的22端口上去。

第二条,是反馈回去的包:

iptables -t nat -A POSTROUTING -s 192.168.100.100 -j SNAT --to 192.168.77.130

wKioL1nlwH_BSobVAAFss8fV1pM269.png
wKioL1nlwH_BSobVAAFss8fV1pM269.png

这条规则是把192.168.100.100返回的数据包,转发到192.168.77.130上去,然后回到Windows上。

添加完规则检查一下是否存在nat表里:

wKiom1nlwzeBBfuTAATyzkk-Azk609.png
wKiom1nlwzeBBfuTAATyzkk-Azk609.png

第三步,以上操作没问题后,给CentOS Study2设置默认网关:

wKioL1nlwKaTKUkyAAGhRL6mtyg863.png
wKioL1nlwKaTKUkyAAGhRL6mtyg863.png

完成以上操作之后,在XShell里新建一个会话,连接192.168.77.130的1122端口:

wKioL1nlwK7wHyTPABBMrGj8ej0728.png
wKioL1nlwK7wHyTPABBMrGj8ej0728.png

同样的会询问一下:

wKiom1nlw2ngtXbtAApnXiCxY6I200.png
wKiom1nlw2ngtXbtAApnXiCxY6I200.png

输入用户名,这里输入的是内网机器的用户名,不是CentOS Study1的用户名,因为这一步数据包实际上是通过了CentOS Study1上映射的1122端口转发到了CentOS Study2的22端口上了:

wKioL1nlwLiAtbPHAApnXuXaGHs639.png
wKioL1nlwLiAtbPHAApnXuXaGHs639.png

输入CentOS Study2的密码:

wKioL1nlwL3xSLc_AApnXqphdzs256.png
wKioL1nlwL3xSLc_AApnXqphdzs256.png

登录成功:

wKiom1nlw3XwAJVOAAXuXckEK94967.png
wKiom1nlw3XwAJVOAAXuXckEK94967.png

使用ifconfig命令就可以知道我们连接的是CentOS Study2:

wKioL1nlwMbh77wnAA3CFB8ORdE710.png
wKioL1nlwMbh77wnAA3CFB8ORdE710.png

现在不单只外面的机器能够通过CentOS Study1来远程连接CentOS Study2,CentOS Study2也可以连接外网:

wKiom1nlw32S5_WeAAKY3k46X3I699.png
wKiom1nlw32S5_WeAAKY3k46X3I699.png

在以上的操作期间我解决了一个问题,一开始在使用ifconfig给两台机器分配IP的时候,我没有去给新网卡复制配置文件,结果给CentOS Study2机器设置默认网关后无法ping通外网,然后折腾了好久才想到去复制配置文件,把两个机器的配置文件弄好后,CentOS Study1重启了网卡服务,CentOS Study2则重启网卡服务失败,我就重启了CentOS Study2的系统,然后检查两台机器互相能ping同之后,再完成后续步骤就成功了,所以当出现这种问题的时候要去检查一下网卡配置文件是否有问题。

扩展

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

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2017/10/17 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 10.15 iptables filter表案例
  • 10.16/10.17/10.18 iptables nat表应用
  • 10.18 iptables nat表应用(下)
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档