Linux防火墙攻略(iptables与firewalld)

AKHYui2020-06-03 07:44:00Linux
# 防火墙
  • Linux使用的防火墙系统包括两部分: netfilter和iptables,netfilter/iptables框架可以实现数据包过滤、地址转换和数据包管理功能。

  • 默认的iptables规则表有:fileter表(过滤规则表)、nat表(地址转换规则表)、mangle(修改数据标记位规则表)、raw(跟踪数据表规则表)。每个规则表中都有多个数据链:INPUT(入站数据过滤)、OUTPUT(出站数据过滤)、FORWARD(转发数据过滤)、PREROUTING(路由前过滤)、POSTROUTING(路由后过滤)

  • 图中防火墙会对数据包进行判断决策:如果是外部主机发送数据包给防火墙主机,则会经过PREROUTING和INPUT链;如果是本机发送数据包给外部主机,则经过OUTPUT和POSTROUTING链;如果防火墙为路由,则负责转发数据,经过PREROUTING、FORWARD和POSTOUTING链。

Linux防火墙过滤框架

iptables

语法格式

  • 用法格式:iptables [-t 表名] {-A|-D|-I|-F|-L|-Z|-P} 链名 rule-specification

  • 选项

|:--😐:--😐

|-t|指定需要维护的防火墙规则表|

|-A|追加防火墙规则|

|-D|删除防火墙规则|

|-I|插入防火墙规则|

|-F|清空防火墙规则|

|-L|列出防火墙规则|

|-R|替换防火墙规则|

|-Z|清空防火墙数据表统计信息|

|-P|设置链默认规则|

  • 匹配参数(均可使用!取反)

|:--😐:--😐

|-p|匹配协议|

|-s|匹配源地址|

|-d|匹配目标地址|

|-i|匹配入站网卡接口|

|-o|匹配出站网卡接口|

|--sport|匹配源端口|

|--dport|匹配目标端口|

|--src-range|匹配源地址范围|

|--dst-range|匹配目标地址范围|

|--limit|匹配数据表速率|

|--mac-source|匹配源MAC地址|

|--sports|匹配源端口|

|--dports|匹配目标端口|

|--state|匹配状态|

|--string|匹配应用层字串|

  • 触发动作

|:--😐:--😐

|ACCEPT|允许数据包通过|

|DROP|丢弃数据包|

|REJECT|拒绝数据包通过|

|LOG|将数据包记录syslog日志|

|DNAT|目标地址转换|

|ANAT|源地址转换|

|MASQUERADE|地址欺骗|

|REDIRECT|重定向|

  • 命令使用方法

# 查看filter表中所有规则

[root@Hyui-VM ~]# iptables -nL

# 查看nat表中所有规则

[root@Hyui-VM ~]# iptables -t nat -nL

# 清空filter表中所有规则

[root@Hyui-VM ~]# iptables -F

# 在filter表中添加一条入站规则,丢弃223.5.5.5主机发送给防火墙本机的所有数据包

[root@Hyui-VM ~]# iptables -A INPUT -s 223.5.5.5 -j DROP

# 在filter表中添加一条入站规则,拒绝223.5.5.5对主机的ping行为

[root@Hyui-VM ~]# iptables -I INPUT -s 223.5.5.5 -p icmp -j REJECT

# 查看所有规则并显示编号

[root@Hyui-VM ~]# iptables -nL --line-number

# 删除表中的INPUT链第一个规则

[root@Hyui-VM ~]# iptables -D INPUT 1

# 替换表中第二条规则,拒绝192.168.31.254之外的任何主机连接本机

[root@Hyui-VM ~]# iptables -R INPUT 2 ! -s 192.168.31.254 -j REJECT

# 修改filter表中INPUT链的默认规则为接收数据包

[root@Hyui-VM ~]# iptables -t filter -P INPUT ACCEPT

# 放行SSH和DNS要用到的端口

[root@Hyui-VM ~]# iptables -A INPUT -p tcp --dport 22 -j ACCEPT

[root@Hyui-VM ~]# iptables -A INPUT -p udp --dport 53 -j ACCEPT

防火墙的备份和还原


# 将备份信息重定向至/etc/sysconfig/iptables

[root@Hyui-VM ~]# iptables-save > /etc/sysconfig/iptables

# 将备份信息重定向至./firewall.bak

[root@Hyui-VM ~]# iptables-save > firewall.bak

# 还原备份信息

[root@Hyui-VM ~]# iptables-restore < firewall.bak

firewalld

firewall-cmd命令

  • firewall-cmd通过zones管理防火墙规则,一般public为默认zone

  • 用法:firewall-cmd [OPTIONS...]

使用示例

  • 显示所有zone及对应规则信息

[root@Hyui-VM ~]# firewall-cmd --list-all-zone

  • 在public的zone中添加允许访问ftp的规则

[root@Hyui-VM ~]# firewall-cmd --add-service=ftp --zone=public

success

  • 在public的zone中移除允许访问ftp的规则

[root@Hyui-VM ~]# firewall-cmd --remove-service=ftp --zone=public

success

  • 在public的zone中添加允许访问8080tcp端口的规则

[root@Hyui-VM ~]# firewall-cmd --add-port=8080/tcp --zone=public

success

  • 在public的zone中移除允许访问8080tcp端口的规则

[root@Hyui-VM ~]# firewall-cmd --remove-port=8080/tcp --zone=public

success

  • 将eth0网卡与public绑定,从该接口进入的流量全部与public匹配

[root@Hyui-VM ~]# firewall-cmd --add-interface=eth0 --zone=public

success

  • 将eth0网卡与public解除绑定

[root@Hyui-VM ~]# firewall-cmd --remove-interface=eth0 --zone=trusted

  • 查看默认zone规则列表和public规则列表

[root@Hyui-VM ~]# firewall-cmd --list-all

public

  target: default

  icmp-block-inversion: no

  interfaces: 

  sources: 

  services: dhcpv6-client ssh

  ports: 10000/udp 10000/tcp

  protocols: 

  masquerade: no

  forward-ports: 

  source-ports: 

  icmp-blocks: 

  rich rules: 

	

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

public

  target: default

  icmp-block-inversion: no

  interfaces: 

  sources: 

  services: dhcpv6-client ssh

  ports: 10000/udp 10000/tcp

  protocols: 

  masquerade: no

  forward-ports: 

  source-ports: 

  icmp-blocks: 

  rich rules:

  • 在public的zone中添加一条永久规则(永久允许访问8080端口),该规则在重启后依然有效

[root@Hyui-VM ~]# firewall-cmd --add-port=8080/tcp --zone=public --permanent

success

  • 重载防火墙

[root@Hyui-VM ~]# firewall-cmd --reload

success

Last Updated 9/17/2025, 7:13:55 AM