linux命令-iptables与firewalld 命令详解

linux命令-iptables与firewalld 命令详解

一、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

对数据包应用的操作,例如:ACCEPTDROP

四、常用操作

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‌通过服务和区域的概念简化了配置过程,提供了预定义的规则集和可视化管理界面,使得配置更加直观和简单。它适合那些需要简化管理但仍然需要一定安全性的用户‌

相关推荐
安 当 加 密1 小时前
基于USB Key的Web系统双因素认证解决方案:构建安全与便捷的登录体系
运维·网络·安全
沉默的八哥2 小时前
K8S日常问题优化
运维·kubernetes
666HZ6662 小时前
从0到1入门Docker
运维·docker·容器
路由侠内网穿透2 小时前
本地部署资源聚合搜索神器 Jackett 并实现外部访问
linux·运维·服务器·网络协议·tcp/ip
啥都想学的又啥都不会的研究生3 小时前
Redis设计与实现-服务器中的数据库
运维·服务器·数据库·redis·笔记·缓存·性能优化
djykkkkkk3 小时前
ubuntu 和 RV1126 交叉编译Mosqutiio-1.6.9
linux·运维·ubuntu
学习嵌入式的小羊~3 小时前
视频图像刷新到HTTP的原理
网络·网络协议·http
瞬 季3 小时前
计算机网络-应用层
网络·计算机网络
大小科圣3 小时前
Tomcat介绍及部署
运维·服务器
薛定谔的码*4 小时前
计算机三级网络技术备考(5)
网络·智能路由器