什么是防火墙?
防火墙类别
- 包过滤防火墙:看IP包、段(工作在网络层和传输层)
- 应用级别防火墙:看应用的协议比如http、ftp等(应用层 or 7层)
防火墙还分为软件和硬件防火墙
- 软件防火墙:iptables+netfilter+普通的机器+Linux
- 硬件防火墙:iptables+netfilter+普通的机器+Linux+专门的芯片、网卡、cpu等
WAF
Web应用防护系统(也称为:网站应用级入侵防御系统。英文:Web Application Firewall,简称: WAF)。利用国际上公认的一种说法:Web应用防火墙是通过执行一系列针对HTTP/HTTPS的安全策略来专门为Web应用提供保护的一款产品。
什么是iptables?
iptables是一个应用工具,给内核里的netfilter传递参数的工具
称之为Linux防火墙的用户态
netfilter 模块
netfilter对网络进出的数据进行管理
位于Linux内核中的包过滤防火墙功能体系
称之为Linux防火墙的内核态
内核的作用?
内核是操作系统最核心的软件,Linux系统中的防火墙功能是内核实现的
2.4版本以后的内核中,包过滤机制是netfilter
,管理工具是iptables
- 对cpu进行调度管理
- 对内存进行管理
- 对进程进行管理
- 对文件系统管理(磁盘)
- 网络、其他硬件进行管理
[root@nat-router net]> pwd
/lib/modules/3.10.0-1160.el7.x86_64/kernel/net
[root@nat-router net]> ls
6lowpan 8021q bluetooth can core dns_resolver ipv4 key llc mac802154 netlink packet rfkill sctp unix wireless
802 atm bridge ceph dccp ieee802154 ipv6 l2tp mac80211 netfilter openvswitch psample sched sunrpc vmw_vsock xfrm
[root@nat-router net]> cd netfilter/
[root@nat-router netfilter]> ls
ipset nf_conntrack_tftp.ko.xz nf_synproxy_core.ko.xz nft_redir.ko.xz xt_CONNSECMARK.ko.xz xt_IDLETIMER.ko.xz xt_osf.ko.xz xt_state.ko.xz
ipvs nf_log_common.ko.xz nf_tables_inet.ko.xz nft_reject_inet.ko.xz xt_conntrack.ko.xz xt_iprange.ko.xz xt_owner.ko.xz xt_statistic.ko.xz
nf_conntrack_amanda.ko.xz nf_nat_amanda.ko.xz nf_tables.ko.xz nft_reject.ko.xz xt_cpu.ko.xz xt_ipvs.ko.xz xt_physdev.ko.xz xt_string.ko.xz
nf_conntrack_broadcast.ko.xz nf_nat_ftp.ko.xz nft_compat.ko.xz xt_addrtype.ko.xz xt_CT.ko.xz xt_LED.ko.xz xt_pkttype.ko.xz xt_tcpmss.ko.xz
nf_conntrack_ftp.ko.xz nf_nat_irc.ko.xz nft_counter.ko.xz xt_AUDIT.ko.xz xt_dccp.ko.xz xt_length.ko.xz xt_policy.ko.xz xt_TCPMSS.ko.xz
nf_conntrack_h323.ko.xz nf_nat.ko.xz nft_ct.ko.xz xt_bpf.ko.xz xt_devgroup.ko.xz xt_limit.ko.xz xt_quota.ko.xz xt_TCPOPTSTRIP.ko.xz
nf_conntrack_irc.ko.xz nf_nat_redirect.ko.xz nft_exthdr.ko.xz xt_cgroup.ko.xz xt_dscp.ko.xz xt_LOG.ko.xz xt_rateest.ko.xz xt_TEE.ko.xz
nf_conntrack.ko.xz nf_nat_sip.ko.xz nft_hash.ko.xz xt_CHECKSUM.ko.xz xt_DSCP.ko.xz xt_mac.ko.xz xt_RATEEST.ko.xz xt_time.ko.xz
nf_conntrack_netbios_ns.ko.xz nf_nat_tftp.ko.xz nft_limit.ko.xz xt_CLASSIFY.ko.xz xt_ecn.ko.xz xt_mark.ko.xz xt_realm.ko.xz xt_TPROXY.ko.xz
nf_conntrack_netlink.ko.xz nfnetlink_acct.ko.xz nft_log.ko.xz xt_cluster.ko.xz xt_esp.ko.xz xt_multiport.ko.xz xt_recent.ko.xz xt_TRACE.ko.xz
nf_conntrack_pptp.ko.xz nfnetlink_cthelper.ko.xz nft_masq.ko.xz xt_comment.ko.xz xt_hashlimit.ko.xz xt_nat.ko.xz xt_REDIRECT.ko.xz xt_u32.ko.xz
nf_conntrack_proto_gre.ko.xz nfnetlink_cttimeout.ko.xz nft_meta.ko.xz xt_connbytes.ko.xz xt_helper.ko.xz xt_NETMAP.ko.xz xt_sctp.ko.xz
nf_conntrack_sane.ko.xz nfnetlink.ko.xz nft_nat.ko.xz xt_connlabel.ko.xz xt_hl.ko.xz xt_nfacct.ko.xz xt_SECMARK.ko.xz
nf_conntrack_sip.ko.xz nfnetlink_log.ko.xz nft_queue.ko.xz xt_connlimit.ko.xz xt_HL.ko.xz xt_NFLOG.ko.xz xt_set.ko.xz
nf_conntrack_snmp.ko.xz nfnetlink_queue.ko.xz nft_rbtree.ko.xz xt_connmark.ko.xz xt_HMARK.ko.xz xt_NFQUEUE.ko.xz xt_socket.ko.xz
firewall是什么?
firewall是在iptables的基础上进行了改良的传统工具,更加好用
iptables理解为一个函数
firewall 理解为一个类/库,里面有很多的函数
[root@nat-router ~]> systemctl start firewalld
[root@nat-router ~]> firewall-cmd --add-port=80/tcp
[root@nat-router ~]> firewall-cmd --list-all
publictarget: defaulticmp-block-inversion: nointerfaces:sources:services: dhcpv6-client sshports: 80/tcpprotocols:masquerade: noforward-ports:source-ports:icmp-blocks:rich rules:
iptables的规则表、链结构
默认的5种规则链
INPUT(处理入站数据包)
OUTPUT(处理出站数据包)
FORWARD(处理转发数据包)
POSTROUTING(在进行路由选择后处理数据包)
PREROUTING(在进行路由选择前处理数据包)
默认的4个规则表
raw(确定是否对该数据包进行状态跟踪)
mangle(为数据包设置标记)
nat(修改数据包中的源IP、目标IP地址或端口)
filter(确定是否放行该数据包-过滤
)
它们之间的关系:
表中包含链,链包含规则。
规则表之间的优先顺序
依次为:raw、mangle、nat、filter
如下可以查询到对应的关系:
[root@nat-router ~]> iptables -n -L -t mangle
Chain PREROUTING (policy ACCEPT)
target prot opt source destinationChain INPUT (policy ACCEPT)
target prot opt source destinationChain FORWARD (policy ACCEPT)
target prot opt source destinationChain OUTPUT (policy ACCEPT)
target prot opt source destinationChain POSTROUTING (policy ACCEPT)
target prot opt source destination[root@nat-router ~]> iptables -n -L -t filter
Chain INPUT (policy ACCEPT)
target prot opt source destinationChain FORWARD (policy ACCEPT)
target prot opt source destinationChain OUTPUT (policy ACCEPT)
target prot opt source destination[root@nat-router ~]> iptables -n -L -t raw
Chain PREROUTING (policy ACCEPT)
target prot opt source destinationChain OUTPUT (policy ACCEPT)
target prot opt source destination[root@nat-router ~]> iptables -n -L -t nat
Chain PREROUTING (policy ACCEPT)
target prot opt source destination
DNAT tcp -- 0.0.0.0/0 192.168.100.202 tcp dpt:80 to:192.168.200.201Chain INPUT (policy ACCEPT)
target prot opt source destinationChain OUTPUT (policy ACCEPT)
target prot opt source destinationChain POSTROUTING (policy ACCEPT)
target prot opt source destination
SNAT all -- 192.168.200.0/24 0.0.0.0/0 to:192.168.100.202
规则链间的匹配顺序
- 入站数据:PREROUTING、INPUT
- 出站数据:OUTPUT、POSTROUTING
- 转发数据:PREROUTING、FORWARD、POSTROUTING
规则链内的匹配顺序
按顺序一次进行检查,找到相匹配的规则即停止
若在改链内找不到相匹配的规则,则按该链的默认策略处理
规则(Rule)
每条规则定义了匹配条件和相应的处理动作。当数据包与规则匹配时,执行对应的动作
如ACCEPT(接受)、DROP(丢弃)等。
默认是ACCEPT
[root@nat-router ~]> iptables -n -L -t filter
Chain INPUT (policy ACCEPT) #ACCEPT
target prot opt source destinationChain FORWARD (policy ACCEPT)
target prot opt source destinationChain OUTPUT (policy ACCEPT)
target prot opt source destination