Centos7 firewalld实现内网访问外网

应用场景:项目做迁移,除了前段的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    # 监听本地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.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.精确匹配规则,根据设定的规则严格执行
针对:端口、服务、转发

 

posted @ 2018-12-04 20:28  Hello_worlds  阅读(4930)  评论(0编辑  收藏  举报