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