iptables防火墙
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了iptables防火墙相关的知识,希望对你有一定的参考价值。
SNAT策略的典型应用环境
局域网主机共享单个公网IP地址接入Internet
SNAT策略的原理
源地址转换,Source Network Address Translation
修改数据包的源地址
局域网共享上网
未作SNAT转换时的情况
![技术分享图片](http://i2.51cto.com/images/blog/201801/19/3f29010d18ec49423d1121a84c1e3e1a.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)
进行SNAT转换后的情况
![技术分享图片](http://i2.51cto.com/images/blog/201801/19/e57753eb5238a7556274175d7ce913dc.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)
前提条件
局域网各主机正确设置IP地址/子网掩码
局域网各主机正确设置默认网关地址
Linux网关支持IP路由转发
实现方法
编写SNAT转换规则
[[email protected] ~]# iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o eth0 -j SNAT --to-source 218.29.30.31
POSTRIYTING;路由选择后再处理
192.168.1.0/24;局域网短地址
193.eth0;外网接口名称
194.218.29.30.31;外网接口IP
-
验证SNAT结果
在局域网主机 192.168.1.234 中能够访问外网的Web服务器 58.63.236.45
查看Web主机 58.63.236.45 的访问日志,记录的来访者应是网关主机的外网IP地址 218.29.30.31
MASQUERADE —— 地址伪装
适用于外网IP地址非固定的情况
对于ADSL拨号连接,接口通常为 ppp0、ppp1
将SNAT规则改为MASQUERADE即可
DNAT策略的典型应用环境
在Internet中发布位于企业局域网内的服务器
DNAT策略的原理
目标地址转换,Destination Network Address Translation
修改数据包的目标地址
进行DNAT转换后的情况
![技术分享图片](http://i2.51cto.com/images/blog/201801/19/ae44e9b4c3b3a63ad3f579bd2b52f392.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)
在Internet中发布内网服务器
![技术分享图片](http://i2.51cto.com/images/blog/201801/19/7b69b493a5fd8b7553c0a9218e1f5242.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)
前提条件
局域网的Web服务器能够访问Internet
网关的外网IP地址有正确的DNS解析记录
Linux网关支持IP路由转发
实现方法
编写DNAT转换规则
[[email protected] ~]# iptables -t nat -A PREROUTING -i eth0 -d 218.29.30.31
-p tcp --dport 80 -j DNAT --to-destination 192.168.1.6
PRETOUTING;路由选择之前处理
218.29.30.31;外网接口IP地址
80;发布服务器端口
192.168.1.6;web主机内网IP地址
验证DNAT结果
在外网客户机 173.96.97.98 中能够访问位于企业内网的Web服务,访问地址为 http://218.29.30.31/
查看Web服务器 192.168.1.6 的访问日志,记录了外网客户机的IP地址 173.96.97.98
![技术分享图片](http://i2.51cto.com/images/blog/201801/19/eef427e99e119457ad750caf0912311e.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)
发布时修改目标端口
在DNAT规则中以“IP:Port”的形式指定目标地址
[[email protected] ~]# iptables -t nat -A PREROUTING -i eth0 -d 218.29.30.31
-p tcp --dport 2346 -j DNAT --to-destination 192.168.1.6:22
2346;访问的目的端口
:22;实际提供服务的端口
-
导出(备份)规则
iptables-save工具
[[email protected] ~]# iptables-save
Generated by iptables-save v1.4.7 on Wed Sep 24 08:25:33 2014
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [54:7037]
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
COMMIT
Completed on Wed Sep 24 08:25:33 2014
[[email protected] ~]# iptables-save > /opt/iprules_all.txt
-
导入(还原)规则
iptables-restore工具
可结合重定向输入指定规则来源
[[email protected] ~]# iptables-restore < /opt/iprules_all.txt
iptables服务
脚本位置:/etc/init.d/iptables
规则文件位置:/etc/sysconfig/iptables
[[email protected] ~]# service iptables start
iptables:应用防火墙规则: [确定]
[[email protected] ~]# service iptables stop
iptables:将链设置为政策 ACCEPT:filter [确定]
iptables:清除防火墙规则: [确定]
iptables:正在卸载模块: [确定]
[[email protected] ~]# service iptables status
iptables:未运行防火墙
——
1.定义基本变量
便于脚本的维护、重用
#!/bin/bash
INET_IF= "eth0"
INET_IP="218.29.30.31"
LAN_IF="eth1"
LAN_IP= "192.168.1.1"
LAN_NET="192.168.1.0/24"
LAN_WWW_IP="192.168.1.6"
IPT="/sbin/iptables"
MOD="/sbin/modprobe"
CTL="/sbin/sysctl“
……
2.加载必要的内核模块
将频繁用到的模块载入内核
……
$MOD ip_tables
$MOD ip_conntrack
$MOD ipt_REJECT
$MOD ipt_LOG
$MOD ipt_iprange
$MOD xt_tcpudp
$MOD xt_state
$MOD xt_multiport
$MOD xt_mac
$MOD ip_nat_ftp
$MOD ip_conntrack_ftp
……
支持FTP访问的地址转换连接状态跟踪
3.调整/proc参数
Linux内核控制及调优
$CTL -w net.ipv4.ip_forward=1
$CTL -w net.ipv4.ip_default_ttl=128
$CTL -w net.ipv4.icmp_echo_ignore_all=1
$CTL -w net.ipv4.icmp_echo_ignore_broadcasts
$CTL -w net.ipv4.tcp_syncookies=1
$CTL -w net.ipv4.tcp_syn_retries=3
$CTL -w net.ipv4.tcp_synack_retries=3
$CTL -w net.ipv4.tcp_fin_timeout=60
$CTL -w net.ipv4.tcp_max_syn_backlog=3200
优化TCP响应能力
4. 具体的防火墙规则
按表、链分别设置规则,包括默认策略
……
$IPT -t filter -X
$IPT -t nat -X
$IPT -t filter -F
$IPT -t nat -F
$IPT -P INPUT DROP
$IPT -P FORWARD DROP
$IPT -P OUTPUT ACCEPT
$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
-t 清空原有规则
-P 设置默认策略
-t nat 其他具体规则
-
“主机型”防火墙脚本
针对本机进行保护
filter表中的INPUT、OUTPUT链
[[email protected] ~]# vi /opt/myipfw.hostonly
#!/bin/bash
1. 定义基本变量
IPT= "/sbin/iptables"
……
2 定义默认策略
$IPT -P INPUT DROP
$IPT -P FORWARD DROP
$IPT -P OUTPUT ACCEPT
3 设置filter表中的各种规则
$IPT -A INPUT -p tcp --dport 80 -j ACCEPT
$IPT -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
以上是关于iptables防火墙的主要内容,如果未能解决你的问题,请参考以下文章