这篇文章上次修改于 1468 天前,可能其部分内容已经发生变化,如有疑问可询问作者。
防火墙
- Linux使用的防火墙系统包括两部分: netfilter和iptables,netfilter/iptables框架可以实现数据包过滤、地址转换和数据包管理功能。
- 默认的iptables规则表有:fileter表(过滤规则表)、nat表(地址转换规则表)、mangle(修改数据标记位规则表)、raw(跟踪数据表规则表)。每个规则表中都有多个数据链:INPUT(入站数据过滤)、OUTPUT(出站数据过滤)、FORWARD(转发数据过滤)、PREROUTING(路由前过滤)、POSTROUTING(路由后过滤)。
图中防火墙会对数据包进行判断决策:如果是外部主机发送数据包给防火墙主机,则会经过PREROUTING和INPUT链;如果是本机发送数据包给外部主机,则经过OUTPUT和POSTROUTING链;如果防火墙为路由,则负责转发数据,经过PREROUTING、FORWARD和POSTOUTING链。
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
没有评论