`

Centos下配置iptables防火墙

阅读更多

服务器新增的系统是Centos6,这个版本默认已经安装了iptables。

 

iptables的基本操作:

service iptables start
service iptables stop

service iptables restart
service iptables status  #如果没有启动,将提示没有启动,否则将会显示已经添加的过滤规则

service iptables save    #保存添加的规则,记得每次更改规则以后这样保存一下

 

清除iptables已有规则

iptables -F  

iptables -X 

iptables -Z

 

 查看已经添加的规则:

iptables -L -n       

将所有iptables以序号标记显示,执行:
iptables -L -n --line-numbers
比如要删除INPUT里序号为8的规则,执行:

iptables -D INPUT 8

 

 

好了,接下来就是添加各种过滤规则了,先看一下执行service iptables status显示已经添加完以后的过滤规则表:

表格:filter
Chain INPUT (policy ACCEPT)
num  target     prot opt source               destination
1    ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           tcp dpt:21
2    ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           tcp dpt:20
3    ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0           state RELATED,ESTABLISHED
4    ACCEPT     icmp --  0.0.0.0/0            0.0.0.0/0
5    ACCEPT     all  --  127.0.0.1            127.0.0.1
6    ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           tcp dpt:80
7    ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           tcp dpt:22
8    REJECT     all  --  0.0.0.0/0            0.0.0.0/0           reject-with icmp-port-unreachable

Chain FORWARD (policy ACCEPT)
num  target     prot opt source               destination
1    REJECT     all  --  0.0.0.0/0            0.0.0.0/0           reject-with icmp-port-unreachable

Chain OUTPUT (policy ACCEPT)
num  target     prot opt source               destination
1    ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0

 现在服务器上主要就apache和ftp,apache端口是80,vsftpd需要20,21号端口。然后还有就是必须要ssh能登录(端口号22)。

好了,接下来就看怎么一步一步添加这些规则的。

首先要让SSH能登录进系统,因为我进行这些操作都是通过ssh远程登录的服务器,如果22端口被过滤掉,那就完了:

iptables -A INPUT -p tcp --dport 22 -j ACCEPT

 向INPUT的chain里添加(-A是添加到末尾,-I是添加到首部)规则,对协议是tcp源端口是22的数据都接收。本来考虑OUTPUT的chain里执行添加:

iptables -A OUTPUT -p tcp --sport 22 -j ACCEPT

后来考虑还是让所有往外的数据都开放吧,不然服务器里的其它未知端口的程序就没法正常工作了,所以:

iptables -A OUTPUT -j ACCEPT

 对于FORWARD这个链路没有特殊的情况全部都拒绝就行了:

iptables -A FORWARD -j REJECT

因为添加规则的顺序很重要,对于所有的INPUT的数据,默认也拒绝,后面再添加特殊的端口,由于开始添加了一个开发22号端口的规则,所以默认的拒绝的规则加到INPUT的最后:

iptables -A INPUT -j REJECT

 接下来添加apache的80端口,允许请求进入服务器:

iptables -I INPUT -p tcp --dport 80 -j ACCEPT

允许本地回环接口(即运行本机访问本机) :

iptables -I INPUT -s 127.0.0.1 -d 127.0.0.1 -j ACCEPT

 开放ping允许,让别的机器能ping通这台服务器(由于所有的OUTPUT都accept了,所以它自己当然也能ping通别的机器),ping使用的是icmp协议,没有端口号,所以添加方法如下:

iptables -I INPUT -p icmp  -j ACCEPT

 允许所有已建立的或相关连的通行:

iptables -I INPUT -m state –state ESTABLISHED,RELATED -j ACCEPT

 好了,接下来添加ftp需要的端口20和21: 

iptables -I INPUT -p tcp --dport 20 -j ACCEPT;
iptables -I INPUT -p tcp --dport 21 -j ACCEPT;

 所有的规则都添加完毕,通过service iptables status就能看见最开始那个过滤列表了。接下来测试一下。SSH登录和WEB访问apache都没有问题,但是ftp就连不上了,太诡异了,不是都添加了20和21端口了的吗。

网上搜了一下,说法是iptables控制ftp还需要加载系统的模块,主要就是ip_nat_ftp。

#lsmod | grep ftp (查看是否加载ftp模块)
#modprobe ip_nat_ftp(加载ftp模块)
#lsmod | grep ftp (查看模块是否被加载)

执行modprobe ip_nat_ftp以后,确实ftp能正常访问了。但是后来发现每次service iptables save以后,lsmod | grep ftp 查看一下又没有了,真是恼火。解决办法:

vim打开/etc/sysconfig/iptables-config,这个是iptables的配置文件,显示内容如下:

 

写道

 

# Space separated list of nat helpers (e.g. 'ip_nat_ftp ip_nat_irc'), which
# are loaded after the firewall rules are applied. Options for the helpers are
# stored in /etc/modprobe.conf.
IPTABLES_MODULES=""

# Unload modules on restart and stop
# Value: yes|no, default: yes
# This option has to be 'yes' to get to a sane state for a firewall
# restart or stop. Only set to 'no' if there are problems unloading netfilter
# modules.
IPTABLES_MODULES_UNLOAD="yes"

 当然这个文件后面还有一下参数,看到的这两个参数,第二个IPTABLES_MODULES_UNLOAD="yes",什么意思注释里已经很清楚了,每次iptables停止或者重启都会Unload modules。再看看第一个参数IPTABLES_MODULES="" ,注释里说是每次防火墙规则应用以后加载的模块。好了,将它改成IPTABLES_MODULES="ip_nat_ftp" 问题就解决了。

分享到:
评论

相关推荐

    CentOS下配置iptables防火墙.pdf

    CentOS下配置iptables防火墙.pdf

    阿里云Centos配置iptables防火墙.docx

    阿里云CentOS配置iptables防火墙是一项重要的安全措施,尽管阿里云提供了云盾服务,但额外的防火墙层能提供额外的安全保障。以下是配置iptables防火墙的详细步骤: 1. **检查iptables服务状态**: 首先,通过运行`...

    CentOS配置iptables防火墙.docx

    CentOS配置iptables防火墙.docx

    CentOS 7.0启用iptables防火墙.docx

    然而,如果你仍然希望使用 iptables 进行防火墙配置,下面将详细介绍如何在 CentOS 7.0 上启用和配置 iptables 服务。 首先,由于 CentOS 7.0 默认使用 firewallD,所以在启用 iptables 之前,我们需要关闭 ...

    Centos离线安装iptables.docx

    通过以上步骤,我们可以在没有互联网连接的情况下顺利完成CentOS系统中iptables的离线安装,并且能够对iptables进行基本的配置和管理。这种方式不仅适用于特殊情况下的需求,同时也提供了一种灵活可靠的解决方案。...

    CentOS7 Docker防火墙的简单配置教程

    CentOS7 Docker防火墙的简单配置 禁用 firewalld 服务 systemctl disable firewalld systemctl stop firewalld 安装 iptables 防火墙服务 yum install iptables-services 创建 iptables 配置脚本 cat >> /usr/...

    阿里云Centos配置iptables防火墙教程

    虽说阿里云推出了云盾服务,但是自己再加一层防火墙总归是更安全些,下面是我在阿里云vps上配置防火墙的过程,目前只配置INPUT。OUTPUT和FORWORD都是ACCEPT的规则 一、检查iptables服务状态 首先检查iptables服务的...

    CentOS7防火墙设置

    本文将指导您如何关闭默认防火墙,启用 iptables 防火墙,并配置 iptables 防火墙规则。 一、关闭默认防火墙 在 CentOS 7 中,默认防火墙是 firewalld,为了启用 iptables 防火墙,需要首先关闭默认防火墙。使用...

    防火墙白名单设置方法_iptables_centos6

    防火墙白名单设置方法_iptables_centos6 防火墙白名单设置方法_iptables_centos6 防火墙白名单设置方法_iptables_centos6

    CentOS 配置防火墙操作实例

    linux CentOS 6 配置防火墙操作实例

    一键配置CentOS iptables防火墙的Shell脚本分享

    ### 一键配置CentOS iptables防火墙Shell脚本解析 #### 概述 本文将详细介绍一个用于一键配置CentOS系统中的iptables防火墙的Shell脚本。该脚本可以帮助用户简化新装系统的iptables配置过程,使其更加高效且易于...

    iptables 与firewalld 防火墙.docx

    本文将对比 iptables 和 firewalld 的配置使用方法,并详细介绍 CentOS 7 中的防火墙配置。 iptables 防火墙 iptables 是 Linux 系统中的一种防火墙解决方案,用于过滤流量,保护内网安全。iptables 的主要功能是...

    centos6 iptables常用操作

    ### CentOS 6 iptables 常用操作及规则配置 ...正确配置iptables规则对于提高系统的安全性至关重要。需要注意的是,在实际部署过程中,应根据具体需求灵活调整规则,并确保不会影响到必要的网络通信。

    Centos7防火墙配置手册

    **FirewallD** 是 CentOS 7 中默认提供的防火墙管理工具,它为用户提供了一个灵活、强大的防火墙配置环境。相较于之前的 **system-config-firewall/lokkit** 静态防火墙模型,FirewallD 的主要优势在于它的动态性...

    CentOS防火墙学习教程

    CentOS 防火墙学习教程 CentOS 防火墙学习教程主要介绍了 CentOS 7 中的防火墙设置,包括查看防火墙状态、...CentOS 防火墙学习教程为读者提供了详细的防火墙设置指南,帮助读者更好地掌握 CentOS 中的防火墙配置。

    CentOS(Linux)下并配置JDK,Tomcat和系统防火墙.docx

    CentOS(Linux)下配置JDK、Tomcat和系统防火墙 本文档将讲述在CentOS下配置JDK、Tomcat和系统防火墙的步骤。首先,我们需要安装JDK,通过检查是否已经安装过JDK,如果已经安装过就卸载系统自带的JDK。然后,我们下载...

Global site tag (gtag.js) - Google Analytics