Web服务器的Linux Iptables设置防火墙
我在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