15防火墙和iptables
Firewalld 防火墙
复习
1.保持活力的作用是什么?
在集群中生成VIP,主要用于高可用性。
2.如何解决保持裂缝?
通过keepalived提供的脚本执行功能,不断检测代理的服务,如果不正常就做相应的处理。
3.保持先占和非先占的区别
抢占是按优先级分配VIP。一旦非一次性获得贵宾,它就在改变。非触发不会导致延迟或错误。
?
4.Nginx重定向的关键字
重写[正则表达式][网址]重定向到]
返回[状态代码][网址]进行重定向]
?
5.四种重定向模式
最后一个规则匹配完成后,匹配将停止,以下规则将不匹配。
Break完成此规则的匹配后,停止匹配并停止以下规则。
?
返回重定向302临时重定向,地址栏会显示跳转后的地址。
永久返回301永久重定向,地址栏将显示跳转后的地址。
?
一、防火墙基本概述
阻止恶意流量访问的软件称为防火墙。
CentOS7系统集成了很多防火墙管理工具。firewalld(动态防火墙管理器)防火墙管理工具默认启用。Firewalld支持CLI(命令行)和GUI(图形)管理方法。
初入Linux的人对Iptables比较熟悉,但由于Iptables规则比较麻烦,对网络有一定要求,学习成本较高。但是firewalld的学习对网络没有那么高的要求,而且比iptables简单很多,所以建议刚接触CentOS7系统的人直接学习Firewalld。
需要注意的是,如果防火墙工具打开,并且没有配置允许的规则,那么默认情况下会阻止对防火墙设备的外部访问,但是如果流量直接从防火墙内部流向外部,那么默认情况下会允许。
?
Firewalld只能做与IP/Port相关的限制,无法实现与web相关的限制。
二、防火墙区域管理
与传统的Iptables防火墙相比,firewalld支持动态更新,并加入了区域的概念。
简单来说,区域就是firewalld提前准备了几套防火墙策略集(策略模板),用户可以根据不同的场景选择不同的策略模板,从而实现防火墙策略之间的快速切换。
选项默认规则策略trusted
允许所有数据包进出。
家
拒绝传入流量,除非它与传出流量相关;如果流量与ssh、mdns、ipp-client、amba-client和dhcpv6-client服务相关,则允许流量。
内部的
相当于家庭面积
工作
拒绝传入流量,除非它与传出流量相关;如果流量与ssh、ipp-client和dhcpv6-client服务相关,则允许流量。
public
拒绝传入流量,除非它与传出流量相关;如果流量与ssh、dhcpv6-cli相关
ent服务相关,则允许流量
#必须记住的三个区域,其他的可以不记
trusted 白名单
public 默认区域
drop 黑名单
三、防火墙基本指令参数
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=网卡名称 | 将源自该网卡的所有流量都导向某个指定区域 |
–change-interface=网卡名称 | 将某个网卡与区域进行关联 |
source相关指令 | |
–add-source=IP/子网掩码 | 一般配置在女默认区域的富规则中或者黑白名单中 |
–remove-source=IP/子网掩码 | |
其他相关指令 | |
–list-all | 显示当前区域的网卡配置参数、资源、端口以及服务等信息 |
–reload | 让“永久生效”的配置规则立即生效,并覆盖当前的配置规则 |
四、防火墙区域配置策略
1.禁用与取消禁用防火墙
#禁用防火墙
[root@web01 ~]# systemctl mask iptables
Created symlink from /etc/systemd/system/iptables.service to /dev/null.
#取消禁用防火墙
[root@web01 services]# systemctl unmask iptables
Removed symlink /etc/systemd/system/iptables.service
2.操作防火墙
[root@web01 ~]# systemctl start firewalld
[root@web01 ~]# systemctl enable firewalld
[root@web01 ~]# systemctl stop firewalld
#重载防火墙配置或清理临时的防火墙配置
[root@web01 ~]# firewalld-cmd --reload
3.firewalld常用命令
1)查看默认使用的区域
[root@web01 ~]# firewall-cmd --get-default-zone
public
2)查看默认区域的规则
[root@web01 ~]# firewall-cmd --list-all
public (active)
target: default
icmp-block-inversion: no
interfaces: eth0 eth1
sources:
services: ssh
ports:
protocols:
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:
3)查看指定区域的默认规则
[root@web01 ~]# firewall-cmd --list-all --zone=trusted
trusted #区域的名字
target: ACCEPT #状态:允许
icmp-block-inversion: no #icmp块设置
interfaces: #区域绑定的网卡
sources: #允许流量通过的网段
services: #允许流量通过的服务
ports: #允许流量通过的端口
protocols: #允许流量通过的协议
masquerade: no #IP伪装
forward-ports: #端口转发
source-ports: #端口转发的来源端口
icmp-blocks: #icmp块设置
rich rules: #富规则
4)查看区域是否允许某服务
[root@m01 ~]# firewall-cmd --zone=public --query-service=ssh
yes
[root@m01 ~]# firewall-cmd --zone=public --query-service=https
no
五、防火墙配置
1.firewalld放行服务
1)firewalld放行一个服务
[root@web01 ~]# firewall-cmd --add-service=http
success
2)firewalld放行多个服务
[root@web01 ~]# firewall-cmd --add-service={http,nginx}
success
3)自己添加服务,配置规则
[root@web01 ~]# cp /usr/lib/firewalld/services/{http.xml,suibian.xml}
[root@web01 ~]# firewall-cmd --reload
success
[root@web01 ~]# firewall-cmd --add-service=suibian
success
2.firewalld放行端口
1)firewalld放行一个端口
[root@web01 ~]# firewall-cmd --add-port=80/tcp
success
2)firewalld放行多个端口
[root@web01 ~]# firewall-cmd --add-port={81/tcp,82/tcp}
success
3.firewalld放行网段
[root@web01 ~]# firewall-cmd --add-source=10.0.0.0/24 --zone=trusted
success
4.配置测试
#要求:使用firewalld各个区域规则结合配置,调整默认public区域拒绝所有流量,但如果来源IP是10.0.0.0/24网段则允许
1.去除配置中的规则
[root@web01 ~]# firewall-cmd --remove-service=ssh
success
2.配置允许10.0.0.0/24网段
[root@web01 ~]# firewall-cmd --add-source=10.0.0.0/24 --zone=trusted
success
六、防火墙配置端口转发
端口转发是指传统的目标地址映射,实现外网访问内网资源
流量转发命令语法为:
firewalld-cmd --permanent --zone=区域 --add-forward-port=port=源端口号:proto=协议:toport=目标端口号:toaddr=目标IP地址
1.端口转发实践
实例:需要将本地的192.168.15.7:5555端口转发至192.168.14.5:22端口
#1.添加端口转发
[root@web01 ~]# firewall-cmd --add-forward-port=port=5555:proto=tcp:toport=22:toaddr=192.168.14.5
success
#2.开启ip伪装
[root@web01 ~]# firewall-cmd --add-masquerade
success
#3.查看防火墙配置
[root@web01 ~]# firewall-cmd --list-all
public (active)
target: default
icmp-block-inversion: no
interfaces: eth0 eth1
sources:
services:
ports:
protocols:
masquerade: yes
forward-ports: port=5555:proto=tcp:toport=22:toaddr=192.168.14.5
source-ports:
icmp-blocks:
rich rules:
#4.测试连接
[C:\~]$ ssh 192.168.15.7 5555
Connecting to 192.168.15.7:5555...
Connection established.
To escape to local shell, press 'Ctrl+Alt+]'.
Last login: Mon Dec 14 10:59:58 2020 from 192.168.15.1
[root@lb01 ~]#
七、防火墙富规则
firewalld中的富语言规则表示更细致,更详细的防火墙策略配置,他可以针对系统服务、端口号、原地址和目标地址等诸多信息进行更有针对性的策略配置,优先级在所有的防火墙策略中也是最高的,下面为firewalld富语言规则帮助手册
[root@m01 ~]# man firewall-cmd
[root@m01 ~]# 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 #列出指定区里的所有富语言规则
1.实例一
允许10.0.0.1主机能够访问http服务,允许172.16.1.0/24能访问111端口
[root@web01 ~]# firewall-cmd --add-rich-rule='rule family=ipv4 source address=10.0.0.1 service name=http accept'
success
[root@web01 ~]# firewall-cmd --add-rich-rule='rule family=ipv4 source address=172.16.1.0/24 port port=111 protocol=tcp accept'
success
[root@web01 ~]# firewall-cmd --list-all
public (active)
target: default
icmp-block-inversion: no
interfaces: eth0 eth1
sources:
services: ssh
ports:
protocols:
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:
rule family="ipv4" source address="10.0.0.1" service name="http" accept
rule family="ipv4" source address="172.16.1.0/24" port port="111" protocol="tcp" accept
2.实例二
默认public区域对外开放所有人能通过ssh服务连接,但拒绝172.16.1.0/24网段通过ssh连接服务器
[root@web01 ~]# firewall-cmd --add-rich-rule='rule family=ipv4 source address=172.16.1.0/24 service name=ssh reject'
success
[root@web01 ~]# firewall-cmd --add-rich-rule='rule family=ipv4 source address=172.16.1.0/24 service name=ssh drop'
success
#drop和reject
drop直接丢弃,不返回任何内容
reject是拒绝,会返回拒绝的内容
3.实例三
使用firewalld,允许所有人能访问http,https服务,但只有10.0.0.1主机可以访问ssh服务
[root@web01 ~]# firewall-cmd --add-service={http,https}
success
[root@web01 ~]# firewall-cmd --remove-service=ssh
success
[root@web01 ~]# firewall-cmd --add-rich-rule='rule family=ipv4 source address=10.0.0.1 service name=ssh accept'
4.实例四
当用户来源IP地址是10.0.0.1主机,则将用户请求的5555端口转发至后端172.16.1.4的22端口
[root@web01 ~]# 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.4'
[root@web01 ~]# firewall-cmd --add-masquerade
success
6.查看富规则
[root@web01 ~]# firewall-cmd --list-rich-rules
[root@web01 ~]# firewall-cmd --list-all
7.禁ping
[root@web01 ~]# firewall-cmd --add-rich-rule='rule family=ipv4 protocol value=icmp drop'
8.开启vrrp协议
firewall-cmd --zone=public --add-protocol=vrrp --permanent
八、防火墙备份
我们的防火墙规则,配置永久生效后,会保存在 /etc/firewalld/zones/ 目录下,我们如果要进行同样的防火墙配置,只需要将该文件推送至新服务器,并启动防火墙即可
如果要备份,备份的也是 /etc/firewalld/zones/ 目录
九、防火墙内部共享上网
在指定的带有公网IP的实例上启动Firewalld防火墙的NAT地址转换,以此达到内部主机上网。
1.开启ip伪装
[root@lb01 ~]# firewall-cmd --add-masquerade
[root@lb01 ~]# firewall-cmd --add-masquerade --permanent
2.开启内核转发
[root@lb01 ~]# cat /etc/sysctl.conf
net.ipv4.ip_forward = 1
#CentOS 6 系统需要手动开启,CentOS 7 默认就是开启的
[root@lb01 ~]# sysctl -p
3.修改内网服务器的网卡
[root@web01 ~]# vim /etc/sysconfig/network-scripts/ifcfg-eth1
GATEWAY=172.16.1.4
DNS1=223.5.5.5
#重启网卡
[root@web01 ~]# ifdown eth1 ifup eth1
4.测试
[root@web01 ~]# ip a
2: eth0: BROADCAST,MULTICAST,UP,LOWER_UP mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 00:0c:29:8e:6b:41 brd ff:ff:ff:ff:ff:ff
3: eth1: BROADCAST,MULTICAST,UP,LOWER_UP mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 00:0c:29:8e:6b:4b brd ff:ff:ff:ff:ff:ff
inet 172.16.1.7/24 brd 172.16.1.255 scope global noprefixroute eth1
valid_lft forever preferred_lft forever
inet6 fe80::20c:29ff:fe8e:6b4b/64 scope link
valid_lft forever preferred_lft forever
[root@web01 ~]# ping www.baidu.com
PING www.a.shifen.com (112.80.248.75) 56(84) bytes of data.
64 bytes from 112.80.248.75 (112.80.248.75): icmp_seq=1 ttl=127 time=11.7 ms
64 bytes from 112.80.248.75 (112.80.248.75): icmp_seq=2 ttl=127 time=9.53 ms
64 bytes from 112.80.248.75 (112.80.248.75): icmp_seq=3 ttl=127 time=9.20 ms
Iptables 防火墙
一、Iptables防火墙概述
1.应用场景
1.主机安全
2.内部共享上网
3.端口或IP转发
2.iptables注意事项
1.匹配规则是从上往下一次执行的
2.只要匹配上规则,就不会在往下执行
3.如果都没有匹配到规则,就执行默认规则
4.默认规则最后执行,默认允许所有
5.经常使用的规则往前放
二、iptables 四表五链
1.四表五链
#四表:
filter: 负责过滤数据包:INPUT、OUTPUT、FORWARD
nat: 负责网络地址转换:PREROUTING、INPUT、OUTPUT、POSTROUTING
mangle: 负责修改数据包内容、服务类型、TTL、并且可以配置路由实现QOS:PREROUTING、INPUT、OUTPUT、POSTROUTING、FORWARD
raw: 决定数据包是否被状态跟踪机制处理PREROUTING、OUTPUT
#五链:
INPUT链 进来的数据包应用此规则链中的策略
OUTPUT链 外出的数据包应用此规则链中的策略
FORWARD链 转发数据包时应用此规则链中的策略
PREROUTING链 对数据包作路由选择前应用此链中的规则(所有的数据包进来的时侯都先由这个链处理)
POSTROUTING链 对数据包作路由选择后应用此链中的规则(所有的数据包出来的时侯都先由这个链处理)
1) PREROUTING: 主机外报文进入位置,允许的表mangle, nat(目标地址转换,把本机地址转换为真正的目标机地址,通常指响应报文)
2) INPUT:报文进入本机用户空间位置,允许的表filter, mangle
3) OUTPUT:报文从本机用户空间出去的位置,允许filter, mangle, nat
4) FORWARD:报文经过路由并且发觉不是本机决定转发但还不知道从哪个网卡出去,允许filter, mangle
5) POSTROUTING:报文经过路由被转发出去,允许mangle,nat(源地址转换,把原始地址转换为转发主
机出口网卡地址)
filter: INPUT ------------------ FORWARD --------------- OUTPUT
nat: PREROUTING ---------- INPUT ---------- OUTPUT ----------- POSTROUTING
mangle: PREROUTING --------- INPUT -------- FORWARD ------- OUTPUT -------- POSTROUTING
raw : PREROUTING --------- OUTPUT
2.filter表
#过滤数据包,主要作用就是阻止和允许访问
1.INPUT链:过滤流入主机的数据包
2.OUTPUT链:过滤流出主机的数据包
3.FORWARD链:负责转发流经主机的数据包
3.Nat表
#用于网络地址转换,主要作用就是端口转发和ip转发
1.OUTPUT链:过滤流出主机的数据包
2.PREROUTING链:数据包到达防火墙时进行判断,改写数据包的地址或或端口(进)
3.POSTROUTING链:数据包到达防火墙时进行判断,改写数据包的地址或或端口(出)
总结:表的作用各有不同,链的位置各有不同。表中的链就是将表的功能放到链的具体位置去执行
4、什么是规则
防火墙规则称之为防火墙策略,主要是描述执行什么防火墙功能的记录。
三、iptables安装
1.安装
[root@lb01 ~]# yum install -y iptables-services
2.启动
[root@lb01 ~]# systemctl start iptables.service
3.iptables常用参数
1.链管理:
-N:new, 自定义一条新的规则链;
-X:delete,删除自定义的规则链;
注意:仅能删除 用户自定义的 引用计数为0的 空的 链;
-P:Policy,设置默认策略;对filter表中的链而言,其默认策略有:
ACCEPT:接受
DROP:丢弃
REJECT:拒绝
-E:重命名自定义链;引用计数不为0的自定义链不能够被重命名,也不能被删除;
2.规则管理:
1.查看:
-t: 指定操作的表(默认的表是:filter )
-L:list, 列出指定链上的所有规则;
-n:numberic,以数字格式显示地址和端口号;
-v:verbose,详细信息;
-vv, -vvv
-x:exactly,显示计数器结果的精确值;
--line-numbers:显示规则的序号;
-S, --list-rules 列出所有的规则
2.增加:
-A:append,追加
3.插入
-I:insert, 插入,要指明位置,省略时表示第一条
4.删除
-D:delete,删除;
(1) 指明规则序号;
(2) 指明规则本身;
-F:flush,清空指定的规则链;
5.修改
-R:replace,替换指定链上的指定规则;
6.置零
-Z:zero,置零;
iptables的每条规则都有两个计数器:
(1) 匹配到的报文的个数;
(2) 匹配到的所有报文的大小之和;
四、iptables常用操作
1.查看防火墙策略(filter)
[root@lb01 ~]# iptables -nL
2.查看指定表
-t 指定表
[root@lb01 ~]# iptables -nL -t nat
3.清空防火墙规则
#删除规则
[root@lb01 ~]# iptables -F
#删除自定义的链
[root@lb01 ~]# iptables -X
#计数器清零
[root@lb01 ~]# iptables -Z
4.添加防火墙规则
[root@lb01 ~]# iptables -t filter -A INPUT -p tcp --dport 22 -j DROP
iptables #命令
-t #指定表
filter #指定链
-A #添加规则
INPUT #链的名字
-p #指定协议
tcp #tcp协议
--dport #指定端口
22 #端口
-j #指定动作
DROP #丢弃
-i : 进来的网卡
-o : 出去的网卡
-m : 指定模块
-j : 转发模式
-p : 指定对应的管理流量类型
TCP
UDP
ICMP : ping
ALL : 所有协议
-j : 指定动作,转发模式
ACCEPT : 允许通过
DROP : 不允许通过
-s 源地址
-d 目标地址
--sport 源端口
--dport 目标端口
iptables -t nat -A POSTROUTING -s 172.16.1.0/24 -o eth0 -j SNAT --to-source 10.0.0.61
iptables -t nat -A POSTROUTING -s 172.16.1.0/24 -o eth0 -j SNAT --to-source 10.0.0.61
iptables -t nat -I POSTROUTING -s 172.31.0.0/20 -j SNAT --to-source 47.242.159.82
5.删除防火墙规则
#1.查看防火墙规则序号
[root@lb01 ~]# iptables -nL --line-numbers
Chain INPUT (policy ACCEPT)
num target prot opt source destination
1 DROP tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:80
2 DROP tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:443
3 DROP tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:111
#2.删除防火墙规则
[root@lb01 ~]# iptables -D INPUT 1
#3.再次查看
[root@lb01 ~]# iptables -nL --line-numbers
Chain INPUT (policy ACCEPT)
num target prot opt source destination
1 DROP tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:443
2 DROP tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:111
五、防火墙配置实例
1.不允许访问本机
[root@lb01 ~]# iptables -t filter -A INPUT -p ALL -j DROP
2.要求172.16.1.0可以访问web01,其他的请求全部拒绝
[root@lb01 ~]# iptables -t filter -A INPUT -p ALL -s 172.16.1.0/20 -j ACCEPT
[root@lb01 ~]# iptables -t filter -A INPUT -p ALL -j DROP
3.要求在案例2的基础上,允许192.168.15.66可以访问
[root@lb01 ~]# iptables -t filter -I INPUT -p ALL -s 192.168.15.66 -j ACCEPT
4.只允许其他网络ping web01
[root@lb01 ~]# iptables -t filter -I INPUT -p ICMP -s 192.168.15.7 -j ACCEPT
5、要求只有172.16.0.0网段的能够登录web01
[root@lb01 ~]# iptables -t filter -A INPUT -p ALL -s 172.16.0.0/20 -j ACCEPT
[root@lb01 ~]# iptables -t filter -A INPUT -p ALL -j DROP
6、访问web01的8080端口转发至80端口
[root@lb01 ~]# iptables -t nat -A PREROUTING -p tcp --dport 8080 -j REDIRECT --to-port 80
5.禁止端口访问
[root@lb01 ~]# iptables -t filter -A INPUT -p tcp --dport 111 -j DROP
6.拒绝IP访问
[root@lb01 ~]# iptables -t filter -A INPUT -p tcp -s 10.0.0.1 -i eth0 -j DROP
-i 指定网卡
-s 指定源地址IP
[root@lb01 ~]# iptables -t filter -A INPUT -p tcp -s 10.0.0.1 -i eth0 -j REJECT
7.禁止IP网段访问
[root@lb01 ~]# iptables -t filter -A INPUT -p tcp -s 10.0.0.0/24 -i eth0 -j REJECT
8.只允许某个IP访问
#正规的使用方法
[root@lb01 ~]# iptables -t filter -A INPUT -p tcp -s 10.0.0.1 -i eth0 -j ACCEPT
[root@lb01 ~]# iptables -t filter -A INPUT -p tcp -s 10.0.0.0/24 -i eth0 -j DROP
#取反的使用
[root@lb01 ~]# iptables -t filter -A INPUT -p tcp ! -s 10.0.0.1 -i eth0 -j DROP
#添加允许的ip时
[root@lb01 ~]# iptables -t filter -I INPUT -p tcp -s 10.0.0.7 -i eth0 -j ACCEPT
-I 向上添加规则
六、防火墙模块
1.multiport
解释:连续匹配多个端口
案例1:要求192.168.15.0/24网段的所有IP只能够访问22,80,443端口,其他的取决。
iptables -t filter -A INPUT -p TCP --dport 22 -s 192.168.15.0/24 -j ACCEPT
iptables -t filter -A INPUT -p TCP --dport 80 -s 192.168.15.0/24 -j ACCEPT
iptables -t filter -A INPUT -p TCP --dport 443 -s 192.168.15.0/24 -j ACCEPT
iptables -t filter -A INPUT -p tcp -j DROP
iptables -t filter -A INPUT -p tcp -m multiport --dports 22,80,443 -j ACCEPT
iptables -t filter -A INPUT -p tcp -j DROP
案例2:要求192.168.15.0/24网段的所有IP只能够访问70-90端口,其他拒绝
iptables -t filter -A INPUT -p tcp -m multiport --dports 10000:30000 -j ACCEPT
iptables -t filter -A INPUT -p tcp -m multiport --dports 10:30 -j ACCEPT
iptables -t filter -A INPUT -p tcp -j DROP
2.iprange模块
解释:连续匹配多个IP
参数:
--src-range from[-to]: 源地址范围
--dst-range from[-to] 目标地址范围
案例1:要求只有192.168.15.7到192.168.15.66能够通过22端口登录,其他的拒绝
iptables -t filter -A INPUT -p tcp --dport 22 -s 192.168.15.7 -j ACCEPT
iptables -t filter -A INPUT -p tcp --dport 22 -s 192.168.15.66 -j ACCEPT
iptables -t filter -A INPUT -p tcp -j DROP
iptables -t filter -A INPUT -p tcp -m iprange --src-range 192.168.15.7-192.168.15.66 -j ACCEPT
3.string模块
解释:按照内容进行匹配
参数:
--string pattern # 指定要匹配的字符串
--algo {bm|kmp} # 配的查询算法
案例1:要求访问的内容中包含HelloWorld的内容不允许访问,其他的可以。
iptables -t filter -A OUTPUT -p tcp -m string --string "hello" --algo kmp -j DROP
4.time模块(UTC)
解释:根据时间来控制访问(UTC)
参数:
--timestart hh:mm[:ss] # 开始时间
--timestop hh:mm[:ss] # 结束时间
--monthdays day[,day...] # 指定一个月的某一天
--weekdays day[,day...] # 指定周 还是 周天
案例1:要求上午的 08:00 到 上午的 10:22 不允许访问,其他时间可以。
iptables -t filter -A INPUT -p tcp -m time --timestart 00:00 --timestop 02:22 -j DROP
5.icmp模块
解释:控制icmp协议
参数:
--icmp-type {type[/code]|typename}
echo-request (8) 请求(我可以ping别人,别人休想ping我)
echo-reply (0) 回应(别人可以ping我,我休想ping别人)
案例1:禁止别人ping我,但我可以ping别人
iptables -t filter -I INPUT -p icmp --icmp-type "echo-request" -j DROP
6.connlimit模块
# 控制并发数
参数:
--connlimit-upto n # 如果现有连接数小于或等于 n 则 匹配
--connlimit-above n # 如果现有连接数大于n 则匹配
ACCEPT 将数据包放行,进行完此处理动作后,将不再比对其它规则,直接跳往下一个规则链。
REJECT 拦阻该数据包,并传送数据包通知对方。
DROP 丢弃包不予处理,进行完此处理动作后,将不再比对其它规则,直接中断过滤程序。
REDIRECT 将包重新导向到另一个端口,进行完此处理动作后,将会继续比对其它规则。
案例1:要求登录192.168.15.5的窗口最多有两个
iptables -t filter -A INPUT -p ALL --dport 22 -m connlimit --connlimit-above 2 -j REJECT
7.limit模块
# 针对 报文速率 进行限制。 秒、分钟、小时、天。
--limit rate[/second|/minute|/hour|/day] # 报文数量
--limit-burst number # 报文数量(默认:5)
网速 * 1000 / 1500 = 数据包数量
2.允许10个数据报文快速通过,超过的数据报文 1/m
iptables -t filter -A INPUT -p icmp -m limit --limit 1/m --limit-burst 10 -j ACCEPT
iptables -t filter -A INPUT -p icmp -j DROP
3.限速:限制传输的带宽不可以超过500k(500 * 1000 / 1500 = 333 包)
案例1:要求每秒只能够传输500k大小数据
iptables -t filter -A INPUT -p tcp -m limit --limit 333/s -j ACCEPT
iptables -t filter -A INPUT -p tcp -j DROP
8、防火墙的案例
1.对所有的地址开放本机的tcp(80、22、8080-9090)端口的访问
iptables -t filter -A INPUT -p tcp -m multiport --dports 80,22,8080:9090 -j ACCEPT
2.允许对所有的地址开放本机的基于ICMP协议的数据包访问
iptables -t filter -A INPUT -p icmp -j ACCEPT
3.其他未被允许的端口禁止访问
iptables -t filter -A INPUT -p tcp -j DROP
七、企业一般配置
1.配置前考虑下
1.考虑防火墙开在哪台机器上
2.这台机器部署了哪些服务
nginx
keepalive
3.服务对应的端口和协议
80
443
vrrp
22
4.配置默认拒绝所有
#配置
[root@lb01 ~]# iptables -t filter -A INPUT -p tcp -m multiport --dport 80,443 -j ACCEPT
[root@lb01 ~]# iptables -t filter -A INPUT -p vrrp -j ACCEPT
[root@lb01 ~]# iptables -t filter -A INPUT -p tcp -s 172.16.1.7 --dport 22 -j ACCEPT
[root@lb01 ~]# iptables -P INPUT DROP
#注意天坑:
配置好以后,不要清空防火墙规则,小心删除规则,因为我们最后一条配置的是默认拒绝所有,而清空防火墙规则不会更改其状态,还是默认拒绝所有,所以完犊子了
[root@lb01 ~]# iptables -P INPUT ACCEPT
2.防火墙规则永久生效
#配置完防火墙,执行以下操作,将自己配置的规则添加到防火墙的配置文件中
[root@lb01 ~]# service iptables save
iptables: Saving firewall rules to /etc/sysconfig/iptables:[ OK ]
[root@lb01 ~]# cat /etc/sysconfig/iptables
# Generated by iptables-save v1.4.21 on Wed Dec 16 15:39:15 2020
*nat
:PREROUTING ACCEPT [0:0]
:INPUT ACCEPT [0:0]
:OUTPUT ACCEPT [1:176]
:POSTROUTING ACCEPT [1:176]
COMMIT
# Completed on Wed Dec 16 15:39:15 2020
# Generated by iptables-save v1.4.21 on Wed Dec 16 15:39:15 2020
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [40:5168]
-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 -p tcp -m state --state NEW -m tcp --dport 3306 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 6379 -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A INPUT -s 10.0.0.1/32 -i eth0 -p tcp -j ACCEPT
-A INPUT -s 10.0.0.0/24 -i eth0 -p tcp -j DROP
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
COMMIT
# Completed on Wed Dec 16 15:39:15 2020
内容来源网络,如有侵权,联系删除,本文地址:https://www.230890.com/zhan/74732.html