笔记内容:

10.15 iptables filter表案例

10.16/10.17/10.18 iptables nat表应用

笔记日期:2017.8.30

 

10.15 iptables filter表案例

iptables filter表案例,iptables nat表应用_第1张图片

这个案例的需求是把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

iptables filter表案例,iptables nat表应用_第2张图片

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命令就可以查看到添加上去的规则:

iptables filter表案例,iptables nat表应用_第3张图片




介绍一下icmp的作用

命令:

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

wKioL1nlv9fQExdkAAFlDaDXRPo699.png

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


ping一个网址,可以ping通:

wKiom1nlwo7DNKj5AAKoOgPAkts852.png


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

iptables filter表案例,iptables nat表应用_第4张图片


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

wKiom1nlwpDzxZ_qAAKEQKdj45M081.png

iptables filter表案例,iptables nat表应用_第5张图片




10.16/10.17/10.18 iptables nat表应用

iptables filter表案例,iptables nat表应用_第6张图片

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

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

iptables filter表案例,iptables nat表应用_第7张图片


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

iptables filter表案例,iptables nat表应用_第8张图片

iptables filter表案例,iptables nat表应用_第9张图片

iptables filter表案例,iptables nat表应用_第10张图片




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

iptables filter表案例,iptables nat表应用_第11张图片




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



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

wKioL1nlwGHTaqEoAAKcwammOlg876.png


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

wKiom1nlwxjx_xUZAAIZNeR8_mw243.png

iptables filter表案例,iptables nat表应用_第12张图片

wKioL1nlwGXQpn7dAAJ-BzNN2Nc878.png


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

iptables filter表案例,iptables nat表应用_第13张图片


同样的使用ifconfig命令配置IP

wKiom1nlwyCCet6GAAEz_7W35jo541.png


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

wKioL1nlwGyh0bVcAAJFkg8yKmo810.png

iptables filter表案例,iptables nat表应用_第14张图片

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

 


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

wKioL1nlwG-hb4SiAAG5DK0T93w996.png


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

iptables filter表案例,iptables nat表应用_第15张图片

iptables filter表案例,iptables nat表应用_第16张图片

如果出现多次使用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

iptables filter表案例,iptables nat表应用_第17张图片

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



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

wKiom1nlwy2BrEDzAAGhRL6mtyg700.png


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

wKioL1nlwHiAQFOOAALQV5ovruc574.png


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

iptables filter表案例,iptables nat表应用_第18张图片

iptables filter表案例,iptables nat表应用_第19张图片


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

wKiom1nlwzGiwHgJAAEfv7XZ9I8353.png

wKioL1nlwHvzRrLjAAGJ1mhwkW0889.png


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

iptables filter表案例,iptables nat表应用_第20张图片


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

iptables filter表案例,iptables nat表应用_第21张图片

  能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表里:

iptables filter表案例,iptables nat表应用_第22张图片



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

wKioL1nlwKaTKUkyAAGhRL6mtyg863.png


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



同样的会询问一下:

iptables filter表案例,iptables nat表应用_第23张图片


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

iptables filter表案例,iptables nat表应用_第24张图片


输入CentOS Study2的密码:

iptables filter表案例,iptables nat表应用_第25张图片


登录成功:

iptables filter表案例,iptables nat表应用_第26张图片


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

iptables filter表案例,iptables nat表应用_第27张图片


现在不单只外面的机器能够通过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