几个简单的实例教你使用firewalld工具轻松管理iptables防火墙

iptables是linux内核自带的防火墙 , 功能强大 , 但是因为其配置比较复杂 , 往往会让新手望而生畏 。想当年 , 我在学习iptbles的时候就花费了不少精力 , 全凭自己零碎地摸索积累 , 着实走了不少弯路 。接下来 , 我将给大家分享一下如何使用firewalld工具管理iptables 。
1、使用firewalld的好处首先 , firewall-cmd是对iptables操作命令的封装 , 使用简单 , 新手比较容易接受 。
其次 , firewalld可靠性高 , 相对于直接使用iptables命令进行配置 , 它几乎不会出错 , 特别适合在生产环境中使用 。
2、查看firewalld状态大多数Linux系统都默认安装了firewalld包 , 提供的操作命令为firewall-cmd , 我们可以使用--state参数查看firewalld的状态:
root@kali2020:~# firewall-cmd --staterunningroot@kali2020:~# 有时候 , 虽然firewalld已经安装 , 但不一定开启 , 我们可以使用systemctl命令把它开起来:
root@kali2020:~# systemctl enable firewalldSynchronizing state of firewalld.service with SysV service script with /lib/systemd/systemd-sysv-install.Executing: /lib/systemd/systemd-sysv-install enable firewalldroot@kali2020:~# systemctl start firewalldroot@kali2020:~# 3、查看当前配置我们可以使用--list-all参数查看当前zone的配置 , 也可以使用--list-services、--list-ports等参数查看指定的配置:
root@kali2020:~# firewall-cmd --list-allpublic (active)  target: default  icmp-block-inversion: no  interfaces: eth0  sources:   services: dhcpv6-client ipsec ssh  ports:  protocols:   masquerade: no  forward-ports:   source-ports:   icmp-blocks:   rich rules: root@kali2020:~# 默认所有网卡都属于默认public zone , 可以使用--zone参数指定其它zone , 关于zone的概念新手可以先忽略 。我们看到 , 防火墙默认只允许dhcpv6-client、ipsec、ssh服务 , 实际上相当于允许服务响应的端口 , 而服务跟端口之间的关系在/etc/service文件中定义 。
4、开放指定端口或服务对于一些默认允许的服务 , 我们可以使用--remove-service参数进行删除 , 加上--permanent参数可指定当前操作为永久生效 , 否则在firewalld重启后配置又恢复了:
【几个简单的实例教你使用firewalld工具轻松管理iptables防火墙】root@kali2020:~# firewall-cmd --list-serviceshttp sshroot@kali2020:~# firewall-cmd --remove-service=ipsec --permanentsuccessroot@kali2020:~# firewall-cmd --remove-service=dhcpv6-client --permanentsuccessroot@kali2020:~# firewall-cmd --reloadsuccessroot@kali2020:~# 我们可以使用--add-service或--add-port方式允许相应的端口 , 配置修改后不会立即生效 , 需要使用--reload参数重新加载配置文件 , 下面的例子分别添加了http服务及tcp443端口:
root@kali2020:~# grep http /etc/services # Updated from https://www.iana.org/assignments/service-names-port-numbers/service-names-port-numbers.xhtml .http            80/tcp          www             # WorldWideWeb HTTPhttps           443/tcp                         # http protocol over TLS/SSLhttp-alt        8080/tcp        webcache        # WWW caching serviceroot@kali2020:~# root@kali2020:~# iptables -L -nv | grep :80tcp dpt:80 ctstate NEW,UNTRACKEDroot@kali2020:~# 5、添加rich rule--add-service或--add-port参数只是简单地开放某个端口 , 无法对源/目的IP、端口等进行限制 。要基于更多条件进行限制 , 我们需要添加rich rule:
root@kali2020:~# firewall-cmd --add-rich-rule='rule family="ipv4" source address="192.168.30.88/32" port port=21 protocol="tcp"  accept' --permanentsuccessroot@kali2020:~# firewall-cmd --add-rich-rule='rule family="ipv4" source address="192.168.30.8/32" service name="http" reject' --permanentsuccessroot@kali2020:~# iptables -L -nv | grep 192.168.30.8    0     0 REJECT     tcp  --  *      *       192.168.30.8         0.0.0.0/0            tcp dpt:80 ctstate NEW,UNTRACKED reject-with icmp-port-unreachable    0     0 ACCEPT     tcp  --  *      *       192.168.30.88        0.0.0.0/0            tcp dpt:21 ctstate NEW,UNTRACKEDroot@kali2020:~# root@kali2020:~# firewall-cmd --reloadsuccessroot@kali2020:~# firewall-cmd --list-rich-rulesrule family="ipv4" source address="192.168.30.8/32" service name="http" rejectrule family="ipv4" source address="192.168.30.88/32" port port="21" protocol="tcp" acceptroot@kali2020:~# 


推荐阅读