linuxea:firewall简单使用笔记


FirewallD使用服务和区域的概念,而不是iptables规则和链。使用它,您可以配置应该允许或禁止与系统之间的通信。FirewallD使用firewall-cmd实用程序来管理防火墙配置。

LinuxEA # firewall-cmd --list-all
FirewallD is not running

启动并启用

LinuxEA # systemctl start firewalld
LinuxEA # systemctl enable firewalld
Created symlink /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service → /usr/lib/systemd/system/firewalld.service.
Created symlink /etc/systemd/system/multi-user.target.wants/firewalld.service → /usr/lib/systemd/system/firewalld.service.

状态已经运行

LinuxEA # firewall-cmd --state
running

以下是FirewallD中包含的预定义区域:这些可以使用firewall-cmd --get-zones来获取

  1. drop –丢弃所有传入连接,不作任何答复,只允许传出连接。
  2. block –与区域删除相同,但所有传入连接均使用icmp-host- prohibitedicmp6-adm-prohibited消息阻止。
  3. public -它代表不可靠的公共区域。
  4. external -防火墙用作网关的外部网络。因为它是为NAT伪装而配置的,所以内部网络将保持私有但可访问。
  5. internal –仅接受选定的传入连接,用于内部网络。
  6. dmz –非军事区,内部网络可公开访问,访问受限,并且仅接受选定的传入连接。
  7. work –用于工作机。
  8. home -使用的家用机。
  9. trusted -接受所有网络连接。

I. 使用FirewallD配置防火墙

默认情况下,public域是启用防火墙服务后的默认区域。

LinuxEA # firewall-cmd --get-default-zone
public

使用--get-zones可以看到所有区域

LinuxEA # firewall-cmd --get-zones
block dmz drop external home internal public trusted work

--get-active-zones 查看网络接口使用了哪些区域

LinuxEA # firewall-cmd --get-active-zones
public
  interfaces: eth0

可以使用--set-default-zone=""和--get-default-zone来设置和查看

# firewall-cmd --set-default-zone=drop   比如更改为home域或者drop域
# firewall-cmd --get-default-zone

##对外开放服务

打开http和https

临时打开对外开放http和https

LinuxEA # firewall-cmd --zone=drop --add-service=http
success
LinuxEA # firewall-cmd --zone=drop --add-service=https
success

永久写入: --permanent

LinuxEA # firewall-cmd --zone=drop --permanent --add-service=http
success
LinuxEA # firewall-cmd --zone=drop --permanent --add-service=https
success

或者这样

LinuxEA # firewall-cmd --zone=drop --permanent --add-port 80/tcp
success
LinuxEA #  firewall-cmd --zone=drop --permanent --add-port 443/tcp
success
  • 如果有多个端口,比如开启:80到100端口
LinuxEA #  firewall-cmd --zone=drop --permanent --add-port 80-100/tcp

OR

LinuxEA #  firewall-cmd --zone=drop --permanent --add-port={80/tcp,443/tcp,8080/tcp,9000-9086/tcp}
success
  • 如果有多个服务
LinuxEA #  firewall-cmd --zone=drop --permanent --add-service={http,https,dns,jenkins}
success

如果要查看这些端口,则可以使用--info-service=NAME,这些信息预置在/usr/lib/firewalld/services目录下。

如下:

LinuxEA # firewall-cmd --info-service=jenkins
jenkins
  ports: 8080/tcp
  protocols: 
  source-ports: 
  modules: 
  destination: 
  includes: 
  helpers: 

而后重新加载

LinuxEA # firewall-cmd --reload
success

使用--list-all查看

LinuxEA # firewall-cmd --list-all
drop (active)
  target: DROP
  icmp-block-inversion: no
  interfaces: ens33
  sources: 
  services: dns http https jenkins
  ports: 80/tcp 443/tcp 8080/tcp 9000-9086/tcp
  protocols: 
  masquerade: no
  forward-ports: 
  source-ports: 
  icmp-blocks: 
  rich rules: 

删除规则

LinuxEA #  firewall-cmd --zone=drop --permanent --remove-service=http
success
LinuxEA # firewall-cmd --zone=drop --permanent --remove-service=https
success

或者

LinuxEA # firewall-cmd --zone=drop --permanent --remove-port 80/tcp
success
LinuxEA # firewall-cmd --zone=drop --permanent --remove-port 443/tcp
success
LinuxEA # firewall-cmd --reload
success
LinuxEA # firewall-cmd --list-all
drop (active)
  target: DROP
  icmp-block-inversion: no
  interfaces: ens33
  sources: 
  services: dns jenkins
  ports: 8080/tcp 9000-9086/tcp
  protocols: 
  masquerade: no
  forward-ports: 
  source-ports: 
  icmp-blocks: 
  rich rules: 

源ip地址管理

可以将区域绑定到网络接口和地址: 对于drop区域,放行172.16.100.0/24网段

LinuxEA # firewall-cmd --permanent --zone=drop --add-source=172.16.100.0/24
success
LinuxEA #  firewall-cmd --reload
success

移除--remove-source

LinuxEA # firewall-cmd --permanent --zone=drop --remove-source=172.16.100.0/24
success
LinuxEA #  firewall-cmd --reload
success
LinuxEA # firewall-cmd --list-all
drop (active)
  target: DROP
  icmp-block-inversion: no
  interfaces: ens33
  sources: 
  services: 
  ports: 
  protocols: 
  masquerade: no
  forward-ports: 
  source-ports: 
  icmp-blocks: 
  rich rules:

还有修改-change-source

可以对Mac地址进行管理

 firewall-cmd --permanent --zone=drop --add-source=80-FA-5B-25-3B-1A

II. 丰富的Rich Rules

由于rich规则所使用的语法很难记住,因此请记住man firewalld.richlanguage命令和最后的“示例”部分。格式如下:

firewall-cmd --add-rich-rule 'rule ...'
  • 允许172.16.100.107所有的连接请求。--add-rich-rule
firewall-cmd --permanent  --zone=drop --add-rich-rule="rule family="ipv4" source address="172.16.100.107"   accept" 

log 可以使用log选项记录日志到 /var/log/messages

firewall-cmd --permanent  --zone=drop --add-rich-rule="rule family="ipv4" source address="172.16.100.107"  log accept" 

使用--list-all

LinuxEA # firewall-cmd --list-all
drop (active)
  target: DROP
  icmp-block-inversion: no
  interfaces: ens33
  sources: 
  services: dns jenkins
  ports: 8080/tcp 9000-9086/tcp
  protocols: 
  masquerade: no
  forward-ports: 
  source-ports: 
  icmp-blocks: 
  rich rules: 
    rule family="ipv4" source address="172.16.100.107" accept
    rule family="ipv4" source address="172.16.100.107" log accept

或者这样添加ip段 172.16.100.0/24

LinuxEA # firewall-cmd --permanent --zone=drop   --add-rich-rule='rule family="ipv4" source address="172.16.100.0/24" port port="22-23" protocol="tcp" accept' 
success
LinuxEA # firewall-cmd --reload
success
  • 删除允许172.16.100.107所有的连接请求。 --remove-rich-rule
firewall-cmd --permanent  --zone=drop --remove-rich-rule="rule family="ipv4" source address="172.16.100.107"   accept" 
  • 允许ip和拒绝ip
# 根据ip接受所有端口
firewall-cmd --permanent  --zone=drop --add-rich-rule="rule family="ipv4" source address="172.16.100.107"   accept" 
# 根据ip拒绝所有端口
firewall-cmd --permanent  --zone=drop --add-rich-rule="rule family="ipv4" source address="172.16.100.107"   drop" 
  • 禁用ping
firewall-cmd --permanent --zone=drop --add-rich-rule='rule protocol value=icmp drop'
  • 删除zone
删除/etc/firewalld/zones下的zone命名的xml文件而后重新加载即可

III. Direct rules

firewall-cmd工具中的--direct选项可以在运行时添加和删除链。直接接口模式可以让服务或者程序在运行时候添加特定的防火墙。作用于文件 /etc/firewalld/direct.xml

将规则添加到INPUT链,放行8090端口

LinuxEA # firewall-cmd --direct --permanent --zone=drop --add-rule ipv4 filter INPUT 0 -p tcp --dport 8090 -j ACCEPT
success

查看iptables

LinuxEA # iptables -L -n
Chain INPUT (policy ACCEPT)
target     prot opt source               destination         
ACCEPT     udp  --  0.0.0.0/0            0.0.0.0/0            udp dpt:53
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0            tcp dpt:8090

用firewall查看

LinuxEA # firewall-cmd --direct --get-all-rules
ipv4 filter INPUT 0 -p tcp --dport 8090 -j ACCEPT

请注意,此命令(该--get-rules选项)仅列出以前使用该--add-rule选项添加的规则。它没有列出通过其他方式添加的现有iptables规则。

删除

LinuxEA # firewall-cmd --direct --permanent --zone=drop --remove-rule ipv4 filter INPUT 0 -p tcp --dport 8090 -j ACCEPT

如果你在初始化系统这条命令可以放行ssh

firewall-offline-cmd --direct --add-rule ipv4 filter INPUT 0 -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT

IV. ip set管理

firewall有ipset的功能。 ipset是一组IP地址或网络。不同的区域类别,属于hash:ip或hash:net。

###配置黑名单ip

创建ip组:blacklist1

LinuxEA # firewall-cmd --permanent --zone=drop --new-ipset=blacklist1 --type=hash:ip
success
LinuxEA # firewall-cmd --reload
success

添加ip成员

  • 注意:添加--option=family=inet6以创建IPv6 ipset。
LinuxEA # firewall-cmd --permanent  --ipset=blacklist1 --add-entry=172.16.100.101
success
LinuxEA # firewall-cmd --permanent  --ipset=blacklist1 --add-entry=172.16.100.3
success

添加拒绝规则

LinuxEA # firewall-cmd --permanent  --add-rich-rule='rule source ipset=blacklist1 drop'
success

获取blacklist1成员

LinuxEA # firewall-cmd --info-ipset=blacklist1
blacklist1
  type: hash:ip
  options: 
  entries: 172.16.100.101 172.16.100.3

删除组内ip成员

LinuxEA #  firewall-cmd --ipset=blacklist1 --remove-entry=172.16.100.101
success
LinuxEA #  firewall-cmd --ipset=blacklist1 --get-entries
172.16.100.3

配置黑名单ip段

创建新的黑名单netblacklist,类型hash:net

LinuxEA # firewall-cmd --permanent --new-ipset=netblacklist --type=hash:net --option=family=inet --option=hashsize=4096 --option=maxelem=200000
success
LinuxEA # firewall-cmd --reload
success
LinuxEA # firewall-cmd --info-ipset=netblacklist
netblacklist
  type: hash:net
  options: family=inet hashsize=4096 maxelem=200000
  entries: 

添加两个网段

LinuxEA # firewall-cmd --permanent --ipset=netblacklist --add-entry=172.16.100.0/24
success
LinuxEA # firewall-cmd --permanent --ipset=netblacklist --add-entry=192.168.2.0/24
success
LinuxEA # firewall-cmd --info-ipset=netblacklist
netblacklist
  type: hash:net
  options: family=inet hashsize=4096 maxelem=200000
  entries: 172.16.100.0/24 192.168.2.0/24

或者添加一个ip文件列表

LinuxEA # cat > iplist.txt <<EOL
> 10.10.1.0/23
> 192.168.0.3
> 172.16.100.0/24
> 172.16.90.0/24
> EOL

--add-entries-from-file添加,改成--remove-entries-from-file就删除

LinuxEA # firewall-cmd --permanent --ipset=netblacklist --add-entries-from-file=iplist.txt
success
firewall-cmd --permanent --ipset=netblacklist --remove-entries-from-file=iplist.txt

单个添加和单个删除

LinuxEA # firewall-cmd --permanent --ipset=netblacklist --add-entry=172.16.100.118
success
firewall-cmd --permanent --ipset=netblacklist --remove-entry=172.16.100.118
LinuxEA #  firewall-cmd --reload
success
LinuxEA #  firewall-cmd --info-ipset=netblacklist
netblacklist
  type: hash:net
  options: family=inet hashsize=4096 maxelem=200000
  entries: 172.16.100.0/24 192.168.2.0/24 10.10.1.0/23 192.168.0.3 172.16.90.0/24

没有丢弃参数,没有iptables命令,也没有与IP数据包相关的内容。这是因为使用的是firewalld的源功能,当一个IP地址与源(源接口,源IP甚至源MAC地址)匹配时,上述规则会将IP地址重定向到特定区域,在这种情况下为“阻止”。

作用到某个区域

firewall-cmd --permanent --zone=drop --add-source=ipset:netblacklist

从区域内删除

firewall-cmd --permanent --zone=drop --remove-source=ipset:netblacklist

管理命令

查看ipset

LinuxEA # firewall-cmd --permanent --get-ipsets
blacklist1 netblacklist

查看ipset表

LinuxEA # firewall-cmd --permanent --info-ipset=netblacklist
netblacklist
  type: hash:net
  options: family=inet hashsize=4096 maxelem=200000
  entries: 172.16.100.0/24 192.168.2.0/24 10.10.1.0/23 192.168.0.3 172.16.90.0/24
LinuxEA # firewall-cmd --permanent --info-ipset=blacklist1
blacklist1
  type: hash:ip
  options: 
  entries: 

V. 端口转发

sysctl -w net.ipv4.ip_forward=1

如果防火墙是您的网络网关,并且不希望所有人都知道您的内部地址,则可以设置两个区域,一个称为内部区域,另一个称为外部区域,并在外部区域上配置伪装。 这样,所有数据包都将获取您的防火墙IP地址作为源地址。

端口转发是一种将特定端口的入站网络流量转发到另一个内部地址或备用端口的方法

端口转发需要masquerading ,因此创建

LinuxEA # firewall-cmd --zone=external --add-masquerade
success

如果希望暂时将所有要发送给端口22的数据包转发到端口tcp 3753

LinuxEA # firewall-cmd --zone=external --add-forward-port=port=22:proto=tcp:toport=3753
success

把80端口转发到后端的172.25.100.2 8080

firewall-cmd --permanent  --add-forward port=80:proto=tcp:toaddr=172.25.100.2:toport=8080

要删除端口转发,使用-remove-forward-port选项

firewall-cmd --zone=external --remove-forward-port=port=22:proto=tcp:toport=3753

如果要定义目标IP地址:

LinuxEA # firewall-cmd --permanent --zone=external --add-forward-port=port=22:proto=tcp:toport=3753:toaddr=172.16.100.101
success
LinuxEA # firewall-cmd --reload
success

--permanent永久生效

示例:

假如现在希望通过SSH从public (10.10.1.0/24)访问dmz网络(10.8.8.0/24)上的服务器。为此,我们需要放置一些端口转发规则。

以下规则配置端口转发,以便将与10.10.1.79:2271的连接转发到10.8.8.71:22,并进行SSH日志记录

# firewall-cmd --permanent --zone=public --add-forward-port='port=2271:proto=tcp:toport=22:toaddr=10.8.8.71'
# firewall-cmd --permanent --zone=public --add-rich-rule='rule service name=ssh log prefix="SSH_" level="debug" limit value=1/m reject'
# firewall-cmd --reload

VI. 普通配置示例

# 创建linuxea区域
firewall-cmd --permanent --new-zone=linuxea
firewall-cmd --reload
  • 删除zone只需要删除/etc/firewalld/zones下的zone命名的xml文件而后重新加载即可
# 修改默认域为linuxea
firewall-cmd --set-default-zone=linuxea
# 放行https,http
firewall-cmd --permanent --zone=linuxea --add-service={http,https}
# 运行172.16.100.101登录ssh
firewall-cmd --permanent --zone=linuxea --add-rich-rule='rule family="ipv4" source address="172.16.100.101" port port="22" protocol="tcp" accept'
# 允许10.100.10.0/24网段访问8080端口
firewall-cmd --permanent --zone=linuxea --add-rich-rule='rule family="ipv4" source address="10.100.10.0/24" port port="8080" protocol="tcp" accept'
# 拒绝10.100.100.4访问80端口
firewall-cmd --permanent --zone=linuxea --add-rich-rule='rule family="ipv4" source address="10.100.100.4" port port="80" protocol="tcp" drop'
# 重载
LinuxEA # firewall-cmd --reload
success
# 查看规则
LinuxEA # firewall-cmd --list-all
linuxea (active)
  target: default
  icmp-block-inversion: no
  interfaces: ens33
  sources: 
  services: http https
  ports: 
  protocols: 
  masquerade: no
  forward-ports: 
  source-ports: 
  icmp-blocks: 
  rich rules: 
    rule family="ipv4" source address="172.16.100.101" port port="22" protocol="tcp" accept
    rule family="ipv4" source address="10.100.100.4" port port="80" protocol="tcp" drop
    rule family="ipv4" source address="10.100.10.0/24" port port="8080" protocol="tcp" accept

VII. 紧急模式

firewall-cmd --panic-on  执行端口所有连接
firewall-cmd --panic-off    关闭
firewall-cmd --query-panic  查询
0 分享

您可以选择一种方式赞助本站

支付宝扫码赞助

支付宝扫码赞助

日期: 2020-11-25分类: Sys Basics

标签: linux基础, 基础命令

发表评论