笔记内容:
l 10.15 iptables filter表案例
l 10.16/10.17/10.18 iptables nat表应用
笔记日期:2017.8.30
10.15 iptables filter表案例
这个案例的需求是把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
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
5.执行完脚本后使用iptables -nvL命令就可以查看到添加上去的规则:
介绍一下icmp的作用:
命令:
iptables -I INPUT -p icmp --icmp-type 8 -j DROP
这个规则就是让你能够ping通别人的机器,别人ping不通你的机器。
ping一个网址,可以ping通:
但是外面的机器要ping过来就ping不通:
把规则删除后其他机器才能ping过来:
10.16/10.17/10.18 iptables nat表应用
需求:现在我有两台机器,A机器共有两块网卡,一块是可以连接外网的,一块是可以连接内网的。B机器则只有一个内网网卡,不能连接外网,只能连接内网。现在的需求就是想要B机器能够连接外网,说白了就是想做一个路由器的功能。
1.首先做这个实验需要两个虚拟机,记得先拍摄一个快照,以免在实验过程中出现问题无法恢复:
2.给其中一台虚拟机添加一个网卡:
3.把另一台虚拟机的网卡禁止掉,然后添加一个新网卡,同样指定刚刚添加的那个LAN区段:
4.将两台虚拟机启动起来,然后给新网卡配置IP,先配置CentOS Study1,使用ifconfig命令可以看到新网卡的信息:
接着使用ifconfig命令给新网卡配置一个IP,设置24网段:
但是这种方式配置的IP重启系统就没有了,想要有永久有效就需要把网卡配置文件复制一份出来,将文件名称改为该网卡的名称,然后将里面的配置信息改为这个网卡IP:
5.配置另一台虚拟机的网卡IP:
同样的使用ifconfig命令配置IP
接着复制网卡文件,并修改为新网卡的信息:
修改完后重启一下网卡服务,但是可能会重启失败,如果重启失败就重启操作系统即可。
以上操作成功后就ping一下CentOS Study1的IP看看是否能ping通:
如果无法ping通证明有问题,需要去检查一下,CentOS Study1的IP是否存在,如果CentOS Study1的IP存在的话,就检查一下CentOS Study2的IP是否存在,发现IP不存在的话就重新使用ifconfig命令配置一下即可。我这里ping不通的问题是CentOS Study2的IP不存在,所以我重新用ifconfig配置了IP之后再重启了一下就没问题了:
如果出现多次使用ifconfig命令配置IP之后,IP却消失的情况,就得查看这个网卡的网卡配置文件是否有问题。
6.准备工作都就绪之后,确保两个网卡都可以互相ping之后,就开始完成需求1:让CentOS Study2可以连接外网:
首先打开CentOS Study1的nat路由中转发,这一步需要修改一下内核参数,需要修改/proc/sys/net/ipv4/ip_forward文件,这个文件默认的值为0,0代表没有开启转发,所以我们要将这个值改为1:
第二步,增加一条规则:
iptables -t nat -A POSTROUTING -s 192.168.100.0/24 -o eno16777728 -j MASQUERADE
这一步要注意的是,网卡的名称看清楚得是能链接外网网卡的那个网卡名称,搞错了后续步骤就会失败。
第三步,给CentOS Study2设置默认网关:
设置了默认网关后可以使用route -n查看一下,是否设置成功:
设置了默认网关后ping一下CentOS Study1的外网网卡IP和虚拟机的网关地址看看能不能ping通:
能ping通之后,就代表可以连接外网了,但是这时候还不能够ping网址,所以接下来我们给CentOS Study2设置一下DNS,看看能否连接网站:
然后ping一下DNS的地址看看是否能ping通:
能ping的通就代表没问题,这时候就可以ping一下一些网站了:
能ping通网址的话,就代表这个台内网的机器已经可以通过CentOS Study1的nat转发来连接外网了,现在CentOS Study1就相当于充当了一个路由器的角色,通过这台机器就可以让内网的机器得以连接外网了。
10.18 iptables nat表应用(下)
需求2:现在使用Windows是不能连接CentOS Study2的,所以现在的需求就是能够远程连接CentOS Study2。要实现这个需求需要通过CentOS Study1进行一个跳转,也就是所谓的端口映射,把CentOS Study2的22端口映射到CentOS Study1上。
第一步,打开路由转发:
第二步,添加规则,因为之前添加了一条规则,现在先把那条规则删掉以免影响操作:
添加两条规则:
第一条,是发送过来的包:
iptables -t nat -A PREROUTING -d 192.168.77.130 -p tcp --dport 1122 -j DNAT --to 192.168.100.100:22
这条规则是把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
这条规则是把192.168.100.100返回的数据包,转发到192.168.77.130上去,然后回到Windows上。
添加完规则检查一下是否存在nat表里:
第三步,以上操作没问题后,给CentOS Study2设置默认网关:
完成以上操作之后,在XShell里新建一个会话,连接192.168.77.130的1122端口:
同样的会询问一下:
输入用户名,这里输入的是内网机器的用户名,不是CentOS Study1的用户名,因为这一步数据包实际上是通过了CentOS Study1上映射的1122端口转发到了CentOS Study2的22端口上了:
输入CentOS Study2的密码:
登录成功:
使用ifconfig命令就可以知道我们连接的是CentOS Study2:
现在不单只外面的机器能够通过CentOS Study1来远程连接CentOS Study2,CentOS Study2也可以连接外网:
在以上的操作期间我解决了一个问题,一开始在使用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