centos7查询外网ip地址 centos7 查询ip_centos7防火墙

centos7查询外网ip地址 centos7 查询ip_centos7 防火墙_02

Centos7之上的操作系统默认使用firewalld作为防火墙组件,相比之前的iptables来说,firewalld在进行网络管理的时候,更加便利,今天我们来探究一下firewalld的使用方法。

centos7查询外网ip地址 centos7 查询ip_centos7查看防火墙状态_03



centos7查询外网ip地址 centos7 查询ip_centos7查询外网ip地址_04

防火墙启动

  • 演示机器:10.200.19.146 (打开防火墙)
  • 系统:CentOS Linux release 7.4.1708
  • 10.199.137.114(源端访问发起机器)

注:后文验证,防火墙策略都是在10.200.19.146添加,访问从10.199.137.114发起。

Centos7之上操作系统使用systemctl对组件进行管理。

登录10.200.19.146,检查firewalld状态

systemctl status firewalld.service

[root@localhost  ~]# systemctl status firewalld.service● firewalld.service - firewalld - dynamic firewall daemon   Loaded: loaded (/usr/lib/systemd/system/firewalld.service; disabled; vendor preset: enabled)   Active: inactive (dead)     Docs: man:firewalld(1)

可以看到防火墙是inactive状态

systemctl start/stop firewalld.service  #启动/停止防火墙,然后检查状态。

[root@localhost ~]# systemctl status  firewalld.service● firewalld.service - firewalld - dynamic firewall daemon   Loaded: loaded (/usr/lib/systemd/system/firewalld.service; disabled; vendor preset: enabled)   Active: active (running) since Wed 2020-07-08 15:42:37 CST; 1s ago     Docs: man:firewalld(1) Main PID: 18267 (firewalld)    Tasks: 1   Memory: 25.5M   CGroup: /system.slice/firewalld.service           └─18267 /usr/bin/python -Es /usr/sbin/firewalld --nofork --nopidJul 08 15:42:35 localhost systemd[1]: Starting firewalld - dynamic firewall daemon...Jul 08 15:42:37 localhost systemd[1]: Started firewalld - dynamic firewall daemon.

firewalld跟iptables比起来至少有两大好处:

  • firewalld可以动态修改单条规则,而不需要像iptables那样,在修改了规则后必须得全部刷新才可以生效;
  • firewalld在使用上要比iptables人性化很多,即使不明白“五张表五条链”而且对TCP/IP协议也不理解也可以实现大部分功能。

firewalld跟iptables相比,默认规则是不同的,firewalld启动后除了ssh端口,其他访问默认是拒绝,而iptables里默认是每个服务是允许,需要拒绝的才去限制。

下面验证一下

centos7查询外网ip地址 centos7 查询ip_centos7 查看ip_05

8091是10.200.19.146上apache服务端口,146防火墙已经打开,我们在146上抓包,114上telnet 10.200.19.146 8091看看包的访问情况。

发起端访问,telnet不通

[root@10-199-137-114 ~]# telnet 10.200.19.146 8091Trying 10.200.19.146...

目标端抓包

tcpdump -i any host 10.200.19.146 and port 8091 -nn  -vvv

[root@localhost ~]# tcpdump -i any host 10.200.19.146 and port 8091 -nn  -vvvtcpdump: listening on any, link-type LINUX_SLL (Linux cooked), capture size 262144 bytes15:16:03.036467 IP (tos 0x10, ttl 63, id 24397, offset 0, flags [DF], proto TCP (6), length 60)    10.199.137.114.20311 > 10.200.19.146.8091: Flags [S], cksum 0xf110 (correct), seq 4163943542, win 29200, options [mss 1460,sackOK,TS val 729211707 ecr 0,nop,wscale 7], length 015:16:04.038764 IP (tos 0x10, ttl 63, id 24398, offset 0, flags [DF], proto TCP (6), length 60)    10.199.137.114.20311 > 10.200.19.146.8091: Flags [S], cksum 0xed27 (correct), seq 4163943542, win 29200, options [mss 1460,sackOK,TS val 729212708 ecr 0,nop,wscale 7], length 015:16:06.041784 IP (tos 0x10, ttl 63, id 24399, offset 0, flags [DF], proto TCP (6), length 60)    10.199.137.114.20311 > 10.200.19.146.8091: Flags [S], cksum 0xe553 (correct), seq 4163943542, win 29200, options [mss 1460,sackOK,TS val 729214712 ecr 0,nop,wscale 7], length 015:16:10.049588 IP (tos 0x10, ttl 63, id 24400, offset 0, flags [DF], proto TCP (6), length 60)    10.199.137.114.20311 > 10.200.19.146.8091: Flags [S], cksum 0xd5ab (correct), seq 4163943542, win 29200, options [mss 1460,sackOK,TS val 729218720 ecr 0,nop,wscale 7], length 015:16:18.065025 IP (tos 0x10, ttl 63, id 24401, offset 0, flags [DF], proto TCP (6), length 60)    10.199.137.114.20311 > 10.200.19.146.8091: Flags [S], cksum 0xb65b (correct), seq 4163943542, win 29200, options [mss 1460,sackOK,TS val 729226736 ecr 0,nop,wscale 7], length 015:16:34.080527 IP (tos 0x10, ttl 63, id 24402, offset 0, flags [DF], proto TCP (6), length 60)    10.199.137.114.20311 > 10.200.19.146.8091: Flags [S], cksum 0x77cb (correct), seq 4163943542, win 29200, options [mss 1460,sackOK,TS val 729242752 ecr 0,nop,wscale 7], length 0

从抓包情况我们可以看出,由于10.200.19.146上防火墙打开,从114上访问146的8091端口,146一直没有响应,可以看出firewalld默认是拒绝访问,所以一般情况下,我们会关闭防火墙服务,在服务访问不通的情况下,你不妨去检查下防火墙的状态。



centos7查询外网ip地址 centos7 查询ip_centos7 查看ip_06

命令汇总

常用命令

#进程与状态相关systemctl start firewalld.service            #启动防火墙  systemctl stop firewalld.service             #停止防火墙  firewall-cmd --state                         #查看防火墙状态  firewall-cmd --reload                        #更新防火墙规则  firewall-cmd --state                         #查看防火墙状态  firewall-cmd --reload                        #重载防火墙规则  firewall-cmd --list-ports                    #查看所有打开的端口  firewall-cmd --list-services                 #查看所有允许的服务  firewall-cmd --get-services                  #获取所有支持的服务#区域相关firewall-cmd --list-all-zones                    #查看所有区域信息  firewall-cmd --get-active-zones                  #查看活动区域信息  firewall-cmd --set-default-zone=public           #设置public为默认区域  firewall-cmd --get-default-zone                  #查看默认区域信息  firewall-cmd --zone=public --add-interface=eth0  #将接口eth0加入区域public#接口相关firewall-cmd --zone=public --remove-interface=eth0       #从区域public中删除接口eth0  firewall-cmd --zone=default --change-interface=eth0      #修改接口eth0所属区域为default  firewall-cmd --get-zone-of-interface=eth0                #查看接口eth0所属区域#端口控制firewall-cmd --add-port=80/tcp --permanent               #永久添加80端口例外(全局)firewall-cmd --remove-port=80/tcp --permanent            #永久删除80端口例外(全局)firewall-cmd --add-port=65001-65010/tcp --permanent      #永久增加65001-65010例外(全局)firewall-cmd  --zone=public --add-port=80/tcp --permanent            #永久添加80端口例外(区域public)firewall-cmd  --zone=public --remove-port=80/tcp --permanent         #永久删除80端口例外(区域public)firewall-cmd  --zone=public --add-port=65001-65010/tcp --permanent   #永久增加65001-65010例外(区域public)#地址控制firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address="10.199.137.114"   accept"  -------添加允许单个地址firewall-cmd -permanent --add-rich-rule="rule family="ipv4" source address="10.199.137.0/24"  accept"-------添加允许ip段firewall-cmd --permanent --remove-rich-rule="rule family="ipv4" source address="10.199.137.114"   accept"-------删除添加的ip段firewall-cmd -permanent  -add-rich-rule="rule family="ipv4" source address="10.199.137.0/24" port protocol="tcp" port="5432" accept"-------控制访问的ip段和端口

命令含义:--zone #作用域--add-port=80/tcp #添加端口,格式为:端口/通讯协议--permanent #永久生效,没有此参数重启后失效


实战

当前114访问146是拒绝访问的,由于业务交互,我们需要给114添加白名单,允许其访问146,目前有如下几种方法。

  1. 放开8091端口,允许所有地址访问  #单独添加端口是针对全局的
  2. 放开10.199.137.114地址,允许其访问所有端口
  3. 放开10.199.137.114地址和8091端口

在添加规则之前我们需要了解,firewalld出去的策略默认(相当于iptables的output链)是放开的,所以我们只需要控制进来的策略就好了。上面三种方法都可以解决访问问题,实际生产环境中,我们可以根据要求进行调整,方法1和2限制比较少,而方法三限制到了地址和端口,控制的比较严格,下面我们按照方法三进行演示。

  • 操作步骤

查看当前规则

[root@localhost ~]# firewall-cmd --list-all public (active)  target: default  icmp-block-inversion: no  interfaces: ens33  sources:   services: ssh dhcpv6-client  ports:   protocols:   masquerade: no  forward-ports:   source-ports:   icmp-blocks:   rich rules:

当前没有规则,只有默认放开了ssh服务

添加策略,放开地址端口

[root@localhost ~]# firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address="10.199.137.114" port protocol="tcp" port="8091" accept"success[root@localhost ~]# firewall-cmd --reload success[root@localhost ~]# firewall-cmd --list-all public (active)  target: default  icmp-block-inversion: no  interfaces: ens33  sources:   services: ssh dhcpv6-client  ports:   protocols:   masquerade: no  forward-ports:   source-ports:   icmp-blocks:   rich rules:   rule family="ipv4" source address="10.199.137.114" port port="8091" protocol="tcp" accept

如上,添加白名单成功,我们在114上访问146测试

[root@10-199-137-114 ~]# telnet 10.200.19.146 8091Trying 10.200.19.146...Connected to 10.200.19.146.Escape character is '^]'.

总结

1、策略添加完成后需要firewall-cmd --reload才能生效;

2、--permanent生产环境需要添加,无此参数重启会失效;

3、firewalld开启后,进入策略默认是关闭的,出去数据包无限制;

4、Firewalld存放配置文件有两个目录,/usr/lib/firewalld和/etc/firewalld,前者存放了一些默认的文件,后者主要是存放用户自定义的数据,所以我们添加的service或者rule都在后者下面进行。

THE