linux防火墙 Firewalls以及iptables相关配置

    技术2022-07-17  73

    linux防火墙 Firewalls以及iptables相关配置

    Firewalls

    首先Firewalls是Linux上新用的防火墙软件,跟iptables差不多的工具; firewall-cmd 是 firewalld的字符界面管理工具,firewalld是centos7的一大特性,最大的好处有两个:支持动态更新,不用重启服务;第二个就是加入了防火墙的“zone”概念。

    firewalld跟iptables比起来至少有两大好处:

    firewalld可以动态修改单条规则,而不需要像iptables那样,在修改了规则后必须得全部刷新才可以生效。 firewalld在使用上要比iptables人性化很多,即使不明白“五张表五条链”而且对TCP/IP协议也不理解也可以实现大部分功能。 firewalld自身并不具备防火墙的功能,而是和iptables一样需要通过内核的netfilter来实现,也就是说firewalld和 iptables一样,他们的作用都是用于维护规则,而真正使用规则干活的是内核的netfilter,只不过firewalld和iptables的结 构以及使用方法不一样罢了。

    特别提醒 Firewalls必须每次添加完开启服务或者端口的命令同时需要进行一次重载;相关命令如下:firewall-cmd --reload # 在不改变状态的条件下重新加载防火墙 方能使你开通的端口生效。

    相关启动关闭命令

    systemctl start firewalld # 启动 systemctl status firewalld # 或者 firewall-cmd --state 查看状态 systemctl disable firewalld # 停止 systemctl stop firewalld # 禁用 firewall-cmd --reload # 在不改变状态的条件下重新加载防火墙

    一、开放或限制端口

    1、开放端口 (1)如我们需要开启XShell连接时需要使用的22端口

    firewall-cmd --zone=public --add-port=22/tcp --permanent

    其中–permanent的作用是使设置永久生效,不加的话机器重启之后失效

    (2)重新载入一下防火墙设置,使设置生效

    firewall-cmd --reload

    (3)可通过如下命令查看是否生效

    firewall-cmd --zone=public --query-port=22/tcp

    (4)如下命令可查看当前系统打开的所有端口

    firewall-cmd --zone=public --list-ports

    2、限制端口 (1)比如我们现在需要关掉刚刚打开的22端口

    firewall-cmd --zone=public --remove-port=22/tcp --permanent

    (2)重新载入一下防火墙设置,使设置生效

    firewall-cmd --reload

    (3)再去查看系统所有开放的端口,已经看到没有22端口了

    firewall-cmd --zone=public --list-ports

    3、批量开放或限制端口 (1)批量开放端口,如从100到500这之间的端口我们全部要打开

    firewall-cmd --zone=public --add-port=100-500/tcp --permanent

    (2)重新载入一下防火墙设置,使设置生效

    firewall-cmd --reload

    (3)查看系统所有开放的端口,可以看到从100到500的端口已被全部开放

    firewall-cmd --zone=public --list-ports

    (4)同理,批量限制端口为

    firewall-cmd --zone=public --remove-port=100-500/tcp --permanent firewall-cmd --reload

    三、开放或限制IP

    1、限制IP地址访问 (1)比如限制IP为192.168.0.200的地址禁止访问80端口即禁止访问机器

    firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address="192.168.0.200" port protocol="tcp" port="80" reject"

    (2)重新载入一下防火墙设置,使设置生效

    firewall-cmd --reload

    (3)查看已经设置的规则

    firewall-cmd --zone=public --list-rich-rules

    2、解除IP地址限制 (1)解除刚才被限制的192.168.0.200

    firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address="192.168.0.200" port protocol="tcp" port="80" accept"

    (2)重新载入一下防火墙设置,使设置生效

    firewall-cmd --reload

    (3)再查看规则设置发现已经没有192.168.0.200的限制了

    firewall-cmd --zone=public --list-rich-rules

    如设置未生效,可尝试直接编辑规则文件,删掉原来的设置规则,重新载入一下防火墙即可

    vi /etc/firewalld/zones/public.xml

    3、限制IP地址段 (1)如我们需要限制10.0.0.0-10.0.0.255这一整个段的IP,禁止他们访问

    firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address="10.0.0.0/24" port protocol="tcp" port="80" reject"

    其中10.0.0.0/24表示为从10.0.0.0这个IP开始,24代表子网掩码为255.255.255.0,共包含256个地址,即从0-255共256个IP,即正好限制了这一整段的IP地址

    (2)重新载入一下防火墙设置,使设置生效

    firewall-cmd --reload

    (3)查看规则,确认是否生效

    firewall-cmd --zone=public --list-rich-rules

    (4)同理,打开限制为

    firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address="10.0.0.0/24" port protocol="tcp" port="80" accept" firewall-cmd --reload

    iptables

    相关配置以及意义 iptables常用命令

    service iptables start //启动iptables service iptables stop //关闭iptables service iptables restart //重启iptables service iptables status //查看iptables状态 cat /etc/sysconfig/iptables //查看iptables规则 vi /etc/sysconfig/iptables //修改iptables的规则 service iptables save //保存命令行中设置的iptables规则到iptables文件中 iptables -V (注意:V是大写字母V) //查看iptables版本

    完整配置

    # Firewall configuration written by system-config-firewall # Manual customization of this file is not recommended. *filter :INPUT ACCEPT [0:0] :FORWARD ACCEPT [0:0] :OUTPUT ACCEPT [0:0] -N whitelist -A whitelist -s xx.xx.xx.xx -j ACCEPT -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT -A INPUT -p icmp -j ACCEPT -A INPUT -i lo -j ACCEPT -A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT -A INPUT -p udp --destination-port 514 -j ACCEPT -A INPUT -j REJECT --reject-with icmp-host-prohibited -A FORWARD -j REJECT --reject-with icmp-host-prohibited -A OUTPUT -o lo -j ACCEPT -A INPUT -p tcp --dport 1100 -j REJECT 其中:INPUT ACCEPT [0:0] # 该规则表示INPUT表默认策略是ACCEPT :FORWARD ACCEPT [0:0] # 该规则表示FORWARD表默认策略是ACCEPT :OUTPUT ACCEPT [0:0] # 该规则表示OUTPUT表默认策略是ACCEPT 1.-A whitelist -s xx.xx.xx.xx -j ACCEPT 设置相关ip的所有端口皆可以访问 2.-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT 意思是允许进入的数据包只能是刚刚我发出去的数据包的回应,ESTABLISHED:已建立的链接状态。RELATED:该数据包与本机发出的。 3.-A INPUT -p icmp -j ACCEPT ICMP(Internet Control Message Protocol)Internet控制报文协议。它是TCP/IP协议簇的一个子协议,用于在IP主机、路由器之间传递控制消息。这个大致意思就是配置icmp相关协议连接允许通过。 4.-A INPUT -i lo -j ACCEPT 该命令意思就允许本地环回接口在INPUT表的所有数据通信,-i 参数是指定接口,接口是lo,lo就是Loopback(本地环回接口) (小知识:lo 是 loopback 的缩写,也就是环回的意思,linux系统默认会有一块名为 lo 的环回网络接口.而你真正的网卡一般则被linux系统识别成名为 eth0,eth1 这样的网络接口。 一般,lo接口对应的ip地址为 127.0.0.1,IP地址可通过ifconfig来查看。 当你从一台linux主机向自身发送数据包时,实际上的数据包是通过虚拟的lo接口来发送接受的,而不会通过你的物理网卡 eth0/eth1.... 比如 你的主机名为 myworkstation,那么通过 ping/telnet/ssh 去访问 myworkstation,那么收发的数据包都是通过 lo接口的.同理,访问 localhost 或者 127.0.0.1 也是一样的效果. iptables -A INPUT -i lo -j ACCEPT 添加iptables规则,允许来自于lo接口的数据包 iptables -A OUTPUT -o lo -j ACCEPT 添加iptables规则,允许向lo接口发送数据包)。 5.-A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT 开放tcp协议的22端口 这个端口就是通常的ssh连接端口,亦可以根据这个开放你想要开通的端口 6.-A INPUT -p udp --destination-port 514 -j ACCEPT 开放upd协议的514端口 这个端口就是通常的ssh连接端口,亦可以根据这个开放你想要开通的端口 7.-A INPUT -m state --state NEW -m tcp -p tcp --dport 3306 -j ACCEPT 同上一样,开放3306端口 8.-A INPUT -j REJECT --reject-with icmp-host-prohibited 9.-A FORWARD -j REJECT --reject-with icmp-host-prohibited 意思是在INPUT表和FORWARD表中拒绝所有其他不符合上述任何一条规则的数据包。并且发送一条host prohibited的消息给被拒绝的主机。 因此把-A INPUT -m state --state NEW -m tcp -p tcp --dport 5001:5009 -j ACCEPT放在首行(INPUT ACCEPT前),因默认策略没有设置不会生效. 而把-A INPUT -m state --state NEW -m tcp -p tcp --dport 5001:5009 -j ACCEPT放在最后,执行-A INPUT -j REJECT --reject-with icmp-host-prohibited时INPUT表和FORWARD表只有22,后加的端口5001到5009都会被拒绝。 10.-A INPUT -p tcp --dport 1100 -j REJECT COMMIT``` 拒绝端口1100的访问,其实配置上面那个全部拒绝后除了最上面开放的端口都会被拒绝连接,这个只是适合单独使用,比如没发确定哪些端口需要开放,可以指定哪些端口不允许开放。

    iptables没有生效的问题

    由于配置问题配置REJECT的情况 -A INPUT -j REJECT --reject-with icmp-host-prohibited,这行已拒绝其他端口的命令,如果我们将新插入的开放端口在放在这行命令之后的情况下,后面的配置开放的端口是不会被启用的。例如:

    -A INPUT -j REJECT --reject-with icmp-host-prohibited -A FORWARD -j REJECT --reject-with icmp-host-prohibited -A INPUT -m state --state NEW -m tcp -p tcp --dport 3306 -j ACCEPT

    其实配置防火墙很简单,但是必须明白其命令的含义,若无法理解可以多找几篇相关文章进行理解,再者在不确定开放哪些端口时但领导必须要你开防火墙,你就必须得把22、23端口打开,这样方便ssh远程修改规则进行及时变更,否则这两样都禁止了,你就只能通过虚拟机的主机进行登录修改了。 这些也只是本人一点见解,通过各种大佬文章进行自我总结归纳,也就图个方便自我查看。

    Processed: 0.009, SQL: 10