七周四次课 10.15 iptables filter表案例 10.16/10.17/10.18 iptables nat表应用

10.15 iptables filter表案例

需求:
把80,22,21端口放行,但22端口指定一个IP段,只允许这个IP段的IP访问的时候,才可访问到,其他段的一概拒绝。
根据上述需求,我们可以通过编写一个脚本进行实现

编辑脚本: /usr/local/sbin/iptables.sh

[root@linux-5 ~]# vim /usr/local/sbin/iptables.sh

添加内容:

#! /bin/bash
ipt="/usr/sbin/iptables"
#这里ipt是定义个一个变量(写脚本的时候,写全局的路径,就是绝对路径,就是后面再加载它,用变量去代替,看着更加简单)
$ipt -F
#清空之前的规则——>在没有 -t 指定表的时候,默认的就是filter表
$ipt -P INPUT DROP
#把IPPUT的策略给扔掉
$ipt -P OUTPUT ACCEPT
#把OUTPUT放行
$ipt -P FORWARD ACCEPT
#把FORWARD放行
$ipt -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
#增加规则,-m  --state 指定了状态,并针对这些状态放行(-m  --state这种用法并不多见,但是这条规则必须写进来,目的是让相关的数据包放行)
$ipt -A INPUT -s 192.168.88.0/24 -p tcp --dport 22 -j ACCEPT
#把该网段的22端口数据包放行——>这里的IP段根据自己的IP段来做实验
$ipt -A INPUT -p tcp --dport 80 -j ACCEPT
#把80端口数据包放行
$ipt -A INPUT -p tcp --dport 21 -j ACCEPT
#把21端口数据包放行

RELATED状态,这是一个边缘状态
比如:客户端和服务端相互了通信,建立完连接之后,还会有一些额外的链接出来,这时候状态就变成了RELATED(若仅仅只有ESTABLISHED,而没有RELATED,很有可能导致其他的通信被禁掉,因为默认策略是INPUT DROP)
ESTABLISHED状态, 保持连接
有时,在没有增加-m --state这条规则时,导致增加了80或21端口,但是不能正常通信,加这条规则的目的是为了让通信能够正常进行

执行脚本:

[root@linux-5 ~]# sh /usr/local/sbin/iptables.sh

查看结果:

Chain INPUT (policy DROP 21 packets, 1638 bytes)
 pkts bytes target     prot opt in     out     source               destination         
   48  3224 ACCEPT     all  --  *      *       0.0.0.0/0            0.0.0.0/0            state RELATED,ESTABLISHED
    0     0 ACCEPT     tcp  --  *      *       192.168.88.0/24      0.0.0.0/0            tcp dpt:22
    0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            tcp dpt:80
    0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            tcp dpt:21

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         

Chain OUTPUT (policy ACCEPT 31 packets, 2732 bytes)
 pkts bytes target     prot opt in     out     source               destination         

使用脚本执行的好处:因为这里有INPUT DROP,肯定要把你的远程连接给断开,所以需要执行脚本把你的命令批量执行,一次性添加所有规则。

icmp示例

iptables -I INPUT -p icmp --icmp-type 8 -j DROP 这个规则会产生一个效果,让你ping外面的机器还可以ping通,但是ping本机的时候,就不会通了

[root@linux-5 ~]#iptables -I INPUT -p icmp --icmp-type 8 -j DROP

添加规则后,会发现可ping通外面的网络,但自己的虚拟机和物理机则无法连接

[root@linux-5 ~]# ping www.baidu.com
PING www.a.shifen.com (111.13.100.92) 56(84) bytes of data.
64 bytes from 111.13.100.92 (111.13.100.92): icmp_seq=1 ttl=128 time=24.6 ms
64 bytes from 111.13.100.92 (111.13.100.92): icmp_seq=2 ttl=128 time=24.0 ms
64 bytes from 111.13.100.92 (111.13.100.92): icmp_seq=3 ttl=128 time=23.0 ms
64 bytes from 111.13.100.92 (111.13.100.92): icmp_seq=4 ttl=128 time=24.5 ms
^C
--- www.a.shifen.com ping statistics ---
5 packets transmitted, 4 received, 20% packet loss, time 8094ms
rtt min/avg/max/mdev = 23.062/24.063/24.648/0.623 ms

这时用自己的物理机去ping虚拟机,会发现无法连接

Microsoft Windows [版本 10.0.10586]
(c) 2015 Microsoft Corporation。保留所有权利。

C:\Users\LEM>ping 192.168.88.5

正在 Ping 192.168.88.5 具有 32 字节的数据:
请求超时。
请求超时。
请求超时。
请求超时。

192.168.88.5 的 Ping 统计信息:
    数据包: 已发送 = 4,已接收 = 0,丢失 = 4 (100% 丢失),

这时,再来删除这条命令

[root@linux-5 ~]# iptables -D INPUT -p icmp --icmp-type 8 -j DROP

service iptables restart 重启iptables服务

[root@linux-128 ~]# service iptables restart    
Redirecting to /bin/systemctl restart  iptables.service

这里物理机去ping虚拟机IP,会发现再次ping通

C:\Users\LEM>ping 192.168.88.5 -t

正在 Ping 192.168.88.5 具有 32 字节的数据:
来自 192.168.88.5 的回复: 字节=32 时间<1ms TTL=64
来自 192.168.88.5 的回复: 字节=32 时间<1ms TTL=64
来自 192.168.88.5 的回复: 字节=32 时间<1ms TTL=64
来自 192.168.88.5 的回复: 字节=32 时间<1ms TTL=64
来自 192.168.88.5 的回复: 字节=32 时间<1ms TTL=64
来自 192.168.88.5 的回复: 字节=32 时间<1ms TTL=64

192.168.88.5 的 Ping 统计信息:
    数据包: 已发送 = 6,已接收 = 6,丢失 = 0 (0% 丢失),
往返行程的估计时间(以毫秒为单位):
    最短 = 0ms,最长 = 0ms,平均 = 0ms

注:这里的物理机和虚拟机不通,并不指不能连接,这里仅仅是做了一个禁ping而已(主机可以ping通外网的,但其他人无法ping通主机)

10.16/10.17/10.18 iptables nat表应用

案例环境:

A机器两块网卡ens33(192.168.88.5)、ens37(192.168.100.1),ens33可以上外网,ens37仅仅是内部网络,B机器只有ens37(192.168.100.100),和A机器ens37可以通信互联。

• 需求1:可以让B机器连接外网(代理上网)

• 需求2:C机器只能和A通信,让C机器可以直接连通B机器的22端口(端口映射)

需求1:

1.根据上述需求,首先需要准备两台符合需求的虚拟机

第一台虚拟机原有一块可以上网的网卡(ens33),需要新增一块网卡(ens37),并以虚拟交换机的形式连接(LAN区段)

104533_gVC5_3804357.png

没有LAN区段则需要手动添加并选择添加完成的LAN区段

105032_HcR8_3804357.png

105134_KKEn_3804357.png

 

同理,第二台虚拟机也在网卡ens37上做相同配置(如果第二太虚拟机由第一台克隆而来,可以将无关网卡禁用掉)

105954_KV2r_3804357.png

用命令行修改第一台虚拟机的IP(一次性有效,重启后恢复默认值,永久修改IP可将ens33的配置文件拷贝一份,作为ens37的网卡配置文件,进行相应的修改)

ifconfig 网卡名称 IP地址/子网掩码
[root@linux-5 ~]# ifconfig ens37 192.168.100.1/24
[root@linux-5 ~]# ifconfig 
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.88.5  netmask 255.255.255.0  broadcast 192.168.88.255
        inet6 fe80::531b:14ea:3a75:f113  prefixlen 64  scopeid 0x20<link>
        ether 00:0c:29:58:d2:aa  txqueuelen 1000  (Ethernet)
        RX packets 375  bytes 35033 (34.2 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 351  bytes 39083 (38.1 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

ens37: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.100.1  netmask 255.255.255.0  broadcast 192.168.100.255
        inet6 fe80::97b3:ed:1e9b:98c8  prefixlen 64  scopeid 0x20<link>
        ether 00:0c:29:58:d2:b4  txqueuelen 1000  (Ethernet)
        RX packets 136  bytes 46512 (45.4 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 352  bytes 61248 (59.8 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

同理修改第二台虚拟机网卡的IP(因为没有IP,不能远程连接,因此只能在虚拟机里进行设置)

121615_ijag_3804357.png

配置完成后可以互相ping通

[root@linux-5 ~]# ping 192.168.100.100
PING 192.168.100.100 (192.168.100.100) 56(84) bytes of data.
64 bytes from 192.168.100.100: icmp_seq=1 ttl=64 time=0.889 ms
64 bytes from 192.168.100.100: icmp_seq=2 ttl=64 time=0.367 ms
64 bytes from 192.168.100.100: icmp_seq=3 ttl=64 time=0.229 ms
64 bytes from 192.168.100.100: icmp_seq=4 ttl=64 time=0.359 ms
64 bytes from 192.168.100.100: icmp_seq=5 ttl=64 time=0.260 ms
64 bytes from 192.168.100.100: icmp_seq=6 ttl=64 time=0.258 ms
64 bytes from 192.168.100.100: icmp_seq=7 ttl=64 time=0.236 ms
^C
--- 192.168.100.100 ping statistics ---
7 packets transmitted, 7 received, 0% packet loss, time 6006ms
rtt min/avg/max/mdev = 0.229/0.371/0.889/0.218 ms

122029_Afhd_3804357.png

2.完成准备工作后,打开第一台虚拟机的端口转发

[root@linux-5 ~]# cat /proc/sys/net/ipv4/ip_forward //默认值为0,未打开
0
[root@linux-5 ~]# echo "1" > !$                     //将值修改为1,打开端口转发(!$代表引用上一条命令的变量)
echo "1" > /proc/sys/net/ipv4/ip_forward
[root@linux-5 ~]# cat /proc/sys/net/ipv4/ip_forward //已开启端口转发
1

3.为192.168.100.0网段做地址转换

[root@linux-5 ~]# iptables -t nat -A POSTROUTING -s 192.168.100.0/24 -o ens33 -j MASQUERADE
[root@linux-5 ~]# iptables -t nat -nvL

Chain POSTROUTING (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         
  187 14174 POSTROUTING_direct  all  --  *      *       0.0.0.0/0            0.0.0.0/0           
  187 14174 POSTROUTING_ZONES_SOURCE  all  --  *      *       0.0.0.0/0            0.0.0.0/0           
  187 14174 POSTROUTING_ZONES  all  --  *      *       0.0.0.0/0            0.0.0.0/0           
    0     0 MASQUERADE  all  --  *      ens33   192.168.100.0/24     0.0.0.0/0           

 MASQUERADE:这个设定值就是『IP伪装成为封包出去(-o)的那块装置上的IP』不管现在外网网卡的出口获得了怎样的动态ip,MASQUERADE会自动读取外网网卡现在的ip地址然后做SNAT出去,这样就实现了很好的动态SNAT地址转换。

4.为第二台虚拟机设置网关192.168.100.1(可以理解为,不同网段间通信,需要通过网关转发)

124935_r00r_3804357.png

5.验证网络连通性(为第二台虚拟机配置好DNS,即可正常访问公网域名)

125248_4L10_3804357.png

需求2:

1.根据上述需求,首先需要准备两台符合需求的虚拟机(需求1已完成)

2.完成准备工作后,打开第一台虚拟机的端口转发(需求1已完成)

3.在第一台虚拟机设置目的地址转换(端口映射)

iptables -t nat -A PREROUTING -d 192.168.88.5 -p tcp --dport 1122 -j DNAT --to 192.168.100.100:22
//将192.168.88.5的1122端口映射到192.168.100.100的22端口

4.在第一台虚拟机设置源地址转换(代理上网,可理解为回包)

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

5.查看nat表规则

[root@linux-5 ~]# iptables -t nat -nvL
Chain PREROUTING (policy ACCEPT 2 packets, 156 bytes)
 pkts bytes target     prot opt in     out     source               destination         
  422 69368 PREROUTING_direct  all  --  *      *       0.0.0.0/0            0.0.0.0/0           
  422 69368 PREROUTING_ZONES_SOURCE  all  --  *      *       0.0.0.0/0            0.0.0.0/0           
  422 69368 PREROUTING_ZONES  all  --  *      *       0.0.0.0/0            0.0.0.0/0           
    0     0 DNAT       tcp  --  *      *       0.0.0.0/0            192.168.88.5         tcp dpt:1122 to:192.168.100.100:22

Chain POSTROUTING (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         
  204 15474 POSTROUTING_direct  all  --  *      *       0.0.0.0/0            0.0.0.0/0           
  204 15474 POSTROUTING_ZONES_SOURCE  all  --  *      *       0.0.0.0/0            0.0.0.0/0           
  204 15474 POSTROUTING_ZONES  all  --  *      *       0.0.0.0/0            0.0.0.0/0           
    0     0 SNAT       all  --  *      *       192.168.100.100      0.0.0.0/0            to:192.168.88.5

6.为第二台虚拟机设置网关192.168.100.1(需求1已完成)

7.测试需求结果

130948_H5rj_3804357.png

140703_UNPd_3804357.png

140733_KVQC_3804357.png

转载于:https://my.oschina.net/u/3804357/blog/1809799

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值