iptables防火墙

防火墙iptables

iptables命令 是Linux上常用的防火墙软件,是netfilter项目的一部分。可以直接配置,也可以通过许多前端和图形界面配置。

一、iptables基本认识

1、简介

(1)Netfilter组件
集成在内核中,内核中选取五个位置放了五个hook(勾子) function(INPUT、OUTPUT、FORWARD、PREROUTING、POSTROUTING),而这五个hook function向用户开放,用户可以通过一个命令工具(iptables)向其写入规则
由信息过滤表(table)组成,包含控制IP包处理的规则集(rules),规则被分组放在链(chain)上
(2)三种报文流向:
流入本机:PREROUTING --> INPUT-->用户空间进程
流出本机:用户空间进程 -->OUTPUT--> POSTROUTING
转发:PREROUTING --> FORWARD --> POSTROUTING

2、iptables组成

iptables由五个表和五个链以及一些规则组成

  • 五个表table:filter、nat、mangle、raw、security
    filter表:过滤规则表,根据预定义的规则过滤符合条件的数据包
    nat表:network address translation 地址转换规则表
    mangle:修改数据标记位规则表
    raw:关闭NAT表上启用的连接跟踪机制,加快封包穿越防火墙速度
    security:用于强制访问控制(MAC)网络规则,由Linux安全模块(如SELinux)实现
    优先级由高到低的顺序为:security -->raw-->mangle-->nat-->filter
  • 五个内置链chain
    INPUT(input)
    OUTPUT (output)
    FORWARD (forward)
    PREROUTING (prerouting)
    POSTROUTING (postrouting)

3、iptables规则

规则:
(1)匹配规则
基本匹配:IP,端口,TCP的Flags(SYN,ACK等)
扩展匹配:通过复杂高级功能匹配
(2)处理动作
称为target,跳转目标
内建处理动作:ACCEPT,DROP,REJECT(拒绝),SNAT,DNATMASQUERADE,MARK,LOG...
自定义处理动作:自定义chain,利用分类管理复杂情形

规则要添加在链上,才生效;添加在自定义上不会自动生效
链chain:
内置链:每个内置链对应于一个钩子函数
自定义链:用于对内置链进行扩展或补充,可实现更灵活的规则组织管理机制;只有Hook钩子调用自定义链时,才生效
语法:

删除虚拟网卡
yum info libvirt-daemon (重启后生效)

iptables(选项)(参数)

选项:

-t, --table table 对指定的表 table 进行操作, table 必须是 raw, nat,filter,mangle 中的一个。如果不指定此选项,默认的是 filter 表。

# 通用匹配:源地址目标地址的匹配
-p:指定要匹配的数据包协议类型;
-s, --source [!] address[/mask] :把指定的一个/一组地址作为源地址,按此规则进行过滤。当后面没有 mask 时,address 是一个地址,比如:192.168.1.1;当 mask 指定时,可以表示一组范围内的地址,比如:192.168.1.0/255.255.255.0。
-d, --destination [!] address[/mask] :地址格式同上,但这里是指定地址为目的地址,按此进行过滤。
-i, --in-interface [!] <网络接口name> :指定数据包的来自来自网络接口,比如最常见的 eth0 。注意:它只对 INPUT,FORWARD,PREROUTING 这三个链起作用。如果没有指定此选项, 说明可以来自任何一个网络接口。同前面类似,"!" 表示取反。
-o, --out-interface [!] <网络接口name> :指定数据包出去的网络接口。只对 OUTPUT,FORWARD,POSTROUTING 三个链起作用。

# 查看管理命令
-L, --list [chain] 列出链 chain 上面的所有规则,如果没有指定链,列出表上所有链的所有规则。

# 规则管理命令
-A, --append chain rule-specification 在指定链 chain 的末尾插入指定的规则,也就是说,这条规则会被放到最后,最后才会被执行。规则是由后面的匹配来指定。
-I, --insert chain [rulenum] rule-specification 在链 chain 中的指定位置插入一条或多条规则。如果指定的规则号是1,则在链的头部插入。这也是默认的情况,如果没有指定规则号。
-D, --delete chain rule-specification -D, --delete chain rulenum 在指定的链 chain 中删除一个或多个指定规则。
-R num:Replays替换/修改第几条规则

# 链管理命令(这都是立即生效的)
-P, --policy chain target :为指定的链 chain 设置策略 target。注意,只有内置的链才允许有策略,用户自定义的是不允许的。
-F, --flush [chain] 清空指定链 chain 上面的所有规则。如果没有指定链,清空该表上所有链的所有规则。
-N, --new-chain chain 用指定的名字创建一个新的链。
-X, --delete-chain [chain] :删除指定的链,这个链必须没有被其它任何规则引用,而且这条上必须没有任何规则。如果没有指定链名,则会删除该表中所有非内置的链。
-E, --rename-chain old-chain new-chain :用指定的新名字去重命名指定的链。这并不会对链内部照成任何影响。
-Z, --zero [chain] :把指定链,或者表中的所有链上的所有计数器清零。

-j, --jump target <指定目标> :即满足某条件时该执行什么样的动作。target 可以是内置的目标,比如 ACCEPT,也可以是用户自定义的链。
-h:显示帮助信息;

基本参数

参数	作用
-P	设置默认策略:iptables -P INPUT (DROP
-F	清空规则链
-L	查看规则链
-A	在规则链的末尾加入新规则
-I	num 在规则链的头部加入新规则
-D	num 删除某一条规则
-s	匹配来源地址IP/MASK,加叹号"!"表示除这个IP外。
-d	匹配目标地址
-i	网卡名称 匹配从这块网卡流入的数据
-o	网卡名称 匹配从这块网卡流出的数据
-p	匹配协议,如tcp,udp,icmp
--dport num	匹配目标端口号
--sport num	匹配来源端口号

环境准备:
卸载虚拟网卡
yum remove libvirt-daemon (重启)

实例:
空当前的所有规则和计数

iptables -F  # 清空所有的防火墙规则
iptables -X  # 删除用户自定义的空链
iptables -Z  # 清空计数

配置允许\拒绝ssh端口连接

[root@master ~]# iptables -A INPUT -s 192.168.1.0/24 -p tcp --dport 22 -j ACCEPT
[root@master ~]# iptables -A INPUT -s 192.168.37.11 -p tcp --dport 22 -j REJECT

允许本地回环地址可以正常使用

iptables -A INPUT -i lo -j ACCEPT    
iptables -R INPUT 5 -i lo -j ACCEPT     # 替换序列号5规则

设置默认的规则

iptables -P INPUT DROP # 配置默认的不让进
iptables -P FORWARD DROP # 默认的不允许转发
iptables -P OUTPUT ACCEPT # 默认的可以出去

配置白名单

iptables -A INPUT -s 192.168.1.0/24 -p all -j ACCEPT  # 允许机房内网机器可以访问
iptables -A INPUT -s 192.168.140.0/24 -p all -j ACCEPT  # 允许机房内网机器可以访问
iptables -A INPUT -s 183.121.3.7 -p tcp --dport 3380 -j ACCEPT # 允许183.121.3.7访问本机的3380端口

开启相应的服务端口

iptables -A INPUT -p tcp --dport 80 -j ACCEPT # 开启80端口,因为web对外都是这个端口
iptables -A INPUT -p icmp --icmp-type 8 -j ACCEPT # 允许被ping
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT # 已经建立的连接得让它进来

禁止某主机ping服务器,包丢弃

iptables -t filter -A INPUT -s 192.168.37.11 -j DROP  #指定表filter丢弃访问的包,不允许访问

测试网络

tcpdump -i eth0 -nn src host 192.168.37.6    #网卡为测试机网卡

列出序列号查看

[root@master ~]# iptables -vxnL --line-numbers
Chain INPUT (policy ACCEPT 72 packets, 4892 bytes)
num      pkts      bytes target     prot opt in     out     source               destination         
1           0        0 REJECT     tcp  --  *      *       192.168.37.11        0.0.0.0/0            reject-with icmp-port-unreachable
2          37    14076 REJECT     tcp  --  *      *       192.168.37.20        0.0.0.0/0            tcp dpt:22 reject-with icmp-port-unreachable
3           1      104 ACCEPT     all  --  lo     *       0.0.0.0/0            0.0.0.0/0           
4         178    14952 DROP       all  --  *      *       192.168.37.11        0.0.0.0/0    

禁止某个网段

禁止某个网段访问(及其危险,需要注意自己主机网段,别把自己也给禁止了)
iptables -t filter -A INPUT -s 192.168.37.0/24 -j DROP

删除规则

iptables -D INPUT 1   #1为num序列号

插入条允许192.168.37.1访问规则,优先级高例上上条可用

iptables -I INPUT -s 192.168.37.1 -j ACCEPT

设置序列号,-R替换规则

7、设置序列号,排序
iptables -I INPUT 2 -s 172.16.0.0/16 -j ACCEPT
8、替换规则链规则
iptables -R INPUT 2 -s 172.16.0.0/24 -j ACCEPT

允许插入序列3中两个ip访问

iptables -I INPUT 3 -s 192.168.37.6,192.168.37.17 -j ACCEPT

全拒绝访问,极其危险,连自己都访问不了,不过优先级可以比他高序列号可以

 iptables -A INPUT  -j REJECT 

设置主机自己访问自己,高要高于序列号5即可

iptables -I INPUT 5 -s 192.168.37.7,127.0.0.1 -j ACCEPT

设置回环网卡也可以访问
iptables -R INPUT 5 -i lo -j ACCEPT

iptables
以上全是INPUT例子,也需要考虑OUTPUT
14、允许某个网段出,这个极其不建议这样做
iptables -I OUTPUT 1 -d 192.168.37.0/24 -j ACCEPT
15、清空OUTPUT链规则
iptables -F OUTPUT

应用iptables设置:
[root@localhost ~]# yum install httpd -y
[root@localhost ~]# echo www.pansn.com > /var/www/html/index.html
[root@localhost ~]# echo www.pansn.com > /var/www/html/index.html

允许192.168.37.6上的httpd访问

iptables -I INPUT 3 -s 192.168.37.6 -p tcp --dport 80 -j ACCEPT

允许192.168.37.6上的mysql访问

iptables -I INPUT 3 -s 192.168.37.6 -p tcp --dport 3306 -j ACCEPT

允许192.168.37.17访问

iptables -I INPUT 5 -s 192.168.37.17 -j ACCEPT

拒绝tcp的第一次握手syn,但ping可以访问,ping属于upd协议

iptables -R INPUT 5 -s 192.168.37.17 -p tcp --syn -j REJECT

20、删除18.19例规则
iptables -D INPUT 5
iptables -D INPUT 5

**自己可以ping通别人,别人ping不通 **
0/0 echo-reply icmp应答
8/0 echo-request icmp请求

iptables -I INPUT 5 -P icmp --icmp-type 0 -j ACCEPT

允许samba服务访问

方法1:
iptables -I INPUT 5 p tcp --dport 139 -j ACCEPT
iptables -I INPUT 5 p tcp --dport 445 -j ACCEPT
方法2:使用multiport模块可使用多端口替换序号5
iptables -R INPUT 5 -p tcp -m multiport -dports 139,445 -j ACCEPT
iptables -A INPUT -s 172.16.0.0/16 -d 172.16.100.10 -p tcp -m multiport --dports 20:22,80 -j ACCEPT

23、使用mac地址允许访问
iptables -I INPUT 5 -m mac --mac-source xxxxx -j ACCEPT

24、string扩展
对报文中的应用层数据做字符串模式匹配检测
iptables -A OUTPUT -s 172.16.100.10 -d 0/0 -p tcp --sport 80 -m string --algo bm --string “google" -j REJECT

25、time拓展
时间各减8:9点到18点允许访问

26、connlimit扩展
根据每客户端IP做并发连接数数量匹配
限制httpd访问并发超过100次访问
iptables -A INPUT -m -p tcp --dport 80 connlimit --connlimit-above 100 -j REJECT
27、插入ipables访问日志
iptables -I INPUT -s 192.168.37.6 3 -j LOG -log-prefix "from 37.6 access:"
ipatbles -nvL

iptables-svae > data/iptables.rules

恢复:
iptables-restore < /data/iptables.rules

开机启动:
vim /etc/re.d/rc.local
/data/iptables.reles

命令firewall
1、关闭firewalld
systemctl stop firewalld
systemctl status iptables
iptable -F
2、启动iptable管理
systemctl start iptables 启动iptables管理
3、输入命令管理
vim /etc/sysconfig/iptables 添加

iptables-save > /etc/sysconfit/iptables 从定向

centos6
vim /etc/sysconfig/iptables 添加

iptables-save > /etc/sysconfit/iptables 从定向

命令保存到/etc/sysconfit/iptables
service iptables save

二、网络防火墙

1、作用:
iptables/netfilter
(1) 充当网关
(2)使用filter表的FORWARD链

实例:内网和外网访问控制

node1 centos6 内网 192.168.37.30
node2 centos7 防火墙 192.168.37.10 172.16.132.39
node3 centos7 外网 172.16.132.32

(1)、环境部署
1、node3更改 桥接网卡

1、改成自动获取,也可改成静态的
[root@node3 ~]# vi /etc/sysconfig/network-scripts/ifcfg-ens33
TYPE=Ethernet
BOOTPROTO=dhcp
2、添加网卡
route -add default gw 172.16.132.39

2、node1更改网络 NAT网卡

[root@node3 ~]# vi /etc/sysconfig/network-scripts/ifcfg-ens33
TYPE=Ethernet
BOOTPROTO=static
NAME=ens33
DEVICE=ens33
ONBOOT=yes
IPADDR=192.168.73.20
PREFIX=24
GATEWAY=192.168.37.10

3、node2开启转发功能 桥接网卡和NAT网卡

[root@node2 ~]# vi /etc/sysctl.conf  
net.ipv4.ip_forward=1
[root@node2 ~]# sysctl -p
net.ipv4.ip_forward = 1

2、node3
node1和node3分别安装httpd测试网页

node2:
添加路由:
vi /etc/sysctl.conf

net.ipv4.ip_forward = 1
[root@node2 ~]# sysctl -p 生效
sysctl -a | grep ip

iptables -A FORWARD -J REJECT 全部拒绝所有

内网可以访问外网,外网访问不了内网

ipteabes -I FORWARD 1 -s 192.168.37.0/24 -p icmp --icmp-type 8 -j ACCEPT  请求
iptables -I FORWARD 1 -s 172.16.0.0/16 -p icmp --icmp-type 0 -j ACCEPT  响应
测试:
ping 172.16.312.32(node1)   ping 192.168.37.30(node3)

删除icmp 0响应规则

iptables -D ROWARD 1    

测试:ping 172.16.312.32(node1)

效果:无法ping通

内网ping恢复通外网,放行到外网相应报文

测试:ping 172.16.312.32(node1)

内网访问外网http服务

iptables -D ROWARD 2  删除0响应规则
  
iptables -I FORWARD 1 -m state --state ESTABLISHED,RELATED -j ACCEPT    状态添加

测试:curl 172.16.312.32(node1)
效果:不可以访问,但可以ping通

iptables -I FORWARD 2 -s 192.168.37.0/24 -p tcp --dport 80 -j ACCEPT    

测试:curl 172.16.312.32(node1)
效果:可以访问
iptables -I FORWARD 2 -s 192.168.37.0/24 -P tcp -m multiport --dports 80,443 -j ACCEPT   添加httpds访问

测试:服务端需要安装mod_ssl模块(node3)
curl -k https://172.16.312.32(node1)
效果:可以访问

外网访问内网信息

iptables -I FORWARD 2 -s 172.16.132.32 -p tcp -m multiport --dports 80,443 -j ACCEPT
测试:curl 192.168.37.30(node3)
效果:可以访问

node3

3、自定义链


iptables -N fromlantointernet   新建iptables名

iptables -E fromlantointernet FTI 修改名

添加规则
iptabes -A FIT -s 192.168.37.7 -p tcp -m multiport --dports 80,443 -j ACCRPT
iptabes -A FIT -s 192.168.37.7 -p icmp-type 9 -j ACCEPT

iptabes -I FORWARD 2 -j FIT   添加自定义链动作到FORWAR表中
iptables -x 
替换后添加22号端口允许访问

iptables -I FORWARD 4 -d 192.168.37.6 -p tcp -m multiport --dports 80,443,22 -j ACCEPT

删除自定义链,安装顺序反序即可
iptables -D FORWARD 2 

iptables -F FIT

iptabes -X FIT

三、SNAT

SNAT Source Network Address Translation 源网络地址转换
让本地网络中的主机通过某一特定地址访问外部网络,实现地址伪装
请求报文:修改源IP
1、过程
    企业内部的主机A想访问互联网上的主机C,首先将请求数据包(源:ipA,目标:ipC)发送到防火墙所在主机B,B收到后将数据包源地址改为本机公网网卡的ip(源:ipA,目标:ipB),然后经互联网发送给C;C收到后将回应包(源:ipC,目标:ipB)转发给C的路由器,经互联网将回应包转发给B,B收到回应包后修改其目的地址,即回应包改为(源:ipC,目标:ipA)然后将数据包转发给A。
    在这个过程中,修改了请求报文的源地址,叫做SNAT(source NAT POSTROUTING),用于局域网访问互联网
2、实例:

实验环境:
node1 centos6 内网 192.168.37.30 -- B
node2 centos7 防火墙 192.168.37.10 172.16.132.39 -- A
node3 centos7 外网 172.16.132.32 --C

node3网关(桥接网卡)

添加默认路由:
ip route add default via 192.168.0.1 dev eth0

node1网关(NAT网卡)

node2配置

node2开启转发功能 桥接网卡和NAT网卡

[root@node2 ~]# vi /etc/sysctl.conf  
net.ipv4.ip_forward=1
[root@node2 ~]# sysctl -p
net.ipv4.ip_forward = 1

配置

iptables -t nat -A POSTROUTING -s 192.168.37.0/24 -j SNAT --to-source 172.16.132.39

过程

172.16.132.32上抓包,如图,显示源地址为172.16.132.39
在C看来,是B在访问C,而不是A,但是实际上是A在访问C,数据包是从A发往C的,只是经过B时将源地址改为B,但实际上是A发过来的数据包

四、DNAT

DNAT Destination Network Address Translation 目的网络地址转换
互联网主机C想访问企业内部的web服务器A,但A的地址是私有地址,无法直接访问。此时,C可以访问防火墙的公网地址,C的请求数据包(源:ipC,目标:ipB)到达防火墙B后,在B的prerouting上将请求数据包的目标地址进行修改,并将数据包(源:ipC,目标:ipA)发送给A。A收到后进行回复发送响应包(源:ipA,目的ipC)到防火墙,防火墙收到后对数据包源地址进行修改,并将响应包(源:ipB,目标:ipC)给C。利用这种机制可以将企业内部的服务发布到互联网。

在这个过程中,修改了请求报文的目标地址,叫做DNAT(destination NAT POSTROUTING),用于互联网访问局域网。
       必须在防火墙的prerouting上设置修改目标地址的防火墙策略,因为若不在此处修改,请求数据包通过prerouting和路由表后,由于目标主机是本机,就会将数据包发往input,进而被发往本地进程。
实例:


iptables -t nat -A PREROUTING -s 0/0 -d 172.16.132.39 -p tcp --dport 22 -j DNAT --to-destination 192.168.37.30:22
iptables -t nat -A PREROUTING -s 0/0 -d 172.16.132.39.6 -p tcp --dport 80 -j DNAT --to-destination 192.168.37.30:8080

title

五、REDIRECT

从定向
实例:
iptables -t nat -A PREROUTING -d 172.16.132.39 -p tcp --dport 80 -j REDIRECT --to-ports 8080

六、firewalld服务

详情:

  • firewalld是CentOS 7.0新推出的管理netfilter的工具
  • firewalld是配置和监控防火墙规则的系统守护进程。可以实现iptables,ip6tables,ebtables的功能
  • firewalld服务由firewalld包提供
  • firewalld支持划分区域zone,每个zone可以设置独立的防火墙规则
  • 归入zone顺序:
    先根据数据包中源地址,将其纳为某个zone
    纳为网络接口所属zone
    纳入默认zone,默认为public zone,管理员可以改为其它zone
  • 网卡默认属于public zone,lo网络接口属于trusted zone(信任区域)

firewalld zone分类
title

内置预服务:
firewall-cmd --get-services 查看预定义服务列表
title

图形化firewalld
需关闭iptables,同时开会有冲突

  • firewall-config (firewall-config包)图形工具
  • firewall-cmd (firewalld包)命令行工具
  • /etc/firewalld 配置文件,一般不建议
    title

firewall-cmd 命令选项
--get-zones 列出所有可用区域
--get-default-zone 查询默认区域
--set-default-zone= 设置默认区域
--get-active-zones 列出当前正使用的区域
--add-source=[--zone=] 添加源地址的流量到指定区域,如果无--zone= 选项,使用默认区域
--remove-source= [--zone=] 从指定区域中删除源地址的流量,如无--zone= 选项,使用默认区域
--add-interface=[--zone=] 添加来自于指定接口的流量到特定区域,如果无--zone= 选项,使用默认区域
--change-interface=[--zone=] 改变指定接口至新的区域,如果无--zone= 选项,使用默认区域
--add-service= [--zone=] 允许服务的流量通过,如果无--zone= 选项,使用默认区域
--add-port=<PORT/PROTOCOL>[--zone=] 允许指定端口和协议的流量,如果无--zone= 选项,使用默认区域
实例:

firewall-com --get-zones

firewall-cmo -set-defult-zone=trusted     设置成信任区域,啥服务都可以访问,建议设置成pulic
firewall-cmd --get-active-zones    列出当前正使用的区域

firewall-cmd --add-service=ftp     添加ftp访问
firewall-cmd --list-serrvice      验证,列出规则(添加服务为临时生效)

firewall-cmd --reload   永久生效

查看默认zone
firewall-cmd --get-default-zone
默认zone设为dmz
firewall-cmd --set-default-zone=dmz
在internal zone中增加源地址192.168.0.0/24的永久规则   --permanent(保存但不生效)
firewall-cmd --permanent --zone=internal --add-source=192.168.0.0/24
在internal zone中增加协议mysql的永久规则
firewall-cmd --permanent –zone=internal --add-service=mysql
加载新规则以生效
firewall-cmd --reload

配置firewalld

七、rich规则

rich规则比基本的firewalld语法实现更强的功能,不仅实现允许/拒绝,还可以实现日志syslog和auditd,也可以实现端口转发,伪装和限制速率
实例:

拒绝从192.168.0.11的所有流量,当address 选项使用source 或 destination时,必须用family= ipv4 |ipv6
firewall-cmd --permanent --zone=public --add-rich-rule='rule family=ipv4 source address=192.168.0.11/32 reject'
限制每分钟只有两个连接到ftp服务
firewall-cmd --add-rich-rule=‘rule service name=ftp limit value=2/m accept’
抛弃esp( IPsec 体系中的一种主要协议)协议的所有数据包
firewall-cmd --permanent --add-rich-rule='rule protocol value=esp drop'
接受所有192.168.1.0/24子网端口5900-5905范围的TCP流量
firewall-cmd --permanent --zone=vnc --add-rich-rule='rule family=ipv4 source address=192.168.1.0/24 port port=5900-5905 protocol=tcp accept'

rich日志规则

接受ssh新连接,记录日志到syslog的notice级别,每分钟最多三条信息
firewall-cmd --permanent --zone=work --add-rich-rule='rule service name="ssh" log prefix="ssh " level="notice" limit value="3/m" accept
从2001:db8::/64子网的DNS连接在5分钟内被拒绝,并记录到日志到audit,每小时最大记录一条信息
firewall-cmd --add-rich-rule='rule family=ipv6 source address="2001:db8::/64" service name="dns" audit limit value="1/h" reject' --timeout=300

**伪装和端口转发**
NAT网络地址转换,firewalld支持伪装和端口转发两种NAT方式
伪装NAT
firewall-cmd --permanent --zone=<ZONE> --add-masquerade
firewall-cmd --query-masquerade 检查是否允许伪装
firewall-cmd --add-masquerade 允许防火墙伪装IP
firewall-cmd --remove-masquerade 禁止防火墙伪装IP
示例:
firewall-cmd --add-rich-rule='rule family=ipv4 source address=192.168.0.0/24 masquerade'
伪装和端口转发

端口转发:将发往本机的特定端口的流量转发到本机或不同机器的另一个端口。通常要配合地址伪装才能实现
firewall-cmd --permanent --zone=<ZONE> --add-forward-port=port=<PORTNUMBER>:proto=<PROTOCOL>[:toport=<PORTNUMBER>][:toaddr=<IPADDR>]
说明:toport= 和toaddr= 至少要指定一个
示例:
转发传入的连接9527/TCP,到防火墙的80/TCP到public zone 的192.168.0.254
firewall-cmd --add-masquerade 启用伪装
firewall-cmd --zone=public --add-forward-port=port=9527:proto=tcp:toport=80:toaddr=192.168.0.254
示例:
转发从192.168.0.0/24来的,发往80/TCP的流量到防火墙的端口8080/TCP
firewall-cmd --zone=work --add-rich-rule='rule family=ipv4 source address=192.168.0.0/24 forward-port port=80 protocol=tcp to-port=8080

八、iptabes优化

任何不允许的访问,应该在请求到达时给予拒绝
规则在链接上的次序即为其检查时的生效次序
基于上述,规则优化:

安全放行所有入站和出站的状态为ESTABLISHED状态连接
谨慎放行入站的新请求
有特殊目的限制访问功能,要在放行规则之前加以拒绝
同类规则(访问同一应用),匹配范围小的放在前面,用于特殊处理
不同类的规则(访问不同应用),匹配范围大的放在前面
应该将那些可由一条规则能够描述的多个规则合并为一条
设置默认策略,建议白名单(只放行特定连接)
1) iptables -P,不建议
2) 建议在规则的最后定义规则做为默认策略

posted @ 2019-08-03 10:23  月黑风高人不善  阅读(808)  评论(0编辑  收藏  举报