iptables防火墙【☆】

  一、防火墙的基础      

        防火墙分为硬件防火墙软件防火墙,硬件防火墙有专门的设备:如国产华为、绿盟等,作为网关层做地址转换等安全防护。很多公司基本都会使用硬件防火墙做第一道防御,在核心业务上再添加软件防火墙提高安全性能。iptables防火墙是Linux系统软件类型防火墙的一种,是centOS7之前版本默认的防火墙,由netfilter和iptables组成。

        netfilter属于内核态的功能体系,是一个内核模块,有多个数据包过滤表组成,其中包含数据包的过滤处理规则集,并根据规则处理IP数据包(raw、mangle、 nat 和 filter 四个规则表,表中所有规则配置后,立即生效无需重启);iptables是属于用户态的管理工具,如同firewalld、ufw,是一个防火墙应用程序,用来实现防火墙规则集的增删改查

1)四表五链

iptables防火墙的四表五链的关系:表中有链,链中有规则。

四表

raw表:确定是否对该数据包进行状态跟踪。包含两个规则链,OUTPUT、PREROUTING。
mangle表修改数据包内容,用来做流量整形的,给数据包设置标记。包含五个规则链,INPUT、OUTPUT、FORWARD、PREROUTING、POSTROUTING。
nat表:负责网络地址转换,用来修改数据包中的源、目标IP地址或端口。包含三个规则链,OUTPUT、PREROUTING、POSTROUTING。
filter表:负责过滤数据包,确定是否放行该数据包(过滤)。包含三个规则链,INPUT、FORWARD、OUTPUT。

五链

INPUT:处理入站数据包,匹配目标IP为本机的数据包。
OUTPUT:处理出站数据包,一般不在此链上做配置。
FORWARD:处理转发数据包,匹配流经本机的数据包(可以理解为一个路由器的功能)。
PREROUTING:在进行路由选择前处理数据包,用来修改目的地址,用来做DNAT。相当于把内网服务器的IP和端口映射到路由器的外网IP和端口上。
POSTROUTING:在进行路由选择后处理数据包,用来修改源地址,用来做SNAT。相当于内网通过路由器NAT转换功能实现内网主机通过一个公网IP地址上网。

2)数据包过滤的匹配流程和优先级

规则表之间的顺序:raw ---> mangle ---> nat --->filter

3)链的匹配顺序

入站数据:PREROUTING ---> INPUT  --->本机应用程序

出站数据:本机应用程 ---> OUTPUT ---> POSTROUTING

转发数据:PREROUTING ---> FORWARD---> POSTROUTING

4)规则的匹配顺序

按顺序从上往下依次匹配,匹配到即停止(log策略除外);若没有匹配的规则,则按该链的默认策略处理。

过滤入站数据包:filter表中的INPUT链

过滤出站数据包:filter表中的OUTPUT链

过滤转发数据包:filter表中的FORWARD链

修改内网转发到外网数据包的源IP地址:nat表中的POSTROUTING链

修改外网转发到内网数据包的目的IP地址:nat表中的PREROUTING链

二、使用iptables

1)安装iptables和iptables-service服务

        centOS7默认使用firewalld防火墙,安装Linux系统时选择桌面安装也会安装iptables,想要使用iptables先要永久关闭firewalld,然后安装iptables和iptables-service,可以使用systemctl管理应用服务。

2)iptables命令行配置格式

iptables [-t 表名] 管理选项 [链名] [匹配条件] [-j 控制类型]

iptables命令-t  指定表名操作选项链名匹配条件

-j 常用控制类

-t filter   或无,默认指定filter

-t nat     指定nat   

-t mangle   指定mangle   

-t raw  指定raw   

增  -A   -I

改  -R  -P

删  -D  -F

查  -L -n -v

INPUT

OUTPUT

FORWARD

PREROUTING

HOSTROUTING

-p 协议

-s  源IP

-d  目的IP

-i  入站网卡接口

-o 出站网卡接口

--dport 目的端口

--sport 源端口

ACCEPT

REJECT

DROP

SNAT

DNAT

3)常用的控制类型

ACCEPT:允许数据包通过;
DROP:拒绝通过,直接丢弃数据包,不给出任何回应信息;


REJECT:拒绝数据包通过,会给数据发送端一个响应信息;


SNAT:修改数据包的源地址;

DNAT:修改数据包的目的地址;
REDIRECT:重定向改变目的端口,将接受的包转发至本机的不同端口;
MASQUERADE:伪装成一个非固定公网IP地址;
LOG:在/var/log/messages文件中记录日志信息,然后将数据包传递给下一条规则。LOG只是一种辅助动作,并没有真正处理数据包。

4)常用的操作选项

① 增操作

-A :在指定链的末尾追加(--append)一条新的规则

iptables -t 表名 -A 链名 匹配条件 -j 控制类型

-I :在指定链的开头插入(--insert)一条新的规则,未指定序号时默认作为第一条规则

iptables -t 表名 -A 链名 序号 匹配条件 -j 控制类型

想要重新连接需要到服务器端把那条命令删除或替换成放开

② 修改操作

-R :修改、替换(--replace)指定链中的某一条规则,可指定规则序号或具体内容

iptables -t 表名 -R 链名 序号 序号 新规则内容


-P :设置指定链的默认策略(--policy)

iptables -t 表名 -P 链名 ACCEPT/DROP/REJECT

③ 删除操作

-D :删除(--delete)指定链中的某一条规则,可指定规则序号或具体内容

iptables -t 表名 -D 链名 序号/内容


-F :清空(--flush)指定链中的所有规则,若未指定链名,则清空表中的所有链。(慎用)

iptables -t 表名 -F 链名     #如果不指定链名则删除清空所有链的规则

清空规则时需要注意到默认规则有没有指定为drop

④ 查看操作

iptables -t 表名 -L -n -v --line-numbers 链名

iptables -t 表名 -nvL --line-numbers 链名

-L :列出(--list)指定链中所有的规则,若未指定链名,则列出表中的所有链


-n :使用数字形式(--numeric)显示输出结果,如显示 IP 地址而不是主机名


-v :显示详细信息,包括每条规则的匹配包数量和匹配字节数


--line-numbers:查看规则时,显示规则的序号


⑤ 设置白名单

√ 生产环境中通常使用白名单设置规则

iptables -t 表名 -A 链名 匹配条件 -j ACCEPT     #先配置需要开放的规则1...2...3...

iptables -t 表名 -A 链名 -j DROP #在规则最后设置指定默认为禁止所有

5)规则的匹配条件

① 通用的匹配

-i  指定入站网卡(可以是IP、网段、域名、空即任何地址)

-o 出站网卡接口(可以是IP、网段、域名、空即任何地址)

-p 协议

-s  源IP

-d  目的IP

----------------------------------------------------------------------------------------------------------------------------

② 隐含匹配

隐含匹配必须指定协议

-p tcp/udp --dport 目标端口/扣扣范围

-p tcp/udp --sport 目标端口/扣扣范围

-p icmp --icmp-type 8(请求) / 0 (回显) / 3 (目标不可达)

 iptables -A INPUT ! -p icmp -j ACCEPT     #取反

 --dport 目的端口

--sport 源端口

TCP标志位匹配:--tcp-flags TCP标志位

③ 显示匹配

-m 扩展模块支出类型,包括多端口、mac地址、IP范围、数据包状态等条件

多端口匹配:-m  -multiport --dport 端口号,端口号;端口号

ip地址范围匹配:-m  iprange --src-range 192.168.170.10-192.168.170.20 -j DROP

-m  iprange --dst-range 192.168.170.10-192.168.170.20 -j DROP 根据目标地址禁止访问

-m mac --mac-source 11:22:33:44:55:66 -j DROP         根据mac地址禁止访问

-m state --state RELATED,ESTABLISHED, [,NEW,INVALID]

用于放行本机发出去的数据包返回的应答包进站

6)规则的保存

iptables规则修改后会立即生效,但是重启后会恢复到原始设置。

iptables-save > 文件路径  #保存设置的规则

iptables-save > /etc/sysconfig/iptables   #设置成默认规则

iptables-restore < 文件路径       #导出、或者误删后还原规则    

7)注意事项

不指定表名时,默认指filter表
不指定链名时,默认指表内的所有链
除非设置链的默认策略,否则必须指定匹配条件
控制类型和链名使用大写字母,其余均为小写

三、SNAT和DNAT策略配置,tcpdump抓包

1)SNAT策略配置

把从内网 --> 外网的数据的源内网地址转换成公网源地址

1、实验网络规划,环境部署。准备配置一台内网主机IP地址为192.168.237.100;一台网关服务器,准备2个网卡接口,分别连接内网和外网,接内网IP设置为192.168.237.10,接外网IP设置为20.0.0.10;一台外网主机IP地址为20.0.0.100。实验前请先检查镜像、本地yum仓库配置、光盘挂载、防火墙是否关闭,避免影响整体的过程。

2、配置内网客户机

systemctl disable --now firewalld
systemctl stop firewalld
setenforce 0
ifconfig
vim /etc/sysconfig/network-scripts/ifcfg-ens33
systemctl restart network
ifconfig 
iptables -nl
iptables -F

3、外网web服务器

systemctl disable --now firewalld
systemctl stop firewalld
setenforce 0
ifconfig
vim /etc/sysconfig/network-scripts/ifcfg-ens33
systemctl restart network
ifconfig
yum install -y httpd
systemctl start httpd.service
iptables -nl
iptables -F

4、配置网关服务器

  • 先将虚拟机网络模式与内网客户端与外网客户端区分开,虚拟机网络设置,真机网络设置同步。
  • 网关服务器首先要确保能够进行路由转发,cat /etc/proc/sys/net/ipv4/ip_forwad,值为0则表示关闭,临时开启修改此文件的值为1,sysctl -p立即生效;或者vim /etc/sysctl.conf文件,添加一行配置:永久生效。
  • 添加规则的命令:iptables  -t nat  -A POSTROUTING  -s 内网的源地址/网段  -o 出站网卡  -j SNAT  --to 要转换的公网源地址

systemctl disable --now firewalld
systemctl stop firewalld
setenforce 0
ifconfig
vim /etc/sysconfig/network-scripts/ifcfg-ens33
   --->设置内网卡ip为192.168.237.10
cd /etc/sysconfig/network-scripts
cp ifcfg-ens33 ifcfg-ens36
vim ifcfg-ens36
   --->复制ens33配置文件修改时需要注意,网卡设备的uuid都是唯一的,需要注释掉,修改文件里的网卡名 
   为ens36,,IP地址修改为20.0.0.10
systemctl restart network
ifconfig
yum install -y iptables-services.x86_64 iptables
systemctl start iptables.service
vim /etc/sysctl.conf 
   ---> 添加net.ipv4.ip_forward=1
sysctl -p
iptables -nL
iptables -F
iptables -t nat -A POSTROUTING -s 192.168.237.0/24 -o ens36 -j SNAT --to 20.0.0.100
iptables -t nat -nL --line-numbers 
ping 192.168.237.100
ping 20.0.0.100

5、内网ping命令验证能否联通外网即可

6、tcpdump抓包查看验证SNAT策略的整个过程

tcp开启监听icmp协议,从内网192.168.237.100 ping web服务端20.0.0.100,ping10个包,tcpdump抓包看看

#借助远程终端连接外网web端,开启监听抓包
tcpdump -i ens33 -s 0 -w ./test1.cap    #指定监听的网卡,保存抓包的文件为test1.cap

#内网客户端
ping -c 10 20.0.0.100

#外网web端退出监听,保存文件到本地
ctrl c 
sz test1.cap 

2)DNAT策略

外网访问内网时,将外网 -->  内网的数据包的目的地址由公网IP 转换成内网IP 端口

iptables  -t nat  -A PREROUTING   -i 入站网卡  -d 原公网目的地址  -p 协议 --dport 原目的端口  -j DNAT  --to 要转换的内网目的地址:端口

①网络规划

想要实现外网客户端通过域名访问到内网web服务器,需要将外网发往内网的数据包的目外网IP:12.0.0.30改为内网IP:20.0.0.110:80,如果内网端口改过了则需要指定

  1. 外网客户端:12.0.0.100,网关为指向网关服务器的内网接口12.0.0.30,VMware1;
  2. 内网web服务器兼DNS服务器:20.0.0.110,网关指向网关服务器的外网接口20.0.0.100,VMware2
  3. 网关服务器:外网接口ens33为12.0.0.30,虚拟机网络模式为VMware1;内网接口ens36为20.0.0.100,虚拟机网络模式为VMware1;

②外网客户端配置

#检查光盘是否挂载、yum源,关闭防火墙、修改网卡IP、重启网络服务
[root@localhost ~]# df
文件系统                   1K-块    已用     可用 已用% 挂载点
devtmpfs                 1913548       0  1913548    0% /dev
tmpfs                    1930624       0  1930624    0% /dev/shm
tmpfs                    1930624   20948  1909676    2% /run
tmpfs                    1930624       0  1930624    0% /sys/fs/cgroup
/dev/mapper/centos-root 38815216 4594580 34220636   12% /
/dev/mapper/centos-home 18950144   33108 18917036    1% /home
/dev/sda1                1038336  191084   847252   19% /boot
tmpfs                     386128      20   386108    1% /run/user/0
/dev/sr0                 4635056 4635056        0  100% /run/media/root/CentOS 7 x86_64
[root@localhost ~]# cd /etc/yum.repos.d/
[root@localhost yum.repos.d]# ls
1.txt  abc  local.repo  repo.bak
[root@localhost yum.repos.d]# mount /dev/sr0 /mnt
mount: /dev/sr0 写保护,将以只读方式挂载
[root@localhost ~]# setenforce 0
[root@localhost ~]# systemctl stop firewalld.service 
[root@localhost ~]# ifconfig 
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.170.101  netmask 255.255.255.0  broadcast 192.168.170.255
        inet6 fe80::350e:a1d9:ebac:b0c8  prefixlen 64  scopeid 0x20<link>
        ether 00:0c:29:88:0d:40  txqueuelen 1000  (Ethernet)
        RX packets 1338  bytes 1679078 (1.6 MiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 547  bytes 44616 (43.5 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 1000  (Local Loopback)
        RX packets 150  bytes 12844 (12.5 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 150  bytes 12844 (12.5 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

virbr0: flags=4099<UP,BROADCAST,MULTICAST>  mtu 1500
        inet 192.168.122.1  netmask 255.255.255.0  broadcast 192.168.122.255
        ether 52:54:00:6b:12:f5  txqueuelen 1000  (Ethernet)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
[root@localhost ~]# vim /etc/sysconfig/network-scripts/ifcfg-ens33 
                         16 IPADDR=12.0.0.100
                         17 NETMASK=255.255.255.0
                         18 GATEWAY=12.0.0.30
[root@localhost ~]# systemctl restart network
[root@localhost ~]# ifconfig 
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 12.0.0.100  netmask 255.255.255.0  broadcast 12.0.0.255
        inet6 fe80::350e:a1d9:ebac:b0c8  prefixlen 64  scopeid 0x20<link>
        ether 00:0c:29:88:0d:40  txqueuelen 1000  (Ethernet)
        RX packets 1340  bytes 1679248 (1.6 MiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 576  bytes 48774 (47.6 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 1000  (Local Loopback)
        RX packets 182  bytes 15548 (15.1 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 182  bytes 15548 (15.1 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
virbr0: flags=4099<UP,BROADCAST,MULTICAST>  mtu 1500
        inet 192.168.122.1  netmask 255.255.255.0  broadcast 192.168.122.255
        ether 52:54:00:6b:12:f5  txqueuelen 1000  (Ethernet)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

③内网web服务器配置

#初始化设置
[root@pyx ~]# vim /etc/selinux/config 
[root@pyx ~]# systemctl stop firewalld.service 
[root@pyx ~]# systemctl disable firewalld.service 
Removed symlink /etc/systemd/system/multi-user.target.wants/firewalld.service.
Removed symlink /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.
[root@pyx ~]# setenforce 0
[root@pyx ~]# ls /etc/yum.repos.d/
local.repo   repo.bak
[root@pyx ~]# mount /dev/sr0 /mnt/
mount: /dev/sr0 写保护,将以只读方式挂载
[root@pyx ~]# vim /etc/sysconfig/network-scripts/ifcfg-ens33
                     16 IPADDR=20.0.0.110
                     17 NETMASK=255.255.255.0
                     18 GATEWAY=20.0.0.100
[root@pyx ~]# systemctl restart network
[root@pyx ~]# ifconfig 
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 20.0.0.110  netmask 255.255.255.0  broadcast 20.0.0.255
        inet6 fe80::bfac:aee:9cc8:2cb9  prefixlen 64  scopeid 0x20<link>
        ether 00:0c:29:56:3a:2a  txqueuelen 1000  (Ethernet)
        RX packets 353  bytes 37467 (36.5 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 467  bytes 39216 (38.2 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
-------------------------------------------------------------------------------------------
#安装apache
[root@pyx ~]# yum install -y httpd
[root@pyx ~]# systemctl start httpd
[root@pyx ~]# systemctl enable httpd
Created symlink from /etc/systemd/system/multi-user.target.wants/httpd.service to /usr/lib/systemd/system/httpd.service.

④网关服务器兼DNS服务器配置

#初始化设置
[root@pyx ~]# mount /dev/sr0 /mnt
mount: /dev/sr0 写保护,将以只读方式挂载
[root@pyx ~]# df
文件系统                       1K-块    已用     可用 已用% 挂载点
devtmpfs                     1913628       0  1913628    0% /dev
tmpfs                        1930648       0  1930648    0% /dev/shm
tmpfs                        1930648   12768  1917880    1% /run
tmpfs                        1930648       0  1930648    0% /sys/fs/cgroup
/dev/mapper/centos_pyx-root 36805060 4553768 32251292   13% /
/dev/sda1                    1038336  189024   849312   19% /boot
tmpfs                         386132      28   386104    1% /run/user/0
/dev/sr0                     4600876 4600876        0  100% /mnt
[root@pyx ~]# systemctl stop firewalld.service
[root@pyx ~]# setenforce 0
[root@pyx ~]# cd /etc/sysconfig/network-scripts/
[root@pyx network-scripts]# ls
ifcfg-ens33  ifdown-ippp    ifdown-sit       ifup-bnep  ifup-plip    ifup-Team          network-functions-ipv6
ifcfg-lo     ifdown-ipv6    ifdown-Team      ifup-eth   ifup-plusb   ifup-TeamPort
ifdown       ifdown-isdn    ifdown-TeamPort  ifup-ib    ifup-post    ifup-tunnel
ifdown-bnep  ifdown-post    ifdown-tunnel    ifup-ippp  ifup-ppp     ifup-wireless
ifdown-eth   ifdown-ppp     ifup             ifup-ipv6  ifup-routes  init.ipv6-global
ifdown-ib    ifdown-routes  ifup-aliases     ifup-isdn  ifup-sit     network-functions
[root@pyx network-scripts]# vim ifcfg-ens33
                                 16 IPADDR=12.0.0.30
                                 17 NETMASK=255.255.255.0
                                 18 #GATEWAY=192.168.170.2
                                 19 #DNS1=192.168.170.2
[root@pyx network-scripts]# cp ifcfg-ens33 ifcfg-ens36
[root@pyx network-scripts]# vim ifcfg-ens36
                                 12 NAME=ens36
                                 13 #UUID=7ee63edb-3a12-4599-97b5-e8662b6ca823
                                 14 DEVICE=ens36
                                 16 IPADDR=20.0.0.100
                                 17 NETMASK=255.255.255.0
                                 18 #GATEWAY=192.168.170.2
                                 19 #DNS1=192.168.170.2
[root@pyx network-scripts]# systemctl restart network
[root@pyx network-scripts]# ifconfig 
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 12.0.0.30  netmask 255.255.255.0  broadcast 12.0.0.255
        inet6 fe80::bfac:aee:9cc8:2cb9  prefixlen 64  scopeid 0x20<link>
        ether 00:0c:29:54:df:3c  txqueuelen 1000  (Ethernet)
        RX packets 230  bytes 26692 (26.0 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 410  bytes 31925 (31.1 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
ens36: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 20.0.0.100  netmask 255.255.255.0  broadcast 20.0.0.255
        inet6 fe80::1a31:23db:407e:1523  prefixlen 64  scopeid 0x20<link>
        ether 00:0c:29:54:df:46  txqueuelen 1000  (Ethernet)
        RX packets 131  bytes 10284 (10.0 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 210  bytes 33446 (32.6 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 1000  (Local Loopback)
        RX packets 380  bytes 36108 (35.2 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 380  bytes 36108 (35.2 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
virbr0: flags=4099<UP,BROADCAST,MULTICAST>  mtu 1500
        inet 192.168.122.1  netmask 255.255.255.0  broadcast 192.168.122.255
        ether 52:54:00:9a:4c:a2  txqueuelen 1000  (Ethernet)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
[root@pyx network-scripts]# ping 20.0.0.110
PING 20.0.0.110 (20.0.0.110) 56(84) bytes of data.
64 bytes from 20.0.0.110: icmp_seq=1 ttl=64 time=0.739 ms
64 bytes from 20.0.0.110: icmp_seq=2 ttl=64 time=0.207 ms
^C
--- 20.0.0.110 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 999ms
rtt min/avg/max/mdev = 0.207/0.473/0.739/0.266 ms
[root@pyx network-scripts]# ping 12.0.0.100
PING 12.0.0.100 (12.0.0.100) 56(84) bytes of data.
64 bytes from 12.0.0.100: icmp_seq=1 ttl=64 time=0.452 ms
64 bytes from 12.0.0.100: icmp_seq=2 ttl=64 time=0.213 ms
^C
--- 12.0.0.100 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 999ms
rtt min/avg/max/mdev = 0.213/0.332/0.452/0.120 ms
----------------------------------------------------------------------------------------
#开启路由功能
[root@pyx network-scripts]# vim /etc/sysctl.conf 
                                添加:net.ipv4.ip_forward = 1
[root@pyx network-scripts]# sysctl -p               #开启路由转发
net.ipv4.ip_forward = 1

----------------------------------------------------------------------------------------
#安装bind程序,配置DNS服务文件
[root@pyx network-scripts]# yum install -y bind
[root@pyx network-scripts]# vim /etc/named.conf 
                                13  listen-on port 53 { any; };
                                21  allow-query     { any; };
[root@pyx network-scripts]# vim /etc/named.rfc1912.zones 
                                12  zone "test.com" IN {
                                13  type master;
                                14  file "test.com.zone";
                                15  allow-update { none; };
                                16 };
[root@pyx network-scripts]# cd /var/named/
[root@pyx named]# ll
总用量 16
drwxrwx--- 2 named named    6 10月 13 2020 data
drwxrwx--- 2 named named    6 10月 13 2020 dynamic
-rw-r----- 1 root  named 2253 4月   5 2018 named.ca
-rw-r----- 1 root  named  152 12月 15 2009 named.empty
-rw-r----- 1 root  named  152 6月  21 2007 named.localhost
-rw-r----- 1 root  named  168 12月 15 2009 named.loopback
drwxrwx--- 2 named named    6 10月 13 2020 slaves   
[root@pyx named]# cp -p named.localhost test.com.zone
[root@pyx named]# vim test.com.zone 
                      9         A       12.0.0.30
                     10 www IN  A       12.0.0.30
[root@pyx named]# systemctl restart named
[root@pyx named]# systemctl enable named
Created symlink from /etc/systemd/system/multi-user.target.wants/named.service to /usr/lib/systemd/system/named.service.
----------------------------------------------------------------------------------------
#安装iptables-service,配置iptables规则
[root@pyx named]# yum install -y iptables-services.x86_64 
[root@pyx named]# systemctl start iptables.service
[root@pyx named]# systemctl enable iptables.service
Created symlink from /etc/systemd/system/basic.target.wants/iptables.service to /usr/lib/systemd/system/iptables.service.
[root@pyx named]# iptables -nL
Chain INPUT (policy ACCEPT)
target     prot opt source               destination         
ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0            state RELATED,ESTABLISHED
ACCEPT     icmp --  0.0.0.0/0            0.0.0.0/0           
ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0           
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0            state NEW tcp dpt:22
REJECT     all  --  0.0.0.0/0            0.0.0.0/0            reject-with icmp-host-prohibited

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         
REJECT     all  --  0.0.0.0/0            0.0.0.0/0            reject-with icmp-host-prohibited

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination         
[root@pyx named]# iptables -F
[root@pyx named]# iptables -t nat -A PREROUTING -i ens33 -d 12.0.0.30 -p tcp --dport 80 -j DNAT --to 20.0.0.110:80
[root@pyx named]# iptables -nL
Chain INPUT (policy ACCEPT)
target     prot opt source               destination         

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination         
[root@pyx named]# iptables -nL -t nat
Chain PREROUTING (policy ACCEPT)
target     prot opt source               destination         
DNAT       tcp  --  0.0.0.0/0            12.0.0.30            tcp dpt:80 to:20.0.0.110:80

Chain INPUT (policy ACCEPT)
target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination         

Chain POSTROUTING (policy ACCEPT)
target     prot opt source               destination         

⑤我们想通过外网客户端12.0.0.100进行域名解析访问到内网web服务器20.0.0.110,这里在客户端添加DNS服务器的配置信息,验证能否正常解析

[root@localhost ~]# vim /etc/resolv.conf
                        # Generated by NetworkManager
                        nameserver 12.0.0.30
[root@localhost ~]# nslookup www.test.com
Server:		12.0.0.30
Address:	12.0.0.30#53
Name:	www.test.com
Address: 12.0.0.30

⑥想要实现外网客户机访问网关服务器的外网接口ssh 12.0.0.0.30:2345,访问到内网的web服务器,ssh 20.0.0.110:22

#网关服务器端操作
[root@pyx ~]# iptables -t nat -A PREROUTING -i ens33 -d 12.0.0.30 -p tcp --dport 2345 -j DNAT --to 20.0.0.110:22   #外网客户端只要从12.0.0.30 的2345号端口入站,都会通过被网关服务器转发,地址解析成20.0.0.110的22号端口
[root@pyx ~]# iptables -t nat -nL
Chain PREROUTING (policy ACCEPT)
target     prot opt source               destination         
DNAT       tcp  --  0.0.0.0/0            12.0.0.30            tcp dpt:2345 to:20.0.0.110:22
Chain INPUT (policy ACCEPT)
target     prot opt source               destination         
Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination         
Chain POSTROUTING (policy ACCEPT)
target     prot opt source               destination    

------------------------------------------------------------------------------------------
#外网客户端的操作,远程登录
[root@localhost ~]# ssh -p 2345 12.0.0.30
The authenticity of host '[12.0.0.30]:2345 ([12.0.0.30]:2345)' can't be established.
ECDSA key fingerprint is SHA256:oyNrIfYpNhBAdz2hRtpPU0QgNrJ+tnU/4Zq3YzSJi+4.
ECDSA key fingerprint is MD5:aa:f2:97:c7:b7:1c:95:3e:fd:65:14:41:0c:9a:3f:fe.
Are you sure you want to continue connecting (yes/no)? yes  
Warning: Permanently added '[12.0.0.30]:2345' (ECDSA) to the list of known hosts.
root@12.0.0.30's password: 
Last login: Sun May  5 21:57:14 2024
[root@pyx ~]# ipc
ipcalc  ipcmk   ipcrm   ipcs    
[root@pyx ~]# ipconfig
bash: ipconfig: 未找到命令...
[root@pyx ~]# ifconfig 
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 20.0.0.110  netmask 255.255.255.0  broadcast 20.0.0.255
        inet6 fe80::bfac:aee:9cc8:2cb9  prefixlen 64  scopeid 0x20<link>
        ether 00:0c:29:56:3a:2a  txqueuelen 1000  (Ethernet)
        RX packets 701  bytes 76004 (74.2 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 662  bytes 98636 (96.3 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
     

⑦抓包验证

#借助远程终端连接内网web端(20.0.0.100),开启监听抓包
pyx ~]# tcpdump -i ens33 -s 0 -w ./test1.cap   #指定监听的网卡,保存抓包的文件为test1.cap

#外网客户端ping网关地址
ot@localhost ~]# ping 12.0.0.30
PING 12.0.0.30 (12.0.0.30) 56(84) bytes of data.
64 bytes from 12.0.0.30: icmp_seq=1 ttl=64 time=0.329 ms
64 bytes from 12.0.0.30: icmp_seq=2 ttl=64 time=0.580 ms
64 bytes from 12.0.0.30: icmp_seq=3 ttl=64 time=0.213 ms
^C
--- 12.0.0.30 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 1999ms
rtt min/avg/max/mdev = 0.213/0.374/0.580/0.153 ms

#外网web端退出监听,保存文件到本地
[root@pyx ~]# 
^C
[root@pyx ~]# sz test1.cap 

3)补充tcpdump抓包工具用法

监听特定网卡 tcpdump -i ens32

监听特定主机 tcpdump host 192.168.170.10

监听特定主机名来源的数据包 tcpdump src host hostname

监听特定主机名为目标的数据包 tcpdump dst host hostname

监听特定主机名所有的数据包 tcpdump host hostname

监听特定端口 tcpdump port XX

监听指定协议TCP/UDP  tcpdump tcp/udp/icmp

监听来源主机XX在端口XX上的TCP/UDP数据包  tcpdump tcp port 22 and src host 12.0.0.10

监听特定主机之间的通信  tcpdump ip host 192.168.117.10 and 210.10.10.10

抓包文件的保存 tcp 协议  port 端口 [src/dst]  net 网段     -i 网卡  -s 0  -w XXX.cap; sz test1.cap(这一步只能在远程终端实现)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/654103.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

逆向基础:软件手动脱壳技术入门

这里整合了一下之前自己学习软件手工脱壳的一些笔记和脱文&#xff0c;希望能给新学软件逆向和脱壳的童鞋们一点帮助。 1 一些概念 1.1 加壳 加壳的全称应该是可执行程序资源压缩&#xff0c;是保护文件的常用手段。加壳过的程序可以直接运行&#xff0c;但是不能查看源代码…

MySQL详细安装、配置过程,多图,详解

本文适合centos7环境下安装mysql&#xff0c;在安装和卸载过程中&#xff0c;都在root用户下完成。文章目录 清理环境获取mysql官方yum源安装mysql yum源安装mysql服务安装报错解决办法验证是否安装完成启动mysql服务登录服务方法一&#xff1a;方法二&#xff1a;方法三&#…

huawei 华为 交换机 配置 Dot1q 终结子接口实现跨设备 VLAN 间通信示例

组网需求 如图7-8所示&#xff0c;SwitchA和SwitchB分别下挂VLAN 10和VLAN 20的二层网络&#xff0c;SwitchA和SwitchB之间通过三层网络互通&#xff0c;三层网络采用OSPF协议。要求两个二层网络的PC实现二层隔离三层互通。 图 7-8 配置 Dot1q 终结子接口实现跨设备 VLAN 间通信…

Vue3实战笔记(37)—粒子特效登录页面

文章目录 前言一、粒子特效登录页总结 前言 上头了&#xff0c;再来一个粒子特效登录页面。 一、粒子特效登录页 登录页&#xff1a; <template><div><vue-particles id"tsparticles" particles-loaded"particlesLoaded" :options"…

Spring系列-02-Bean类型, 作用域, 实例化, 生命周期

Bean类型, 作用域, 实例化, 生命周期 Bean类型 在 SpringFramework 中,对于 Bean 的类型,一般有两种设计: 普通BeanFactoryBean 普通Bean 三种方式 Component注解配置类Beanxml <bean> Component public class Child {}Bean public Child child() {return new Ch…

Postgresql源码(134)优化器针对volatile函数的排序优化分析

相关 《Postgresql源码&#xff08;133&#xff09;优化器动态规划生成连接路径的实例分析》 上一篇对路径的生成进行了分析&#xff0c;通过make_one_rel最终拿到了一个带着路径的RelOptInfo。本篇针对带volatile函数的排序场景继续分析subquery_planner的后续流程。 subquer…

国内信创web中间件生态

国内信创web中间件生态 东方通 官网https://www.tongtech.com/pctype/25.html 宝蓝德 官网https://www.bessystem.com/product/0ad9b8c4d6af462b8d15723a5f25a87d/info?p101 金蝶天燕 官网 https://www.apusic.com/list-117.html 中创 官网http://www.inforbus.com…

小程序使用vant组件库

一:下载组件库 在小程序内npm下载的包 vant组件库官网:快速上手 - Vant Weapp (youzan.github.io) 1)首先有有package.json文件,没有的话则先初始化 即使通过package.json去下载包,也需要有,可以观察下载的包. 2)下载包 3)构建npm包 下载包之后存储在node_modules内,但是我们…

详谈 Java中的list.forEach()和list.stream().forEach() 异同点

涉及的文章链接&#xff1a;ArrayList 循环Remove遇到的坑 一、想总结本篇博客的原因 在日常开发中&#xff0c;需要对集合数据进行或多或少的赋值修改&#xff0c;那么循环赋值或者做一些处理就是最常见的一种操作了&#xff0c;但是用习惯了stream流&#xff0c;所以在循环的…

HQChart使用教程99-K线窗口设置上下间距

HQChart使用教程99-K线窗口设置上下预留间距 指标窗口布局说明设置预留间距数据结构通过Setoption设置通过ChangeIndex设置 HQChart代码地址 指标窗口布局说明 顶部预留间距(3)和底部预留间距(5) 这个部分是算在Y轴坐标上的 设置预留间距 数据结构 HorizontalReserved&#…

Python + adb 实现打电话功能

前言 其实很多年前写过一篇python打电话的功能&#xff0c;链接如下&#xff1a; Python twilio 实现打电话和发短信功能_自动发短信代码-CSDN博客 今天由于工作需要&#xff0c;又用python写了个关于打电话的小工具&#xff0c;主要是通过ADB方式实现的 实现过程 1.先利用…

车机壁纸生成解决方案,定制化服务,满足个性化需求

在数字化与智能化浪潮的推动下&#xff0c;汽车内部设计已不再仅仅满足于基本功能的需求&#xff0c;更追求为用户带来前所未有的视觉享受与沉浸式体验。美摄科技&#xff0c;凭借其在图像生成与处理领域的深厚积累&#xff0c;推出了一款创新的车机壁纸生成解决方案&#xff0…

修改Windows系统hosts文件,解决GitHub国内访问速度慢甚至无法访问的问题

对国内大多数用户&#xff0c;GitHub的访问速度非常慢&#xff0c;甚至是打不开&#xff0c;无法访问。究其原因&#xff0c;多数是GitHub的CDN域名解析&#xff08;DNS&#xff09;遭到了污染或拦截。本文以Windows 10系统为例&#xff0c;通过修改本地hosts文件&#xff0c;解…

电脑可以录音吗?这里有你想要的答案!

在数字化时代&#xff0c;电脑已经成为我们日常生活中不可或缺的工具。除了办公、娱乐等基本功能外&#xff0c;电脑还具备许多实用的辅助功能&#xff0c;其中之一就是录音功能。可是电脑可以录音吗&#xff1f;本文将介绍两种在电脑上录音的方法&#xff0c;希望通过本文的介…

人生二选一:央企就业?美国做博士后?—请看她的抉择

一位30岁的女博士&#xff0c;收到国内央企和德国、美国的博士后邀请函&#xff0c;她该如何选择&#xff1f;知识人网小编推荐这篇文章&#xff0c;为大家解开谜题的同时&#xff0c;也给有同样纠结的学者提供一些启迪。 去年12月底的一个晚上&#xff0c;我收到美国一所高校发…

ubuntu系统开启ssh密码登录

文章目录 前言 一、确认否有ssh服务 二、修改/etc/ssh/sshd_config配置文件 三、重启ssh服务 总结 前言 安装好ubuntu系统后&#xff0c;默认是无法通过密码远程shell连接的&#xff0c;需要修改配置文件。 一、确认否有ssh服务 我这边使用的是ubuntu 22.04 LTS的系统&a…

AirBnb架构简史

2007 年&#xff0c;布莱恩切斯基 (Brian Chesky) 和乔加比亚 (Joe Gabbia) 搬到了旧金山。他们一边想为自己的创业想法筹集资金&#xff0c;一边又需要支付房租。 碰巧的是&#xff0c;当时城里正要举行一个设计会议&#xff0c;这意味着很多设计师都会寻找住处。他们想出了在…

海外仓系统要多少钱?最贵的未必是最好的,性价比高的才是

海外仓系统可以说已经是现在海外仓管理不可或缺的重要工具&#xff0c;然而&#xff0c;很多海外仓企业在选择海外仓系统时最头疼的问题就是不知道到底多少钱才合适。 确实&#xff0c;现在的海外仓系统市场价格体系非常多&#xff0c;几万几十万各种定价都有&#xff0c;让人…

linux父进程fork出子进程后,子进程为何首先需要close文件描述符。

在linux c/c编程时&#xff0c;父进程fork出子进程后&#xff0c;子进程经常第一件事就是close掉所有的文件描述符&#xff1b;为何需要这样做&#xff0c;本文用一个例子进行简单说明。 考虑到一种情况&#xff0c;父进程创建了tcp服务端套接字&#xff0c;并且listen&#x…

redis核心面试题二(实战优化)

文章目录 10. redis配置mysql实战优化[重要]11. redis之缓存击穿、缓存穿透、缓存雪崩12. redis实现分布式session 10. redis配置mysql实战优化[重要] // 最初实现OverrideTransactionalpublic Product createProduct(Product product) {productRepo.saveAndFlush(product);je…