防火墙简介
- iptables、ebtabless是Linux系统下网络数据包过滤的配置工具,这点几乎众所周知。但这两个工具在查找丢包过程中的应用,知道的人就不多了。
- 这种方式的优点在于,不需要修改版本,使用现有版本,输入相关命令即可。
通过防火墙查看统计
- 根据报文经过的路径以及报文的特征,在防火墙的特定位置增加规则,然后查看报文统计。
- 兹举例如下:
– 二层防火墙中,过滤特定源、目的MAC的IP报文:
ebtables -t filter -I FORWARD 1 -s SMAC -d DMAC -p 0x0800 //增加特定规则; ebtables -t filter -L --Lc //查看统计 ebtables -t filter -Z //将统计清0
– 三层防火墙中,过滤目的端口为80的TCP报文:
iptables -t filter -A INPUT -p tcp --dport 80 //增加特定规则; iptables -t filter -vnL //查看统计 iptables -t filter -Z //将统计清
– 删除规则
ebtables -D FORWARD 1 //删除filter表,FORWARD链的第一条规则 iptables -D INPUT 11 //11是行号,iptables -L INPUT --line-numbers 所打印出来的行号 ebtables -t filter -F //删除所有二层filter规则 iptables -t filter -F //删除所有三层filter规则
通过防火墙LOG模块查看日志
例1、 配置实例1
- 配置命令
kern.=debug /var/log/kern.debug.log#在/etc/rsyslog.conf添加日志文件 touch /var/log/kern.debug.log #建立debug.log文件 systemctl restart rsyslog #重启rsyslog服务 iptables -t raw -A OUTPUT -m limit --limit 5000/minute -j LOG --log-level 7 --log-prefix "raw out: " #添加规则,本地发出报文 iptables -t raw -A PREROUTING -p icmp -s 8.8.8.8/32 -m limit --limit 500/minute -j LOG --log-level 7 --log-prefix "mangle prerouting: " #添加规则:icmp报文
一个输出的例子:
Jun 13 19:58:21 dev-slave-110 kernel: raw prerouting: IN=eth0 OUT= MAC=52:54:15:5d:39:58:02:54:d4:90:3a:57:08:00 SRC=8.8.8.8 DST=10.39.0.110 LEN=84 TOS=0x00 PREC=0x00 TTL=32 ID=0 PROTO=ICMP TYPE=0 CODE=0 ID=13629 SEQ=15
例2、 配置实例2
- 配置说明
iptables -A INPUT -j LOG –log-prefix=”iptables-”
这样可以把匹配上iptables规则的数据包写到syslog中。
因为iptables是按照自上而下的顺序对数据包进行匹配,所以在最底下添加LOG记录,也就是记录了执行默认规则的数据包。
- 看一下syslog的输出:
Apr 10 17:45:54 S109 kernel: iptables-IN=eth1 OUT= MAC=ff:ff:ff:ff:ff:ff:52:54:00:02:12:a8:08:00 SRC=0.0.0.0 DST=255.255.255.255 LEN=330 TOS=0x00 PREC=0x00 TTL=128 ID=4225 PROTO=UDP SPT=68 DPT=67 LEN=310 Apr 10 17:46:03 S109 kernel: iptables-IN=eth1 OUT= MAC=ff:ff:ff:ff:ff:ff:52:54:00:02:12:a8:08:00 SRC=0.0.0.0 DST=255.255.255.255 LEN=330 TOS=0x00 PREC=0x00 TTL=128 ID=4226 PROTO=UDP SPT=68 DPT=67 LEN=310 Apr 10 17:46:09 S109 kernel: iptables-IN=eth1 OUT= MAC=78:2b:cb:42:a7:2f:3c:e5:a6:4d:59:00:08:00 SRC=184.173.144.34 DST=113.31.131.27 LEN=72 TOS=0x00 PREC=0x00 TTL=44 ID=29448 DF PROTO=UDP SPT=53 DPT=11437 LEN=52 Apr 10 17:46:16 S109 kernel: iptables-IN=eth1 OUT= MAC=78:2b:cb:42:a7:2f:3c:e5:a6:4d:59:00:08:00 SRC=184.173.144.34 DST=113.31.131.27 LEN=72 TOS=0x00 PREC=0x00 TTL=44 ID=30057 DF PROTO=UDP SPT=53 DPT=11826 LEN=52
通过防火墙TRACE模块跟踪报文
- TRACE功能说明
TRACE
- This target marks packets so that the kernel will log every rule which match the packets as those traverse the tables, chains, rules.
- A logging backend, such as nf_log_ipv4(6) or nfnetlink_log, must be loaded for this to be visible. The packets are logged with
- the string prefix: "TRACE: table‐name:chainname:type:rulenum " where type can be “rule” for plain rule, “return” for implicit rule at the end of a user defined chain and “policy” for the policy of the built in chains.
- It can only be used in the raw table.
- 用法举例:
modprobe ipt_LOG ip6t_LOG nfnetlink_log #加载对应模块 iptables -t raw -A PREROUTING -p icmp -s 8.8.8.8/32 -j TRACE #增加规则,源IP为8.8.8.8的icmp报文 dmesg #查看到匹配的报文的日志: cat /var/log/message #查看到匹配的报文的日志:
一个输出的跟踪信息如下:
Jun 16 17:44:05 dev-slave-110 kernel: TRACE: raw:PREROUTING:rule:2 IN=eth0 OUT= MAC=52:54:15:5d:39:58:02:54:d4:90:3a:57:08:00 SRC=8.8.8.8 DST=10.39.0.110 LEN=84 TOS=0x00 PREC=0x00 TTL=32 ID=0 PROTO=ICMP TYPE=0 CODE=0 ID=4064 SEQ=24