Web服务器的Linux Iptables设置防火墙

时间:2020-01-09 10:42:28  来源:igfitidea点击:

我在CentOS Linux上安装了Apache Web服务器。
如何配置防火墙以允许或者阻止访问?
如何在RHEL或者CentOS Linux v6.x或者7.x下为Web服务器设置防火墙?

CentOS或者RHEL上的默认iptables配置不允许访问Apache(或者Nginx)Web服务器使用的HTTP(TCP PORT#80)和HTTPS(TCP PORT#443)端口。
您需要在RHEL/CentOS Linux 6.x上使用基于iptables的防火墙打开这些端口。

Web服务器的Linux Iptables设置防火墙

RHEL/CentOS 6.x上,您可以使用以下三种方法之一来修改设置:

  • /etc/sysconfig/iptables:编辑该文件以允许或者拒绝对Apache Web服务器IPv4的访问。您还需要编辑/etc/sysconfig/ip6tables文件,以允许或者拒绝访问Apache Web Server IPv6端口。
  • " system-config-firewall-tui"命令(在基于ssh文本的会话上运行)或者" system-config-firewall"命令(在基于GUI的会话上运行):这是用于设置基本防火墙规则的图形用户界面。此工具将始终覆盖/etc/sysconfig/iptables文件。
  • /sbin/iptables命令:直接使用iptables命令修改/添加/添加防火墙规则。可以使用"/sbin/service iptables save"命令将规则保存到"/etc/sysconfig/iptables"文件中。
  • /usr/sbin/lokkit命令:这是一个基本的防火墙配置工具,旨在易于使用和配置。该工具还支持SELinux config选项。该工具被认为已弃用,本常见问题未涵盖。

如果您使用的是RHEL/CentoS版本7.x,请参阅此页面末尾关于Firewall-cmd的注释。

方法1.编辑/etc/sysconfig/iptables文件

编辑IPv4/etc/sysconfig/iptables,执行:

# vi /etc/sysconfig/iptables

添加以下行,确保它们出现在INPUT链的最后LOG和DROP行之前:

## allow everyone to access port 80 and 443 (IPv4 Only)##
 
-A INPUT -m state --state NEW -p tcp --dport 80 -j ACCEPT
-A INPUT -m state --state NEW -p tcp --dport 443 -j ACCEPT

保存并关闭文件。
重新启动IPv4 iptables服务:

# service iptables start

编辑IPv6/etc/sysconfig/ip6tables,执行:

# vi /etc/sysconfig/ip6tables

添加以下行,确保它们出现在INPUT链的最后LOG和DROP行之前:

## allow everyone to access port 80 and 443 (IPv6 Only)##
 
-A INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 443 -j ACCEPT

保存并关闭文件。
重新启动IPv6 iptables服务:

# service ip6tables restart

方法2。防火墙配置GUI/TUI工具(建议新用户使用)

system-config-firewall命令是用于设置基本防火墙规则的图形用户界面。
您需要在系统上安装KDE或者Gnome。
打开终端并以root用户身份执行以下命令:

# system-config-firewall

输出示例:
正在使用的GUI工具

选择诸如WWW,SSH,HTTPS之类的服务为所有人打开端口。
单击"应用"按钮。
该工具将生成/etc/sysconfig/iptables。

关于基于文本的配置工具的注释(推荐用于具有ssh访问权限的远程服务器)

sysystem-config-firewall-tui是一种命令行工具,未在服务器上安装GUI:

# system-config-firewall-tui

选择"启用",然后按Tab键选择"自定义":向下/向上滚动,然后选择SSH,WWW,安全WWW(HTTPS)和您要打开的其他必需端口。
最后,选择"关闭"按钮。
最后,按"确定"按钮激活新的防火墙设置。

方法3./sbin/iptables命令行实用程序

以超级用户身份执行以下iptables命令以打开端口80/443:

## open port 80 and 443 for everyone ##
/sbin/iptables -A INPUT -m state --state NEW -p tcp --dport 80 -j ACCEPT
/sbin/iptables -A INPUT -m state --state NEW -p tcp --dport 443 -j ACCEPT
 
## save newly added firewall rules ##
/sbin/service iptables save
 
## verify new firewall settings 
/sbin/iptables -L -n -v
/sbin/iptables -L INPUT -n -v
/sbin/iptables -L INPUT -n -v | grep :80
/sbin/iptables -L INPUT -n -v | grep :443

以下规则仅允许访问端口80和443到192.168.1.0/24

## Find an appropriate network block, and network mask
## representing the machines on your network which should operate as 
## clients of the Apache Web-server 
 
## Open port 80 and 443 for 192.168.1.0/24 subnet only ##
/sbin/iptables -A INPUT -s 192.168.1.0/24  -m state --state NEW -p tcp --dport 80 -j ACCEPT
/sbin/iptables -A INPUT -s 192.168.1.0/24 -m state --state NEW -p tcp --dport 443 -j ACCEPT
 
## save newly added firewall rules ##
/sbin/service iptables save
 
## verify new firewall settings 
/sbin/iptables -L -n -v
/sbin/iptables -L INPUT -n -v
/sbin/iptables -L INPUT -n -v | grep :80
/sbin/iptables -L INPUT -n -v | grep :443

您可以使用iptables如下阻止/丢弃IP地址192.54.1.1或者子网192.54.1.2/29:

## Block access to port 80 ##
iptables -A INPUT -s 192.54.1.1 -p tcp --dport 80 -j DROP
iptables -A INPUT -s 192.54.1.2/29 -p tcp --dport 80 -j DROP
 
## block and drop access to port 443 (secure apache web-server)
iptables -A INPUT -s 192.54.1.1 -p tcp --dport 443 -j DROP
iptables -A INPUT -s 192.54.1.2/29 -p tcp --dport 443 -j DROP
 
## save newly added firewall rules ##
/sbin/service iptables save
 
## verify new firewall settings 
/sbin/iptables -L -n -v
/sbin/iptables -L INPUT -n -v | grep 192.54.1.1

注意:要取消阻止IP,即删除iptables中列出的IP地址192.54.1.1,请输入以下命令:

iptables -D INPUT -s 192.54.1.1 -j DROP

关于RHEL/CentOS 7.x用户的说明

您需要使用firewall-cmd命令。

firewall-cmd是firewalld(支持网络/防火墙区域的动态托管防火墙)守护程序的命令行客户端。

带防火墙的开放端口80

sudo firewall-cmd --permanent --zone=public --add-service=http
sudo firewall-cmd --reload

防火墙开放端口443

sudo firewall-cmd --permanent --zone=public --add-service=https
sudo firewall-cmd --reload

在CentOS/RHEL 7.x上使用称为防火墙配置的gui工具

可以使用yum命令如下安装基本的firewalld设置的图形界面:

$ sudo yum install firewall-config
## must have GUI/X system installed on your server or do X forwarding over SSH ##
$ sudo firewall-config