笔记内容:

10.15 iptables filter表案例

10.16/10.17/10.18 iptables nat表应用

笔记日期:2017.8.30

 

10.15 iptables filter表案例

wKioL1nlv9Pj8ilSAAyshTpXKg0684.png

这个案例的需求是把802221端口方放行,然后给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

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指定对 RELATEDESTABLISHED状态的数据包放行,它的目的是为了相关的数据包能够更方便的连接

 

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

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

 

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

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

 

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

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

 

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

 

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

wKioL1nlv9SygXN9AADF_og0MSE106.png


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

wKiom1nlwo2xpKN8AAUM1VmjdE4957.png




介绍一下icmp的作用

命令:

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

wKioL1nlv9fQExdkAAFlDaDXRPo699.png

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


ping一个网址,可以ping通:

wKiom1nlwo7DNKj5AAKoOgPAkts852.png


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

wKioL1nlv9qD4E8LAATs65pGM_g364.png


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

wKiom1nlwpDzxZ_qAAKEQKdj45M081.png

wKiom1nlwpOyaFlyAAX3alOmBLI676.png




10.16/10.17/10.18 iptables nat表应用

wKioL1nlv-HgNcJGAAkmb1wVezc672.png

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

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

wKioL1nlv-aBVNXHAAjXLEe6lQg557.png


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

wKiom1nlwqSzX8GXAA-5LTiwg8w027.png

wKiom1nlwqrxQ3nyAAw3I7Xa84I314.png

wKioL1nlv_mARB8JAAx2I6P101I847.png

wKiom1nlwriDSeoAABD6IaeKyAw138.png

wKioL1nlwAXy2hDYAAd7hmq5ekw476.png

wKioL1nlwA7RMNWgABD6IavjeJI087.png



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

wKiom1nlwsyzzaQoAA_-kiWa8jE472.png

wKiom1nlwtHw3WkeAArsWgKDCLw296.png

wKioL1nlwCSQDUi_ABD6IWX8Z_Q908.png



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

wKioL1nlwCyDnxIMAA98dsUrIZQ739.png


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

wKioL1nlwGHTaqEoAAKcwammOlg876.png


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

wKiom1nlwxjx_xUZAAIZNeR8_mw243.png

wKioL1nlwGXgMNhJAAb8PL7dFmI965.png

wKioL1nlwGXQpn7dAAJ-BzNN2Nc878.png


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

wKiom1nlwyCzLLq9AAlrz_951LQ019.png


同样的使用ifconfig命令配置IP

wKiom1nlwyCCet6GAAEz_7W35jo541.png


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

wKioL1nlwGyh0bVcAAJFkg8yKmo810.png

wKiom1nlwySQMG0ZAAeJgcC92Z4342.png

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

 


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

wKioL1nlwG-hb4SiAAG5DK0T93w996.png


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

wKiom1nlwyegNglQAAQZ7GhYvP8592.png

wKioL1nlwHHQaaOtAANB9ha7V5Y480.png

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




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

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

wKioL1nlwHKAqlSxAAFpAr9cP7E783.png

wKiom1nlwyjB27-xAAI3WNjK7QY137.png


第二步,增加一条规则:

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

wKioL1nlwHOizwP-AAE4peRlbwE128.png

wKiom1nlwyzAz2mPAAiS8L-4VU8487.png

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



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

wKiom1nlwy2BrEDzAAGhRL6mtyg700.png


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

wKioL1nlwHiAQFOOAALQV5ovruc574.png


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

wKiom1nlwzCwCs5XAANdhEkYsf8915.png

wKioL1nlwHuAPGIFAAPb-FHr_yA950.png


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

wKiom1nlwzGiwHgJAAEfv7XZ9I8353.png

wKioL1nlwHvzRrLjAAGJ1mhwkW0889.png


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

wKiom1nlwzLARdyfAANFPhp60sE937.png


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

wKioL1nlwH2SMLC3AANLzqslMnk667.png

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





10.18 iptables nat表应用(下)

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

第一步,打开路由转发:

wKiom1nlwzTx6amuAAI3WNjK7QY214.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

这条规则是把192.168.77.1301122端口的数据包,转发到192.168.100.10022端口上去。


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

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

wKioL1nlwH_BSobVAAFss8fV1pM269.png

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



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

wKiom1nlwzeBBfuTAATyzkk-Azk609.png



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

wKioL1nlwKaTKUkyAAGhRL6mtyg863.png


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

wKioL1nlwK7wHyTPABBMrGj8ej0728.png


同样的会询问一下:

wKiom1nlw2ngtXbtAApnXiCxY6I200.png


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

wKioL1nlwLiAtbPHAApnXuXaGHs639.png


输入CentOS Study2的密码:

wKioL1nlwL3xSLc_AApnXqphdzs256.png


登录成功:

wKiom1nlw3XwAJVOAAXuXckEK94967.png


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

wKioL1nlwMbh77wnAA3CFB8ORdE710.png


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

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