linux命令-iptables与firewalld 命令详解
- 一、iptables简介
- 二、常用选项
- 三、基础概念
- 四、常用操作
-
- 1、列出所有链的规则
- 2、列出带行号的规则
- 3、列出特定表中的规则
- 4、允许指定端口传入流量
- 5、阻止来自指定IP的流量
- 6、允许来自子网的流量
- [7、允许端口 22 (SSH) 上的传出流量](#7、允许端口 22 (SSH) 上的传出流量)
- 8、在网络之间转发流量
- 9、按行号删除规则
- [10、将传入流量的默认策略设置为 DROP](#10、将传入流量的默认策略设置为 DROP)
- [11、将传出流量的默认策略设置为 ACCEPT](#11、将传出流量的默认策略设置为 ACCEPT)
- 12、保存当前规则到指定文件
- 13、从文件中恢复规则
- [14、将端口 8080 转发至 80](#14、将端口 8080 转发至 80)
- 15、伪装流量(NAT)
- 16、转发流量到其他IP
- 17、记录丢弃的数据包
- 18、记录已接受的数据包
- 19、查看数据包和字节数
- 20、重置计数器
- 21、刷新所有规则
- [22、在指定的 Table 上刷新规则](#22、在指定的 Table 上刷新规则)
- [23、删除所有用户定义的 Chains](#23、删除所有用户定义的 Chains)
- 五、firewalld简介
- 六、Firewalld网络区域
- 七、常用示例
-
- 1、启动防火墙
- 2、停止防火墙
- 3、设置防火墙开机自启动
- 4、禁止防火墙开机自启动
- 5、检查防火墙的状态
- 6、重新加载防火墙的配置
- 7、查看活动防火墙状态
- 8、列出所有活动区域
- 9、查看指定区域的规则
- 10、列出所有区域
- 11、设置默认的区域
- 12、添加一个接口到区域
- 13、从区域中移除一个接口
- 14、查看指定区域的接口
- 15、列出所有支持的服务
- 16、添加一个服务到区域
- 17、从区域中移除一个服务
- 18、检查服务是否是启动的
- 19、使服务变更永久生效
- 20、临时打开一个端口
- 21、临时关闭一个端口
- 22、使变更端口永久生效
- 23、列出在区域中打开的端口
- [24、允许来自指定 IP 的流量](#24、允许来自指定 IP 的流量)
- [25、阻止来自指定 IP 的流量](#25、阻止来自指定 IP 的流量)
- [26、记录并丢弃来自指定 IP 的流量](#26、记录并丢弃来自指定 IP 的流量)
- 27、使规则永久生效
- 28、启用伪装
- 29、禁用伪装
- 30、在区域之间转发流量
- [31、在脚本或恢复模式中使用 firewall-offline-cmd](#31、在脚本或恢复模式中使用 firewall-offline-cmd)
- 32、永久保存所有变更到磁盘
- 八、总结
一、iptables简介
iptables
是一个在 Linux 中的管理防火墙规则的命令行工具,它作为 Linux 内核的 netfilter 框架的一部分运行,以控制传入和传出的网络流量。
与 firewalld
相比
iptables
是基于规则的,每个规则必须独立定义,firewalld
是基于区域的,规则适用于预定义或自定义区域。
iptables
适合高度精细和手动的配置,firewalld
动态规则更简单且更加用户友好。
iptables
需要刷新或重新启动才能应用更改,firewalld
支持不间断的即时更改。
iptables
对于静态、简单的配置来说非常高效,firewalld
由于抽象层,速度稍微慢一些,但大多数情况下可以忽略不计。
二、常用选项
-A
:追加到规则到链中
-D
:从链中删除一个规则
-P
:为链设置默认策略
-F
:刷新链中的所有规则
-L
:列出链中的所有规则
-t [table]
:指定 table
-i
:指定输入接口,例如:eth0
-o
:指定输出接口
-s
:指定源IP地址
-d
:指定目标IP地址
-p
:指定协议类型,例如:tcp、udp、icmp
三、基础概念
1、Chains
处理数据包的一组规则
INPUT
: 控制传入数据包。
FORWARD
: 控制通过系统转发的数据包。
OUTPUT
: 控制传出的数据包。
2、Tables
规则处理类别
filter
: 基本数据包过滤的默认表。
nat
: 处理网络地址转换(NAT)。
mangle
: 改变数据包。
raw
: 在连接跟踪之前配置数据包。
3、Rules
对数据包应用的操作,例如:ACCEPT
、DROP
四、常用操作
1、列出所有链的规则
bash
sudo iptables -L
2、列出带行号的规则
bash
sudo iptables -L --line-numbers
3、列出特定表中的规则
bash
sudo iptables -t nat -L
4、允许指定端口传入流量
bash
sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT
# -A INPUT: 追加到 INPUT链
# -p tcp: 指定协议为 TCP
# --dport 80: 指定目标端口为80
# -j ACCEPT: 接受数据包
5、阻止来自指定IP的流量
bash
sudo iptables -A INPUT -s 192.168.1.100 -j DROP
# -s 192.168.1.100: 指定源IP地址
6、允许来自子网的流量
bash
sudo iptables -A INPUT -s 192.168.1.0/24 -j ACCEPT
7、允许端口 22 (SSH) 上的传出流量
bash
sudo iptables -A OUTPUT -p tcp --dport 22 -j ACCEPT
8、在网络之间转发流量
bash
sudo iptables -A FORWARD -i eth0 -o eth1 -j ACCEPT
9、按行号删除规则
bash
sudo iptables -D INPUT 2
# -D INPUT 2: 删除 INPUT 链的第二个规则
10、将传入流量的默认策略设置为 DROP
bash
sudo iptables -P INPUT DROP
11、将传出流量的默认策略设置为 ACCEPT
bash
sudo iptables -P OUTPUT ACCEPT
12、保存当前规则到指定文件
bash
sudo iptables-save > /etc/iptables.rules
13、从文件中恢复规则
bash
sudo iptables-restore < /etc/iptables.rules
14、将端口 8080 转发至 80
bash
sudo iptables -t nat -A PREROUTING -p tcp --dport 8080 -j REDIRECT --to-port 80
15、伪装流量(NAT)
bash
sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
16、转发流量到其他IP
bash
sudo iptables -t nat -A PREROUTING -p tcp --dport 80 -j DNAT --to-destination 192.168.1.200:80
17、记录丢弃的数据包
bash
sudo iptables -A INPUT -j LOG --log-prefix "Dropped Packet: " --log-level 4
18、记录已接受的数据包
bash
sudo iptables -A INPUT -j LOG --log-prefix "Accepted Packet: " --log-level 4
19、查看数据包和字节数
bash
sudo iptables -L -v
20、重置计数器
bash
sudo iptables -Z
21、刷新所有规则
bash
sudo iptables -F
22、在指定的 Table 上刷新规则
bash
sudo iptables -t nat -F
23、删除所有用户定义的 Chains
bash
sudo iptables -X
五、firewalld简介
firewalld
是一个在 Linux 中的防火墙管理工具,提供动态接口管理网络流量,它使用区域来定义网络连接的信任级别,并支持 IPv4 和 IPv6。
六、Firewalld网络区域
drop
(丢失):任何接收的网络数据包都被丢弃,没有任何回复。仅能有发送出去的网络练连接
block
(限制):任何接收的网络连接都被IPv4的icmp-host-prohibited信息和icmp6-adm-prohibited信息所拒绝
public
(公共):在公共区域内使用,不能相信网络内的其他计算机不会对您的计算机造成危害,只能接收经过选取的连接
external
(外部) :特别是为路由器启用了伪装功能的外部网。您不能信任来自网络的其他计算,不能相信它们不会对您的计算机造成危害,只能接收经过选择的连接
dmz
(非军事区):用于您的非军事区内的电脑,此区域内可公开访问,可以有限地进入您的内部网络,仅仅接收经过选择的连接
work
(工作):用于工作区。您可以基本相信网络内的其他电脑不会危害您的电脑。仅仅接收经过选择的连接用于家庭网络。
home
(家庭):您可以基本信任网络内的其他计算机不会危害您的计算机。仅仅接收经过选择的连接
internal
(内部):用于内部网络。您可以基本上信任网络内的其他计算机不会威胁您的计算机。仅仅接受经过选择的连接
trusted
(信任):可接受所有的网络连接
七、常用示例
1、启动防火墙
bash
sudo systemctl start firewalld
2、停止防火墙
bash
sudo systemctl stop firewalld
3、设置防火墙开机自启动
bash
sudo systemctl enable firewalld
4、禁止防火墙开机自启动
bash
sudo systemctl disable firewalld
5、检查防火墙的状态
bash
sudo systemctl status firewalld
6、重新加载防火墙的配置
bash
sudo firewall-cmd --reload
7、查看活动防火墙状态
bash
sudo firewall-cmd --state
8、列出所有活动区域
bash
sudo firewall-cmd --get-active-zones
9、查看指定区域的规则
bash
sudo firewall-cmd --list-all --zone=public
10、列出所有区域
bash
sudo firewall-cmd --get-zones
11、设置默认的区域
bash
sudo firewall-cmd --set-default-zone=trusted
12、添加一个接口到区域
bash
sudo firewall-cmd --zone=public --add-interface=eth0
13、从区域中移除一个接口
bash
sudo firewall-cmd --zone=public --remove-interface=eth0
14、查看指定区域的接口
bash
sudo firewall-cmd --get-zone-of-interface=eth0
15、列出所有支持的服务
bash
sudo firewall-cmd --get-services
16、添加一个服务到区域
bash
sudo firewall-cmd --zone=public --add-service=http
17、从区域中移除一个服务
bash
sudo firewall-cmd --zone=public --remove-service=http
18、检查服务是否是启动的
bash
sudo firewall-cmd --zone=public --query-service=http
19、使服务变更永久生效
bash
sudo firewall-cmd --zone=public --add-service=http --permanent
20、临时打开一个端口
bash
sudo firewall-cmd --zone=public --add-port=8080/tcp
21、临时关闭一个端口
bash
sudo firewall-cmd --zone=public --remove-port=8080/tcp
22、使变更端口永久生效
bash
sudo firewall-cmd --zone=public --add-port=8080/tcp --permanent
23、列出在区域中打开的端口
bash
sudo firewall-cmd --zone=public --list-ports
24、允许来自指定 IP 的流量
bash
sudo firewall-cmd --zone=public --add-rich-rule='rule family="ipv4" source address="192.168.1.100" accept'
25、阻止来自指定 IP 的流量
bash
sudo firewall-cmd --zone=public --add-rich-rule='rule family="ipv4" source address="192.168.1.100" drop'
26、记录并丢弃来自指定 IP 的流量
bash
sudo firewall-cmd --zone=public --add-rich-rule='rule family="ipv4" source address="192.168.1.100" log prefix="Blocked: " level="info" drop'
27、使规则永久生效
bash
sudo firewall-cmd --zone=public --add-rich-rule='rule family="ipv4" source address="192.168.1.100" accept' --permanent
28、启用伪装
bash
sudo firewall-cmd --zone=public --add-masquerade
29、禁用伪装
bash
sudo firewall-cmd --zone=public --remove-masquerade
30、在区域之间转发流量
bash
sudo firewall-cmd --zone=trusted --add-forward-port=port=80:proto=tcp:toport=8080:toaddr=192.168.1.100
31、在脚本或恢复模式中使用 firewall-offline-cmd
bash
firewall-offline-cmd --add-service=http
32、永久保存所有变更到磁盘
bash
sudo firewall-cmd --runtime-to-permanent
八、总结
1、功能和用途
iptables
是一个命令行工具,直接操作内核中的Netfilter
框架,通过规则链和规则来管理网络流量。它提供了对网络流量的精细控制,允许用户根据IP地址、端口号、协议等条件定义规则。iptables
适用于需要高度自定义和精细控制网络流量的场景。
firewalld
是一个动态管理防火墙的工具,提供了服务和区域的概念,简化了防火墙规则的管理。它使用iptables
作为后端,但通过更高层次的抽象来简化配置和管理。firewalld
适用于需要快速配置和动态调整防火墙规则的场景。
2、规则修改和持久性
iptables
在修改规则后需要重新加载或保存规则文件才能生效,这可能会导致服务中断。iptables
的规则在系统重启后会丢失,除非将规则保存到文件中。
firewalld
支持动态修改单条规则,不需要像iptables
那样修改后全部刷新才可生效。firewalld
的规则更改立即生效,并且支持在运行时模式和永久模式之间切换,确保了更高的灵活性和可靠性。
3、配置复杂度和用户友好性
iptables
非常灵活和强大,但相对复杂,需要对网络和防火墙原理有深入的理解。它直接操作内核,提供了广泛的配置选项,适合高级用户和专业网络管理员。
firewalld
通过服务和区域的概念简化了配置过程,提供了预定义的规则集和可视化管理界面,使得配置更加直观和简单。它适合那些需要简化管理但仍然需要一定安全性的用户