赞
踩
相同点:
firewalld 与 iptables 都是 linux 中防火墙的管理程序,他们的作用都是用于维护规则,而真正的防火墙执行者是位于内核中的netfilter,只不过firewalld和iptables的结构以及使用方法不一样。
不同点:
1.iptables 仅能通过命令行进行配置;而 firewalld 提供了图形接口,类似windows防火墙的操作方式
2.iptables 每一个单独更改将清除所有旧的规则,并全部读取所有新的规则,会中断业务,而firewalld 在有规则变动后,可以仅仅应用修改的规则,其他规则不影响。
3.iptables 的配置文件在 /etc/sysconfig/iptables 中;而 firewalld 的配置文件在 /usr/lib/firewalld/ 和 /etc/firewalld/ 中的各种 XML 文件中
4.iptables 通过控制端口来控制服务,而 firewalld 则是通过控制协议来控制端口
5.iptables 没有守护进程,而 firewalld 有守护进程
Input链: 对进入本机(即目的地址是本机)数据包的过滤
Output链: 对从本机出去(即源地址是本机)的数据包的过滤
forward链: 对仅仅通过本机转发(即源地址和目的地址都不是本机)的数据包进行过滤
prerouting链:对数据包作路由选择前应用此链中的规则(所有的数据包进来的时侯都先由这个链处理)
postrouting链:对数据包作路由选择后应用此链中的规则(所有的数据包出来的时侯都由这个链处理)
四种:raw,mangle,nat,filter,优先级顺序为:Raw——>mangle——>nat——>filter
raw: 表中的规则可以被哪些链使用:prerouting,output
mangle:表中的规则可以被哪些链使用:prerouting,input,forward,output,postrouting
nat:表中的规则可以被哪些链使用:prerouting,output,postrouting(centos7中还有input,centos6中没有)
filter: 表中的规则可以被哪些链使用:input,forward,output
iptables [-t 表名] 命令选项 [链名] [条件匹配] [-j 目标动作或跳转]
##表名
raw
mangle
nat
filter(不指定时默认)
##命令选项
-A 在指定链的末尾添加一条新的规则
-D 删除指定链中的某一条规则,可以按规则序号和内容删除
-I 在指定链中插入一条新的规则,默认在第一行添加
-R 修改、替换指定链中的某一条规则,可以按规则序号和内容替换
-L 列出指定链中所有的规则
-E 重命名用户定义的链,不改变链本身
-F 清空
-N 新建一条用户自己定义的规则链
-X 删除指定表中用户自定义的规则链
-P 设置指定链的默认策略
-Z 将所有表的所有链的字节和数据包计数器清零
-n 使用数字形式显示输出结果
-v 查看规则表详细信息(verbose)的信息
-V 查看版本(version)
-h 获取帮助(help)
##链名
PREROUTING
INPUT
FORWARD
OUTPUT
POSTROUTING
##防火墙处理数据包的四种方式
ACCEPT 允许数据包通过
DROP 直接丢弃数据包,不给任何回应信息
REJECT 拒绝数据包通过,必要时会给数据发送端一个响应的信息。
LOG在/var/log/messages文件中记录日志信息,然后将数据包传递给下一条规则
1.centos7下默认是用的firewalld,需要停止与禁用firewalld,两个只能选一个
##停掉firewalld systemctl stop firewalld systemctl disable firewalld #禁用firewalld服务 systemctl mask firewalld #安装iptables yum install -y iptables #安装iptables-services yum install -y iptables-services #注册iptables服务,相当chkconfig iptables on systemctl enable iptables.service #启动服务 systemctl start iptables.service #重启服务 systemctl restart iptables.service #查看状态 systemctl status iptables.service #保存规则 service iptables save
iptables -L
iptables -L -n
iptables -L -n --line-number
#开放80端口(HTTP)
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
#开放端口示例
iptables -A INPUT -p tcp --dport 443 -j ACCEPT
iptables -A INPUT -p tcp --dport 20:1024 -j ACCEPT
iptables -A OUTPUT -p tcp --sport 20:1024 -j ACCEPT
iptables -A INPUT -p tcp -m state --state NEW -m multiport --dports 7001,8001,9001 -j ACCEPT
iptables -A INPUT -p tcp -s 192.168.56.1,192.168.56.102 --dport 22 -j ACCEPT
#使用iptables -L -n --line-number 可以查看到每个规则chain 的序列号,只能这样才能删除指定的规则
iptables -L -n --line-number
#删除INPUT链中第9条规则
iptables -D INPUT 9
echo 1 > /proc/sys/net/ipv4/ip_forward
iptables -A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 8022 -j ACCEPT
iptables -t filter -A INPUT -p tcp -m state --state NEW -m tcp --dport 8022 -j ACCEPT
iptables -t nat -A PREROUTING -p tcp -m tcp --dport 8022 -j DNAT --to-destination 192.168.60.206:22
iptables -t nat -A POSTROUTING -s 192.168.60.0/16 -d 192.168.60.206 -p tcp -m tcp --dport 22 -j SNAT --to-source 192.168.60.62
iptables -t nat -A PREROUTING -p tcp --dport 8022 -j REDIRECT --to-ports 22
iptables -t nat -A OUTPUT -d localhost -p tcp --dport 8022 -j REDIRECT --to-ports 22
iptables -t nat -A PREROUTING -d localhost -p tcp --dport 8022 -j REDIRECT --to-ports 22
iptables-save >xxx.txt ##保存文件xxx.txt
iptables-restore <xxx.txt ##加载规则
echo 1 > /proc/sys/net/ipv4/ip_forward
iptables -t nat -A PREROUTING -p tcp --dport 18080 -j DNAT --to-destination 192.167.1.201:8080
iptables -t nat -A POSTROUTING -d 192.167.1.201 -p tcp --dport 8080 -j SNAT --to-source 192.167.1.204
echo 1 > /proc/sys/net/ipv4/ip_forward
iptables -t nat -A PREROUTING -p tcp --dport 18080 -j DNAT --to-destination 192.168.60.133:8899
iptables -t nat -A POSTROUTING -d 192.168.60.133 -p tcp --dport 8899 -j SNAT --to-source 192.168.56.2
很严格的iptables例子,INPUT和OUPUT都是drop的,需要开放端口时,需要在INPUT和OUTPUT两条链中都加,比如8888端口号,
另外,也最好把如下本地回环的两条链也加上,
-A INPUT -i lo -j ACCEPT
-A OUTPUT -o lo -j ACCEPT
[root@localhost porttranstest]# more /etc/sysconfig/iptables # sample configuration for iptables service # you can edit this manually or use system-config-firewall # please do not ask us to add additional ports/services to this default configuration *filter :INPUT DROP [0:0] :FORWARD ACCEPT [0:0] :OUTPUT DROP [0:0] -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT -A INPUT -p icmp -j ACCEPT -A INPUT -i lo -j ACCEPT -A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT -A INPUT -p tcp -m state --state NEW -m tcp --dport 8888 -j ACCEPT -A INPUT -i lo -j ACCEPT -A INPUT -j REJECT --reject-with icmp-host-prohibited -A FORWARD -j REJECT --reject-with icmp-host-prohibited -A OUTPUT -p tcp --sport 22 -j ACCEPT -A OUTPUT -p tcp --sport 8888 -j ACCEPT -A OUTPUT -o lo -j ACCEPT COMMIT
启动: systemctl start firewalld
关闭: systemctl stop firewalld
查看状态: systemctl status firewalld
开机禁用 : systemctl disable firewalld
开机启用 : systemctl enable firewalld
查看版本: firewall-cmd --version
查看帮助: firewall-cmd --help
显示状态: firewall-cmd --state
查看所有打开的端口: firewall-cmd --zone=public --list-ports
更新防火墙规则: firewall-cmd --reload
查看区域信息: firewall-cmd --get-active-zones
查看指定接口所属区域: firewall-cmd --get-zone-of-interface=eth0
拒绝所有包:firewall-cmd --panic-on
取消拒绝状态: firewall-cmd --panic-off
查看是否拒绝: firewall-cmd --query-panic
查看防火墙列表:firewall-cmd --list-all
#添加
firewall-cmd --zone=public --add-port=80/tcp --permanent (--permanent永久生效,没有此参数重启后失效)
#重新载入
firewall-cmd --reload
#查看
firewall-cmd --zone=public --query-port=80/tcp
#删除
firewall-cmd --zone=public --remove-port=80/tcp --permanent
firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address="192.168.56.1" port protocol="tcp" port="1080" accept"
firewall-cmd --permanent --remove-rich-rule="rule family="ipv4" source address="192.168.56.1" port protocol="tcp" port="1080" accept"
firewall-cmd --add-port 30000-40000/tcp --permanent
firewall-cmd --add-port 30000-40000/udp --permanent
配置规则在以下文件中:more /etc/firewalld/zones/public.xml
####开启NAT转发
firewall-cmd --permanent --zone=public --add-masquerade
####开放DNS使用的53端口,否则可能导致内网服务器虽然设置正确的DNS,但是依然无法进行域名解析。
firewall-cmd --zone=public --add-port=53/tcp --permanent
####重启防火墙
systemctl restart firewalld.service
#### 检查是否允许NAT转发
firewall-cmd --query-masquerade
#### 关闭NAT转发
firewall-cmd --remove-masquerade
开启后,局域网内的其他机器可以将默认网关设置为已开启 NAT 转发的服务器IP ,即可上网。
开启NAT(一辈子只需要执行一次) firewall-cmd --add-masquerade --permanent 添加转发 1.开放TCP端口转发(本机端口31002转发到 10.0.1.2:3389) firewall-cmd --add-forward-port=port=31002:proto=tcp:toport=3389:toaddr=10.0.1.2 --permanent 2.开放UDP端口转发(本机端口31002转发到 10.0.1.2:3389) firewall-cmd --add-forward-port=port=31002:proto=udp:toport=3389:toaddr=10.0.1.2 --permanent 3.开放TCP和UDP端口(开放端口31002 的TCP和UDP) firewall-cmd --add-port 31002/tcp --permanent firewall-cmd --add-port 31002/udp --permanent 4.重载应用配置(配置完毕后必须进行这一步) firewall-cmd --reload 其余操作 1.如果不生效检查一下 协议是否开启转发(编辑文件:/etc/sysctl.conf ),保存后执行:sysctl -p net.ipv4.ip_forward = 1 3.查看所有映射情况 firewall-cmd --list-all 删除操作 1.如删除端口转发(40000端口转发到10.0.2.24的3389 TCP协议转发) firewall-cmd --remove-forward-port=port=40000:proto=tcp:toport=3389:toaddr=10.0.2.24 --permanent
错误信息:
firewalld.service - firewalld - dynamic firewall daemon
Loaded: loaded (/usr/lib/systemd/system/firewalld.service; enabled; vendor preset: enabled)
Active: failed (Result: timeout) since Tue 2022-11-01 09:31:24 CST; 41s ago
Docs: man:firewalld(1)
Process: 13082 ExecStart=/usr/sbin/firewalld --nofork --nopid $FIREWALLD_ARGS (code=exited, status=0/SUCCESS)
Main PID: 13082 (code=exited, status=0/SUCCESS)
Nov 01 09:29:53 webserver systemd[1]: Starting firewalld - dynamic firewall daemon...
Nov 01 09:31:23 webserver systemd[1]: firewalld.service start operation timed out. Terminating.
Nov 01 09:31:24 webserver systemd[1]: Failed to start firewalld - dynamic firewall daemon.
Nov 01 09:31:24 webserver systemd[1]: Unit firewalld.service entered failed state.
Nov 01 09:31:24 webserver systemd[1]: firewalld.service failed.
处理方式如下:
#关闭firewalld服务
systemctl stop firewalld;
#关闭firewalld进程
pkill -f firewalld;
#启动firewalld服务
systemctl start firewalld;
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。