10.15 iptables filter表小案例10.16/10.17/10.18 iptables nat表应用

10.15 iptables filter表小案例

iptables 命令、语法总结

iptables-nvL  //查看iptables规则
iptables -F      //清空规则
service iptables save   //保存规则,保存在/etc/sysconfig/iptables,重启的时候会调用这里面的规则
iptables -t nat //-t指定表,如果不用-t,默认对filter 执行
iptables -Z   //可以把计数器清零

iptables -I/-A/-D INPUT -s 1.1.1.1 -j DROP
iptables -I INPUT -s 192.168.1.0/24 -ieth0 -j ACCEPT

-A 和 -I 的区别

  1. -A 是在规则列表最下方增加
  2. -I 是在规则列表最上方增加
  3. 谁在规则列表最上,谁就最先匹配、加载

命令语法

iptables -A INPUT -s 192.168.188.1 -p tcp--sport 1234 -d 192.168.188.128 --dport80 -j DROP
iptables -I [链的名字] -s [源IP] -p [指定协议] --sport [指定源端口] -d [指定目标IP] --dport [指定目标端口] -j [指定行为]
[链的名字]
  1. INPUT //进来的包
  2. OUTPUT //出去的包
  3. FORWARD //比较少用
[指定协议]
  1. tcp
  2. udp
  3. icmp
[指定行为]
  1. DROP // 丢弃
  2. ACCEPT // 放行
  3. REJECT // 拒绝
iptables -nvL --line-numbers  //查看规则的序号
iptables -D INPUT 1      //针对序号删除
iptables -P INPUT DROP  //指定链的默认策略,最好不要直接操作,很有可能导致远程终端直接中断

案例

需求:把80端口、22端口、21端口放行,22端口指定IP段内的IP才能进行访问

使用脚本实现
#! /bin/bash
ipt="/usr/sbin/iptables" //定义了环境变量 ipt 
$ipt -F                          //清除filter表的规则
$ipt -P INPUT DROP            //定义INPUT链的默认策略为全部丢掉
$ipt -P OUTPUT ACCEPT     //定义OUTPUT链的默认策略为全部放行
$ipt -P FORWARD ACCEPT  //定义了FORWARD链的默认策略为全部放行
$ipt -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT  //针对RELATED,ESTABLISHED这两状态进行放行
$ipt -A INPUT -s 192.168.133.0/24 -p tcp --dport 22 -j ACCEPT  //这个网段的数据包放行
$ipt -A INPUT -p tcp --dport 80 -j ACCEPT                    //80端口放行
$ipt -A INPUT -p tcp --dport 21 -j ACCEPT                   //21端口放行
脚本解释:

定义环境变量的理由,因为正确使用命令是用绝对路径进行使用,这样才不会因为环境变量的改动导致无法使用命令 两种状态:

  1. RELATED 有关系的端口的,是一个边缘的状态,客户端和服务端建立连接之后,还有继续有一些额外的链接出来,这个时候就变成这个状态
  2. ESTABLISHED 已建立的连接,保持连接 仅仅是 ESTABLISHED,很有可能其他的通信被禁掉,因为默认策略是DROP,所以必须加上这个状态,加这个状态的目的就是为了让通信更加顺畅
使用脚本的原因

因为逐个执行命令,会导致远程终端断开连接,如果使用脚本将会在瞬间执行好所有的命令,将不再产生端口终端的状态

查看新增规则状况
[root@aminglinux-02 ~]# !sh
sh /usr/local/sbin/iptables.sh
[root@aminglinux-02 ~]# iptables -nvL
Chain INPUT (policy DROP 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination
   26  1888 ACCEPT     all  --  *      *       0.0.0.0/0            0.0.0.0/0            state RELATED,ESTABLISHED
    0     0 ACCEPT     tcp  --  *      *       192.168.133.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

licmp示例:

禁止ping本机

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

10.16/10.17/10.18 iptables nat表应用

准备工作:

设备情况: A机器两块网卡ens33(192.168.133.130)、ens37(192.168.100.1),ens33可以上外网,ens37仅仅是内部网络,B机器只有ens37(192.168.100.101),和A机器ens37可以通信互联。

  • 环境准备
一、克隆一个虚拟机

1

2

3

4

5

==PS:克隆好的虚拟机需要修改 hostname 以便区分==

二、对两台(aminglinux-02、aminglinux-02的克隆)虚拟机增加一个网卡,网卡选项选择为LAN区段

6

8

9

10

11

PS:需要同时对两台虚拟机都进行这个操作,这个操作是目的,为的就是让两台虚拟机都处于同一个虚拟交换机中(LAN区段,就类似一个虚拟交换机);克隆好虚拟机以后记得修改hostname 不然也会出错

需要注意的一点,因为实验环境,A机器是可以内网、外网同时访问,所以A机器必须是要有两个网卡;B机器可以只有一个网卡,所以在配置B机器的时候只需要把B机器的网络适配器网络连接调整为LAN区段也是可以的(但这样做需要改动进入系统内调整网卡配置),但是为了方便,直接重复创建一个网卡,改动网络连接为LAN区段即可

12

三、配置两台机器的LAN区段IP

A机器: 因为A机器配置能访问外网的网卡,所以可以直接通过终端进行访问 配置LAN网卡

[root@aminglinux-02 ~]# ifconfig
ens32: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.133.131  netmask 255.255.255.0  broadcast 192.168.133.255
        inet6 fe80::6e6a:61ff:f17c:5942  prefixlen 64  scopeid 0x20<link>
        ether 00:0c:29:c4:13:b8  txqueuelen 1000  (Ethernet)
        RX packets 2908766  bytes 284945595 (271.7 MiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 7085  bytes 1858943 (1.7 MiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

ens34: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet6 fe80::44fe:e11f:f99c:4de1  prefixlen 64  scopeid 0x20<link>
        ether 00:0c:29:c4:13:c2  txqueuelen 1000  (Ethernet)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 51  bytes 8994 (8.7 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10<host>
        loop  txqueuelen 1  (Local Loopback)
        RX packets 68  bytes 5524 (5.3 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 68  bytes 5524 (5.3 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
[root@aminglinux-02 network-scripts]# ifconfig ens34 192.168.100.1/24
[root@aminglinux-02 network-scripts]# ifconfig
ens32: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.133.131  netmask 255.255.255.0  broadcast 192.168.133.255
        inet6 fe80::6e6a:61ff:f17c:5942  prefixlen 64  scopeid 0x20<link>
        ether 00:0c:29:c4:13:b8  txqueuelen 1000  (Ethernet)
        RX packets 2911127  bytes 285202630 (271.9 MiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 8305  bytes 2026122 (1.9 MiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

ens34: 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::acc1:13e6:b0b6:33ab  prefixlen 64  scopeid 0x20<link>
        ether 00:0c:29:c4:13:c2  txqueuelen 1000  (Ethernet)
        RX packets 39  bytes 8230 (8.0 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 81  bytes 11500 (11.2 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10<host>
        loop  txqueuelen 1  (Local Loopback)
        RX packets 72  bytes 5864 (5.7 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 72  bytes 5864 (5.7 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

ifconfig 配置的网卡IP只是暂时生效,重启以后又会失效,如果想永久生效,需要更改配置,但是网卡是新创建的并没有网卡配置文件,需要cp原有的ens32网卡的配置文件,修改NAME、DEVICE两个还需要修改相关的IP B机器 因为环境需要,我们只用使用一个网卡,所以需要在虚拟机上进行配置

13

四、测试两台机器的连通状况

A机器pingB机器

[root@aminglinux-02 ~]# 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.406 ms
64 bytes from 192.168.100.100: icmp_seq=2 ttl=64 time=0.258 ms
64 bytes from 192.168.100.100: icmp_seq=3 ttl=64 time=0.333 ms
64 bytes from 192.168.100.100: icmp_seq=4 ttl=64 time=0.333 ms
64 bytes from 192.168.100.100: icmp_seq=5 ttl=64 time=0.307 ms
64 bytes from 192.168.100.100: icmp_seq=6 ttl=64 time=0.290 ms
64 bytes from 192.168.100.100: icmp_seq=7 ttl=64 time=0.323 ms
^C
--- 192.168.100.100 ping statistics ---
7 packets transmitted, 7 received, 0% packet loss, time 6004ms
rtt min/avg/max/mdev = 0.258/0.321/0.406/0.045 ms
[root@aminglinux-02 ~]#

B机器pingA机器情况

14

需求一

可以让B机器连接外网
A机器配置
  • 打开路由转发
echo "1">/proc/sys/net/ipv4/ip_forward   

要想使用路由转发,必须要修改内核文件,打开端口转发

[root@aminglinux-02 ~]# cat /proc/sys/net/ipv4/ip_forward
0
/proc/sys/net/ipv4/ip_forward  这个文件默认是0 表示没有打开
[root@aminglinux-02 ~]# echo "1" > /proc/sys/net/ipv4/ip_forward
[root@aminglinux-02 ~]# cat /proc/sys/net/ipv4/ip_forward
1
  • 增加一个规则
[root@aminglinux-02 ~]# iptables -t nat -A POSTROUTING -s 192.168.100.0/24 -o ens32 -j MASQUERADE
[root@aminglinux-02 network-scripts]# iptables -t nat -nvL
Chain PREROUTING (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination

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

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

Chain POSTROUTING (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination
    1    84 MASQUERADE  all  --  *      ens32   192.168.100.0/24     0.0.0.0/0
B机器配置
  • 增加网关

因为使用ifconfig命令添加的IP地址是没有网关的,通过下图可以看到

15

测试连通情况

16

==PS:之前配置A机器的时候出了错误,导致一直ping不同外网,最后检查的时候发现,设置的网卡出错了。(因为命令也是复制PPT的,PPT里面针对设置的网卡是ens33,而我的虚拟机并没有这个网卡)==

需求二:

实现远程登录B机器,也就是实现宿主机C,能ping通B机器
A机器配置
  • 一、打开端口转发
 echo "1">/proc/sys/net/ipv4/ip_forward

因为之前A机器B机器互通,已经做过了,可以省略

  • 二、清除原有规则

因为之前A机器B机器互通,添加有规则,先把规则清楚,不让他影响到我们之后的操作 [root@aminglinux-02 network-scripts]# iptables -t nat -D POSTROUTING -s 192.168.100.0/24 -o ens32 -j MASQUERADE [root@aminglinux-02 network-scripts]# iptables -t nat -nvL Chain PREROUTING (policy ACCEPT 0 packets, 0 bytes) pkts bytes target prot opt in out source destination

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

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

Chain POSTROUTING (policy ACCEPT 1 packets, 76 bytes) pkts bytes target prot opt in out source destination

  • 三、新增规则

1、

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

命令理解:将192.168.133.131 端口为1122 进来的数据转发到 192.168.100.100端口22

2、

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

命令理解:将192.168.100.100源IP转发到192.168.133.130

B机器配置
  • 在B机器上增加网关
route add default gw 192.168.100.1

因为之前需求一的时候,做过这个操作,所以这一步也可以省略

  • 用终端连接

做完这些操作就可以尝试在终端上进行连接

17

18

19

20

21

证明连接的就是B机器 查看一下是否能上网

[root@aminglinux-02-kl ~]# ping www.qq.com
PING www.qq.com (14.17.42.40) 56(84) bytes of data.
64 bytes from 14.17.42.40 (14.17.42.40): icmp_seq=1 ttl=127 time=23.5 ms
64 bytes from 14.17.42.40 (14.17.42.40): icmp_seq=2 ttl=127 time=23.9 ms
64 bytes from 14.17.42.40 (14.17.42.40): icmp_seq=3 ttl=127 time=23.1 ms
^C
--- www.qq.com ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2004ms
rtt min/avg/max/mdev = 23.187/23.574/23.945/0.309 ms

上网也是正常的

经过前面的操作,实现了C机器连接A机器,同时还能上网,完成了需求

转载于:https://my.oschina.net/nova12315/blog/1649575

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值