iptables filter表小案例,iptables nat表应用

本文详细介绍了一个bash脚本,用于配置iptables规则以放行特定端口(80、22、21),并针对22端口设置了指定IP段的放行。此外,还介绍了如何通过iptables实现端口映射及NAT表的应用,包括使内部网络机器能够连接外网及通过端口映射实现外部访问。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

需求:把80端口、22端口、21端口都放行,其中22端口指定IP段放行。

  • 用一个脚本来实现这个需求。

    #!/bin/bash
    ipt="/usr/sbin/iptables" #定义变量,执行命令时写命令的绝对路径。
    $ipt -F #清空filter表之前的规则
    $ipt -P INPUT DROP #定义INPUT默认策略
    $ipt -P OUTPUT ACCEPT #定义OUTPUT默认策略
    $ipt -P FORWARD ACCEPT #定义FORWAD默认策略
    $ipt -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT #指定状态放行
    $ipt -A INPUT -s 192.168.159.0/24 -p tcp --dport 22 -j ACCEPT #指定ip和端口放行
    $ipt -A INPUT -p tcp --dport 80 -j ACCEPT #指定端口放行
    $ipt -A INPUT -p tcp --dport 21 -j ACCEPT #指定端口放行

使用脚本实现需求是因为开始就将INPUT链的默认策略改成了DROP,远程就会断开。

[root@localhost ~]# iptables -nvL
Chain INPUT (policy DROP 0 packets, 0 bytes)
pkts bytes target     prot opt in     out     source               destination         
57  4188 ACCEPT     all  --  *      *       0.0.0.0/0            0.0.0.0/0            state RELATED,ESTABLISHED
0     0 ACCEPT     tcp  --  *      *       192.168.159.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 39 packets, 3644 bytes)
pkts bytes target     prot opt in     out     source               destination      

使用iptables -nvL命令查看filter表的策略,刚才使用脚本添加的策略已经添加成功。

  • -m state --state[状态]
    • INVALID:无效的封包,例如数据破损的封包状态
    • ESTABLISHED:已经联机成功的联机状态
    • NEW:想要新建立联机的封包状态
    • RELATED:这个最常用!表示这个封包是与我们主机发送出去的封包有关, 可能是响应封包或者是联机成功之后的传送封包!这个状态很常被设定,因为设定了他之后,只要未来由本机发送出去的封包,即使我们没有设定封包的 INPUT 规则,该有关的封包还是可以进入我们主机, 可以简化相当多的设定规则。

禁止外面的机器ping本机

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

禁ping不代表不能访问,只是ping不同而已。

iptables nat表应用

准备工作

  1. 准备两台虚拟机A、B
  2. A设备上两块网卡,分别为ens33(192.168.159.128),ens37(192.168.100.10),ens33可以上外网,ens44仅可以是内部网络。
  3. B设备上只有ens37(192.168.100.100)仅可以使用内部网络,并且和A设备可以通信。

需求1:可以让B设备连接外网

  • A设备上需要打开路由转发

    [root@centos-01 ~]# cat /proc/sys/net/ipv4/ip_forward
    0
    [root@centos-01 ~]# echo "1" > /proc/sys/net/ipv4/ip_forward
    [root@centos-01 ~]# cat /proc/sys/net/ipv4/ip_forward
    1

文件内容默认为0,表示没有开启内核转发。改成1就打开了端口转发。

  • 在nat表POSTROUTING链上增加一条规则

    [root@centos-01 ~]# iptables -t nat -A POSTROUTING -s 192.168.100.0/24 -o ens33 -j MASQUERADE
    [root@centos-01 ~]# 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 4 packets, 304 bytes)
    pkts bytes target prot opt in out source destination

    Chain POSTROUTING (policy ACCEPT 4 packets, 304 bytes)
    pkts bytes target prot opt in out source destination
    0 0 MASQUERADE all -- * ens33 192.168.100.0/24 0.0.0.0/0

-o选项后面跟网卡设备名称,表示出口网卡,MASQUERADE是伪装、冒充的意思。

  • 将B设备的网关(GATEWAY)改成设备A的ip地址

    此时B机器可以连通外网,但是外网机器无法访问B机器,A机器的作用就类似于一个路由器

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

  • A设备打开路由转发

    [root@centos-01 ~]# echo "1" > /proc/sys/net/ipv4/ip_forward

    更改内核设置,打开路由转发功能,默认值是0.设置成1则打开。

  • 在A设备的nat表中增加两条规则(增加之前需要清空nat表中的规则)

    [root@centos-01 ~]# iptables -t nat -A PREROUTING -d 192.168.159.128 -p tcp --dport 1122 -j DNAT --to 192.168.100.100:22
    [root@centos-01 ~]# iptables -t nat -A POSTROUTING -s 192.168.100.100 -j SNAT --to 192.168.159.128

  • 将B设备的网关设置成A设备的ens37的IP

完成之后,B可以连接外网,还可以使用远程通过连接A的1122端口来进行远程连接。

转载于:https://blog.51cto.com/754599082/2046254

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值