应用场景:项目做迁移,除了前段的nginx服务器要用外网,其他的机器都内网;

实现方法有三种:

1。nginx正向代理{不知道有啥优点,缺点是不支持https}

2。squid正向代理{比nginx好点,http和https都支持;缺点是不支持ping 域名这种形式(后端项目访问外网的时候各种超时)}

3。防火墙实现nat路由转发{目前来看是最简单的,所以推荐使用这种的}

 

 

 1和2的部署及使用已经在本博客中描述

#####现在使用第三种方法来实现{推荐直接使用第三种方法} #####

 

# 服务端

 

systemctl start firewalld.service #关闭其他防火墙,然后开启firewalld

firewall-cmd --add-masquerade --permanent #内部主机依靠firewalld转发上网

firewall-cmd --reload #生效

 

# 客户端

vim /etc/sysconfig/network-scripts/ifcfg-eth0

   #修改默认网关为服务端的外网ip地址

cat /etc/resolv.conf #添加dns

# Generated by NetworkManager

nameserver 223.5.5.5

 

 

# 测试 

ping ng www.baidu.com

 

                                                            ######以下内容是记录一些还没有用到的功能 ######

############################################################################

1.关闭其他防火墙,然后开启firewalld

[root@ci-node1 ~]# systemctl start firewalld

[root@ci-node1 ~]# systemctl enable firewalld

############################################################################

1.常用的区域

trusted 允许所有的数据包流入与流出

public 拒绝流入的流量,除非与流出的流量相关;  而如果流量与ssh、dhcpv6-client服务相关,则允许流量

drop 拒绝流入的流量,除非与流出的流量相关

2.查看默认区域

[root@ci-node1 ~]# firewall-cmd --get-default-zone

public

3.查看活跃区域

[root@ci-node1 ~]# firewall-cmd --get-active-zone

public

  interfaces: eth0 eth1

  

############################################################################

4.使用firewalld中各个区域规则结合

1.设定默认区域为drop(拒绝所有)

2.设置白名单IP访问,将源10.0.0.0/24网段加入trusted区域

1.修改默认的区域

[root@ci-node1 ~]# firewall-cmd --set-default-zone=drop

success

[root@ci-node1 ~]# firewall-cmd --get-default-zone

drop

2.将10.0.0.0/24网段主机都加入白名单

[root@ci-node1 ~]# firewall-cmd --add-source=10.0.0.0/24 --zone=trusted --p

ermanent

3.重启生效

[root@ci-node1 ~]# firewall-cmd --reload

4.检查配置

[root@ci-node1 ~]# firewall-cmd --get-active-zone

drop

  interfaces: eth0 eth1

trusted

  sources: 10.0.0.0/24

5.删除添加过的配置

[root@ci-node1 ~]# firewall-cmd --remove-source=10.0.0.0/24 --zone=trusted --permanent

[root@ci-node1 ~]# firewall-cmd  --reload

[root@ci-node1 ~]# firewall-cmd  --get-active-zone

drop

  interfaces: eth0 eth1

trusted

  sources: 192.168.11.0/24

删除配置的第二种方式,找到对应的zones区域进行删除

 /etc/firewalld/zones/

6.修改区域

[root@ci-node1 ~]# firewall-cmd --set-default-zone=public 

[root@ci-node1 ~]# firewall-cmd --get-default-zone 

public

############################################################################

1.配置防火墙, 访问80/tcp 80/udp端口的流量策略设置为永久允许, 并立即生效

[root@ci-node1 ~]# firewall-cmd --add-port=80/tcp --permanent

[root@ci-node1 ~]# firewall-cmd --reload

2.查看开放的端口

[root@ci-node1 ~]# firewall-cmd --list-ports

80/tcp 80/udp

3.修改配置文件添加

/etc/firewalld/zones/public.xml

4.移除端口

[root@ci-node1 ~]# firewall-cmd --remove-port=80/tcp --permanent

[root@ci-node1 ~]# firewall-cmd --reload

############################################################################

1.添加服务方式--add-service 添加  --remove-service 移除

[root@ci-node1 ~]# firewall-cmd --add-service=http --add-service=https

[root@ci-node1 ~]# firewall-cmd --list-service

ssh dhcpv6-client http https

2.存放firewalld添加服务的模板文件

/usr/lib/firewalld/services/

3.自定义端口与服务关联

[root@ci-node1 ~]# cd /usr/lib/firewalld/services/

[root@ci-node1 services]# cp http.xml tomcat.xml

[root@ci-node1 services]# firewall-cmd --reload

[root@ci-node1 services]# firewall-cmd --add-service=tomcat 

success

############################################################################

firewall-cmd --permanent --zone=<区域> --add-forward-port=port=<源端口号>:proto=<协议>:toport=<目标端口号>:toaddr=<目标IP地址>

1.--add-forward-port=port   

2.toport=<目标端口号>:toaddr=<目标IP地址>    # 转发给哪台主机的哪个端口

1.转发本机firewalld 555/tcp端口的流量至22/tcp端口,要求当前和长期有效

[root@ci-node1 ~]# firewall-cmd --permanent --zone=public --add-forward-port=port=5555:proto=tcp:toport=22:toaddr=10.0.0.11

success

[root@ci-node1 ~]# firewall-cmd --reload

success

#####修改ssh配置 将listen 44443 上防火墙开放44443端口,开启ssh服务优先级

2.如果需要将本地的10.0.0.11:6666端口转发至后端10.0.0.12:22端口

#1.开启IP伪装

[root@Firewalld ~]# firewall-cmd --add-masquerade --permanent

#2.配置转发

[root@Firewalld ~]# firewall-cmd --permanent --zone=public --add-forward-port=port=6666:proto=tcp:toport=22:toaddr=10.0.0.12

#3.重启firewalld

[root@Firewalld ~]# firewall-cmd --reload

10.0.0.11 ->10.0.0.12:22 通

10.0.0.1 -》10.0.0.11:6666 -》10.0.0.12:22

3.内部主机依靠firewalld转发上网

[root@ci-node1 ~]# firewall-cmd --add-masquerade --permanent

success

[root@ci-node1 ~]# firewall-cmd --reload

success

4.客户端测试

1.指向firewalld的网关

2.配置dns即可

  1.修改/etc/sysconfig/network-scripts/ifcfg-eth1-->指向firewalld作为网关

  2.centos7重启网卡方式 nmcli conn reload && nmcli down eth1 && nmcli conn up eth1

############################################################################

1.允许10.0.0.0/24网段中10.0.0.1主机访问http服务, 其他同网段主机无法访问,当前和永久生效

[root@ci-node1 ~]# firewall-cmd --permanent --zone=public --add-rich-rule='rule family=ipv4 source address=10.0.0.1/32 service name=http accept'

[root@ci-node1 ~]# firewall-cmd --reload

success

2.拒绝10.0.0.0/24网段中的10.0.0.12主机发起的22请求, 当前和永久生效

[root@ci-node1 ~]# firewall-cmd --permanent --zone=public --add-rich-rule='rule family=ipv4 source address=10.0.0.12/32 port port="22" protocol="tcp" drop'

[root@ci-node1 ~]# firewall-cmd --reload

success

3.将远程10.0.0.1主机请求firewalld的5551端口,转发至firewalld防火墙的22端口

[root@m01 ~]# firewall-cmd --permanent --zone=public --add-rich-rule='rule family=ipv4 source address=10.0.0.1/32 forward-port port=5551 protocol=tcp to-port=22'

[root@m01 ~]# firewall-cmd --reload

success

4.将远程10.0.0.1主机请求firewalld的6661端口,转发至后端主机10.0.0.12的22端口

[root@m01 ~]# firewall-cmd --add-masquerade --permanent

[root@m01 ~]# firewall-cmd --permanent --zone=public --add-rich-rule='rule family=ipv4 source address=10.0.0.1/32 forward-port port=6661 protocol=tcp to-port=22 to-addr=10.0.0.12'

success

[root@m01 ~]# firewall-cmd --reload

#################

firewalld区域

一个区域能够管理多个网卡

一个网卡只能对应一个区域

注意:每个区域可以配置不同的规则

firewalld端口放行和取消

firewall-cmd --add-port

firewall-cmd --remove-port

firewalld服务放行和取消(可以自定义服务)

firewall-cmd --add-service

firewall-cmd --remove-service

firewalld端口转发

1.本机转发(不常用)

2.转发后端(一般)

3.共享上网(较多)

firewalld富规则

1.精确匹配规则,根据设定的规则严格执行

针对:端口、服务、转发