linux中防火墙设置(iptables & firewalld & ufw )
iptables、firewalld 和 ufw 都是Linux系统中常用的防火墙软件,它们之间的区别如下:
iptables: iptables 是Linux系统中最原始、最基础、最底层的防火墙软件,它可以直接配置Linux内核中的网络规则,控制网络数据包的流动。由于iptables配置比较复杂,需要对网络协议和规则有深入的了解,所以对于普通用户来说使用较为困难。
firewalld:firewalld 是Red Hat公司在RHEL7中引入的一种新型防火墙软件,它是iptables的高级封装,提供了更加友好的界面以及更加简单的配置方式。firewalld支持动态添加或删除规则,可以在运行时实时更新防火墙规则,并且支持多种网络接口的管理和控制。
ufw:ufw (Uncomplicated Firewall) 是Ubuntu中的一种简单易用的防火墙软件,它是iptables的又一种高级封装,提供了更加易于使用的命令行界面和配置文件。ufw配置简单,支持多种规则类型,例如允许、拒绝、限制等,可以快速地配置常见的网络服务和端口。
iptables 命令
iptables是Linux下最常用的防火墙软件,它可以通过命令行配置各种规则,控制进出网络的数据包。以下是一些常用的iptables命令:
查看和修改iptables规则:
iptables -L:列出当前所有规则;
iptables -L -n:列出所有防火墙规则,并显示端口号;
iptables -F 清空 iptables 规则,可以删除所有规则,从而重新开始配置。
iptables -P INPUT DROP 将 INPUT 链的默认策略设置为 DROP,拒绝所有的入站数据包。
iptables -A FORWARD -i eth0 -o eth1 -j ACCEPT :允许从 eth0 接口到 eth1 接口的数据包转发,用于多网卡的情况。 iptables -A INPUT -s 192.168.1.0/24 -j ACCEPT:允许来自于192.168.1.0/24网段的数据包通过; iptables -A OUTPUT -d 192.168.1.0/24 -j ACCEPT:允许发往192.168.1.0/24网段的数据包通过; iptables -A OUTPUT -d 192.168.1.10 -j DROP 拒绝系统向指定 IP 地址发送数据包,用于限制系统对某些地址的访问 iptables -A INPUT -p tcp --dport 22 -j ACCEPT: 允许22端口的数据包通过; iptables -A INPUT -p tcp --dport 49152:65534 -j ACCEPT 打开49152~65534之间的端口,打开49152~65534之间的端口 iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT :允许已经建立的连接数据包通过防火墙。 iptables -A INPUT -i lo -j ACCEPT :允许本地回环接口的数据包通过防火墙。 iptables -A INPUT -j DROP :拒绝所有未匹配到规则的数据包进入系统。 iptables -A INPUT -p tcp --dport 80 -m limit --limit 25/minute --limit-burst 100 -j ACCEPT :限制 HTTP 流量,每分钟最多接受 25 个数据包,最大缓冲 100 个数据包。 iptables -A INPUT -p icmp --icmp-type echo-request -m limit --limit 1/second -j ACCEPT :限制 ICMP 流量,每秒最多接受一个 echo-request 数据包。 iptables -A INPUT -p tcp --dport 80 -m connlimit --connlimit-above 10 -j REJECT :限制 HTTP 流量,最多允许 10 个并发连接,超过限制则拒绝连接。 iptables -A INPUT -p tcp --dport 22 -m recent --name ssh --set -j ACCEPT : 使用 recent 模块记录 SSH 连接,设置为 SSH,如果连续多次连接失败,则拒绝连接。可以通过以下命令实现: iptables -A INPUT -p tcp --dport 22 -m recent --name ssh --rcheck --seconds 60 --hitcount 3 -j DROP :检查 SSH 连接是否已经超过 3 次,如果在 60 秒内达到了 3 次,则拒绝连接。 iptables -A INPUT -m geoip --src-cc CN -j DROP 使用 geoip 模块限制国家/地区访问,只允许来自中国的数据包进入系统。 iptables -D 删除指定规则,可以根据规则的编号或者内容来删除已经存在的规则。例如: iptables -D INPUT 2 删除 INPUT 链中的第二条规则。 iptables -D INPUT -s 192.168.1.0/24 -j ACCEPT:删除来自于192.168.1.0/24网段的允许规则。 iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o eth0 -j MASQUERADE 使用 NAT 技术将内部网络的 IP 地址转换成公网 IP 地址,从而实现对外访问。这个命令是在 nat 表中新增 POSTROUTING 规则,表示对从 192.168.1.0/24 网段发出的数据包,通过 eth0 接口发送出去时进行地址转换,使用 MASQUERADE 参数可以自动获取外部网络的 IP 地址
清空iptables规则:
iptables -F:清空所有规则;
iptables -X:删除所有用户自定义链;
iptables -Z:将所有计数器归零。
保存和恢复iptables规则:
iptables-save > /etc/sysconfig/iptables:将当前iptables规则保存到文件中; iptables-restore < /etc/sysconfig/iptables:从文件中恢复iptables规则。 或者 /etc/rc.d/init.d/iptables save /etc/init.d/iptables restart 或者 service iptables restart
需要注意的是,iptables的配置需要根据实际情况进行调整,不正确的配置可能会导致网络连接失败或者安全漏洞。建议在配置防火墙前先备份配置文件,以免误操作导致不可挽回的后果。
示例
可以通过修改/etc/sysconfig/iptables文件的方式开启端口,如下
vi /etc/sysconfig/iptables
-A INPUT -m state --state NEW -m tcp -p tcp --dport 22122 -j ACCEPT -A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT -A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT
firewalld 命令
firewalld是一种新的防火墙软件,它提供了一种更加灵活和动态的方式来管理防火墙规则。以下是一些常见的firewalld命令:
启动和停止firewalld:
systemctl start firewalld:启动firewalld服务;
systemctl stop firewalld:停止firewalld服务;
systemctl enable firewalld:设置firewalld服务为开机启动;
systemctl disable firewalld:禁止firewalld服务开机启动。
systemctl status firewalld 查看防火墙是否开启
查看和修改firewalld规则:
firewall-cmd --list-all:列出当前防火墙的所有规则; firewall-cmd --zone=public --add-port=80/tcp --permanent:开放80端口的TCP访问权限,并永久生效; firewall-cmd --zone=public --remove-port=80/tcp --permanent:关闭80端口的TCP访问权限, firewall-cmd --zone=public --list-ports:列出当前开放的端口; firewall-cmd --zone=public --add-interface=eth0(永久生效再加上 --permanent 然后reload防火墙)将接口添加到区域(默认接口都在public) firewall-cmd --add-service=ftp :临时开放ftp服务 firewall-cmd --add-service=ftp --permanent :永久开放ftp服务并永久生效; firewall-cmd --get-default-zone:显示当前默认的防火墙区域; firewall-cmd --set-default-zone=public :设置默认的防火墙区域为public。 firewall-cmd --reload:重新加载防火墙规则。 firewall-cmd --complete-reload(两者的区别就是第一个无需断开连接,就是firewalld特性之一动态添加规则,第二个需要断开连接,类似重启服务) firewall-cmd --state 查看防火墙状态方法2 firewall-cmd --version:查看版本 firewall-cmd --help :查看帮助 firewall-cmd --get-active-zones :查看区域信息 firewall-cmd --get-zones ##列出支持的zone firewall-cmd --get-zone-of-interface=eth0 :查看指定接口所属区域信息 firewall-cmd --panic-on :拒绝所有包 firewall-cmd --panic-off :取消拒绝状态 firewall-cmd --query-panic :查看是否拒绝 firewall-cmd --get-services ##列出支持的服务,在列表中的服务是放行的 firewall-cmd --query-service ftp ##查看ftp服务是否支持,返回yes或者no
示例:
在指定区域或者去掉需要开放的端口(记得重启防火墙)
firewall-cmd --zone=public --add-port=80/tcp(永久生效再加上 --permanent) firewall-cmd --permanent--zone=public --remove-port=8080/tcp firewall-cmd --permanent --zone=public --list-ports firewall-cmd --reload (加载配置,使得修改有效) systemctl start firewalld.service 重启服务也达到重新加载配置的效果
需要注意的是,firewalld的配置需要根据实际情况进行调整,不正确的配置可能会导致网络连接失败或者安全漏洞。建议在配置防火墙前先备份配置文件
ufw 命令
ufw是Ubuntu下的一种基于iptables的简单防火墙命令,它提供了一组简化的命令,使得配置防火墙变得更加容易。以下是一些常用的ufw命令:
启用和停用ufw:
ufw enable:启用ufw防火墙;
ufw disable:禁用ufw防火墙;
ufw status:查看ufw防火墙状态。
查看和修改ufw规则:
ufw allow 端口号:开放指定的端口;
ufw deny 端口号:拒绝指定的端口;
ufw delete allow 端口号:删除已经开放的端口;
ufw delete deny 端口号:删除已经拒绝的端口;
ufw reload:重新加载ufw规则。
设置默认的ufw规则:
ufw default allow:设置默认允许所有连接;
ufw default deny:设置默认拒绝所有连接。
示例:
ufw allow 80/tcp
ufw allow 443/tcp
ufw reload