linux防火墙配置
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等等。
分类:
linux防火墙
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」
· 写一个简单的SQL生成工具