初窥netfilter/iptables
做这个东西太麻烦了,一不小心,就被自己关门外了。
----------------------------------------------
一、前言
二、环境
三、语法解析
四、配置及测试
1.SNAT案例
2.DNAT案例
3.SSH案例
4.SSH深入案例(自定义规则)
5.web和ftp(自定义规则)
6.web和ftp(系统默认规则)
五、保存
----------------------------------------------
一、前言
iptables即Linux 内核集成的 IP 信息包过滤系统,如果 Linux 系统连接到因特网或 LAN、服务器或连接 LAN 和因特网的代理服务器, 则该系统有利于在 Linux 系统上更好地控制 IP 信息包过滤和防火墙配置。
netfilter/iptables即包过滤,仅能应用在网络层 【来源地址、目标地址、协议(ip icmp arp rarp等)】和传输层【协议(tcp/udp)、端口号(来源端口,目标端口)、tcp标志位(syn ack fin rst)、状态(ESTABLISHED,NEW,INVALID,RELATED)】,如果想在应用层过滤可以使用L7项目,现已停止维护。
二、环境
CentOS6.4 32位
三、语法解析
netfilter框架:
1.filter:防火墙策略过滤
INPUT 针对防火墙自身的访问(比如内网或外网访问web,mysql)
OUTPUT 源自于防火墙的访问 (比如自身访问内网或外网的资源)
FORWARD 穿越防火墙的访问
2.nat:NAT转换
POSTROUTING SNAT 源地址转换 (内部访问外部)
PREROUTING DNAT 目标地址转换(外部访问内部)
OUTPUT
3.mangle:数据包的QOS(服务质量),不常用
INPUT
OUTPUT
FORWARD
POSTROUTING
PREROUTING
基本语法:
iptables -t 表格名称 指令 chain 选项 参数 -j 动作
表格名称:
-t
filter 【INPUT OUTPUT FORWARD】
nat 【POSTROUTING PREROUTING OUTPUT】
mangle 【INPUT OUTPUT FORWARD POSTROUTING PREROUTING 】
指令:
-L --list 查看规则列表
-A --append 在规则列表的最后增加1条规则
-D --delete chain 编号 从规则列表中删除指定的规则
-I --insert chain 编号 在指定的位置插入1条规则
-R --replace chain 编号 替换规则列表中的某条规则
-P --policy chain 定义默认策略
-N --new-chain 用户自定义的链名
-X --delete-chain 删除filter表中所有用户自定义链(系统内置的链无法清除)
-F --flush chain 清除filter表中(或某一链中)的所有规则(包括系统内置的链上的所有规则,以及用户自定义的链上的所有规则)
-n --numeric 以易读的数字方式显示
-v --verbose 详细信息
--line-numbers 显示规则的编号
选项 参数:
来源 -s --source 地址/子网/网络
-i 指定数据包从哪个网络接口进入,如ppp0、eth0和eth1等(注意:该参数只能用于INPUT, FORWARD and PREROUTING这三个链)
目标 -d --destination 地址/子网/网络
-o 指定数据包从哪块网络接口输出,如ppp0、eth0和eth1等(注意:该参数只能用于OUTPUT, POSTROUTING这两个链)
协议 -p tcp/udp --sport 源端口号 --dport 目标端口号
icmp --icmp-type
模块:
-m 模块名称 参数
动作:
ACCEPT 接受数据包
REJECT/DROP 丢弃数据包,REJECT与DROP基本一样,区别在于它除了阻塞包之外, 还向发送者返回错误信息
SNAT 源地址转换
DNAT 目标地址转换
REDIRECT 重定向
规则的应用顺序:从上到下的,最后才是默认规则
四、配置及测试
1.SNAT案例
# vim /etc/sysctl.conf 7 net.ipv4.ip_forward = 1 //开启路由转发功能 # sysctl -p # iptables -t nat -A POSTROUTING -s 192.168.2.0/24 -o eth2 -j SNAT --to 192.168.1.105 # iptables -t nat -L -n -v --line-number Chain PREROUTING (policy ACCEPT 68 packets, 5606 bytes) num pkts bytes target prot opt in out source destination Chain POSTROUTING (policy ACCEPT 1 packets, 70 bytes) num pkts bytes target prot opt in out source destination 1 0 0 SNAT all -- * eth1 192.168.2.0/24 0.0.0.0/0 to:192.168.1.105 Chain OUTPUT (policy ACCEPT 1 packets, 70 bytes) num pkts bytes target prot opt in out source destination
此时,PC1 ping 192.168.1.1(外网网关),可能会不同,显示Destination Host Prohibited,
查找原因,是因为filter中的FORWARD链(穿越防火墙的访问)有一条默认规则,关掉即可。
# iptables -t filter -L Chain FORWARD (policy ACCEPT) target prot opt source destination REJECT all -- anywhere anywhere reject-with icmp-host-prohibited # iptables -t filter -F FORWARD
此时,PC1就可以连接外网了。
如果外网上有一个ftp服务器,通过浏览器访问是没问题的,但是命令行访问是没有数据的,需要加载一个模块即可。
# modprobe ip_nat_ftp
如果,eth2的地址是动态的怎么办,需要地址伪装。
# iptables -t nat -R POSTROUTING 1 -s 192.168.2.0/24 -o eth2 -j MASQUERADE //地址伪装
snat总结
# iptables -t nat -A POSTROUTING -s 192.168.2.0/24 -o eth2 -j SNAT --to 192.168.1.105 (wan口地址,静态) # iptables -t nat -A POSTROUTING -s 192.168.2.0/24 -o eth2 -j MASQUERADE (wan口动态地址)
2.DNAT案例(多用于服务器的发布)
# iptables -t nat -A PREROUTING -d 192.168.1.105 -p tcp --dport 3389 -j DNAT --to 192.168.2.100 # iptables -t nat -L -v Chain PREROUTING (policy ACCEPT 39 packets, 3231 bytes) pkts bytes target prot opt in out source destination 4 204 DNAT tcp -- any any anywhere 192.168.1.105 tcp dpt:ms-wbt-server to:192.168.2.100
在外网就可以远程连接内网中的PC1,连接地址是192.168.1.105。
3.防火墙对SSH服务设置
针对INPUT:
--dport和-d都是指自己的端口和地址
--sport和-s是指发起连接者的端口和地址
针对OUTPUT:
--sport和-s都是指自己的端口和地址
--dport和-d是指发起连接者的端口和地址
(1)作为ssh服务器时的设置
# iptables -A INPUT -p tcp --dport 22 -j ACCEPT # iptables -A OUTPUT -p tcp --sport 22 -j ACCEPT
(2)作为客户机连接ssh服务
# iptables -A OUTPUT -p tcp --dport 22 -j ACCEPT # iptables -A INPUT -p tcp --sport 22 -j ACCEPT
注意:ssh连接本机ip是服务器作为客户机连接ssh服务的一特例。
上面对ssh服务设置的规则有漏洞,如果黑客利用网络包欺骗,便可入侵服务;只有当服务器iptables对发出包的进行验证,如果是已经建立的连接的数据包(ESTABLISHED),则允许通过,否则DROP。
4.(1)作为ssh服务器时(drop全部默认规则)
# iptables -t filter -A INPUT -s 192.168.2.0/24 -p tcp --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT # iptables -t filter -A OUTPUT -d 192.168.2.0/24 -p tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT # iptables -L -n Chain INPUT (policy DROP) target prot opt source destination ACCEPT tcp -- 192.168.2.0/24 0.0.0.0/0 tcp dpt:22 state NEW,ESTABLISHED Chain FORWARD (policy DROP) target prot opt source destination Chain OUTPUT (policy DROP) target prot opt source destination ACCEPT tcp -- 0.0.0.0/0 192.168.2.0/24 tcp spt:22 state ESTABLISHED
(2)作为客户机对ssh,dns设置
# iptables -A INPUT -p tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT
5.web和ftp(自定义规则)
# setup //把防火墙系统默认规则关掉
# iptables -L //系统默认规则全部关闭 Chain INPUT (policy ACCEPT) target prot opt source destination Chain FORWARD (policy ACCEPT) target prot opt source destination Chain OUTPUT (policy ACCEPT) target prot opt source destination
(1)针对web服务器(80端口)
# iptables -t filter -A INPUT -p tcp --dport 80 -m state --state NEW,ESTABLISHED -j ACCEPT # iptables -t filter -A OUTPUT -p tcp --sport 80 -m state --state ESTABLISHED -j ACCEPT
(2)针对ftp服务器
# iptables -t filter -A INPUT -p tcp --dport 21 -m state --state NEW,ESTABLISHED -j ACCEPT # iptables -t filter -A OUTPUT -p tcp --sport 21 -m state --state ESTABLISHED -j ACCEPT # iptables -t filter -A INPUT -p tcp --dport 20 -m state --state ESTABLISHED -j ACCEPT # iptables -t filter -A OUTPUT -p tcp --sport 20 -m state --state NEW,ESTABLISHED -j ACCEPT #modprobe ip_nat_ftp
6.web和ftp(系统默认规则)
# setup //开启防火墙系统默认规则
# iptables -L //系统默认的所有规则 Chain INPUT (policy ACCEPT) target prot opt source destination ACCEPT all -- anywhere anywhere state RELATED,ESTABLISHED ACCEPT icmp -- anywhere anywhere ACCEPT all -- anywhere anywhere ACCEPT tcp -- anywhere anywhere state NEW tcp dpt:ssh REJECT all -- anywhere anywhere reject-with icmp-host-prohibited Chain FORWARD (policy ACCEPT) target prot opt source destination REJECT all -- anywhere anywhere reject-with icmp-host-prohibited Chain OUTPUT (policy ACCEPT) target prot opt source destination
打开ftp的规则
打开web的规则
# iptables -L -n --line-number //打开ftp及web的整体默认规则 Chain INPUT (policy ACCEPT) num target prot opt source destination 1 ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED 2 ACCEPT icmp -- 0.0.0.0/0 0.0.0.0/0 3 ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 4 ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:22 5 ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:80 6 ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:21 7 REJECT all -- 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited 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-host-prohibited Chain OUTPUT (policy ACCEPT) num target prot opt source destination
五、保存
# service iptables save iptables: Saving firewall rules to /etc/sysconfig/iptables:[ OK ]
所有规则都保存在/etc/sysconfig/iptables中。
本文出自 “一诺千金” 博客,请务必保留此出处http://yinuoqianjin.blog.51cto.com/8360868/1413060
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。