linux防火墙配置

发布时间 2023-10-09 18:01:30作者: 小糊涂90

SNAT

在172.16.188.10上配置:

#新增源地址转换规则(iptables工具管理)

iptables -t nat -A POSTROUTING -s 10.0.0.0/8 -j SNAT -o face1  --to 172.16.188.10

#新增源地址转换规则(firewalld服务管理)

firewall-cmd   --direct --add-passthrough ipv4 -t nat -A POSTROUTING -s 10.0.0.0/8 -j SNAT --to-source 172.16.188.10

firewall-cmd    --permanent --direct --add-passthrough ipv4 -t nat -A POSTROUTING -s 10.0.0.0/8 -j SNAT --to-source 172.16.188.10

#获取直接传递的规则(firewalld服务管理)

firewall-cmd   --direct --get-all-passthroughs  

#删除直接传递的规则

firewall-cmd   --direct --remove-passthrough ipv4 -t nat -A POSTROUTING -s 10.0.0.0/8 -j SNAT --to-source 172.16.188.10

firewall-cmd    --permanent --direct --remove-passthrough ipv4 -t nat -A POSTROUTING -s 10.0.0.0/8 -j SNAT --to-source 172.16.188.10

#查看源地址转换规则

iptables -t nat -nL POSTROUTING

## 开放端口

#增加端口开放

firewall-cmd --add-port 5000/tcp 

firewall-cmd  --permanent  --add-port 5000/tcp 

#删除端口开放

firewall-cmd --remove-port 5000/tcp 

firewall-cmd --permanent  --remove-port 5000/tcp 



## 添加路由

#添加路由规则

ip route add 192.168.13.159 via 10.1.1.1 dev back1





在172.16.188.11上配置:

iptables -t nat -A POSTROUTING -s 10.0.0.0/8 -j SNAT -o face1  --to 172.16.188.11

firewall-cmd   --direct --passthrough ipv4 -t nat -A POSTROUTING -s 10.0.0.0/8 -j SNAT --to-source 172.16.188.11

firewall-cmd  --permanent  --direct --passthrough ipv4 -t nat -A POSTROUTING -s 10.0.0.0/8 -j SNAT --to-source 172.16.188.11

firewall-cmd --add-port 5000/tcp 

firewall-cmd  --permanent  --add-port 5000/tcp 

firewall-cmd --remove-port 5000/tcp 

firewall-cmd --permanent  --remove-port 5000/tcp 

192.168.13.158 via 10.2.2.11 dev back1

iptables -t nat -nL POSTROUTING



## 使用富规则限制所有ip访问

在192.168.13.158配置:

firewall-cmd  --permanent   --add-rich-rule="rule family="ipv4" source address="0.0.0.0/0" reject"

firewall-cmd  --permanent   --add-rich-rule="rule family="ipv4" destination address="0.0.0.0/0" reject"

firewall-cmd  --list-all --zone=public

firewall-cmd  —reload  

# 使用信任区放开指定ip访问


firewall-cmd --permanent --zone=trusted --add-source=172.16.188.10

firewall-cmd  --list-all --zone=trusted


firewall-cmd  --permanent   --add-rich-rule="rule family="ipv4" source address="0.0.0.0/0" reject"

firewall-cmd  --list-all --zone=public

firewall-cmd --permanent --zone=trusted --add-source=172.16.188.11

firewall-cmd --zone=trusted --add-source=172.16.188.11

firewall-cmd  --list-all --zone=trusted

匹配目录网络指定接口做snat

sudo iptables -t nat -A POSTROUTING -d 192.168.2.0/24 -o eth0 -j SNAT --to-source 192.168.1.100

自动地址伪装


#添加地址伪装实现snat,两条命令,永久和临时

firewall-cmd  --permanent  --add-rich-rule='rule family=ipv4 source address=10.0.0.1  masquerade'

firewall-cmd   --add-rich-rule='rule family=ipv4 source address=10.0.0.1  masquerade'



#删除,两条命令,永久和临时

firewall-cmd  --permanent  --remove-rich-rule='rule family=ipv4 source address=10.0.0.1  masquerade'

firewall-cmd   --remove-rich-rule='rule family=ipv4 source address=10.0.0.1  masquerade'



#查看

firewall-cmd  --list-all



# 重启防火墙,验证永久规则是否生效

systemctl restart firewalld

禁止ping和被ping

#禁止单网卡被ping,其它网卡可以被ping

iptables -I INPUT    -i br0 -p icmp --icmp-type echo-request -j DROP

#恢复ping

iptables -D INPUT    -i br0 -p icmp --icmp-type echo-request -j DROP



#禁止使用br0网卡ping别人。其它网卡可以ping

 iptables -I OUTPUT    -o br0 -p icmp --icmp-type echo-request -j DROP

#恢复

 iptables -D OUTPUT    -o br0 -p icmp --icmp-type echo-request -j DROP

禁止被路由追踪

#禁止windows使用tracert追踪路由

iptables -A OUTPUT -o br0 -p ICMP --icmp-type echo-reply  -j DROP



#禁止linuxtracertroute追踪路由

iptables -A OUTPUT -o br0 -p ICMP --icmp-type destination-unreachable -j DROP

mss,mtu

firewall-cmd  --direct --add-passthrough ipv4  -A FORWARD -p tcp -m tcp --tcp-flags SYN,RST SYN -j  TCPMSS --set-mss 1400

firewall-cmd --permanent  --direct --add-passthrough ipv4  -A FORWARD -p tcp -m tcp --tcp-flags SYN,RST SYN -j  TCPMSS --set-mss 1400

删除iptables规则

#首先查看当前iptables的nat表内的规则
iptables -t nat -nL --line

#删除nat表,PREROUTING链中的第一条规则
iptables -t nat -D PREROUTING 1

gap安全配置防火墙策略

###所有策略在gap两端均需要配置###
#永久策略,拒绝所有源地址访问本机
firewall-cmd  --permanent   --add-rich-rule="rule family="ipv4" source address="0.0.0.0/0" reject"
#永久策略,拒绝所有目的地址访问本机
firewall-cmd  --permanent   --add-rich-rule="rule family="ipv4" destination address="0.0.0.0/0" reject"
#永久策略,信任t端back地址,可以访问本机
firewall-cmd --permanent --zone=trusted --add-source=4.250.240.1
#永久策略,信任u端back地址,可以访问本机
firewall-cmd --permanent --zone=trusted --add-source=4.250.240.2
#永久策略,信任gap左侧地址,可以访问本机
firewall-cmd --permanent --zone=trusted --add-source=4.250.240.3
#永久策略,信任gap右侧地址,可以访问本机
firewall-cmd --permanent --zone=trusted --add-source=4.250.240.4
#永久策略,添加转发规则,只允许源地址4.250.240.0/24目的端口32766经过gap转发。
firewall-cmd  --permanent  --direct --passthrough ipv4 -t filter -A FORWARD -s 4.250.240.0/24  -p udp --dport 32766 -j ACCEPT
#永久策略,添加转发规则,只允许目的地址4.250.240.0/24源端口32766经过gap转发。
firewall-cmd  --permanent  --direct --passthrough ipv4 -t filter -A FORWARD -d 4.250.240.0/24  -p udp --sport 32766 -j ACCEPT
#永久策略,拒绝所有其它地址经过本机转发
firewall-cmd  --permanent  --direct --passthrough ipv4 -t filter -A FORWARD -j REJECT
#加载策略,使其生效
firewall-cmd --reload

ebtables

ebtables -A FORWARD -p IPv4 -j ACCEPT
ebtables -A FORWARD -p ARP -j ACCEPT
ebtables -A FORWARD -i eth0 -p IPv4 --ip-proto udp --ip-dport <指定UDP端口> -j ACCEPT
ebtables -A FORWARD -i eth0 -p IPv4 -j DROP



ebtables -P FORWARD DROP

ebtables -A FORWARD -p ARP -j ACCEPT

ebtables -A FORWARD  -p IPv4 --ip-proto udp --ip-dport 32766 -j ACCEPT





### 一. ebtables简介

ebtables的全称是Ethernet bridge frame table administration。ebtables是一个应用程序用于设置和维护规则表这些表中的规则用于检查以太网帧。和iptables是类似的但是使用比iptables使用更简单。

ebtables有三个表分别是filternatbroute。filter是命令默认操作的表使用"-t table"来指定要操作的表-t参数也必须是ebtables命令行的第一个参数。

ebtables也有链和iptables一样当数据帧匹配到链中的一条规则时数据帧将按照该规则被处理如果不匹配将测试链中的下一条规则。

ebtables和iptables一样有多个目标分别是ACCEPTDROPCONTINUE和RETURN。ACCEPT意味着让数据帧通过DROP意味着数据帧将被丢弃在BROUTING链中ACCEPT和DROP代表不同的含义。CONTINUE意味着下一条规则被检查RETURN表示停止遍历此链跳回到调用该链的链的下一条规则。

### 二. ebtables命令

**1. 基本命令**

-A--append

在指定的链后追加一条规则。

-D--delete

在指定的链中删除一条规则。删除有两种方法第一种是通过序号删除语法是start_nr[:end_nr]。当start_nr和end_nr都指定时则删除它们之间包括自己的所有规则如果end_nr被忽略则删除从start_nr开始的所有规则。第二种是通过指定要删除指令的完整形式。如果有多条相同的指令一次执行只删除其中第一条。

-I--insert

插入一条规则到指定的链中。用法同iptables。

-P--policy

修改指定链的默认目标可以是ACCEPTDROP和RETURN。用法同iptables。

-F--flush

清空指定的链。如果不指定链则指定的表的所有链都被清空。用法同iptables。

-Z--zero

设置指定链的计数为0。用法同iptables。

-L--list

列出指定链的所有规则如果不指定链则是所有链。

-N--new-chain

创建一条新的用户自定义链。用法同iptables。

-X--delete-chain

删除指定的用户自定义链。

-E--rename-chain

重命名指定的链。举例如下

> ~ # ebtables -t nat -E PREROUTING PREFORWARDING  
~ # ebtables -t nat -L  
Bridge table: nat

Bridge chain: PREFORWARDING, entries: 0, policy: ACCEPT

Bridge chain: OUTPUT, entries: 0, policy: ACCEPT

Bridge chain: POSTROUTING, entries: 0, policy: ACCEPT

**2. 规则使用规范**

-p--protocol [!] protocol

指定帧的协议。这个使用16进制数指定要高于0x0600或者名字例如ARP也可以是LENGTH。当使用名字时/etc/ethertypes文件必须存在。

-i--interface [!] name

帧被接收的接口。此选项在INPUTFORWARDPREROUTING和BROUTING才有用。如果接口名后面以"+"结尾以该name开始的接口名都将被匹配。

--logical-in [!] name

接收帧的逻辑桥接口。此选项在INPUTFORWARDPREROUTING和BROUTING才有用。如果接口名后面以"+"结尾以该name开始的接口名都将被匹配。

-o--out-interface [!] name

发送帧的接口。此选项在OUTPUTFORWARDING和POSTROUTING才有用。如果接口名后面以"+"结尾以该name开始的接口名都将被匹配。

--logical-out [!] name

发送数据帧的逻辑桥接口。对应的是--logical-in。

-s--source [!] address[/mask]

源MAC地址。address和mask用6个16进制的数中间用冒号隔开的数组成。可选的MAC地址有单播多播和广播和BGAbridge Group Address

Unicast=00:00:00:00:00:00/01:00:00:00:00:00

Multicast=01:00:00:00:00:00/01:00:00:00:00:00

Broadcast=ff:ff:ff:ff:ff:ff/ff:ff:ff:ff:ff:ff

BGA=01:80:c2:00:00:00/ff:ff:ff:ff:ff:ff

-d--destination

目的MAC地址相对应的是-s选项。

**3. ebtables 扩展用法**

ebtables扩展是通过动态库加载到用户空间工具中的。不要像iptables那样使用"-m"选项明确加载这些扩展也是内核支持的模块是对ebtables的补充。

***among将一个MAC地址或MAC/IP地址对与一个MAC地址和MAC/IP地址对的列表相匹配。***

列表条目有以下格式XX:XX:XX:XX:XX:XX[=ip.ip.ip.ip][,]。多个列表条目用逗号隔开指定与MAC地址对应的IP地址是可选的。可以指定具有相同MAC地址但不同IP地址反之亦然的多个MAC/IP地址对。如果MAC地址与列表中的任何条目不匹配则该帧不符合该规则除非使用了""

--among-dst [!] list

将目的MAC地址与给定的列表进行比较。如果以太网帧有IPv4或ARP类型那么与列表中的MAC/IP目标地址对进行比较。

--among-src [!] list

将源MAC地址与给定的列表进行比较。如果以太网帧具有IPv4或ARP类型那么与列表中的MAC/IP源地址对进行比较

--among-dst-file [!] file

同--among-dst只不过是从文件中读取。

--among-src-file [!] file

同--among-src只不过是从文件中读取。

***arp指定(R)ARP字段协议必须指定为ARP或RARP。***

--arp-opcode [!] opcode

(R)ARP操作码十进制或字符串如下

  opcode strings: 

  1 = Request

  2 = Reply

  3 = Request_Reverse

  4 = Reply_Reverse

  5 = DRARP_Request

  6 = DRARP_Reply

  7 = DRARP_Error

  8 = InARP_Request

  9 = ARP_NAK

  hardware type string: 1 = Ethernet

  protocol type string: see /etc/ethertypes

--arp-ptype [!] protocol type

指定(R)ARP使用的协议类型十六进制或字符串IPv4表示0x0800。大多数(R)arp数据包的协议类型为IPv4。

--arp-ip-src [!] address[/mask]

指定(R)ARP的源IP地址。

--arp-ip-dst [!] address[/mask]

指定(R)ARP的目的IP地址。 

--arp-mac-src [!] address[/mask]

指定 (R)ARP的源MAC地址。

--arp-mac-dst [!] address[/mask]

指定 (R)ARP的目的MAC地址。 

***ip指定IPv4字段协议必须指定为IPv4***

--ip-source [!] address[/mask]

指定源IP地址。

--ip-destination

指定目的IP地址。

--ip-tos [!] tos

指定IP数据包的Tos值16进制格式。

--ip-protocol [!] protocol

指定IP协议。必须为TCPUDPDCCP或SCTP。

--ip-source-port [!] port1[:port2]

指定IP协议的源端口或端口范围6TCP17UDP33DCCP或132SCTP。如果port1省略则使用0:port2如果port2省略则使用1:65535。

--ip-destination-port [!] port1[:port2]

目的端口或端口范围。用法同--ip-source-port。

***ip6指定IPv4字段协议必须指定为IPv6***

--ip6-source [!] address[/mask]

指定源IPv6地址。

--ip6-destination [!] address[/mask]

指定目的IPv6地址。

--ip6-class [!] tclass

指定IPv6 tc值16进制数。

--ip6-protocol [!] protocol

指定IP协议同--ip-protocol。

--ip6-source-port

指定源端口同--ip-source-port。

--ip6-destination-port

指定目的端口同--ip-destination-port。

--ip6-icmp-type [!] {type[:type]/code[:code]|typename}

指定IPv6的ICMP类型和代码。

***vlan指定802.1Q TCITag Control Information字段协议必须指定为802_1Q (0x8100)***

--vlan-id [!] id

指定VLAN ID。10进制数0-4095。

--vlan-prio [!] prio

指定优先级字段10进制数0-7。此时VLAN ID应该被设置为0。

--vlan-encap [!] type

封装的以太网帧类型/长度。指定为十六进制数字从0x0000到 0xFFFF或/etc/ethertypes的符号名称。

***limit该模块使用令牌桶过滤器以有限的速度进行匹配。***

使用这个扩展的规则将匹配直到达到这个限制。它可以与--日志观察器一起使用例如提供有限的日志记录。参数有--limit和--limit-burst它的用途与iptables的限制匹配相同。

### 三. 总结

本文只要介绍了ebtables的作用以及用法。ebtables中有三张表filternatbroute六条链INPUTFORWARDOUTPUTPREROUTINGPOSTROUTING和BROUTING。ebtables不仅包含了一些常用的规则参数例如-p-i-o-s-d等还有一些扩展模块例如amongarpipvlan等等。