首页 > 信息安全 > 正文

配置Linux防火墙的几种方式

2014-07-22 14:16:29  来源:互联网

摘要:防火墙起初看起来很难使用,但是实际上并不是这样。服务以及区域使一个个碎片的结合以及Linux防火墙的配置变得很容易。
关键词: Linux 防火墙

    防火墙起初看起来很难使用,但是实际上并不是这样。服务以及区域使一个个碎片的结合以及Linux防火墙的配置变得很容易。


    尽管工作在Linux内核的网络过滤器代码上,总体上和旧有的配置防火墙的方法是不兼容的。Red Hat Enterprise Linux 7 和其他的新版本则需要依靠新的配置方法。


    本文的所有命令都基于RHEL 7.


    防火墙工作网络


    首先,检查防火墙是否在运行。使用列表1中的systemctl status firewalld命令。


    列表1.下面的序列表明防火墙是活动状态且在运行中。这些斜线是有帮助的,当你试图将表1全面显示出来,使用-1命令。


    [root@rhelserver ~]# systemctl status firewalld


    firewalld.service - firewalld - dynamic firewall daemon


    Loaded: loaded (/usr/lib/systemd/system/firewalld.service; enabled)


    Active: active (running) since Thu 2014-05-22 07:48:08 EDT; 14min ago


    Main PID: 867 (firewalld)


    CGroup: /system.slice/firewalld.service


    └─867 /usr/bin/python -Es /usr/sbin/firewalld --nofork --nopid


    May 22 07:48:08 rhelserver.example.com systemd[1]: Started firewalld - dynami…


    防火墙中的一切都与一个或者多个区域相关联。


    配置之后,RHEL 7服务器正常会在公共区域,但是你也许会想将它放置在另一个网络配置防火墙访问。这时使用firewall-cmd --get-default-zone命令,该命令显示你的服务器在哪一个网络。如果你想查看配置特定网络的详细信息,你可以使用列表2中的firewall-cmd --zone=zonename --list-all命令。


    列表2.


    root@rhelserver ~]# firewall-cmd --get-default-zone


    public


    [root@rhelserver ~]# firewall-cmd --get-zones


    block dmz drop external home internal public trusted work


    [root@rhelserver ~]# firewall-cmd --zone=public --list-all


    public (default, active)


    interfaces: ens33


    sources:


    services: dhcpv6-client sander ssh


    ports:


    masquerade: no


    forward-ports:


    icmp-blocks:


    rich rules:


    改变当前区域并不难:使用firewall-cmd --set-default-zone=home命令,该命令可用于从公共网络到家庭网络制定一个默认网络。


    服务和其他构件


    在区域中有一些基本的构件块,其中服务是最重要的。防火墙使用管理员创建在/usr/lib/firewalld/services(系统默认服务) 和/etc/firewalld/services文件下的XML文件,配置的自身服务集。XML文件时通过列表3中的例子创建的。


    列表3.


    [root@rhelserver services]# cat ftp.xml


    <?xml version=“1.0” encoding=“utf-8”?>


    <service>


    <short>FTP</short>


    <description>FTP is a protocol used for remote file transfer. If you plan to make your FTP server publicly available, enable this option. You need the


    vsftpd package installed for this option to be useful.</description>


    <port protocol=“tcp” port=“21”/>


    <module name=“nf_conntrack_ftp”/>


    </service>


    每一个服务定义都需要一个简短的名字、描述和端口网络用于指定需要使用的协议、端口和模块名。


    列表4.以下是创建防火墙服务的例子


    [root@rhelserver services]# cat sander.xml


    <?xml version=“1.0” encoding=“utf-8”?>


    <service>


    <short>Sander</short>


    <description>Sander is a random service to show how service configuration works.</description>


    <port port=“666” protocol=“tcp”/>


    </service>


    一旦你有了正确的服务文件,使用以下代码复制它。firewall-cmd --list-services命令显示从你服务器上的所有可以找到的服务列表。如果要增加服务则输入firewall-cmd --add-service yourservice将服务放到默认网络上,或者是使用--zone=zonename选择特定网络。


    下面描述了它如何工作:


    1.使用firewall-cmd --zone=public --list-all命令,显示当前公共区域配置。


    [root@rhelserver ~]# firewall-cmd --zone=public --list-all


    public (default, active)


    interfaces: ens33


    sources:


    services: dhcpv6-client ssh


    ports:


    masquerade: no


    forward-ports:


    icmp-blocks:


    rich rules:


    2. 命令firewall-cmd --zone=public --add-service=ftp,在Linux防火墙的公共区域上添加FTP服务。


    3.重复步骤1检查FTP服务是否成功添加,你将看到服务列表。


    4.重启服务器,执行步骤1.你将看到FTP服务消失了,在防火墙中,没有永久的事物,除非你使用了permanent选项。


    5.将FTP服务添加到公共网络上,并设为永久设置,该步骤使用firewall-cmd  --permanent --zone=public --add-service=ftp命令。重启之后该设置生效。


    6.输入firewall-cmd –reload提交所有规则同时重载防火墙。使用permanent设置永久防火墙选项是非常重要的。


    打破规则


    配置防火墙配置服务是推荐的方式,它可以轻而易举地提供防火墙的全局概览。但是如果你想在/etc/firewalld/service文件下自己定义服务,在不使用该文件的情况下也可添加端口。


    使用firewall-cmd --permanent --zone=dmz --add-port=22/tcp命令为特定网络指定特定端口,然后使用firewall-cmd --zone=dmz --list-all确认端口已成功添加。这种方式是非兼容方式,使用服务使对不同的主机分配相似的规则变得简单。如果没有服务,文件就很难被分配,配置文件中的规则分配也变得困难。


    对于更多的控制,你不能够使用直接规则。原因如下:


    1.输入firewall-cmd --direct --add-rule ipv4 filter INPUT 0 -p tcp --dport 80 -j ACCEPT


    2.现在输入firewall-cdm --list-all显示你的默认网络的配置,端口80没有添加任何东西。


    [root@rhelserver ~]# firewall-cmd --list-all


    public (default, active)


    Interfaces: ens33


    sources:


    services: dhcpv6-client ftp ssh


    ports:


    masquerade: no


    forward-ports:


    icmp-blocks:


    rich rules:


    输入完以上命令后,HTTP端口并没有发生改变,这是因为直接规则写给了IP信息包过滤器接口,而不是防火墙


    3. 输入firewall-cmd --direct --get-all-rules,或者使用firewall-cmd --direct --get-all-rules显示直接规则。


    相比于直接规则,使用iptables(列表5)命令可以写到防火墙里。


    列表5. Linux防火墙规则实例


    firewall-cmd --permanent --zone=public --add-rich-rule=“rule family=”ipv4“ source address=”192.168.4.0/24“ service name=”tftp“ log prefix=”tftp“ level=”info“ limit value=”1/m“ accept”


    防火墙规则类似于IP信息包过滤防火墙,提供了大量灵活性。


    使用列表5中的一条命令就可以完成和提交许多任务。它指定了IP家族、源地址、服务名等。但是需要注意规则是怎样处理登陆的:定义一个特定的登陆前缀、登陆等级信息,以及每分钟传递信息的极限值。


    Linux管理员可以申请监测端口的过滤器,所以规则对于IP地址上的过滤器非常有用。(列表6)


    列表6. 规则申请Linux防火墙IP地址端口的过滤器


    firewall-cmd --permanent --zone=public --add-rich-rule=“rule family=”ipv4“


    source address=”192.168.0.4/24“ service name=”http“ accept”


[page]    分析区域


    firewall-cmd命令是众多配置防火墙的方法之一。二者择一的,你可以直接编写网络配置文件。但是如果语法有误,将不会得到任何反馈。但这是一个简洁简单的配置文件,容易修改和在多个服务器上分配。


    列表7.你可以通过编写配置文件配置防火墙


    <?xml version=“1.0” encoding=“utf-8”?>


    <zone>


    <short>Public</short>


    <description>For use in public areas. You do not trust the other computers on networks to not harm your computer. Only selected incoming connections are accepted.</description>


    <service name=“dhcpv6-client”/>


    <service name=“ssh”/>


    <rule family=“ipv4”>


    <source address=“192.168.4.0/24”/>


    <service name=“tftp”/>


    <log prefix=“tftp” level=“info”>


    <limit value=“1/m”/>


    </log>


    <accept/>


    </rule>


    </zone>


    列表7中包含了添加到先前例子中的所有代码,可以直接写入区域配置文件,其中不包含直接规则,因为直接规则有自己的配置文件。


    [root@rhelserver firewalld]# cat direct.xml


    <?xml version=“1.0” encoding=“utf-8”?>


    <direct>


    <rule priority=“0” table=“filter” ipv=“ipv4” chain=“INPUT”>-p tcp --dport 80 -j ACCEPT</rule>


    </direct>


    尽管工作在Linux内核的网络过滤器代码上,总体上和旧有的配置防火墙的方法是不兼容的。Red Hat Enterprise Linux 7 和其他的新版本则需要依靠新的配置方法。


    本文的所有命令都基于RHEL 7.


    防火墙工作网络


    首先,检查防火墙是否在运行。使用列表1中的systemctl status firewalld命令。


    列表1.下面的序列表明防火墙是活动状态且在运行中。这些斜线是有帮助的,当你试图将表1全面显示出来,使用-1命令。


    [root@rhelserver ~]# systemctl status firewalld


    firewalld.service - firewalld - dynamic firewall daemon


    Loaded: loaded (/usr/lib/systemd/system/firewalld.service; enabled)


    Active: active (running) since Thu 2014-05-22 07:48:08 EDT; 14min ago


    Main PID: 867 (firewalld)


    CGroup: /system.slice/firewalld.service


    └─867 /usr/bin/python -Es /usr/sbin/firewalld --nofork --nopid


    May 22 07:48:08 rhelserver.example.com systemd[1]: Started firewalld - dynami…


    防火墙中的一切都与一个或者多个区域相关联。


    配置之后,RHEL 7服务器正常会在公共区域,但是你也许会想将它放置在另一个网络配置防火墙访问。这时使用firewall-cmd --get-default-zone命令,该命令显示你的服务器在哪一个网络。如果你想查看配置特定网络的详细信息,你可以使用列表2中的firewall-cmd --zone=zonename --list-all命令。


    列表2.


    root@rhelserver ~]# firewall-cmd --get-default-zone


    public


    [root@rhelserver ~]# firewall-cmd --get-zones


    block dmz drop external home internal public trusted work


    [root@rhelserver ~]# firewall-cmd --zone=public --list-all


    public (default, active)


    interfaces: ens33


    sources:


    services: dhcpv6-client sander ssh


    ports:


    masquerade: no


    forward-ports:


    icmp-blocks:


    rich rules:


    改变当前区域并不难:使用firewall-cmd --set-default-zone=home命令,该命令可用于从公共网络到家庭网络制定一个默认网络。


    服务和其他构件


    在区域中有一些基本的构件块,其中服务是最重要的。防火墙使用管理员创建在/usr/lib/firewalld/services(系统默认服务) 和/etc/firewalld/services文件下的XML文件,配置的自身服务集。XML文件时通过列表3中的例子创建的。


    列表3.


    [root@rhelserver services]# cat ftp.xml


    <?xml version=“1.0” encoding=“utf-8”?>


    <service>


    <short>FTP</short>


    <description>FTP is a protocol used for remote file transfer. If you plan to make your FTP server publicly available, enable this option. You need the


    vsftpd package installed for this option to be useful.</description>


    <port protocol=“tcp” port=“21”/>


    <module name=“nf_conntrack_ftp”/>


    </service>


    每一个服务定义都需要一个简短的名字、描述和端口网络用于指定需要使用的协议、端口和模块名。


    列表4.以下是创建防火墙服务的例子


    [root@rhelserver services]# cat sander.xml


    <?xml version=“1.0” encoding=“utf-8”?>


    <service>


    <short>Sander</short>


    <description>Sander is a random service to show how service configuration works.</description>


    <port port=“666” protocol=“tcp”/>


    </service>


    一旦你有了正确的服务文件,使用以下代码复制它。firewall-cmd --list-services命令显示从你服务器上的所有可以找到的服务列表。如果要增加服务则输入firewall-cmd --add-service yourservice将服务放到默认网络上,或者是使用--zone=zonename选择特定网络。


    下面描述了它如何工作:


    1.使用firewall-cmd --zone=public --list-all命令,显示当前公共区域配置。


    [root@rhelserver ~]# firewall-cmd --zone=public --list-all


    public (default, active)


    interfaces: ens33


    sources:


    services: dhcpv6-client ssh


    ports:


    masquerade: no


    forward-ports:


    icmp-blocks:


    rich rules:


    2. 命令firewall-cmd --zone=public --add-service=ftp,在Linux防火墙的公共区域上添加FTP服务。


    3.重复步骤1检查FTP服务是否成功添加,你将看到服务列表。


    4.重启服务器,执行步骤1.你将看到FTP服务消失了,在防火墙中,没有永久的事物,除非你使用了permanent选项。


    5.将FTP服务添加到公共网络上,并设为永久设置,该步骤使用firewall-cmd  --permanent --zone=public --add-service=ftp命令。重启之后该设置生效。


    6.输入firewall-cmd –reload提交所有规则同时重载防火墙。使用permanent设置永久防火墙选项是非常重要的。


    打破规则


    配置防火墙配置服务是推荐的方式,它可以轻而易举地提供防火墙的全局概览。但是如果你想在/etc/firewalld/service文件下自己定义服务,在不使用该文件的情况下也可添加端口。


    使用firewall-cmd --permanent --zone=dmz --add-port=22/tcp命令为特定网络指定特定端口,然后使用firewall-cmd --zone=dmz --list-all确认端口已成功添加。这种方式是非兼容方式,使用服务使对不同的主机分配相似的规则变得简单。如果没有服务,文件就很难被分配,配置文件中的规则分配也变得困难。


    对于更多的控制,你不能够使用直接规则。原因如下:


    1.输入firewall-cmd --direct --add-rule ipv4 filter INPUT 0 -p tcp --dport 80 -j ACCEPT


    2.现在输入firewall-cdm --list-all显示你的默认网络的配置,端口80没有添加任何东西。


    [root@rhelserver ~]# firewall-cmd --list-all


    public (default, active)


    Interfaces: ens33


    sources:


    services: dhcpv6-client ftp ssh


    ports:


    masquerade: no


    forward-ports:


    icmp-blocks:


    rich rules:


    输入完以上命令后,HTTP端口并没有发生改变,这是因为直接规则写给了IP信息包过滤器接口,而不是防火墙


    3. 输入firewall-cmd --direct --get-all-rules,或者使用firewall-cmd --direct --get-all-rules显示直接规则。


    相比于直接规则,使用iptables(列表5)命令可以写到防火墙里。


    列表5. Linux防火墙规则实例


    firewall-cmd --permanent --zone=public --add-rich-rule=“rule family=”ipv4“ source address=”192.168.4.0/24“ service name=”tftp“ log prefix=”tftp“ level=”info“ limit value=”1/m“ accept”


    防火墙规则类似于IP信息包过滤防火墙,提供了大量灵活性。


    使用列表5中的一条命令就可以完成和提交许多任务。它指定了IP家族、源地址、服务名等。但是需要注意规则是怎样处理登陆的:定义一个特定的登陆前缀、登陆等级信息,以及每分钟传递信息的极限值。


    Linux管理员可以申请监测端口的过滤器,所以规则对于IP地址上的过滤器非常有用。(列表6)


    列表6. 规则申请Linux防火墙IP地址端口的过滤器


    firewall-cmd --permanent --zone=public --add-rich-rule=“rule family=”ipv4“


    source address=”192.168.0.4/24“ service name=”http“ accept”


    分析区域


    firewall-cmd命令是众多配置防火墙的方法之一。二者择一的,你可以直接编写网络配置文件。但是如果语法有误,将不会得到任何反馈。但这是一个简洁简单的配置文件,容易修改和在多个服务器上分配。


    列表7.你可以通过编写配置文件配置防火墙


    <?xml version=“1.0” encoding=“utf-8”?>


    <zone>


    <short>Public</short>


    <description>For use in public areas. You do not trust the other computers on networks to not harm your computer. Only selected incoming connections are accepted.</description>


    <service name=“dhcpv6-client”/>


    <service name=“ssh”/>


    <rule family=“ipv4”>


    <source address=“192.168.4.0/24”/>


    <service name=“tftp”/>


    <log prefix=“tftp” level=“info”>


    <limit value=“1/m”/>


    </log>


    <accept/>


    </rule>


    </zone>


    列表7中包含了添加到先前例子中的所有代码,可以直接写入区域配置文件,其中不包含直接规则,因为直接规则有自己的配置文件。


    [root@rhelserver firewalld]# cat direct.xml


    <?xml version=“1.0” encoding=“utf-8”?>


    <direct>


    <rule priority=“0” table=“filter” ipv=“ipv4” chain=“INPUT”>-p tcp --dport 80 -j ACCEPT</rule>


    </direct>


第三十八届CIO班招生
国际CIO认证培训
首席数据官(CDO)认证培训
责编:fanwei

免责声明:本网站(http://www.ciotimes.com/)内容主要来自原创、合作媒体供稿和第三方投稿,凡在本网站出现的信息,均仅供参考。本网站将尽力确保所提供信息的准确性及可靠性,但不保证有关资料的准确性及可靠性,读者在使用前请进一步核实,并对任何自主决定的行为负责。本网站对有关资料所引致的错误、不确或遗漏,概不负任何法律责任。
本网站刊载的所有内容(包括但不仅限文字、图片、LOGO、音频、视频、软件、程序等)版权归原作者所有。任何单位或个人认为本网站中的内容可能涉嫌侵犯其知识产权或存在不实内容时,请及时通知本站,予以删除。