Windows防火墙
环境:
OS 名称: Microsoft Windows 10 家庭中文版
OS 版本: 10.0.19042 暂缺 Build 19042
OS 制造商: Microsoft Corporation
OS 配置: 独立工作站
OS 构建类型: Multiprocessor Free
注册的所有人: 暂缺
注册的组织: 暂缺
系统制造商: Timi
系统型号: TM1701
系统类型: x64-based PC
windows的防火墙比较简单,如下图所示:
如果规则配置乱了,可以使用重置命令复原,命令如下:
netsh advfirewall reset
问题
- 目前没有试过windows防火墙的执行策略是怎样的,会不会存在冲突的策略。如果冲突了究竟是按照啥原则来执行。
- 在实际项目过程中遇到过配置了无法生效的情况,因为客观原因无法找到问题所在。当时是配置了阻断某IP段访问服务器的3389端口,但还是可以访问。
Linux防火墙
iptables
- iptables严格按照顺序执行的。
# 清空规则
iptables -F
# 这个命令的好处是可以看到规则的编号,删除规则的时候有用。
iptables -L -n --line-numbers -v
# 对外开放ping包的返回。也就是别人可以ping通你的电脑
iptables -I INPUT -p icmp -j ACCEPT
# 允许本地电脑和本地电脑所有的连接。
iptables -I INPUT -s 127.0.0.1 -d 127.0.0.1 -j ACCEPT
# 这条命令极其重要,允许本地电脑访问出去的流量可以返回不阻断。
# 没有这条命令的话,例如:我访问了1.1.1.1的22端口,那么是不会建立成功。因为当1.1.1.1:22返回数据给我的时候,iptables会阻断的。
iptables -I INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
# ip地址白名单,也就是说只有1.1.1.1来的数据包,都不阻断。
iptables -I INPUT -s 1.1.1.1 -j ACCEPT
# ip地址白名单,并开放指定端口。对19.16.19.0/24整个网段开放443端口
iptables -I INPUT -s 19.16.19.0/24 -p tcp --dport 443 -j ACCEPT
# 无条件允许数据发出去。
iptables -A OUTPUT -j ACCEPT
# 把入站连接改成默认阻断(不回包的阻断)。
iptables -P INPUT DROP
# 把入站连接改成默认允许。
iptables -P INPUT ACCEPT
# 删除入站规则的第一条规则。
iptables -D INPUT 1
# 删除出站规则的第一条规则。
iptables -D OUTPUT 1
# 刷新策略,就是应用生效的意思,但并不永久保存。
iptables-save
简单说明
root@hostname:~# iptables -L -n --line-numbers -v
Chain INPUT (policy DROP 12 packets, 936 bytes) #入站连接默认动作是阻断。
num pkts bytes target prot opt in out source destination
1 0 0 ACCEPT all -- * * 10.129.8.211 0.0.0.0/0
2 0 0 ACCEPT all -- * * 19.15.15.56 0.0.0.0/0
3 6822 2845K ACCEPT all -- * * 10.130.7.96 0.0.0.0/0
4 0 0 ACCEPT all -- * * 19.15.75.246 0.0.0.0/0
5 0 0 ACCEPT all -- * * 19.15.60.47 0.0.0.0/0
6 0 0 ACCEPT all -- * * 192.168.190.64 0.0.0.0/0
7 0 0 ACCEPT all -- * * 192.168.156.43 0.0.0.0/0
8 0 0 ACCEPT all -- * * 19.16.5.7 0.0.0.0/0
9 0 0 ACCEPT all -- * * 19.16.5.6 0.0.0.0/0
10 508 33404 ACCEPT all -- * * 19.16.5.5 0.0.0.0/0
11 0 0 ACCEPT all -- * * 10.129.110.7 0.0.0.0/0
12 0 0 ACCEPT all -- * * 10.129.110.6 0.0.0.0/0
13 0 0 ACCEPT all -- * * 10.129.110.5 0.0.0.0/0
14 32519 8881K ACCEPT all -- * * 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED
15 331 82708 ACCEPT all -- * * 127.0.0.1 127.0.0.1
16 0 0 ACCEPT icmp -- * * 0.0.0.0/0 0.0.0.0/0
Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
num pkts bytes target prot opt in out source destination
Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes) # 出站默认动作是允许。
num pkts bytes target prot opt in out source destination
1 41114 14M ACCEPT all -- * * 0.0.0.0/0 0.0.0.0/0
永久保存防火墙策略
方法一
配置永久保存
配置启动后自动加载最新的防火墙规则
(一)新建文件:
vi /etc/network/if-pre-up.d/iptables
(二)输入文件内容如下:
#!/bin/sh
/sbin/iptables-restore < /etc/iptables.up.rules
赋予执行权限
(三)赋予权限
chmod +x /etc/network/if-pre-up.d/iptables
保存文件自动刷新
(四)执行保存
root@MM:/home/nnb# iptables-save > /etc/iptables.up.rules
或者使用重定向输出方法
可以使用 iptables-save 命令,再配合重定向,将规则重定向到 /etc/sysconfig/iptables 文件中即可。
iptables-save > /etc/sysconfig/iptables
方法二
当我们对规则进行了修改以后,如果想要修改永久生效,必须使用下面命令保存规则:
service iptables save
当然,如果你误操作了规则,但是并没有保存,那么使用 service iptables restart 命令重启 iptables 以后,规则会再次回到上次保存 /etc/sysconfig/iptables 文件时的模样。
centos7 中,已经不再使用 init 风格的脚本启动服务,而是使用 unit 文件,所以,在 centos7 中已经不能再使用类似 service iptables start 这样的命令了,所以 service iptables save 也无法执行,同时,在 centos7中,使用 firewall 替代了原来的 iptables service,不过不用担心,我们只要通过 yum 源安装 iptables与iptables-services 即可(iptables 一般会被默认安装,但是iptables-services 在 centos7 中一般不会被默认安装),在centos7 中安装完 iptables-services 后,即可像 centos6 中一样,通过 service iptables save 命令保存规则了,规则同样保存在 /etc/sysconfig/iptables 文件中。此处给出 centos7 中配置 iptables-service 的步骤:
#配置好yum源以后安装iptables-service
yum install -y iptables-services
#停止firewalld
systemctl stop firewalld
#禁止firewalld自动启动
systemctl disable firewalld
#启动iptables
systemctl start iptables
#将iptables设置为开机自动启动,以后即可通过iptables-service控制iptables服务
systemctl enable iptables
上述配置过程只需一次,以后即可在 centos7 中使用 service iptables save 命令保存 iptables 规则了。
加载规则
我们也可以将 /etc/sysconfig/iptables 中的规则重新载入为当前的iptables 规则,但是注意,未保存入 /etc/sysconfig/iptables 文件中的修改将会丢失或者被覆盖。
使用 iptables-restore 命令可以从指定文件中重载规则,示例如下
iptables-restore < /etc/sysconfig/iptables
日志记录
LOG 动作默认会将报文的相关信息记录在/var/log/message文件中,当然,我们也可以将相关信息记录在指定的文件中,以防止 iptables 的相关信息与其他日志信息相混淆,修改 /etc/rsyslog.conf 文件(或者 /etc/syslog.conf),在 rsyslog 配置文件中添加如下配置即可:
kern.warning /var/log/iptables.log
完成上述配置后,重启rsyslog服务(或者syslogd):
service rsyslog restart
LOG 动作也有自己的选项,常用选项如下:
- –log-level 选项可以指定记录日志的日志级别,可用级别有 emerg,alert,crit,error,warning,notice,info,debug。
- –log-prefix 选项可以给记录到的相关信息添加”标签”之类的信息,以便区分各种记录到的报文信息,方便在分析时进行过滤。–log-prefix 对应的值不能超过 29 个字符。
比如,我想要将主动连接22号端口的报文的相关信息都记录到日志中,并且把这类记录命名为”want-in-from-port-22″,则可以使用如下命令:
iptables -I INPUT -p tcp --dport 22 -m state --state NEW -j LOG --log-prefix "want-in-from-port-22"
完成上述配置后,我在IP地址为 192.168.1.98 的客户端机上,尝试使用 ssh 工具连接上例中的主机,然后查看对应的日志文件(已经将日志文件设置为 /var/log/iptables.log):
如上图所示,ssh 连接操作的报文的相关信息已经被记录到了 iptables.log 日志文件中,而且这条日志中包含”标签”:want-in-from-port-22,如果有很多日志记录,我们就能通过这个”标签”进行筛选了,这样方便我们查看日志,同时,从上述记录中还能够得知报文的源IP与目标IP,源端口与目标端口等信息,从上述日志我们能够看出,192.168.1.98 这个 IP 想要在 14点11分 连接到 192.168.1.139(当前主机的 IP)的22号端口,报文由eth4网卡进入,eth4 网卡的 MAC 地址为 00:0c:29:b7:f4:d1,客户端网卡的 MAC 地址为 f4:8e:38:82:b1:29。
参考链接
https://www.bookstack.cn/read/linux-command-1.6.0/command-iptables.md