Iptables防火墙
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Iptables防火墙相关的知识,希望对你有一定的参考价值。
一、SNAT策略及应用
SNAT(Source Network Address Translation,源地址转换)是linux防火墙的一种地址转换操作,也是iptables命令中的一种数据包控制类型,其作用是根据指定条件修改数据包的源IP地址(类似与Cisco的PAT协议)。
下面用一个具体的案例,来详细介绍SNAT的应用:
案例环境
某公司使用双网卡的Linux主机作为网关服务器,其中网卡eth0连接局域网,网卡eth1通过光纤接入Internet。由于只注册了一个公网IP地址,要求合理配置网关策略,使局域网内的PC可以通过共享的方式访问Internet。
网络拓扑图:
1.打开网关的路由转发
对于Linux服务器,IP转发是实现路由功能的关键所在,对应为/proc文件系统中的ip_forward设置,当值为1时表示开启,为0时表示关闭。
永久打开路由转发功能:
修改配置文件sysctl.conf,将net.ipv4.ip_forward配置项的值改为1
读取修改后的配置,激活路由转发功能。
临时开启路由转发:
2.设置SNAT策略
需要针对局域网PC访问Internet的数据包采取SNAT策略,将源地址更改为网关的公网IP地址,如要保持SNAT策略长期有效,应将先关命令写入到rc.local配置文件,以便开机后自动设置。
编写SNAT转换规则
POSTROUTING //路由选择后在处理
-s 192.168.1.0/24 //局域网段的地址
-o eth1 //外网接口的名称
--to-source 173.16.16.1 //外网接口的IP地址
当然了,在网关服务器上还要根据需求添加一些防火墙策略,例如局域网PC需要访问外网的WEB服务器,就需要:
3.验证SNAT结果
在局域网主机 192.168.1.2 中能够访问外网的Web服务器 173.16.16.16
查看Web主机 173.16.16.16的访问日志,记录的来访者应是网关主机的外网IP地址 173.16.16.1
补充:
如果使用ADSL宽带接入时,网关的外网IP可能不是固定的,针对这种需求,iptables命令提供了一个名为MASQUERADE(伪装)的数据包控制类型,相当于SNAT的一个特例,同样能够修改(伪装)数据包源IP地址,这时它能够自动获取外网接口的IP地址,而无须使用”--to-source”指定固定的ip地址。
对于ADSL宽带连接,连接名称通常为ppp0、ppp1等。
针对以上案例,可以将SNAT规则改为:
二、DNAT策略及应用
DNAT(Destination Network Address Translation,目标地址转换)是linux防火墙的另一种地址转换操作,同样也是iptables命令中的一种数据包控制类型,其作用是根据指定条件修改数据包的目标IP地址和目标端口(类似与Cisco的静态NAT协议)。
继续上述案例,公司需要在Internet中发布位于内网的网站服务器,作为公司的电子商务平台。
在网关服务器中设置DNAT策略:
PREROUTING //路由选择之前处理
-i eth1 //外网接口名称
-d 173.16.16.1 //外网接口的IP地址
--dport 80 //发布的服务端口
--to-destination 192.168.1.3 //WEB主机的内网IP地址
补充:
如果通过同一个公网IP地址发布位于多台主机中的同一种服务,为了避免发生冲突,就需要在端口上进行区分(类似于NAT端口映射)。
继续以上案例,为了方便服务器的远程管理,网关、网站服务器都配置了OpenSSH服务。
1.配置OpenSSH服务
在网关、网站服务器中均开启OpenSSH服务,分别使用2345、22端口。其中网关的sshd服务因直接面向Internet,因此不使用默认端口。
2.设置DNAT策略
这里将网关服务器的2346端口映射为了网站服务器的22端口。
3.在Internet中进行SSH登录测试
登录网关服务器,wangguan是网关服务器中的用户账号。
登录网站服务器,wangzhan是网站服务器中的用户账号。
三、规则的导出、导入
iptables-save命令
直接使用iptables-save命令,将显示当前启用的所有规则(仅仅把规则输出到屏幕上)。
“#”开头表示注释
”*表名”表示所在的表
”:链名 默认策略”表示相应的链及默认策略
具体规则部分省略了命令名”iptables”
将防火墙规则备份为/opt/iprules_all.txt文件
2.iptables-restore命令
从备份文件恢复规则
3使用iptables服务备份恢复防火墙规则
把iptables-save的备份存储到/etc/sysconfig/iptables,然后就可以通过iptables服务快速恢复,每次开机后就自动重建。如果想恢复规则的时候,就直接重新启动iptables服务即可。
将当前配置的规则设置为开机后防火墙的默认规则
四、使用防火墙脚本
常见的linux防火墙脚本中,通常包括变量定义、模块加载、/proc调整、规则设置等多个部分(过于简化的脚本可能仅包括规则设置部分)。
1.定义基本变量
将防火墙的网卡、IP地址、局域网段、iptables命令的路径定义为变量,便于对脚本程序的维护和移植使用。
[[email protected] ~]# vim /opt/myipfw.sh //创建脚本文件
#!/bin/bash
INET_IF= "eth1" //外网接口
INET_IP="173.16.16.1" //外网接口地址
LAN_IF="eth0" //内网接口
LAN_IP= "192.168.1.245" //内网接口地址
LAN_NET="192.168.1.0/24" //内网网段
LAN_WWW_IP="192.168.1.3" //网站服务器的内部地址
IPT="/sbin/iptables" //iptables命令的路径
MOD="/sbin/modprobe" //modprobe命令的路径
CTL="/sbin/sysctl“ //sysctl命令的路径
……
2.加载内核模块
Iptables命令的大部分模块都可以根据需要动态载入内核,只有个别模块需要手动进行加载。但是如果需要启动的规则数量较多,为了提高规则设置的效率,保持防火墙的稳定性,建议将用到的各种模块提前加载到内核中。
……
$MOD ip_tables //iptables基础模块
$MOD ip_conntrack //连接跟踪模块
$MOD ipt_REJECT //拒绝操作模块
$MOD ipt_LOG //日志记录模块
$MOD ipt_iprange //支持IP范围匹配
$MOD xt_tcpudp //支持TCP、UDP协议
$MOD xt_state //支持状态匹配
$MOD xt_multiport //支持多端口匹配
$MOD xt_mac //支持MAC地址匹配
$MOD ip_nat_ftp //支持FTP地址转换
$MOD ip_conntrack_ftp //支持FTP连接跟踪
……
3.调整/proc参数
/proc是linux或UNIX系统中的一种伪文件系统机制、提供了访问内核运行结构、改变内核设置的实时数据。与EXT3、FAT32等本地文件系统不同,/proc中的数据存放在内存而不是硬盘上。
在文件夹/proc/sys下存放着与系统相关的一些可控参数,可以直接用来改变内核的行为,通常linux内核调优的实时入口。其中包括是否打开IP转发、是否响应ICMP广播、设置好TCP响应超时等,使用echo、sysctl命令都可以修改相关参数,当然也可以写到/etc/sysctl.conf文件(执行sysctl -p后生效)。
常用的几个/proc参数调整:
……
$CTL -w net.ipv4.ip_forward=1 //打开路由转发功能
$CTL -w net.ipv4.ip_default_ttl=128 //修改ICMP响应超时
$CTL -w net.ipv4.icmp_echo_ignore_all=1 //拒绝响应ICMP请求
$CTL -w net.ipv4.icmp_echo_ignore_broadcasts //拒绝响应ICMP广播
$CTL -w net.ipv4.tcp_syncookies=1 //启用SYN Cookie机制
$CTL -w net.ipv4.tcp_syn_retries=3 //最大SYN请求重试次数
$CTL -w net.ipv4.tcp_synack_retries=3 //最大ACK确认重试次数
$CTL -w net.ipv4.tcp_fin_timeout=60 //TCP连接等待超时
$CTL -w net.ipv4.tcp_max_syn_backlog=3200 //SYN请求的队列长度
……
4.设置具体的iptables规则
在脚本文件中,建议按照不同的表、链来分块组织各种防火墙规则,具体内容应根据用户的实际需求决定。
(1)清理已有的规则
为了避免已有的防火墙规则造成干扰,通常会预先安排一个“清理”操作,删除所有表中用户自定义的链,清空所有链内的规则。
……
$IPT -t filter -X //删除个表中自定义的链
$IPT -t nat -X
$IPT -t mangle -X
$IPT -t raw -X
$IPT -t filter -F //清空各表中已有的规则
$IPT -t nat -F
$IPT -t mangle -F
$IPT -t raw -F
……
(2)设置规则链的默认策略
$IPT -P INPUT DROP
$IPT -P FORWARD DROP
$IPT -P OUTPUT ACCEPT
(3)设置nat表中的各种规则(主要用在linux网关服务器中)
$IPT -t nat -A POSTROUTING -s $LAN_NET -o $INET_IF -j SNAT --to-source $INET_IP
$IPT -t nat -A PREROUTING -i $INET_IF -d $INET_IP -p tcp --dport 80 -j DNAT --to-destination $LAN_WWW_IP
……
(4)设置filter表的各种规则
Iptables的filter表主要用来过滤数据包,无论是linux网关还是一般的linux服务器都可能用到。主机型的防火墙主要使用INPUT、OUTPUT链,网络型的防火墙主要使用FORWARD链。
以linux网关为例:
……
$IPT -A INPUT -p tcp --dport 80 -j ACCEPT
$IPT -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
……
本文出自 “网络技术” 博客,请务必保留此出处http://fjc365.blog.51cto.com/11891287/1879230
以上是关于Iptables防火墙的主要内容,如果未能解决你的问题,请参考以下文章