Linux_IPtables防火墙详解
2015-12-22 01:40
549 查看
目录
目录Iptables
Iptables结构
规则表
规则链
iptables指令用法详解
综合案例
SNAT 策略
DNAT 策略
Iptables规则的备份和还原
iptables 练习
Iptables
iptables(Linux package filter firewall (network layer))是Linux内核集成的IP信息包过滤系统,该系统有利于在Linux系统上更好地控制IP信息包过滤和防火墙配置。防火墙在做信息包过滤决定时,有一套规则,这些规则存储在专用的信息包过滤表中,而这些表集成在Linux内核中。在信息包过滤表中,规则被分组放在我们所谓的链(chain)中。而netfilter/iptables IP信息包过滤系统是一款功能强大的工具,可用于添加、编辑和移除规则。虽然netfilter/iptables IP信息包过滤系统被称为单个实体,但它实际上由两个组件netfilter和iptables组成。netfilter组件:也称为内核空间(kernelspace),是内核的一部分,由一些信息包过滤表组成,这些表包含内核用来控制信息包过滤处理的规则集。
iptables 组件:是一种工具,也称为用户空间(userspace),它使插入、修改和除去信息包过滤表中的规则变得容易。除非您正在使用Red Hat Linux 7.1或更高版本,否则需要下载该工具并安装使用它。
Iptables结构
表内有若干条链,链内有若干条规则。规则表
表的作用:容纳各种规则链表的划分依据:防火墙规则的作用
4个规则表:
nat表:修改数据包中的源、目标IP地址或端口(网络地址转换)
filter表:确定是否修改数据包(过滤)解决放同行的数据包
raw表:确定是否对该数据包进行状态跟踪
mangle表:为数据包设置标记
表内访问链的顺序:
nat表:PREROUTING->POSTROUTING->OUTPUT
filter表:INPUT->FORWARD->OUTPUT
规则链
规则的作用:对数据包进行处理和过滤链的作用:容纳各种防火墙规则
5种规则链:
INPUT:处理入站数据包
output:处理出战数据包
FORWARD(forward转发):处理转发数据包
POSTROUTING(post routing路由选择后):在进行路由选择后处理数据包 post 之后
PREROUTING(pre routing路由选择前):在进行路由选择钱处理数据包 pre 之前
Attention:数据包处理流程
数据包入站:
nat:PREROUTING->路由选择->filter:INPUT->本地应用程序
数据包转发:
nat: PREROUTING->路由选择->filter:FORWARD->nat:POSTROUTING->转发走
数据包出站:
nat: 本地应用程序->路由选择->filter:OUTPUT->nat:POSTROUTING->出站
iptables command use:
iptables指令用法详解
iptables [-t tableName] 选项 [链名] [条件] [-j 控制类型] #example: iptables -t filter -I INPUT -p icmp -j REJECT #reject ping protocols.
注意:
a. 不指定表,默认是filter表
b. 不指定链名,默认是指表的所有链
c. 除非设置了链的默认策略,否则必须指定匹配条件
常见的控制类型: -j
1. ACCEPT:允许通过
2. DROP:直接丢弃,不给予回应
3. REJECT:拒绝通过,给予回应
4. LOG:记录日志的信息
选项:
-A add 在链的末尾追加新的规则 -I insert 在链的开头插入规则 -L list 列出所有的规则条目 -n number 以数字的形式显示地址、端口的信息 --line-number 序号
查看iptables规则一般使用:
iptables -nvL -D 删除链内指定序号的一条规则 -F 清空一个表的多有规则 -X 删除自定义链规则 -p 指定链设置默认规则DROP or ACCEPT
条件匹配:
-P protocol 协议名 -s source 源IP -d destination 目的IP -i input 入站网卡 -o output 出站网卡 --sport source port 源端口 --dport destination port 目的端口 --tcp-flags TCP标记 --icmp-type ICMP 类型 8:请求 0:回应 3:不可达 #example: iptables -A FORWARD -s 192.168.4.0/24 -p udp -dport 52 -j ACCEPT --icmp-type 8 -m multiport --sports 源端口列表 -m multiport --dports 目的端口列表 -m iprange --src-range -m state --start ESTANLISHED,RELATED
综合案例
iptables -I INPUT -s 172.16.1.2 -d -i eth2 -p icmp --icmp-type 8 -j DROP iptables -P FORWARD DROP --> FORWARD table default rule is DROP. iptables -I FORWARD -s 172.16.1.0/24 -p tcp -m multiport --dport 21,25,80 -j ACCEPT iptables -I FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT #established已经确定的,related相关的 有关的链接参数
Load Module:
modprobe ip_conntrack_ftp #FTP为需要2个端口的特殊的模块,所以需要加载模块 lsmod | grep ip #查看模块
SNAT 策略
Source Network Transform:私网内主机IP都共享一个公网IP,实现私网内主机使用同一个公网IP上网。Attention:一定是路由转发后转换IP,且只有一个 -O(出站网卡)
数据包出站:
nat: 本地应用程序->路由选择->filter:OUTPUT->nat:POSTROUTING->出站
Example:
iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o eth0 -j SNAT --to-source 218.29.30.31(防火墙公网IP) iptables -t nat -I POSTROUTING -s 192.168.8.0/24 -p tcp -m multiport --dport 80.21.25 -j SNAT -to 172.16.1.1
外网地址非固定时的共享动态IP地址上网:
MASQUERADE –> 地址伪装 –> 拨号
iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o eth0 -j MASQUERADE
DNAT 策略
Destination Network Transform:将使用私网IP的服务器发布到公网上,使得公网上的主机可以访问此服务器原理:目标地址转换
iptables -t nat -A PREROUTING -i eth0 -d 218.29.30.31 -p tcp -dport 80 -j DNAT -to -destination 192.168.1.6
目标地址转换
iptables -t nat -I PREROUTING -d 172.16.1.1 -p tcp -m multiport --dport 21,22,80 -j DNAT --to-destination 192.168.8.171 #一条DNAT规则只能指定一个服务器 iptables -I FROWARD -d 192.168.8.171 -p tcp -m multiport --dport 21,25,80 -j Accept
转换目标端口
iptables -t nat -I PREROUTING -d 172.16.1.1 -p tcp --dport 2222 -j DNAT --to 192.128.8.171:22 iptables -I FORWARD -d 192.168.8.171 -p tcp --dport 22 -j Accept #Test: ssh root@172.16.1.1 -p 2222 #在生产环境中,一般先SSH到Iptables Server,然后在从Server SSH 到目标主机中。
Iptables规则的备份和还原
导出规则:iptables-save > /opt/iptables_all.txt #iptables-save用来把当前的规则存入一个文件里以备iptables-restore使用
备份:
service iptables save
还原:
iptables_all.txt > /etc/sysconfig/iptables #or iptables-restore << /opt/iptables_all.txt
iptables 练习
将filter table 中的INPUT 链的默认规则设为DROPiptables -P OUTPUT DROP
iptables server可以ping到任何人,任何人不可以ping到iptables server
iptables -A OUTPUT -s 10.10.10.1 -o eth1 -p icmp --icmp-type 8 -j ACCEPT iptables -A INPUT -d 10.10.10.1 -i eth1 -p icmp --icmp-type 0 -j ACCEPT #or iptables -A OUTPUT -s 192.168.100.1 -o eth0 -p icmp --icmp-type 8 -j ACCEPT iptables -A INPUT -d 192.168.100.1 -i eth0 -p icmp --icp-type 0 -j ACCEPT
HOST2可以通过防火墙访问HOST1的各种服务,HOST2的DNS要指向HOST1
SNAT 私网IPHOST可以访问公网IPHOST,转换源IP地址
iptables -A FORWARD -s 192.168.100.0/24 -p tcp -m multiport --dports 80,25,21 -j ACCEPT iptables -A FORWARD -s 192.168.100.0/24 -p udp --dport 53 -j ACCEPT iptables -t nat -A POSTROUTING -s 192.168.100.0/24 -p tcp -m multiport --dport 80,25,21 -o eth1 -j SNAT --to 10.10.10.1 iptables -t nat -A POSTROUTING -s 192.168.100.0/24 -p udp --dport 53 -o eth1 -j SNAT --to 10.10.10.1 iptables -A FORWARD -m state --state RELATED,ESTABLISHED # 设定FORWARD链的全局状态为:自动匹配数据包的状态,可以无须关心包回来的方法 modprobe ip_conntrcak_ftp #加载ftp模块, iptables 自身不带有 modprobe ip_nat_ftp
用iptables防火墙发布于内网的HOST2上的各种服务,是HOST1可以通过域名访问HOST2上的各种服务
DNAT 将私网中的服务器发布出去,让公网上的HOST可以访问,转换公网IP 主机的目的地址。
iptables -t nat -A PREROUTING -d 10.10.10.1 -i eth1 -p tcp -m multiport --dports 80,25,21 -j DNAT --to 192.168.100.2 iptables -t nat -A PREROUTING -d 10.10.10.1 -i eth1 -p udp --dport 53 -j DNAT --to 192.168.100.2 iptables -A FORWARD -d 192.168.100.2 -i eth1 -p tcp -m multiport --dport 80,25,21 -j ACCEPT iptables -A FORWARD -d 192.168.100.2 -i eth1 -p udp --dport 53 -j ACCEPPT
HOST1访问远程管防火墙
iptables -A INPUT -d 10.10.10.1 -i eth1 -p tcp --dport 22 -j ACCEPT iptables --A OUTPUT -S 10.10.10.1 -P TCP ---SPORT 22 -j ACCEPT
当HOST1访问iptables外网的2222端口时,会转发到HOST2的主机中(DNAT的端口转发)
iptables -t nat -A PREPOUTONG -d 10.10.10.1 -i eth1 -p dport 2222 -j DNAT --to 192.168.100.2:22 iptablws -A FORWARD -d 192.168.100.2 -i eth0 -p dport 22 -j ACCEPT
相关文章推荐
- centos7安装CDH5.5.0
- Linux环境 安装配置说明
- 12-21学习记录 初识Linux
- Linux下安装Mysql5.6.23
- Linux下将UTF8编码批量转换成GB2312编码的方法
- Linux填坑系列之--grub引导修复
- Linux下将UTF8编码批量转换成GB2312编码的方法
- chapter6:Linux文件权限与目录配置
- Win7和Linux下的java开发环境配置
- 如何将 Linux 命令的输出赋值给变量
- XP下安装linuxMint13
- linux下的alternatives
- 01.Linux之简介
- Java程序执行的linux命令带有管道符的写法
- 使用VMware创建Linux虚拟机
- CentOS 6.3下Samba服务器的安装与配置
- Linux 每日一练习!!!!!!!!!!sleep 表示等待时间
- Linux 每日一练习!!!!!!!!!!删除文件的大灾难,你会碰见吗?
- 从UNIX和LINUX的发展史中看区别
- linux性能监控工具