CentOS 7中的iptables使用指南
一、简介

1 防火墙
防火墙是一种网络安全系统,用于监控和控制进出网络的网络流量,它通常部署在网络的边缘或关键节点上,通过设置一系列规则来决定允许或阻止哪些数据包通过,防火墙可以防止未经授权的访问,保护内部网络免受外部威胁,并有助于实施安全策略。
2 防火墙的类型
硬件防火墙:独立的专用设备,性能强大但成本较高。
软件防火墙:运行在服务器上的程序,如iptables,配置灵活且成本较低。
3 iptables简介
Iptables是Linux内核中的一种强大的数据包过滤工具,用于实现网络地址转换(NAT)和包过滤等功能,它是工作在用户空间中定义规则的工具,这些规则被内核空间中的NetFilter读取,从而实现防火墙功能。
二、安装与配置
1 检查是否安装iptables
在CentOS 7系统中,默认情况下并没有安装iptables,而是firewalld作为默认的防火墙,首先需要检查系统中是否已经安装了iptables。

systemctl status iptables
如果返回结果显示未安装,则需要进行安装。
2 安装iptables
使用以下命令来安装iptables和iptablesservices:
yum install y iptablesservices
安装完成后,可以再次运行systemctl status iptables来确认iptables已成功安装。
3 启动与停止iptables服务
启动iptables服务的命令如下:
systemctl start iptables
停止iptables服务的命令如下:
systemctl stop iptables
4 查看iptables状态
要查看iptables的状态,可以使用以下命令:

systemctl status iptables
如果显示绿色的“active (exited)”,则表示iptables已经启动成功。
5 备份当前iptables规则
在进行任何修改之前,建议先备份当前的iptables规则:
cp a /etc/sysconfig/iptables /etc/sysconfig/iptables.bak
三、iptables基本操作
1 查看默认规则
查看当前iptables的规则可以使用以下命令:
iptables L
2 添加规则示例
以开放80端口为例,添加以下规则:
iptables I INPUT p tcp dport 80 m state state NEW j ACCEPT
3 删除规则示例
假设我们要删除刚刚添加的开放80端口的规则,可以使用以下命令:
iptables D INPUT p tcp dport 80 m state state NEW j ACCEPT
4 保存规则
修改完iptables规则后,需要保存以确保重启后规则仍然有效:
iptablessave > /etc/sysconfig/iptables
5 设置开机自启
为了确保iptables在系统重启后自动启动,可以执行以下命令:
systemctl enable iptables.service
四、高级配置
1 NAT配置示例
网络地址转换(NAT)是一种将私有IP地址转换为公共IP地址的技术,以下是一个简单的NAT配置示例,将内网的所有流量转发到外网的一个特定IP地址上:
iptables t nat A POSTROUTING o eth0 j MASQUERADE
2 DNAT配置示例
目的地址转换(DNAT)是将特定的目标IP地址转换为另一个IP地址,以下是一个简单的DNAT配置示例,将所有流向192.168.1.1的流量转发到192.168.1.2:
iptables t nat A PREROUTING d 192.168.1.1 j DNAT tosource 192.168.1.2
3 日志记录配置示例
为了便于调试和监控,可以为iptables配置日志记录功能,以下是一个简单的日志记录配置示例,记录所有拒绝的数据包:
iptables A INPUT m limit limit 5/min j LOG logprefix "IPTablesDropped: " loglevel 4 iptables P INPUT DROP
五、常见问题解答(FAQs)
Q1:如何更改TCP连接的默认重试次数?
A1:可以通过修改/proc/sys/net/ipv4/tcp_retries2文件来更改TCP连接的默认重试次数,将其设置为5次:
echo "5" > /proc/sys/net/ipv4/tcp_retries2
为了永久生效,可以将其添加到/etc/sysctl.conf文件中:
vim /etc/sysctl.conf
添加以下行:
net.ipv4.tcp_retries2 = 5
然后运行以下命令使其生效:
sysctl p
Q2:如何更改TCP连接的超时时间?
A2:TCP连接的超时时间由多个参数控制,包括tcp_fin_timeout(FIN等待确认的超时时间)、tcp_keepalive_time(长连接的保持时间)等,以下是一些常见的超时时间设置方法:
更改FIN等待确认的超时时间:
echo "60" > /proc/sys/net/ipv4/tcp_fin_timeout ``为了永久生效,可以将其添加到/etc/sysctl.conf文件中:`bashvim /etc/sysctl.conf`添加以下行:`bashnet.ipv4.tcp_fin_timeout = 60`然后运行以下命令使其生效:`bashsysctl p`#### 更改长连接的保持时间:`bashecho "7200" > /proc/sys/net/ipv4/tcp_keepalive_time`为了永久生效,可以将其添加到/etc/sysctl.conf文件中:`bashvim /etc/sysctl.conf`添加以下行:`bashnet.ipv4.tcp_keepalive_time = 7200`然后运行以下命令使其生效:`bashsysctl p`注意:以上只是一些常见的超时时间设置方法,实际上TCP连接的超时时间还受到其他参数的影响,如tcp_syn_retries(SYN重传次数)、tcp_synack_retries`(SYN+ACK重传次数)等,根据实际需求进行调整即可。
