热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

三十二、iptablesfilter表小案例、iptablesnat表应用

iptablesfilter表小案例、ipta
三十二、iptables filter表小案例、iptables nat表应用

一、iptables filter表小案例

需求:只针对filter表,预设策略INPUT链DROP,其他两个链ACCEPT,然后针对192.168.188.0/24开通22端口,对所有网段开放80端口,对所有网段开放21端口。

这个需求写一个脚本,内容如下:

# vi /usr/local/sbin/iptables.sh

#! /bin/bash

ipt="/usr/sbin/iptables"      //ipt:定义了一个变量,应写绝对路径。

$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.93.0/24 -p tcp --dport 22 -j ACCEPT    想放行的源IP和24端口

$ipt -A INPUT -p tcp --dport 80 -j ACCEPT     下面就是加端口

$ipt -A INPUT -p tcp --dport 21 -j ACCEPT

写完后保存,直接运行/bin/sh/usr/local/sbin/iptables.sh即可。

sh命令:执行命令从标准输入读取或从一个文件中读取。读取文件里的内容来执行。

# sh /usr/local/sbin/iptables.sh

# iptables -nvL

Chain INPUT (policy DROP 0 packets, 0 bytes)

pkts bytes target     prot opt in     out     source               destination        

  30  1980 ACCEPT     all  --  *      *       0.0.0.0/0            0.0.0.0/0            state RELATED,ESTABLISHED

   0     0 ACCEPT     tcp  --  *      *       192.168.188.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

-m state --state RELATED,ESTABLISHED -j ACCEPT

作用:为了让下面的数据包和端口更顺利的相互连接。

RELATED:编译员。

ESTABLISHED:保持连接。

如果想开机启动时初始化防火墙规则,

则需要在/etc/rc.d/rc.local中添加一行/bin/sh /usr/local/sbin/iptables.sh。

icmp案例

# iptables -I INPUT -p icmp --icmp-type 8 -j DROP  增加这条规则  -I

# iptables -D INPUT -p icmp --icmp-type 8 -j DROP    删除这条规则  -D

--icmp要和-p icmp一起使用,后面指定类型编号。8指的是能在本机ping通其他机器,而其他机器不能ping通本机。(牢记)

二、iptables nat表应用

需求1:两台机器A和B。A的ens33能连外网,ens37仅是内网,B只有ens37,和A的ens37可以通信互联。

准备工作:进虚拟机设置,将A和B两台机器都添加一个网卡,给第二个网卡设置一个LAN区段,区段名字自定义即可,将A和B的第2个网卡都连接同一个LAN区段。

LAN区段:相当于是一台内网的交换机,Windows连不上。

连上同一台交换机两台机器就能相互通信了。

技术分享图片技术分享图片

技术分享图片技术分享图片

# cp /etc/sysconfig/network-scripts/ifcfg-ens33 /etc/sysconfig/network-scripts/ifcfg-ens37

# vi /etc/sysconfig/network-scripts/ifcfg-ens37

给第二个网卡设置一个IP,修改NAME,DEVICE,IPADDR即可。

NAME=ens37

DEVICE=ens37

OnBOOT=yes

IPADDR=192.168.100.1           这个IP的网段和主网卡的网段不要一样的。

这样也可以改,但只是临时生效,重启就没了:# ifconfig ens37 192.168.93.133/24

B机器由于不能连外网了,就只能进虚拟机操作,虽然停用了ens33,为了保险,ifdown掉它。然后给同样拷贝ens33给ens37设置个IP。

NAME=ens37

DEVICE=ens37

OnBOOT=yes

IPADDR=192.168.100.10

然后可以先ping一下A机器的ens37网卡,若不通,先ping一下自己,看网卡连接了没有(mii-tool ens33),检查一下两台机器的IP。

# echo "1" > /proc/sys/net/ipv4/ip_forward  打开路由转发功能,该文件默认是0

# iptables -t nat -A POSTROUTING -s 192.168.98.1/24 -o ens33 -j MASQUERADE

-s想要给能连外网的IP。-o出口的有外网的网卡名。

到B机器上设置一个网关。

# route add default gw 192.168.98.134(或133,为默认网关,不可随意设置)

# route del default gw 192.168.98.134可以删除网关

可以route -n查看到。此时这台B机器就能ping通外网了。加个DNS就能ping通DNS和域名了。

# vi /etc/resolv.conf

nameserver 119.29.29.29

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

让A机器做一个跳转作用,这就叫端口映射。把B机器的22端口映射出来,A机器的外网22端口是有的状态,比如映射成1122,实际上就是访问1122端口的时候就是在访问B机器的22端口。

1.打开A机器的端口转发。

# echo "1" > /proc/sys/net/ipv4/ip_forward

# iptables -t nat -D POSTROUTING -s 192.168.98.1/24 -o ens33 -j MASQUERADE

先删掉之前的规则,以免影响后面的操作。

A上执行:# iptables -t nat -A PREROUTING -d 192.168.93.130 -p tcp --dport 1122 -j DNAT --to 192.168.98.134:22   进去的包

A上执行:# iptables -t nat -A POSTROUTING -s 192.168.98.134 -j SNAT --to 192.168.93.130  回来的包

还需要给B机器加上网关,因为前面做过了所以省略

B上执行:# route add default gw 192.168.98.134

再新建一个会话

技术分享图片技术分享图片

连接即可。可以ifconfig发现是B机器的IP。


三十二、iptables filter表小案例、iptables nat表应用


推荐阅读
  • LDAP服务器配置与管理
    本文介绍如何通过安装和配置SSSD服务来统一管理用户账户信息,并实现其他系统的登录调用。通过图形化交互界面配置LDAP服务器,确保用户账户信息的集中管理和安全访问。 ... [详细]
  • 本文介绍了如何在 ASP.NET 中设置 Excel 单元格格式为文本,获取多个单元格区域并作为表头,以及进行单元格合并、赋值、格式设置等操作。 ... [详细]
  • 如果应用程序经常播放密集、急促而又短暂的音效(如游戏音效)那么使用MediaPlayer显得有些不太适合了。因为MediaPlayer存在如下缺点:1)延时时间较长,且资源占用率高 ... [详细]
  • importpymysql#一、直接连接mysql数据库'''coonpymysql.connect(host'192.168.*.*',u ... [详细]
  • malloc 是 C 语言中的一个标准库函数,全称为 memory allocation,即动态内存分配。它用于在程序运行时申请一块指定大小的连续内存区域,并返回该区域的起始地址。当无法预先确定内存的具体位置时,可以通过 malloc 动态分配内存。 ... [详细]
  • Python多线程详解与示例
    本文介绍了Python中的多线程编程,包括僵尸进程和孤儿进程的概念,并提供了具体的代码示例。同时,详细解释了0号进程和1号进程在系统中的作用。 ... [详细]
  • 本文详细介绍了Linux系统中用于管理IPC(Inter-Process Communication)资源的两个重要命令:ipcs和ipcrm。通过这些命令,用户可以查看和删除系统中的消息队列、共享内存和信号量。 ... [详细]
  • NX二次开发:UFUN点收集器UF_UI_select_point_collection详解
    本文介绍了如何在NX中使用UFUN库进行点收集器的二次开发,包括必要的头文件包含、初始化和选择点集合的具体实现。 ... [详细]
  • 网络爬虫的规范与限制
    本文探讨了网络爬虫引发的问题及其解决方案,重点介绍了Robots协议的作用和使用方法,旨在为网络爬虫的合理使用提供指导。 ... [详细]
  • 自动验证时页面显示问题的解决方法
    在使用自动验证功能时,页面未能正确显示错误信息。通过使用 `dump($info->getError())` 可以帮助诊断和解决问题。 ... [详细]
  • 自定义滚动条美化页面内容
    当页面内容超出显示范围时,为了提升用户体验和页面美观,通常会添加滚动条。如果默认的浏览器滚动条无法满足设计需求,我们可以自定义一个符合要求的滚动条。本文将详细介绍自定义滚动条的实现过程。 ... [详细]
  • 微软推出Windows Terminal Preview v0.10
    微软近期发布了Windows Terminal Preview v0.10,用户可以在微软商店或GitHub上获取这一更新。该版本在2月份发布的v0.9基础上,新增了鼠标输入和复制Pane等功能。 ... [详细]
  • 蒜头君的倒水问题(矩阵快速幂优化)
    蒜头君将两杯热水分别倒入两个杯子中,每杯水的初始量分别为a毫升和b毫升。为了使水冷却,蒜头君采用了一种特殊的方式,即每次将第一杯中的x%的水倒入第二杯,同时将第二杯中的y%的水倒入第一杯。这种操作会重复进行k次,最终求出两杯水中各自的水量。 ... [详细]
  • 本文介绍了多种开源数据库及其核心数据结构和算法,包括MySQL的B+树、MVCC和WAL,MongoDB的tokuDB和cola,boltDB的追加仅树和mmap,levelDB的LSM树,以及内存缓存中的一致性哈希。 ... [详细]
  • 包含phppdoerrorcode的词条 ... [详细]
author-avatar
我摸你马匹
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有