当前位置:   article > 正文

@linux --firewalld防火墙概述_icmp-block-inversion: no

icmp-block-inversion: no

firewalld防火墙

一、防火墙安全概述

在CentOS7系统中集成了多款防火墙管理工具,默认启用的是firewalld(动态防火墙管理器)防火墙管理工具,Firewalld支持CLI(命令行)以及GUI(图形)的两种管理方式。

对于接触Linux较早的人员对Iptables比较熟悉,但由于Iptables的规则比较的麻烦,并且对网络有一定要求,所以学习成本较高。但firewalld的学习对网络并没有那么高的要求,相对iptables来说要简单不少,所以建议刚接触CentOS7系统的人员直接学习Firewalld。
  • 1
  • 2
  • 3

1584273590775

需要注意的是:如果开启防火墙工具,并且没有配置任何允许的规则,那么从外部访问防火墙设备默认会被阻止,但是如果直接从防火墙内部往外部流出的流量默认会被允许。

firewalld 只能做和IP/Port相关的限制,web相关的限制无法实现。
  • 1
  • 2
  • 3

二、防火墙区域管理

那么相较于传统的Iptables防火墙,firewalld支持动态更新,并加入了区域zone的概念

简单来说,区域就是firewalld预先准备了几套防火墙策略集合(策略模板),用户可以根据不同的场景选择不同的策略模板,从而实现防火墙策略之间的快速切换
  • 1
  • 2
  • 3
需要注意的是Firewalld中的区域与接口

一个网卡仅能绑定一个区域, eth0 -->A区域 
但一个区域可以绑定多个网卡。A区域-->eth0 eth1 eth2
还可以根据来源的地址设定不同的规则。比如:所有人能访问80端口,但只有公司的IP才允许访问22端口。
  • 1
  • 2
  • 3
  • 4
  • 5

区域

区域默认规则策略
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		黑名单
  • 1
  • 2
  • 3
  • 4

三、防火墙基本指令参数

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重载服务才会生效,生产建议。
  • 1
  • 2
  • 3
  • 4

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.
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

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.
  • 1
  • 2
  • 3
  • 4
  • 5

3.firewalld常用命令

#查看默认使用的区域
[root@web02 ~]# firewall-cmd --get-default-zone
public

#查看区域的规则
[root@web02 ~]# firewall-cmd --list-all
public (active)
  target: default
  icmp-block-inversion: no
  interfaces: eth0 eth1
  sources: 
  services: ssh dhcpv6-client
  ports: 80/tcp 80/udp
  protocols: 
  masquerade: no
  forward-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: 						#允许流量的IP
  services: 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 
success
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43

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 
public
  interfaces: eth0 eth1
trusted
  sources: 10.0.0.0/24
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18

五、防火墙配置放行策略

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=suibian
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

2.firewalld放行端口

[root@web02 ~]# firewall-cmd --add-port=80/tcp
success
[root@web02 ~]# firewall-cmd --list-all
public (active)
  target: default
  icmp-block-inversion: no
  interfaces: eth0 eth1
  sources: 
  services: ssh dhcpv6-client
  ports: 80/tcp
  protocols: 
  masquerade: no
  forward-ports: 
  source-ports: 
  icmp-blocks: 
  rich rules: 
  
#移除允许的端口
[root@web02 ~]# firewall-cmd --remove-port=80/tcp
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19

3.放行网段

#配置允许的网段
[root@web02 ~]# firewall-cmd --add-source=10.0.0.0/24 --zone=trusted 
success
  • 1
  • 2
  • 3

六、防火墙配置端口转发策略

端口转发是指传统的目标地址映射,实现外网访问内网资源
流量转发语法为:
firewalld-cmd --permanent --zone=<区域> --add-forward-port=port=<源端口号>:proto=<协议>:toport=<目标端口号>:toaddr=<目标IP地址>
  • 1
  • 2
  • 3

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: default
  icmp-block-inversion: no
  interfaces: eth0 eth1
  sources: 
  services: ssh dhcpv6-client
  ports: 80/tcp
  protocols: 
  masquerade: yes
  forward-ports: port=5555:proto=tcp:toport=22:toaddr=172.16.1.7
  source-ports: 
  icmp-blocks: 
  rich rules: 
	
#4.测试连接
[d:\~]$ ssh 10.0.0.8 5555

Connecting 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 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::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 1000
    link/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 1000
    link/ether 00:0c:29:c6:7b:5b 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:fec6:7b5b/64 scope link 
       valid_lft forever preferred_lft forever
[root@web01 ~]# 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48

七、防火墙富规则

firewalld中的富语言规则表示更细致,更详细的防火墙策略配置,他可以针对系统服务、端口号、原地址和目标地址等诸多信息进行更有针对性的策略配置,优先级在所有的防火墙策略中也是最高的,下面为firewalld富语言规则帮助手册
  • 1
#富规则语法
[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               #列出指定区里的所有富语言规则
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23

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'
  • 1
  • 2
  • 3
  • 4
  • 5

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拒绝,返回拒绝的内容
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

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 
success
  • 1
  • 2
  • 3
  • 4

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"
  • 1
  • 2

5.firewalld配置禁ping

[root@web02 ~]# firewall-cmd --add-rich-rule='rule family=ipv4 protocol value=icmp drop'
  • 1

注:一般所有的拒绝或接受都配置在默认区域,当指定IP访问指定端口或者服务的时候使用富规则

八、防火墙规则备份

#我们防火墙的配置,永久生效后会保存在/etc/firewalld/zones/这个目录下面,所以如果进行服务器集群扩展,或者配置相同防火墙时,只需要把该文件拿过来启动防火墙即可

#备份也备份以上文目录

#备份文件一定是在永久生效后才会在目录下多生成一个文件
  • 1
  • 2
  • 3
  • 4
  • 5

九、防火墙内部共享上网

在指定的带有公网IP的实例上启动Firewalld防火墙的NAT地址转换,以此达到内部主机上网。

在公司里面,服务器上没有外网的,除非使用路由器,或者使用防火墙实现内部共享上网
  • 1
  • 2
  • 3

1.开启IP伪装

[root@web02 ~]# firewall-cmd --add-masquerade 
success
[root@web02 ~]# firewall-cmd --add-masquerade --permanent 
success
[root@web02 ~]#
  • 1
  • 2
  • 3
  • 4
  • 5

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 = 1
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

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 eth1
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

4.测试访问外网

iptables防火墙

一、iptables防火墙概述

1.应用场景

1.主机安全
2.内部共享上网
3.端口或IP映射
  • 1
  • 2
  • 3

2.iptables工作流程

1.匹配规则是从上往下的依次执行的
2.只要匹配上规则,就不会再往下执行
3.如果都没有匹配到规则,就执行默认的规则
4.防火墙默认规则最后执行,默认允许所有

#注意:匹配越多的规则越往前放
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

二、iptables四表五链

#四表:
1.Filter表
2.NAT表
3.Managle表
4.Raw表

#五链:
1.INPUT
2.FORWARD
3.OUTPUT
4.PREROUTING
5.POSTRUTING
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

1.filter表

主要作用就是阻止和允许访问
包含的链:
1.INPUT:过滤进入主机的数据包
2.FORWARD:负责转发流经主机的数据包
3.OUTPUT:处理从主机出去的数据包
  • 1
  • 2
  • 3
  • 4
  • 5

2.NAT表

主要作用就是端口和IP转发
包含的链:
1.OUTPUT:处理从主机出去的数据包
2.PREROUTING:在数据包到达防火墙时进行判断,改写数据包目的地址或端口(端口转发)
3.POSTRUTING:在数据包到达防火墙时进行判断,改写数据包目的地址或端口(局域网共享上网)
  • 1
  • 2
  • 3
  • 4
  • 5

三、iptables安装

1.安装iptables

[root@web02 ~]# yum install -y iptables-services
  • 1

2.加载防火墙的内核模块

[root@m01 ~]# modprobe ip_tables
[root@m01 ~]# modprobe iptable_filter
[root@m01 ~]# modprobe iptable_nat
[root@m01 ~]# modprobe ip_conntrack
[root@m01 ~]# modprobe ip_conntrack_ftp
[root@m01 ~]# modprobe ip_nat_ftp
[root@m01 ~]# modprobe ipt_state

#查看加载的模块
[root@m01 ~]# lsmod | egrep 'filter|nat|ipt'
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

3.停止firewalld,启动iptables

[root@web02 ~]# systemctl stop firewalld
[root@web02 ~]# systemctl disable firewalld
Removed symlink /etc/systemd/system/multi-user.target.wants/firewalld.service.
Removed symlink /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.
[root@web02 ~]# systemctl start iptables.service
  • 1
  • 2
  • 3
  • 4
  • 5

四、iptables常用参数

#常用参数
(a)链管理:
    -N:new, 自定义一条新的规则链;
    -X: delete,删除自定义的规则链;
            注意:仅能删除 用户自定义的 引用计数为0的 空的 链;
    -P:Policy,设置默认策略;对filter表中的链而言,其默认策略有:
           ACCEPT:接受
           DROP:丢弃
           REJECT:拒绝
    -E:重命名自定义链;引用计数不为0的自定义链不能够被重命名,也不能被删除;
    
(b)规则管理:
    -A:append,追加;
    -I:insert, 插入,要指明位置,省略时表示第一条;
    -D:delete,删除;
        (1) 指明规则序号;
        (2) 指明规则本身;
    -R:replace,替换指定链上的指定规则;

    -F:flush,清空指定的规则链;
    -Z:zero,置零;
        iptables的每条规则都有两个计数器:
            (1) 匹配到的报文的个数;
            (2) 匹配到的所有报文的大小之和;        
(c)查看:
-L:list, 列出指定鏈上的所有规则;
    -n:numberic,以数字格式显示地址和端口号;
    -v:verbose,详细信息;
        -vv, -vvv
    -x:exactly,显示计数器结果的精确值;
    --line-numbers:显示规则的序号;
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31

五、iptables常用操作

1.查看防火墙(默认filter表)

[root@web02 ~]# iptables -nL
Chain INPUT (policy ACCEPT)
target     prot opt source               destination         

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

2.查看防火墙规则,指定nat表

[root@web02 ~]# iptables -nL -t nat
Chain PREROUTING (policy ACCEPT)
target     prot opt source               destination         

Chain INPUT (policy ACCEPT)
target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination         

Chain POSTROUTING (policy ACCEPT)
target     prot opt source               destination         
[root@web02 ~]# 

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

3.清除防火墙规则

#删除链中所有的规则
[root@web02 ~]# iptables -F
#删除用户定义的链
[root@web02 ~]# iptables -X
#规则计数器清零
[root@web02 ~]# iptables -Z
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

4.添加防火墙规则

[root@web02 ~]# iptables -t filter -A INPUT -p tcp --dport 22 -j DROP

iptables	#命令
-t			#指定表
filter		#表名字
-A			#添加规则至链的最后
INPUT		#链名字
-p			#指定协议
tcp			#tcp协议
--dport		#指定端口
-j			#指定动作
DROP		#丢弃
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

5.删除防火墙规则

[root@web02 ~]# iptables -nL --line-numbers
Chain INPUT (policy ACCEPT)
num  target     prot opt source               destination         
1    ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0            tcp dpt:22
2    DROP       tcp  --  0.0.0.0/0            0.0.0.0/0            tcp dpt:3306

Chain FORWARD (policy ACCEPT)
num  target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
num  target     prot opt source               destination         
[root@web02 ~]# 
[root@web02 ~]# iptables -D INPUT 2
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

六、防火墙配置实例

1.禁止端口访问

[root@web02 ~]# iptables -t filter -A INPUT -p tcp --dport 3306 -j DROP
  • 1

2.拒绝IP访问

#配置访问抛弃
[root@web02 ~]# iptables -t filter -A INPUT -p tcp -s 10.0.0.7 -i eth0 -j DROP
-s		指定源地址
-i		指定网卡
#测试访问
[root@web01 ~]# curl 10.0.0.8
curl: (7) Failed connect to 10.0.0.8:80; Connection timed out


#配置访问拒绝
[root@web02 ~]# iptables -t filter -A INPUT -p tcp -s 10.0.0.9 -i eth0 -j REJECT
#访问测试
[root@web03 ~]# curl 10.0.0.8
curl: (7) Failed connect to 10.0.0.8:80; Connection refused
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

3.禁止IP网段访问

[root@web02 ~]# iptables -t filter -A INPUT -p tcp -s 10.0.0.0/24 -i eth0 -j DROP
  • 1

4.只允许某个IP访问

[root@web02 ~]# iptables -t filter -A INPUT -p tcp ! -s 10.0.0.1 -i eth0 -j DROP
  • 1

5.匹配端口范围

#拒绝多个端口访问,可以使用逗号隔开
[root@web02 ~]# iptables -t filter -A INPUT -p tcp -m multiport --dport 21,22,23,24 -j DROP
-m				#指定扩展项
multiport		#多端口匹配

#写端口范围可以使用 : 在端口之间
[root@web02 ~]# iptables -t filter -A INPUT -p tcp --dport 22:100 -j DROP
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

七、企业里一般怎么配置

1.配置之前考虑下

1.考虑防火墙开在哪台机器上
2.该机器部署了什么服务
	nginx
	keepalived
3.服务开启的是什么端口
	80
	443
	22
4.默认规则为所有都拒绝
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

2.配置安全规则

#允许访问80和443
iptables -I INPUT -p tcp -m multiport --dport 80,443 -j ACCEPT

-I        添加规则至前面

#只允许跳板机连接22端口
iptables -A INPUT -p tcp -s 172.16.1.61 --dport 22 -j ACCEPT

#禁止ping
iptables -A INPUT -p icmp --icmp-type 8 ! -s 172.16.1.61 -j DROP

#允许访问外网
iptables -A INPUT -i eth0 -j ACCEPT

#默认拒绝所有
iptables -P INPUT DROP

-P        更改policy默认策略
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18

天坑:

根据以上配置方法,最后一步设置了默认拒绝所有规则,那么跳板机连接主机后,千万不要进行清理防火墙的操作,否则就什么都连接不上了
因为清理防火墙规则不会清理'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_20200116


  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18

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 -nL
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

八、防火墙规则永久生效

#把规则写入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  ]
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20

九、内部共享上网

1.在m01上操作

echo 'net.ipv4.ip_forward = 1' >> /etc/sysctl.conf
sysctl -p

iptables -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   源地址转换指向
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

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 eth1
  • 1
  • 2
  • 3
  • 4
  • 5

十、端口转发和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    目标地址转换指向
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

2.IP转发

[root@m01 ~]# iptables -t nat -A PREROUTING -d 10.0.1.61 -j DNAT --to-destination 172.16.1.7

iptables -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
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小小林熬夜学编程/article/detail/552564
推荐阅读
相关标签
  

闽ICP备14008679号