博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
iptables filter表小案例,iptables nat表应用
阅读量:7090 次
发布时间:2019-06-28

本文共 3364 字,大约阅读时间需要 11 分钟。

需求:把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 -nvLChain 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,ESTABLISHED0     0 ACCEPT     tcp  --  *      *       192.168.159.0/24     0.0.0.0/0            tcp dpt:220     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            tcp dpt:800     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            tcp dpt:21Chain 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

你可能感兴趣的文章
OpenGL进阶(十) - obj文件的导入
查看>>
剑指XX游戏(八) - 腾讯2013校园招聘技术类笔试题详解
查看>>
docker 添加基础命令
查看>>
arm7上搭建boa并进行测试cgi+html
查看>>
iptables/netfiles基本使用
查看>>
angularJS拍照
查看>>
HTML5接入与OC交互
查看>>
Nagios监控基本配置(二)
查看>>
C# 读写文件
查看>>
nginx网站防盗链
查看>>
品牌整合营销传播应该这样走
查看>>
Confluence 6 导入一个 Confluence 站点
查看>>
磁盘管理
查看>>
使用 Redis 实现分布式速率限制
查看>>
(Spring Cloud微服务实战-书中之坑)spring cloud eureka报错host name may not be null
查看>>
错误整理:No plugin found for prefix 'jetty' in the....
查看>>
端口号简介
查看>>
JCreator中不能引入servlet包的解决办法
查看>>
mysql root账户被删除
查看>>
vagrant box php开发环境配置 -- redis安装
查看>>