Linux之Redhat中火墙的高级配置------firewalld和iptables

本文详细介绍火墙的基本结构、配置方法及常见命令使用。包括火墙类型的设置、服务与端口的配置、iptables策略的添加与删除等核心内容。

1.火墙基本结构:


2.进入火墙配置界面firewall-config


监控命令:watch -n 1 firewall-cmd --list-all


火墙的9种类型:


1】在图形化界面配置火墙类型


确定后


2】在图形化界面配置火墙支持的服务



3】在图形化界面配置允许使用的端口,端口需要更改相应配置文件的端口并重启服务。




注:runtime表示临时更改,permanent表示永久更改,需要reload和重启火墙,测试在浏览器,安装httpd

3.firewall常用指令

1】firewall-cmd --state 火墙状态


2】firewall-cmd --get-active-zones 查看有效区域IP和网卡


3】firewall-cmd --get-default-zone 查看默认区域同上

4】firewall-cmd --get-zones 查看所有的火墙类型

5】firewall-cmd --zone=public --list-all 查看public类型的区域

6】firewall-cmd --get-services 查看火墙支持的服务

7】firewall-cmd --list-all-zones 列出所有火墙类型的详细信息

8】firewall-cmd --set-default-zone=dmz 设置火墙类型为dmz

9】firewall-cmd --add-port=8080/tcp 添加端口/etc/firewalld/zones/public.xml

10】firewall-cmd --remove-port=8080/tcp 移除端口也可以更改上一步的文件然后重起火墙

4.更改服务名称

 在/etc/firewalld/services/中将文件重命名然后重起服务即可

5.firewall基本配置

1】firewall-cmd --complete-reload 可以中断已经连接的设备

测试:

2】firewall-cmd --permanent --add-source=IP --zone=block 设置指定IP的火墙策略

测试用IP连接主机,连不上

3】firewall-cmd --permanent --remove-source=IP --zone=block 移除策略

4】firewall-cmd --permanent --zone=internal --add-interface=eth0 添加网卡

5】firewall-cmd --permanent --zone=internal --change-interface=eth0 更改网卡

6】firewall-cmd --permanent --zone=internal --remove-interface=eth0 移除网卡

7】屏蔽指定IP访问http

firewall -cmd  --direct  --add-rule ipv4  filter INPUT 1(加一条策略) -s(指定源)  IP(屏蔽主机的IP)  -p(类型)  tcp  --dport(指定端口)  22  -j(动作)  REJECT

测试在浏览器进行

7】地址转换(当你链接主机1时将转接到主机2)

注:删除主机2的文件:/root/.ssh/known_hosts。

firewall-cmd  --add-forward-port=port=22:proto=tcp:toport=22:toaddr=IP(想转换的IP址)


测试:

注:输入的密码为转接的主机密码


8】IP转接

开启策略:firewall-cmd  --add-masquerade

配置策略一:
firewall-cmd --permanent  --zone=<ZONE> --add-rich-rule=’rule family=ipv4 source address=172.25.37.137(可以指定网段/24  forward-port=port=80 protocol=tcp to-port=8080’

配置策略二:

firewall-cmd--permanent--zone=<ZONE>--add-forward-port=port=80:proto=tcp:toport=8080:toaddr=172.25.37.137

注:网关两个配置文件/etc/sysconfig/network  /etc/sysconfig/network-script/ifcfg-eth0   添加GATEWAY=IP(网关IP)

测试:

转接主机:


要链接的客户端:


6.iptables配置火墙

安装软件yum install iptables

启用iptables

1】systemctl stop firewalld

2】systemctl disable firewalld

3】systemctl mask firewalld

4】systemctl start iptables

5】systemctl enable iptables

7.iptables常用指令

1】iptables -t filter -L 查看策略


2】iptables -F 清除策略

3】service iptables save  保存策略

4】策略保存的文件:/etc/sysconfig/iptables


8.在iptables中添加策略

1】iptables -I INPUT 1 -p tcp --dport 80 -j ACCEPT  -I默认添加位置为第一个

2】iptables -A INPUT 1 -p tcp --dport 80 -j ACCEPT   允许80端口链接

3】iptables -A INPUT -i lo -j ACCEPT     i表示添加,给lo添加策略ACCEPT

4】iptables -A INPUT -s 172.25.254.92 -p tcp --dport 22 -j ACCEPT   允许92通过22端口链接

9.在iptables中删除策略

1】iptables -D INPUT 8     删除第8个策略

2】iptables -D INPUT +策略

3】过滤策略,方便查看策略在表中的位置

iptables -nl | grep -E "INPUT|target" -v |cat -b

4】iptables -R INPUT 2(要改的策略) -p tcp ...(更改后的策略)                                                    

10.策略表格

1】iptables -N westos 添加表

2】iptables -E westos yuchen 改表的名称

3】iptables -X yuchen 删除表

11.iptables火墙策略补充

1】netstat --antlpe  查看所有端口信息

2】iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT  访问过直接通过

3】iptables -A INPUT -m state --state NEW -i lo -j ACCEPT  自回环第一次通过

4】iptables -A INPUT -m state --state NEW -p tcp --dport 22 -j ACCEPT  22端口通过

5】iptables -A INPUT -m state --state NEW -p tcp --dport 80 -j ACCEPT  80端口通过

6】iptables -A INPUT -j REJECT 其他的拒绝

12.ssh访问地址转换

1】iptables -t nat -nL 查看nat表

2】sysctl  -a | grep ip_forward  查看ip_forward的状态

3】ip_forward的状态设为1

vim  /etc/sysctl.conf

4】sysctl -p 加载


5】iptables  -t  nat  -A  POSTROUTING  -o  eth0  -j  SANT --to-source 172.25.254.92  添加策略将访问eth0的源地址转为172.25.254.92


6】将客户端网关设置为服务器同网段的IP

13.IP转接

1】iptables -t nat -nL  查看nat表

2】iptables  -t  nat  -A  PREROUTING  -i  eth0  -d  172.25.254.137  -j  DNAT --to-dest  172.25.37.137 添加策略

3】测试:








<think>我们有两个主要任务: 1. 确认当前iptables版本是否为传统(legacy)版本。 2. 了解从传统iptables迁移到nftables的方法。 首先,我们检查iptables版本。在终端中运行以下命令: ```bash iptables -V ``` 输出可能有两种情况: - 传统版本(legacy): `iptables v1.8.7 (legacy)` - nftables版本: `iptables v1.8.7 (nf_tables)` 如果输出中显示`(nf_tables)`,则表示当前使用的是nftables后端。 另外,我们可以通过检查是否存在`/usr/sbin/iptables-legacy``/usr/sbin/iptables-nft`来确定系统是否同时安装了两种版本。 ### 从传统iptables迁移到nftables 如果当前使用的是传统版本,而你想迁移到nftables,可以按照以下步骤: #### 1. 安装nftables 在大多数Linux发行版中,nftables已经预装。如果没有,可以使用包管理器安装: - Ubuntu/Debian: `sudo apt install nftables` - CentOS/RHEL: `sudo yum install nftables` #### 2. 将iptables规则转换为nftables规则 可以使用`iptables-restore-translate``ip6tables-restore-translate`工具将现有的iptables规则转换为nftables规则。 首先,导出当前的iptables规则: ```bash sudo iptables-save > iptables.rules sudo ip6tables-save > ip6tables.rules ``` 然后,使用以下命令进行转换: ```bash sudo iptables-restore-translate -f iptables.rules > nftables.rules sudo ip6tables-restore-translate -f ip6tables.rules >> nftables.rules ``` #### 3. 加载nftables规则 将转换后的规则加载到nftables中: ```bash sudo nft -f nftables.rules ``` #### 4. 设置nftables开机启动 禁用iptables服务,并启用nftables服务: ```bash sudo systemctl disable --now iptables sudo systemctl disable --now ip6tables sudo systemctl enable --now nftables ``` #### 5. 验证规则 查看当前nftables规则: ```bash sudo nft list ruleset ``` ### 传统iptables与nftables的主要差异 1. **语法不同**:nftables使用更简洁的语法,例如: - 传统iptables: ```bash iptables -A INPUT -p tcp --dport 22 -j ACCEPT ``` - nftables等价规则: ```bash nft add rule ip filter INPUT tcp dport 22 accept ``` 2. **统一IPv4IPv6**:nftables可以同时管理IPv4IPv6规则,而传统iptables需要分别使用`iptables``ip6tables`。 3. **性能**:nftables使用新的内核引擎,性能更好,尤其是在规则数量多时。 4. **规则集管理**:nftables使用原子操作加载整个规则集,避免了传统iptables逐条添加规则可能导致的竞争条件。 ### 注意事项 - 在迁移之前,建议备份当前的iptables规则。 - 转换工具可能无法100%准确转换所有规则,需要人工检查。 - 一些第三方脚本或工具可能仍然依赖iptables,需要测试兼容性。 ### 相关问题 1. 如何检查nftables是否正在运行? 2. 如何将nftables规则持久化? 3. nftablesfirewalld之间有什么关系? 4. 如何调试nftables规则? ### 引用 [^1]: [nftables官方wiki](https://wiki.nftables.org/) [^2]: [从iptables迁移到nftables的指南](https://www.redhat.com/sysadmin/migrate-iptables-nftables)</think>### 确认 iptables 版本及迁移指南 #### 1. 检查当前 iptables 版本类型 ```bash sudo iptables -V ``` - **传统 legacy 版本** 会显示: `iptables v1.8.7 (legacy)` - **nftables 后端版本** 会显示: `iptables v1.8.7 (nf_tables)` **关键差异**: | 特性 | iptables-legacy | iptables-nft | |--------------|-------------------------------|-------------------------------| | 内核后端 | xtables | nftables API | | 规则存储 | 每条规则独立 | 统一规则集 | | 语法兼容性 | 支持传统短参数 (如 `--to-dest`)| 需完整参数 (`--to-destination`) | | IPv4/IPv6 | 需分别管理 (iptables/ip6tables)| 统一管理 (`nft` 命令) | | 性能 | 规则多时效率较低 | 更高效的数据结构 | --- #### 2. 迁移到 nftables 的步骤 **步骤 1:安装必要工具** ```bash sudo apt install nftables # Debian/Ubuntu sudo yum install nftables # CentOS/RHEL ``` **步骤 2:转换现有规则** ```bash # 导出旧规则 sudo iptables-save > iptables-legacy-rules # 转换为 nftables 语法 sudo iptables-restore-translate -f iptables-legacy-rules > nftables-ruleset.nft ``` **步骤 3:加载新规则** ```bash sudo nft -f nftables-ruleset.nft ``` **步骤 4:验证规则** ```bash sudo nft list ruleset # 查看所有规则 sudo nft monitor # 实时监控流量匹配 ``` **步骤 5:设置开机自启** ```bash sudo systemctl enable --now nftables ``` --- #### 3. 传统规则 vs nftables 规则示例 **传统 DNAT 规则** ```bash iptables -t nat -A PREROUTING -p tcp --dport 2028 -j DNAT --to-dest 192.168.61.198 ``` **等效的 nftables 规则** ```nft table ip nat { chain prerouting { type nat hook prerouting priority 0; tcp dport 2028 dnat to 192.168.61.198 } } ``` --- #### 4. 迁移注意事项 1. **内核要求**: nftables 需要 Linux kernel ≥ 3.13,建议 ≥ 4.18 以获得完整功能[^1]。 2. **共存机制**: 可通过 `update-alternatives` 切换版本: ```bash sudo update-alternatives --config iptables ``` 选择 `/usr/sbin/iptables-nft` 或 `/usr/sbin/iptables-legacy` 3. **未兼容特性**: 部分传统模块(如 `ip_conntrack`)在 nftables 中需替换为 `conntrack` 表达式[^2]。 4. **调试工具**: 使用 `nft --debug=netlink` 跟踪规则加载过程。 --- #### 5. 验证迁移成功 ```bash $ sudo nft list ruleset | grep "tcp dport 2028" tcp dport 2028 dnat to 192.168.61.198 # 出现此输出表示生效 $ lsmod | grep nf_tables nf_tables 204800 2 # 内核模块已加载 ``` --- ### 相关问题 1. 如何将复杂的 iptables 脚本(如 Docker 生成的规则)迁移到 nftables? 2. nftables 如何实现传统 `iptables -m state` 的连接状态跟踪? 3. 迁移后如何监控 nftables 规则匹配性能? 4. 在容器化环境中 (Kubernetes/Docker),nftables iptables 如何共存? [^1]: [nftables 官方迁移指南](https://wiki.nftables.org/wiki-nftables/index.php/Moving_from_iptables_to_nftables) [^2]: [Linux 内核文档 - nftables 表达式](https://www.kernel.org/doc/html/latest/networking/nftables.html)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值