应用场景:项目做迁移,除了前段的nginx服务器要用外网,其他的机器都内网;实现方法有三种:1。nginx正向代理{不知道有啥优点,缺点是不支持https}2。squid正向代理{比nginx好点,http和https都支持;缺点是不支持ping 域名这种形式(后端项目访问外网的时候各种超时)}3。防火墙实现nat路由转发{目前来看是最简单的,所以推荐使用这种的}   1和2的部署及使用已经在本博客中描述#####现在使用第三种方法来实现{推荐直接使用第三种方法} ##### # 服务端 systemctl start firewalld.service #关闭其他防火墙,然后开启firewalldfirewall-cmd --add-masquerade --permanent #内部主机依靠firewalld转发上网firewall-cmd --reload #生效 # 客户端vim /etc/sysconfig/network-scripts/ifcfg-eth0   #修改默认网关为服务端的外网ip地址cat /etc/resolv.conf #添加dns# Generated by NetworkManagernameserver 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-zonepublic3.查看活跃区域[root@ci-node1 ~]# firewall-cmd --get-active-zonepublic  interfaces: eth0 eth1  ############################################################################4.使用firewalld中各个区域规则结合 1.设定默认区域为drop(拒绝所有) 2.设置白名单IP访问,将源10.0.0.0/24网段加入trusted区域1.修改默认的区域[root@ci-node1 ~]# firewall-cmd --set-default-zone=dropsuccess[root@ci-node1 ~]# firewall-cmd --get-default-zonedrop2.将10.0.0.0/24网段主机都加入白名单[root@ci-node1 ~]# firewall-cmd --add-source=10.0.0.0/24 --zone=trusted --permanent3.重启生效[root@ci-node1 ~]# firewall-cmd --reload4.检查配置[root@ci-node1 ~]# firewall-cmd --get-active-zonedrop  interfaces: eth0 eth1trusted  sources: 10.0.0.0/245.删除添加过的配置[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-zonedrop  interfaces: eth0 eth1trusted  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 --reload2.查看开放的端口[root@ci-node1 ~]# firewall-cmd --list-ports80/tcp 80/udp3.修改配置文件添加/etc/firewalld/zones/public.xml4.移除端口[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-servicessh dhcpv6-client http https2.存放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    # 监听本地firewalld哪个端口,哪个协议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.11success[root@ci-node1 ~]# firewall-cmd --reloadsuccess#####修改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 --reload10.0.0.11 ->10.0.0.12:22 通10.0.0.1 -》10.0.0.11:6666 -》10.0.0.12:223.内部主机依靠firewalld转发上网[root@ci-node1 ~]# firewall-cmd --add-masquerade --permanentsuccess[root@ci-node1 ~]# firewall-cmd --reloadsuccess4.客户端测试 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 --reloadsuccess2.拒绝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 --reloadsuccess3.将远程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 --reloadsuccess4.将远程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.精确匹配规则,根据设定的规则严格执行 针对:端口、服务、转发 

查看原文