首页 > 技术文章 > iptables

liangml 2017-02-17 21:41 原文

iptables 是与 Linux 内核集成的 IP 信息包过滤系统,则该系统有利于在 Linux 系统上更好地控制 IP 信息包过滤和防火墙置。
 防火墙的规则指定所检查包的特征和目标。
 如果包不匹配,将送往该链中下一条规则检查;如果匹配,那么下一条规则由目标值确定.该目标值可以是用户定义的链名,或是某个专用值,如ACCEPT 为通过。
查看开放服务
 两种方法:
 法一:nmap嗅探工具
  yum 安装nmap(顺便安装httpd vsftpd)
  nmap localhost 查看自身
  测试网络中其他主机nmap 172.18.204.204
  查看网络nmap 172.18.204.0/24
 法二:netstat -anutp(netstat同样适用于Windows)
真正的防火墙组件netfilter(内核控件)
管理防火墙的工具iptables(用户控件)
链:理解为设置规则的关卡
框架图

 进入本机的数据包进行检查在INPUT上设置规则
 内网用户访问外网上网在POSTROUTING上做SNAT
 NAT服务器防止用户通过NAT服务器上网或是作为路由器阻止对某些主机的访问,在FORWARD上设置规则
 外网主机访问内网比如WEB服务器(本来外网只能访问到NAT服务器,修改目标地址,windows称为端口映射)在PREROUTING做DNAT
 防火墙内置四张表:filter、nat、mangle和raw filter nat mangle raw

指明修改哪张表上的哪个链,专表专用,专链专用
表:
filter:过滤
nat:NAT网络地址转换
链:
 INPUT:位于filter表,匹配目的IP是本机的数据包
 OUTPUT:位于filter表,匹配从本机发出的数据包
 FORWARD:位于filter表,匹配穿过本机的数据包
 PREROUTING:位于nat表,用于修改目的地址(DNAT)
 POSTROUTING:位于nat表,用于修改源地址(SNAT)

匹配规则:
 数据包依次从第一条开始匹配规则,不匹配向下按顺序匹配,匹配到就终止。
 当所有的规则都不匹配时,按照默认策略来处理,所以一般默认策略采取丢弃。
iptables语法
 iptables [-t 表,默认filter表] <操作命令>[链][匹配号码][匹配条件][-j 匹配到以后的动作]
操作命令:
 -A :append追加一条规则(默认放到最后)iptables -t filter -A INPUT -j DROP丢弃访问本机的数据包
 -I:INSERT,插入(默认插入到第一条)iptables -I INPUT 3 -j DROP
 -D:DELETE,删除 iptables -D INPUT 3(按号码) iptables -D INPUT -s 192.168.0.1 -j DROP(按内容)
 -R:REPLACE,替换 iptables -R INPUT 3 -j ACCEPT将编号为3的规则内容替换为-j ACCEPT
 -P:POLICY,设置某个链的默认规则 iptables -P INPUT DROP
 -F:FLUSH.清空规则 iptables -F INPUT
 -L:LIST,列出规则 iptables -L
 v:显示详细信息
 x:v基础上,禁止自动单位换算
 n:只显示IP地址和端口号码,不显示域名和服务名称
匹配条件:
流入、流出接口(-i流入/-o流出)
 -i eth0:匹配是否从网络接口eth0进来的数据包
 -i ppp0:匹配是否从网络接口ppp0进来的数据包
 来源、目的地址(-s/-d)
 -s 192.168.0.1
 -s 192.168.1.0/24
 协议类型(-p)
 -p tcp/udp 端口号
 -p icmp --icmp-type 协议类型
 来源、目的端口(--sport、-dport)
 --sport 1000
 --sport 1000:3000 (1000到3000的端口)
 --sport :3000 (3000以下的端口)
 --sport 1000: (1000以上的端口)
动作(处理方式)
 ACCEPT接受(filter表)
 DROP拒绝(filter表)
 SNAT源地址转换(nat表)
 DNAT目标地址转换(nat表)
 MASQUERADE 拨号上网方式时用到
功能:
 1.数据包过滤 INPUT链(进入本机数据)、forward链(经过本机的数据)属于filter表
 2.NAT POSTROUTING(源地址转换) 属于NAT表
数据包过滤:
 iptables -P INPUT DROP //将INPUT链(Chain)的默认策略设置为DROP
 iptables -nL INPUT --line-numbers(显示行号) //查看INPUT链,n指不反解 --line-numbers
 iptables -D INPUT 6 //删除INPUT链中的第6条规则
 iptables -F INPUT //清空INPUT链中的所有规则
 iptables -F
 iptables -t nat -F
 iptables -t nat -F POSTROUTINH
 Iptables -X 清空所有自定义规则
 输出的结果中显示行号,可以运行: # iptables -vnL -- line -nmubers
 这样,就可以按照行号在防火墙中添加、删除规则。
 iptables -A INPUT -i lo -j ACCEPT //必须要加 不然一些自身访问自身的服务会受到影响
 iptables -A INPUT -p icmp -j ACCEPT //允许icmp协议通过INPUT链,允许别人ping和traceroute本机 危险
 iptables -A INPUT -s 172.16.204.0/24 -p icmp -j ACCEPT //允许网段ping
 iptables -I INPUT 3 -p icmp -s 172.18.204.113 -j REJECT
 iptables -A INPUT -p tcp --dport 22 -j ACCEPT //允许所有人访问我的ssh服务
 iptables -A INPUT -p tcp --dport 80 -j ACCEPT //允许所有人访问我的httpd服务
 iptables -A INPUT -p udp --dport 53 -j ACCEPT //允许所有人访问我的DNS服务
 不必要的服务不要开启,不必要的端口不要打开
 iptables -R INPUT 3 -j DROP //替换第3条规则为drop
 iptables -A INPUT -p tcp -m multiport --dports 21,22,80,53 -j ACCEPT //多端口模块,开放多个端口
 iptables -A INPUT -p tcp --dport 80 -s 172.18.204.1 -j REJECT //拒绝主机
 iptables -I INPUT 3 -p tcp --dport 80 -s 172.18.204.113 -j REJECT //拒绝主机 (插入INPUT链中作为第3条规则)
 iptables -A INPUT -p tcp --dport 80 -s 172.18.200.0/24 -j REJECT //拒绝网段
搭建测试平台:
 httpd ssh vsftpd(关闭ftp的匿名用户登录功能关闭)
 1.关闭防火墙,验证服务正常
 2.设置规则,测试效果
 service iptables save 保存策略
 保存在/etc/sysconfig/iptables文件中
FTP:主动、被动两种模式
 消息端口:21
 数据端口:主动模式(20)被动模式(随机)
FTP状态模块
 iptables -A INPUT -p tcp --dport 20:21 -j ACCEPT
 可以显示登录窗口(消息端口)
 输密码(数据端口,默认工作在被动模式,故不可用)
 FTP连接追踪模块(帮助捕捉ftp数据端口号并临时从防火墙打开此端口,所以只需手动打开21端口):
 iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
 modprobe ip_conntrack_ftp //临时加载
 echo modprobe ip_conntrack_ftp >> /etc/rc.local
 (或者vim /etc/sysconfig/iptables-config 防火墙附属文件
 IPTABLES_MODULES="ip_conntrack_netbios_ns ip_conntrack_ftp")
 service iptables save
 防火墙还有限速模块、MAC地址匹配模块等等
NAT:
1:WEB server(192.168.1.100) 外网服务器 修改主页内容
2:NAT server
 eth0 172.18.211.100(内网)
 eth0:1 192:168.1.222(外网)
 真机:内网用户(172.18.211.8)网关指向NAT server的内网接口172.18.211.100
 links 192.168.1.100测试或者浏览器访问
 iptables -t nat -A POSTROUTING -s 172.18.211.0/24 -j SNAT --to 192.168.1.100
 内网ip转换为192.168.1.100
 iptables -t nat -A POSTROUTING -s 172.18.211.0/24 -j SNAT --to 192.168.1.100-192.168.1.200
 内网ip转换为192.168.1.100-192.168.1.200地址池中的ip
 真机:内网用户(172.18.211.8)网关指向NAT server的内网接口172.18.211.100
 echo "1">/proc/sys/net/ipv4/ip_forward 打开内核的路由转发功能,临时的
/etc/sysctl.conf 开机打开内核的路由转发,永久

net.ipv4.ip_forward = 1 

 iptables -A FORWARD -s 172.18.211.8 -j DROP 限制内网用户上网
 iptables -nL FORWARD

推荐阅读