firewalld防火墙
一、防火墙安全概述
在CentOS7系统中集成了多款防火墙管理工具,默认启用的是firewalld(动态防火墙管理器)防火墙管理工具,Firewalld支持CLI(命令行)以及GUI(图形)的两种管理方式。对于接触Linux较早的人员对Iptables比较熟悉,但由于Iptables的规则比较的麻烦,并且对网络有一定要求,所以学习成本较高。但firewalld的学习对网络并没有那么高的要求,相对iptables来说要简单不少,所以建议刚接触CentOS7系统的人员直接学习Firewalld。Copy to clipboardErrorCopied
需要注意的是:如果开启防火墙工具,并且没有配置任何允许的规则,那么从外部访问防火墙设备默认会被阻止,但是如果直接从防火墙内部往外部流出的流量默认会被允许。firewalld 只能做和IP/Port相关的限制,web相关的限制无法实现。Copy to clipboardErrorCopied
二、防火墙区域管理
那么相较于传统的Iptables防火墙,firewalld支持动态更新,并加入了区域zone的概念简单来说,区域就是firewalld预先准备了几套防火墙策略集合(策略模板),用户可以根据不同的场景选择不同的策略模板,从而实现防火墙策略之间的快速切换Copy to clipboardErrorCopied
需要注意的是Firewalld中的区域与接口一个网卡仅能绑定一个区域, eth0 -->A区域
但一个区域可以绑定多个网卡。A区域-->eth0 eth1 eth2
还可以根据来源的地址设定不同的规则。比如:所有人能访问80端口,但只有公司的IP才允许访问22端口。Copy to clipboardErrorCopied
区域
区域 | 默认规则策略 |
---|---|
trusted | 允许所有的数据包流入流出 |
home | 拒绝流入的流量,除非与流出的流量相关;而如果流量与ssh、mdns、ipp-client、amba-client与dhcpv6-client服务相关,则允许流量 |
internal | 等同于home区域 |
work | 拒绝流入的流量,除非与流出的流量相关;而如果流量与ssh、ipp-client、dhcpv6-client服务相关,则允许流量 |
public | 拒绝流入的流量,除非与流出的流量相关;而如果流量与ssh、dhcpv6-client服务相关,则允许流量 |
external | 拒绝流入的流量,除非与流出的流量相关;而如果流量与ssh服务相关,则允许流量 |
dmz | 拒绝流入的流量,除非与流出的流量相关;而如果流量与ssh服务相关,则允许流量 |
block | 拒绝流入的流量,除非与流出的流量相关 |
drop | 拒绝流入的流量,除非与流出的流量相关 |
#必须要记住的三个区域,其他的无所谓
trusted 白名单
public 默认区域
drop 黑名单Copy to clipboardErrorCopied
三、防火墙基本指令参数
1.firewall-cmd命令分类列表
参数 | 作用 |
---|---|
zone区域相关指令 | |
--get-default-zone | 获取默认的区域名称 |
--set-default-zone=<区域名称> | 设置默认的区域,使其永久生效 |
--get-active-zones | 显示当前正在使用的区域与网卡名称 |
--get-zones | 显示总共可用的区域 |
--new-zone= | 新增区域 |
services服务相关命令 | |
--get-services | 列出服务列表中所有可管理的服务 |
--add-service= | 设置默认区域允许该填加服务的流量 |
--remove-service= | 设置默认区域不允许该删除服务的流量 |
Port端口相关指令 | |
--add-port=<端口号/协议> | 设置默认区域允许该填加端口的流量 |
--remove-port=<端口号/协议> | 置默认区域不允许该删除端口的流量 |
Interface网站相关指令 | |
--add-interface=<网卡名称> | 将源自该网卡的所有流量都导向某个指定区域 |
--remove-interface=<网卡名称> | 取消网卡绑定区域 |
sourceIP相关指令 | |
--add-source=<IP/位数> | 设置默认IP允许服务的流量 |
--remove-source=<IP/位数> | 移除设置的默认IP允许服务的流量 |
其他相关指令 | |
--list-all | 显示当前区域的网卡配置参数、资源、端口以及服务等信息 |
--reload | 让“永久生效”的配置规则立即生效,并覆盖当前的临时规则 |
四、防火墙区域配置策略
为了能正常使用firewalld服务和相关工具去管理防火墙,必须启动firewalld服务,同时关闭以前旧的防火墙相关服务,需要注意firewalld的规则分为两种状态:runtime运行时: 修改规则马上生效,但如果重启服务则失效,测试建议。
permanent持久配置: 修改规则后需要reload重载服务才会生效,生产建议。Copy to clipboardErrorCopied
1.禁用与取消禁用防火墙
#禁用防火墙
[root@web02 ~]# systemctl mask iptables.service
Created symlink from /etc/systemd/system/iptables.service to /dev/null.#取消禁用防火墙
[root@web02 ~]# systemctl unmask iptables.service
Removed symlink /etc/systemd/system/iptables.service.Copy to clipboardErrorCopied
2.启动firewalld
[root@web02 ~]# systemctl stop firewalld
[root@web02 ~]# systemctl start firewalld
[root@web02 ~]# systemctl enable firewalld
Created symlink from /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service to /usr/lib/systemd/system/firewalld.service.
Created symlink from /etc/systemd/system/multi-user.target.wants/firewalld.service to /usr/lib/systemd/system/firewalld.service.Copy to clipboardErrorCopied
3.firewalld常用命令
#查看默认使用的区域
[root@web02 ~]# firewall-cmd --get-default-zone
public#查看区域的规则
[root@web02 ~]# firewall-cmd --list-all
public (active)target: defaulticmp-block-inversion: nointerfaces: eth0 eth1sources: services: ssh dhcpv6-clientports: 80/tcp 80/udpprotocols: masquerade: noforward-ports: source-ports: icmp-blocks: rich rules: #指定查看区域规则
[root@web02 ~]# firewall-cmd --list-all --zone=public
public (active) #区域(活跃的)target: default #状态:默认icmp-block-inversion: no #ICMP块interfaces: eth0 eth1 #区域绑定的网卡sources: #允许流量的IPservices: ssh dhcpv6-client #允许流量的服务ports: 80/tcp 80/udp #允许流量的端口protocols: #允许流量的协议 {'tcp'|'udp'|'sctp'|'dccp'}masquerade: no #ip 伪装forward-ports: #端口转发source-ports: #来源端口icmp-blocks:rich rules: #富规则#查询区域是否允许某服务
[root@web02 ~]# firewall-cmd --zone=public --query-service=ssh
no#重启防火墙(清理临时的设置)
[root@web02 ~]# firewall-cmd --reload
successCopy to clipboardErrorCopied
4.配置测试
配置要求:调整默认public区域拒绝所有流量,但如果来源IP是10.0.0.0/24网段则允许
#配置默认区域拒绝所有的访问
[root@web02 ~]# firewall-cmd --remove-service={ssh,dhcpv6-client}
success
[root@web02 ~]# firewall-cmd --remove-port={80/tcp,80/udp}
success
[root@web02 ~]# firewall-cmd --remove-protocol={tcp,udp}
success#配置允许的网段
[root@web02 ~]# firewall-cmd --add-source=10.0.0.0/24 --zone=trusted
success#查看使用的区域规则
[root@web02 ~]# firewall-cmd --get-active-zones
publicinterfaces: eth0 eth1
trustedsources: 10.0.0.0/24Copy to clipboardErrorCopied
五、防火墙配置放行策略
1.firewalld放行服务
[root@web02 ~]# firewall-cmd --add-service=http
success[root@web02 ~]# firewall-cmd --add-service={http,https}
success#可以自己配置服务添加
[root@web02 ~]# cp /usr/lib/firewalld/services/{http.xml,suibian.xml}
[root@web02 ~]# firewall-cmd --add-service=suibianCopy to clipboardErrorCopied
2.firewalld放行端口
[root@web02 ~]# firewall-cmd --add-port=80/tcp
success
[root@web02 ~]# firewall-cmd --list-all
public (active)target: defaulticmp-block-inversion: nointerfaces: eth0 eth1sources: services: ssh dhcpv6-clientports: 80/tcpprotocols: masquerade: noforward-ports: source-ports: icmp-blocks: rich rules: #移除允许的端口
[root@web02 ~]# firewall-cmd --remove-port=80/tcpCopy to clipboardErrorCopied
3.放行网段
#配置允许的网段
[root@web02 ~]# firewall-cmd --add-source=10.0.0.0/24 --zone=trusted
successCopy to clipboardErrorCopied
六、防火墙配置端口转发策略
端口转发是指传统的目标地址映射,实现外网访问内网资源
流量转发语法为:
firewalld-cmd --permanent --zone=<区域> --add-forward-port=port=<源端口号>:proto=<协议>:toport=<目标端口号>:toaddr=<目标IP地址>Copy to clipboardErrorCopied
1.端口转发实现
实例: 需要将本地的10.0.0.8:5555端口转发至后端172.16.1.7:22端口
#1.添加端口转发
[root@web02 ~]# firewall-cmd --add-forward-port=port=5555:proto=tcp:toport=22:toaddr=172.16.1.7
success#2.开启IP伪装
[root@web02 ~]# firewall-cmd --add-masquerade
success#3.查看规则
[root@web02 ~]# firewall-cmd --list-all
public (active)target: defaulticmp-block-inversion: nointerfaces: eth0 eth1sources: services: ssh dhcpv6-clientports: 80/tcpprotocols: masquerade: yesforward-ports: port=5555:proto=tcp:toport=22:toaddr=172.16.1.7source-ports: icmp-blocks: rich rules: #4.测试连接
[d:\~]$ ssh 10.0.0.8 5555Connecting to 10.0.0.8:5555...
Connection established.
To escape to local shell, press Ctrl+Alt+].Last login: Sun Mar 15 19:55:23 2020 from 10.0.0.1
[root@web01 ~]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00inet 127.0.0.1/8 scope host lovalid_lft forever preferred_lft foreverinet6 ::1/128 scope host valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000link/ether 00:0c:29:c6:7b:51 brd ff:ff:ff:ff:ff:ff
3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000link/ether 00:0c:29:c6:7b:5b brd ff:ff:ff:ff:ff:ffinet 172.16.1.7/24 brd 172.16.1.255 scope global noprefixroute eth1valid_lft forever preferred_lft foreverinet6 fe80::20c:29ff:fec6:7b5b/64 scope link valid_lft forever preferred_lft forever
[root@web01 ~]# Copy to clipboardErrorCopied
七、防火墙富规则
firewalld中的富语言规则表示更细致,更详细的防火墙策略配置,他可以针对系统服务、端口号、原地址和目标地址等诸多信息进行更有针对性的策略配置,优先级在所有的防火墙策略中也是最高的,下面为firewalld富语言规则帮助手册Copy to clipboardErrorCopied
#富规则语法
[root@web02 ~]# man firewalld.richlanguage
rule
[source]
[destination]
service|port|protocol|icmp-block|icmp-type|masquerade|forward-port|source-port
[log]
[audit]
[accept|reject|drop|mark]rule [family="ipv4|ipv6"]
source address="address[/mask]" [invert="True"]
service name="service name"
port port="port value" protocol="tcp|udp"
protocol value="protocol value"
forward-port port="port value" protocol="tcp|udp" to-port="port value" to-addr="address"
accept | reject [type="reject type"] | drop#富语言规则相关命令
--add-rich-rule='<RULE>' #在指定的区域添加一条富语言规则
--remove-rich-rule='<RULE>' #在指定的区删除一条富语言规则
--query-rich-rule='<RULE>' #找到规则返回0,找不到返回1
--list-rich-rules #列出指定区里的所有富语言规则Copy to clipboardErrorCopied
1.实例一
例题:允许10.0.0.1主机能够访问http服务,允许172.16.1.0/24能访问10050端口
#允许10.0.0.1主机能够访问http服务
[root@web02 ~]# firewall-cmd --add-rich-rule='rule family=ipv4 source address=10.0.0.1 service name=http accept'#允许172.16.1.0/24能访问10050端口
[root@web02 ~]# firewall-cmd --add-rich-rule='rule family=ipv4 source address=172.16.1.0/24 port port=111 protocol=tcp accept'Copy to clipboardErrorCopied
2.实例二
例题:默认public区域对外开放所有人能通过ssh服务连接,但拒绝172.16.1.0/24网段通过ssh连接服务器
[root@web02 ~]# firewall-cmd --add-rich-rule='rule family=ipv4 source address=172.16.1.0/24 service name=ssh reject'[root@web02 ~]# firewall-cmd --add-rich-rule='rule family=ipv4 source address=172.16.1.0/24 service name=ssh drop'#drop和reject
drop直接丢弃,不返回任何内容
reject拒绝,返回拒绝的内容Copy to clipboardErrorCopied
3.实例三
例题:当用户来源IP地址是10.0.0.1主机,则将用户请求的5555端口转发至后端172.16.1.7的22端口
[root@web02 ~]# firewall-cmd --add-rich-rule='rule family=ipv4 source address=10.0.0.1 forward-port port=5555 protocol=tcp to-port=22 to-addr=172.16.1.7'
success
[root@web02 ~]# firewall-cmd --add-masquerade
successCopy to clipboardErrorCopied
4.查看富规则
[root@web02 ~]# firewall-cmd --list-rich-rules
rule family="ipv4" source address="10.0.0.1" forward-port port="5555" protocol="tcp" to-port="22" to-addr="172.16.1.7"Copy to clipboardErrorCopied
5.firewalld配置禁ping
[root@web02 ~]# firewall-cmd --add-rich-rule='rule family=ipv4 protocol value=icmp drop'Copy to clipboardErrorCopied
*注:一般所有的拒绝或接受都配置在默认区域,当指定IP访问指定端口或者服务的时候使用富规则*
八、防火墙规则备份
#我们防火墙的配置,永久生效后会保存在/etc/firewalld/zones/这个目录下面,所以如果进行服务器集群扩展,或者配置相同防火墙时,只需要把该文件拿过来启动防火墙即可#备份也备份以上文目录#备份文件一定是在永久生效后才会在目录下多生成一个文件Copy to clipboardErrorCopied
九、防火墙内部共享上网
在指定的带有公网IP的实例上启动Firewalld防火墙的NAT地址转换,以此达到内部主机上网。在公司里面,服务器上没有外网的,除非使用路由器,或者使用防火墙实现内部共享上网Copy to clipboardErrorCopied
1.开启IP伪装
[root@web02 ~]# firewall-cmd --add-masquerade
success
[root@web02 ~]# firewall-cmd --add-masquerade --permanent
success
[root@web02 ~]#Copy to clipboardErrorCopied
2.开启内核转发(如果使用iptables必须手动开启,firewalld不需要手动开启)
#配置内核转发
[root@m01 ~]# vim /etc/sysctl.conf
net.ipv4.ip_forward = 1#在CentOS6中开启之后生效命令
[root@m01 ~]# sysctl -p#查看内核转发是否开启
[root@m01 ~]# sysctl -a|grep net.ipv4.ip_forward
net.ipv4.ip_forward = 1Copy to clipboardErrorCopied
3.配置没有外网机器的网关地址
[root@web03 ~]# vim /etc/sysconfig/network-scripts/ifcfg-eth1
#最后添加
GATEWAY=172.16.1.8
DNS1=223.5.5.5#重启网卡
[root@web03 ~]# ifdown eth1 && ifup eth1Copy to clipboardErrorCopied
iptables防火墙
Netfilter/Iptables(以下简称Iptables)是unix/linux自带的一款优秀且开放源代码的完全自由的基于包过滤的防火墙工具,它的功能十分强大,使用非常灵活,可以对流入和流出服务器的数据包进行很精细的控制。
iptables是linux2.4及2.6内核中集成的服务。
iptables主要工作在OSI七层的二、三、四层,如果重新编译内核,iptables也可以支持7层控制
iptables防火墙网路安全前言介绍
学好iptables的基础:1、OSI7层模型以及不同层对应哪些协议?2、TCP/IP三次握手,四次断开的过程,TCP HEADER,状态转换3、常用的服务端口要非常清楚了解。4、常用服务协议原理http协议,icmp协议。企业中安全配置原则:1、尽可能不给服务器配置外网IP,可以通过代理转发或者通过防火墙映射。2、并发不是特别大情况有外网IP,可以开启防火墙服务。3、大并发的情况,不能开iptables,影响性能,利用硬件防火墙提升架构安全。Copy to clipboardErrorCopied
iptables防火墙使用时名词概念理解
容器:装东西的器皿,docker容器技术,将镜像装在了一个系统中,这个系统就称为容器
iptables称为一个容器---装着防火墙的表
防火墙的表又是一个容器---装着防火墙的链
防火墙的链也是一个容器---装着防火墙的规则
iptables---表---链---规则规则:防火墙一条一条安全策略
防火墙匹配规则流程:1. 防火墙是层层过滤的,实际是按照配置规则的顺序从上到下,从前到后进行过滤的。2. 如果匹配上规则,即明确表示是阻止还是通过,数据包就不再向下匹配新的规则。3. 如果规则中没有明确表明是阻止还是通过的,也就是没有匹配规则,向下进行匹配,直到匹配默认规则得到明确的阻止还是通过。4. 防火墙的默认规则是所有规则执行完才执行的。Copy to clipboardErrorCopied
安装
[root@localhost ~]# yum install iptables-services
[root@localhost ~]# systemctl start iptables.service
[root@localhost ~]# systemctl status iptables.service
● iptables.service - IPv4 firewall with iptablesLoaded: loaded (/usr/lib/systemd/system/iptables.service; disabled; vendor preset: disabled)Active: active (exited) since 三 2021-06-02 19:32:53 CST; 1s agoProcess: 3757 ExecStart=/usr/libexec/iptables/iptables.init start (code=exited, status=0/SUCCESS)Main PID: 3757 (code=exited, status=0/SUCCESS)6月 02 19:32:53 localhost.localdomain systemd[1]: Starting IPv4 firewall with iptables...
6月 02 19:32:53 localhost.localdomain iptables.init[3757]: iptables: Applying firewall rules: [ OK ]
6月 02 19:32:53 localhost.localdomain systemd[1]: Started IPv4 firewall with iptables.Copy to clipboardErrorCopied
4表5链
1、Filter:实现防火墙安全过滤功能INPUT 对于指定到本地套接字的包,即到达本地防火墙服务器的数据包 外面---->(门)房子iptablesFORWARD 路由穿过的数据包,即经过本地防火墙服务器的数据包 外面-----(前门)房子(后门)---房子 OUTPUT 本地创建的数据包 外面<-----(门)房子iptables
2、NAT:实现将数据包中IP地址或者端口信息,内网到外网进行改写/外网到内网进行改写PREROUTING 一进来就对数据包进行改变 在路由之前,进行数据包IP地址或端口信息的转换 OUTPUT 本地创建的数据包在路由之前进行改变 本地防火墙要出去的流量进行相应转换(了解)POSTROUTING 在数据包即将出去时改变数据包信息 在路由之后,进行数据包IP地址或端口信息的转换SNAT 和 DNAT 是 iptables 中使用 NAT 规则相关的的两个重要概念。如果内网主机访问外网而经过路由时,源IP会发生改变,这种变更行为就是SNAT;反之,当外网的数据经过路由发往内网主机时,数据包中的目的IP (路由器上的公网IP) 将修改为内网IP,这种变更行为就是DNAT注:在nat server 中,先更改配置文件,/etc/sysctl.conf 中改为net.ipv4.ip_forward = 1修改完成后,命令行sysctl -p 让其全部执行生效3、Managle:对数据进行标记
4、Raw:将数据包一些标记信息进行拆解Copy to clipboardErrorCopied
防火墙实操
根据4表5链,实操防火墙。
防火墙参数信息
-A --- 表示将规则添加到指定链上
-I --- 表示将规则插入到指定链上
-D --- 表示将规则从指定链上删除
-R --- 表示将规则信息进行修改
-p --- 指定相应服务协议信息(tcp udp icmp all)
--dport --- 表示指定目标端口信息
--sport --- 表示指定源端口号信息
-j --- 指定对相应匹配规则执行什么操作(ACCEPT DROP REJECT REDIRECT)ACCEPT 允许通过DROP 直接拒绝 REJECT 委婉拒绝REDIRECT 重定向MASQUERADE 地址伪装SNAT 如果内网主机访问外网而经过路由时,源IP会发生改变,这种变更行为就是SNATDNAT 当外网的数据经过路由发往内网主机时,数据包中的目的IP (路由器上的公网IP) 将修改为内网IP,这种变更行为就是DNAT-s --- 指定匹配的源地址网段信息,或者匹配的主机信息
-d --- 指定匹配的目标地址网段信息,或者匹配的主机信息
-i --- 指定匹配的进入流量接口信息 只能配置在INPUT链上
-o --- 指定匹配的发出流量接口信息 只能配置在OUTPUT链上-m --- 指定应用扩展模块参数multiport --- 可以匹配多个不连续端口信息
Copy to clipboardErrorCopied
iptables防火墙配置初始化
iptables -F --- 清除防火墙默认规则
iptables -X --- 清除防火墙自定义链
iptables -Z --- 清除防火墙技术器信息Copy to clipboardErrorCopied
iptables防护墙信息查看方法
iptables -L --- -L 以列表形式显示所有规则信息
iptables -L -n --- -n 以数字形式显示IP地址或端口信息,不要转换为字符串显示
iptables -t nat -L -n --- -t 表示指定查看或者配置相应的表
iptables -L -n -v --- -v 表示显示详细规则信息,包含匹配计数器数值信息
iptables -L -n --line-number --- --line-number 显示规则序号信息Copy to clipboardErrorCopied
iptables防火墙端口规则配置
iptables -t filter -A INPUT -p tcp --dport 22 -j DROP --- -A 表示添加规则到相应链上,默认表示添加规则到结尾
iptables -t filter -D INPUT -p tcp --dport 22 -j DROP --- -D 表示删除规则从相应链上。
iptables -t filter -D INPUT 规则序号
iptables -t filter -I INPUT -p tcp --dport 22 -j DROP --- -I 表示插入规则到相应链上,默认表示插入规则到首部
iptables -t filter -I INPUT 3 -p tcp --dport 22 -j DROP --- 指定规则插入位置
iptables -t filter -R INPUT 6 -p tcp --dport 8080 -j DROP --- -R 指定将配置好的规则信息进行替换Copy to clipboardErrorCopied
阻止相应网段主机访问服务端指定端口服务
iptables -t filter -A INPUT -s 10.0.0.0/24 -p tcp --dport 22 -j DROP
iptables -t filter -A INPUT -s 10.0.0.9 -p tcp --dport 22 -j DROP
iptables -t filter -A INPUT -i eth0 -s 10.0.0.9 -p tcp --dport 22 -j DROP Copy to clipboardErrorCopied
除了某个地址可以访问22端口之外,其余地址都不能访问
10.0.0.1 10.0.0.253 10.0.0.9(只允许)
iptables -t filter -A INPUT -s 10.0.0.9 -p tcp --dport 22 -j ACCEPT
iptables -t filter -A INPUT -s 10.0.0.0/24 -p tcp --dport 22 -j DROP
iptables -t filter -A INPUT ! -s 10.0.0.9 -p tcp --dport 22 -j ACCEPT
通过利用 !进行规则取反,进行策略控制Copy to clipboardErrorCopied
指定阻止访问多个端口服务
iptables -A INPUT -s 10.0.0.9 -p tcp --dport 22:80 -j DROP --- 匹配连续的端口号访问
iptables -A INPUT -s 10.0.0.9 -m multiport -p tcp --dport 22,24,25 -j DROP --- 匹配不连续的端口号访问
Copy to clipboardErrorCopied
通过防火墙实现禁ping功能
实现ping功能测试链路是否正常,基于icmp协议实现的
icmp协议有多种类型:icmp-type 8:请求类型 icmp-type 0:回复类型 实践01:实现禁止主机访问防火墙服务器(禁ping)
iptables -A INPUT -p icmp --icmp-type 8 -j DROP
iptables -A OUTPUT -p icmp --icmp-type 0 -j DROP实践02:实现禁止防火墙访问主机服务器(禁ping)
iptables -A OUTPUT -p icmp --icmp-type 8 -j DROP
iptables -A INPUT -p icmp --icmp-type 0 -j DROP实践03:所有icmp类型都禁止
iptables -A INPUT -p icmp -m icmp --icmp-type any -j DROP
iptables -A OUTPUT -p icmp -m icmp --icmp-type any -j DROP实践04:实现防火墙状态机制控制
NEW: 发送数据包里面控制字段为syn=1,发送第一次握手的数据包
ESTABLISHED: 请求数据包发出之后,响应回来的数据包称为回复的包
RELATED: 基于一个连接,然后建立新的连接
INVALID: 无效的的数据包,数据包结构不符合正常要求的iptables -A INPUT -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
Copy to clipboardErrorCopied
转发源地址
[root@web01 ~]# # 将38080端口转发至本机的80端口
[root@web01 ~]# iptables -t nat -A PREROUTING -p tcp --dport 38080 -j REDIRECT --to-port 80[root@web01 ~]#
[root@web01 ~]# iptables -t nat -A OUTPUT -p tcp --dport 80 -j DNAT --to-destination 172.16.1.8Copy to clipboardErrorCopied
iptables面试题
1、详述iptales工作流程以及规则过滤顺序?
2、iptables有几个表以及每个表有几个链?
3、iptables的几个表以及每个表对应链的作用,对应企业应用场景?
4、画图讲解iptables包过滤经过不同表和链简易流程图并阐述。
5、请写出查看iptables当前所有规则的命令。
6、禁止来自10.0.0.188 ip地址访问80端口的请求
7、如何使在命令行执行的iptables规则永久生效?(service iptables save)
8、实现把访问10.0.0.3:80的请求转到172.16.1.17:80(iptables -t nat -A OUTPUT -p tcp --dport 80 -j DNAT --to-destination 172.16.1.8)
9、实现172.16.1.0/24段所有主机通过124.32.54.26外网IP共享上网。
10、写一个防火墙配置脚本,只允许远程主机访问本机的80端口(奇虎360面试题)iptables -t filter -A INPUT -p tcp --dport 22 -j ACCEPT
iptables -t filter -A INPUT -j DROP11、写一个脚本解决DOS攻击生产案例
#!/bin/bash# 写一个脚本解决DOS攻击生产案例
# 过滤出IP及IP重复次数
# grep -oE "([0-9]{1,3}\.){3}[0-9]{1,3}" /var/log/nginx/access.log
# awk '{print $1}' /var/log/nginx/access.log
# awk '{print $1}' /var/log/nginx/access.log | uniq -c | sort -n
# 每一分钟怎么做?
# 将统计结果超过100的,屏蔽掉DIR="/var/log/nginx/access.log"
IPS_DIR="/var/log/nginx/IPS.txt"
DATE=`date +%F_%H_%M`
BACKUP_DIR="/var/log/nginx/backup"
NEW_FILE_NAME=$BACKUP_DIR/$DATE.txtif [ ! -d $BACKUP_DIR ];thenmkdir -pv $BACKUP_DIR
ficp -r $DIR $NEW_FILE_NAME
>$DIRawk '{print $1}' $NEW_FILE_NAME | sort | uniq -c | sort -n > ${IPS_DIR}while read line
doCOUNT=`echo $line | awk '{print $1}'`IP=`echo $line | awk '{print $2}'`if [ $COUNT -gt 100 ];then/usr/sbin/iptables -t filter -A INPUT -s $IP -p tcp -j DROP fidone < ${IPS_DIR}
实战
根据以上配置方法,最后一步设置了默认拒绝所有规则,那么跳板机连接主机后,千万不要进行清理防火墙的操作,否则就什么都连接不上了
因为清理防火墙规则不会清理'iptables -P INPUT DROP'这一条规则,那么防火墙默认规则就变成所有都dorp了
#解决方法:
需要到虚拟机或者物理机上操作
1.iptables -P INPUT ACCEPT
2.systemctl restart iptables
3.重启物理机(有风险)#避免方法:
1.将 iptables -P INPUT ACCEPT 加到定时任务(测试阶段可用该方法)
* * * * * /usr/sbin/iptables -P INPUT ACCEPT
2.其他环境测试,测试没有问题后,复制所有规则到环境执行
3.配置前,先保存之前的防火墙规则,根据以前的规则修改[root@web01 ~]# iptables-save > iptables_m01_20200116修改后导入规则[root@web01 ~]# iptables-restore < iptables_m01_20200116Copy to clipboardErrorCopied
3.企业中配置
iptables -F
iptables -X
iptables -Z
iptables -A INPUT -p tcp -m multiport --dport 80,443 -j ACCEPT
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
iptables -A INPUT -s 10.0.1.0/24 -j ACCEPT
iptables -A INPUT -s 172.16.1.0/24 -j ACCEPT
iptables -A INPUT -i lo -j ACCEPT
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT
iptables -nLCopy to clipboardErrorCopied
一、防火墙规则永久生效
#把规则写入iptables配置文件
[root@m01 ~]# vim /etc/sysconfig/iptables
# sample configuration for iptables service
# you can edit this manually or use system-config-firewall
# please do not ask us to add additional ports/services to this default configuration
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
COMMIT#保存已经配置的规则
[root@m01 ~]# service iptables save
iptables: Saving firewall rules to /etc/sysconfig/iptables:[ OK ]Copy to clipboardErrorCopied
二、内部共享上网
1.在m01上操作
echo 'net.ipv4.ip_forward = 1' >> /etc/sysctl.conf
sysctl -piptables -A FORWARD -i eth1 -s 172.16.1.0/24 -j ACCEPT
iptables -A FORWARD -o eth0 -s 172.16.1.0/24 -j ACCEPT
iptables -A FORWARD -i eth0 -d 172.16.1.0/24 -j ACCEPT
iptables -A FORWARD -o eth1 -d 172.16.1.0/24 -j ACCEPT
iptables -t nat -A POSTROUTING -s 172.16.1.0/24 -j SNAT --to-source 10.0.0.61-j 指定动作
SNAT 源地址转换
--to-source 源地址转换指向Copy to clipboardErrorCopied
2.没有外网ip的主机操作
[root@web01 ~]# cat /etc/sysconfig/network-scripts/ifcfg-eth1
GATEWAY=172.16.1.61
DNS1=223.5.5.5[root@web01 ~]# ifdown eth1 && ifup eth1Copy to clipboardErrorCopied
三、端口转发和IP转发
1.端口转发
[root@m01 ~]# iptables -t nat -A PREROUTING -d 10.0.0.61 -p tcp --dport 5555 -j DNAT --to-destination 172.16.1.7:22[root@m01 ~]# iptables -t nat -A POSTROUTING -s 172.16.1.0/24 -j SNAT --to-source 10.0.0.61-d 指定目的ip
DNAT 目标地址转换
--to-destination 目标地址转换指向Copy to clipboardErrorCopied
2.IP转发
[root@m01 ~]# iptables -t nat -A PREROUTING -d 10.0.1.61 -j DNAT --to-destination 172.16.1.7iptables -A FORWARD -i eth1 -s 172.16.1.0/24 -j ACCEPT
iptables -A FORWARD -o eth0 -s 172.16.1.0/24 -j ACCEPT
iptables -A FORWARD -i eth0 -d 172.16.1.0/24 -j ACCEPT
iptables -A FORWARD -o eth1 -d 172.16.1.0/24 -j ACCEPT
iptables -t nat -A POSTROUTING -s 172.16.1.0/24 -j SNAT --to-source 10.0.0.61