linux环境下设置iptables防火墙

本文详细介绍如何在Linux系统中使用iptables配置防火墙,包括开放指定端口、设置默认策略等步骤,特别针对使用nginx反向代理的情况进行详细说明。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

我在阿里云上有一台linux服务器,主要用于网站发布。主要架构是nginx作为反向代理服务器,后面跟着一个tomcat。

其中,tomcat使用8080端口,nginx将外来的80端口或443端口访问,转发至tomcat的8080端口上。

为了加强安全性,今天打算启用linux自带的防火墙,用来屏蔽外界访问服务器的其他端口。

首先,查看一下iptables的设置情况,使用如下命令:

iptables -L -n 

如果没有启用,则显示如下:

[root@iZ25qrs2oacZ ~]# iptables -L -n 
Chain INPUT (policy ACCEPT)
target     prot opt source               destination  

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination  

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination  
[root@iZ25qrs2oacZ ~]# 

如果有启用,则首先将其策略全部清空。在清空之前,要确保INPUT、FORWARD和OUTPUT的默认策略是accept,否则,将会造成22端口不可用,ssh链接被断开,只能打电话给机房,让他们重启服务器了。因此,必须先执行如下命令:

[root@iZ25qrs2oacZ data]# iptables -P INPUT ACCEPT
[root@iZ25qrs2oacZ data]# iptables -P OUTPUT ACCEPT
[root@iZ25qrs2oacZ data]# iptables -P FORWARD ACCEPT

然后才能执行清空命令:

[root@iZ25qrs2oacZ data]# iptables -F 

接下来,将防火墙访问策略,按照顺序逐一写入,例如,向全网开放22、80和443端口:

​[root@iZ25qrs2oacZ data]# iptables -A INPUT -p tcp --dport 22 -j ACCEPT
[root@iZ25qrs2oacZ data]# iptables -A INPUT -p TCP --dport 80 -j ACCEPT
[root@iZ25qrs2oacZ data]# iptables -A INPUT -p TCP --dport 443 -j ACCEPT

由于本机使用了nginx做反向代理,因此,必须将8080端口开放给本机。因此下面的三行代码是将本机的外网ip、内网ip和127.0.0.1均允许发数据包给本机的任意端口。注意:-s是源地址:

[root@iZ25qrs2oacZ data]# iptables -A INPUT -p tcp -s 101.101.101.101 -j ACCEPT
[root@iZ25qrs2oacZ data]# iptables -A INPUT -p tcp -s 127.0.0.1 -j ACCEPT
[root@iZ25qrs2oacZ data]# iptables -A INPUT -p tcp -s 10.10.10.10 -j ACCEPT

然后增加如下命令,否则,服务端发起对外访问请求时,会报错(java.net.unknownhostexception):

[root@iZ25qrs2oacZ data]# iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

最后,将防火墙INPUT默认策略改为DROP,即为不符合上述策略的访问,一律不准进入。

[root@iZ25qrs2oacZ data]# iptables -P INPUT DROP

完成。

==========================分割线==============================

最后总结一下:

1.首先检查当前iptables的配置情况:
iptables -L -n

2.将三条链路的默认规则均置为直接放行(ACCEPT):
iptables -P INPUT ACCEPT
iptables -P OUTPUT ACCEPT
iptables -P FORWARD ACCEPT

3.将三条链路的所有规则全部清空(危险,可能会导致22端口不可访问,ssh连接失效。因此上一步操作非常关键):
iptables -F 

4.设置INPUT链路规则(当防火墙所在的服务器有nginx反向代理时,需要将外部请求转发至后端的8080端口,
因此,最后三行代码的目的是:允许自己将任何数据包发给自己的任意端口):
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
iptables -A INPUT -p TCP --dport 80 -j ACCEPT
iptables -A INPUT -p TCP --dport 443 -j ACCEPT
iptables -A INPUT -p tcp -s 101.101.101.101 -j ACCEPT  /*外网ip*/
iptables -A INPUT -p tcp -s 127.0.0.1 -j ACCEPT      /*127.0.0.1*/
iptables -A INPUT -p tcp -s 10.10.10.10 -j ACCEPT   /*内网ip*/

5.增加服务端发起对外访问请求(如httpclient)时的设置:
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

6.将INPUT链路的默认规则置为直接拒绝(DROP):
iptables -P INPUT DROP

参考资料:

http://www.cnblogs.com/JemBai/archive/2009/03/19/1416364.html

http://blog.youkuaiyun.com/tobacco5648/article/details/51508012

 

转载于:https://my.oschina.net/yxzkm/blog/794239

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值