linux的防火墙管理

时间:2021-03-05 16:36:40

换oricle-linux7系统后,发现iptables的管理方法有不小的改动,记录一下遇到的问题。

iptables

  • linux系统已经默认安装了iptables和firewalld两款防火墙管理工具,但是在使用service iptables save命令的时候可能提示找不到命令;另外iptables的配置文件在/etc/sysconfig/iptables,但是新装的服务器可能没有这个文件,一般需要安装iptables-service;

  • 本人习惯使用iptables防火墙工具;

yum -y install iptables-services   # 先更新iptables-services,可以发现在/etc/sysconfig/目录下已经有Iptables文件,同时可以使用service来管理iptables了

systemctl stop firewalld     # 先关闭防火墙
systemctl start iptables # 启动防火墙
systemctl enable iptables # 将防火墙设置成开机自启动
systemctl iptables save # 将当前配置的防火墙设置保存到/etc/sysconfig/iptables目录下

注意:

  1. firewalld和iptables是相互独立的防火墙管理工具;

  2. ‘systemctl iptables save’ 执行时,iptables会去读取/etc/sysconfig/iptables-config文件,然后读取/etc/sysconfig/iptables文件;

扩展

service iptables status  # 查看防火墙的状态
service iptables start # 开启防火墙
service iptables stop # 关闭防火墙
service iptables restart # 重启防火墙
  • 配置iptables参数

防火墙需要开放端口给外部访问,设置过滤等。因此需要配置文件,所有的配置保存在/etc/sysconfig/iptables中,有两种方法可以配置:

  • 方法一:直接修改iptables文件
*filter
:INPUT ACCEPT [0:0] # 允许流量输入
:FORWARD ACCEPT [0:0] # 允许转发
:OUTPUT ACCEPT [0:0] # 允许流出
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p icmp -j ACCEPT # 允许ping通
-A INPUT -i lo -j ACCEPT # 默认允许网卡流入数据
-A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT # 添加一条规则,允许22端口
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
COMMIT # 提交设置
# 在后面添加相关的命令行
  • 参数详解
-A  :添加一条规则,针对什么数据包,INPUT流入的数据包,OUTPUT流出的数据包,FORWARD转发的数据包
-p :指定协议,如TCP,UDP
–dport:目标端口,当数据从外部进入服务器为目标端口
–sport:源端口,数据从服务器出去,则为数据源端口使用
–j :指定策略规则,ACCEPT(允许接收)、DROP(拒绝接收,无响应)、REJECT(拒绝接收,有响应)
-s : 指定某一个IP地址的访问,加叹号“!”表示除这个IP外 -L 查看规则链
-F 清空规则链
-I num 在规则链的头部加入新规则
-D num 删除某一条规则
-d 匹配目标地址
-i 网卡名称 匹配从这块网卡流入的数据
-o 网卡名称 匹配从这块网卡流出的数据
  • 方法二:使用命令行动态修改保存
iptables -P INPUT -j DROP
service iptables save

注意

  1. 防火墙的规则是按照从上往下依次匹配的,因此一定要把允许动作放到拒绝动作前面,否则所有的流量就将被拒绝掉,从而导致任何主机都无法访问。

firewalld

  • linux的另一款防火墙的管理工具;
service firewalld status  # 查看防火墙的状态
service firewalld start # 开启防火墙
service firewalld stop # 关闭防火墙
service firewalld restart # 重启防火墙
  • 管理端口
# 开启一个端口
firewall-cmd --zone=public --add-port=80/tcp --permanent # 重新载入
firewall-cmd --reload # 查看某个端口的状态是否开启
firewall-cmd --zone=public --query-port=80/tcp
# 关闭某个端口
firewall-cmd --zone=public --remove-port=80/tcp --permanent
  • 参数
--permanent : 设置命令永久有效
--add-port : 开启一个端口
--remove-port : 关闭一个端口

使用systemctl

  • systemctl是融合了chkconfig和service的系统管理工具,更加的强大和方便;
systemctl start firewalld    # 开启防火墙
systemctl stop firewalld # 关闭防火墙,开机启动
systemctl restart firewalld # 重新启动防火墙
systemctl status firewalld # 查看防火墙的状态
systemctl disable firewalld # 永久关闭防火墙,不再开机自启动
systemctl enable firewalld # 设置防火墙开机自启动
systemctl is-enabled firewalld systemctl start iptables # 开启防火墙
systemctl stop iptables # 关闭防火墙,开机启动
systemctl restart iptables # 重新启动防火墙
systemctl status iptables # 查看防火墙的状态
systemctl disable iptables # 永久关闭防火墙,不再开机自启动
systemctl enable iptables # 设置防火墙开机自启动