LInux服务——firewall

之前的好多篇博客都讲了关于Linux中的各种服务,这次继续说说比较重要的,为我们的电脑保驾护航的服务:防火墙。

关于Linux的防火墙,首先要知道Linux的防火墙分为好多种,但都是建立在对内核的控制上的。

RHEL中有几种防火墙共存

  • iptables
  • firewalld
  • ip6tables
  • ebtables

这些软件本身其实并不具备防火墙功能,他们的作用都是在用户空间中管理和维护规则,只不过规则结构和使用方法不一样罢了,真正利用规则进行过滤是由内核的netfilter完成的

这里主要说两种防火墙的控制及操作方式:firewalld,iptables


firewalld不是防火墙,只是用来管理防火墙的一款软件,对iptables进行操作,之后会对内核进行修改,另外一种方式是IPTABLES
真正的防火墙是IPTABLES,内核读取,firewalld更接近,类似于windows,iptables更类似于网络路由器(使用复杂但是功能强大)

防火墙功能计算机都是自带的,所以直接打开防火墙的图形操作模式就可以了。

firewalld-config

Firewalld分为许多不同的工作模式(网络区)


firewall的基本操作          ##往后所有防火墙的控制命令中如果添加了--permanent,都是永久更改,重启服务后才生效,不添加就是临时更改,重启服务后消失。

#firewall-cmd --state                                          ##查看防火墙的状态

#firewall-cmd --get-active-zones                        ##查看正在运行中的网络区

#firewall-cmd --get-default-zone                        ##查看默认的网络区

#firewall-cmd --zone=public --list-all                  ##查看public网络区的所有信息

#firewall-cmd --set-default-zone=dmz                ##设立默认网络区为dmz

#firewall-cmd --get-zones            ##查看防火墙所有的网络区

#firewall-cmd --get-services         ##查看防火墙所有的服务

#firewall-cmd --list-all-zones        ##查看防火墙所有网络区的详细信息

/usr/lib/firewalld/services ##这个目录下的文件标示的便是firewalld可通过的所有服务的名称,xml为可扩展标记语言,可用作数据封装,就是说这个文件中可写入命令,系统会自动执行。


其中写入的内容主要就是这个服务通过哪一个端口提供,如果防火墙要开启这一个服务的通过权限,那么开启端口就可以了。

#firewall-cmd --zone=public --add-source=172.25.254.54/24                 ##强制172.25.254.54这个IP在登陆时进入public网络区

#firewall-cmd --zone=public --remove-source=172.25.254.54/24           ##不对172.25.254.54这个IP进行制约。

#firewall-cmd --zone=internal --add-interface=eth0                ##将eth0这块网卡填加至internal网络区中(通过这个网络区提供的服务都由eht0这块网卡支持,但是前提是这块网卡不能被其他网络区使用,不然就无法填加。)

#firewall-cmd--zone=internal --change-interface=eth0           ##将eth0这块网卡从它原有提供服务的网络区上转移至internal网络区,并且不在对原有的网络区提供服务

#firewall-cmd--zone=internal --remove-interface=eth0            ##将eth0这块网卡删除


填加服务

#firewall-cmd --zone=public --add-service=http                    ##让public这个网络区可以通过http服务。实际就是打开上文提到的那个目录下http.xml文件中需要打开的端口,如果你的http服务要通过的端口发生了更改,那么firewall就不会让通过,那么如何更改:点击打开链接

#firewall-cmd --zone=public --remove-service=http               ##删除http服务的通过权力


#firewall-cmd --zone=public --add-port=8080/tcp(udp)                  ##让public这个网络区可以通过tcp(udp)模式的8080端口(所有经过这个端口的服务防火墙都不会禁止)

#firewall-cmd --zone=public --remove-port=8080/tcp             ##删除通过权力

#firewall-cmd --reload                    ##不重启服务的情况下更新更改与规则,临时更改会消失

#firewall-cmd --complete-reload    ##更新时会中断其他通过防火墙的连接

规则的写入

#firewall-cmd --direct --get-all-rules                  ##查看所有规则

#firewall-cmd --direct --add-rule ipv4 filter INPUT 1 -s 172.25.254.54 --dport 22 -j REJECT                ##在filter表(filter表是默认表,功能是对数据包做过滤。此表有三条链(iptables -t filter -L -n,用此命令查看),分别是:INPUT、FORWARD、OUTPUT。)中填加一个规则,内容是不允许172.25.254.54这个IP的主机通过22端口


IP转移

在做接下来的实验的时候,我们需要一个拥有两个网卡的虚拟机(称为服务端)


首先在真机上面查询虚拟机与真机共同使用的网桥可支持哪一个网段的


之后将服务端的两个IP进行修改,写入规则

打开伪装功能(firewall允许其他主机使用自己的IP做伪装)

允许本机的两个不同网段的网卡进行通信(硬件方面)


修改完成之后使用真机连接,会直接连接至服务端转移的那个IP上

这些主要就是firewalld的简单用法下来说到功能更加全面的iptables

安装完成后要关闭firewalld因为系统中所有的防火墙都不可以兼容。

iptables -t filter -nL    ##查看filter表中的规则

文件则是在/etc/sysconfig/iptables

iptables -A (添加)INPUT -i lo (当你访问回环接口的时候) -j ACCEPT
iptables -A INPUT -s 172.25.254.54 -p tcp --dport 22(ssh的,80是apache的) -j ACCEPT
iptables -P INPUT DROP 将iptables的input改为DROP模式
iptables -A input -j REJECT 将iptables的input所有都改成REJECT模式
但是这个策略的读取顺序是上下顺序的,当上面的一条策略被读取,下面的一条就不会被读取了。而且重启之后就没有了。

iptables -F ##刷新策略

所以这个策略的实际内容就是:只有54主机与使用回环接口的主机才可以通过ssh连接,其他的主机连接时不会有反馈,这就是DROP与REJECT的差别