什么是iptables?
工作于主机或者网络的边缘,对于进出本机或网络的报文根据事先定义好的检查规则匹配检测。
- 主机防火墙:
主机入侵检测系统 HIDS - 网络防火墙:
网络入侵检测系统 NIDS - 理想防范入侵:
IDS检测用户是否有非法操作—>通知Firewall屏蔽报文 (最理想的防范措施) - 钓鱼执法:
给你足够多的好处触发你犯罪:honeypot
linux上防火墙的历史
ipfirewall:太过浅显
ipchains - iptables
1.工作与内核中
2.设计钩子将进入的报文进行规则的检测
3.工作于用户空间 - framework:netfilter(网络过滤器的框架)
hooks function 钩子函数
关于iptables的4表5链
iptables的表名称 | 内容 |
---|---|
nat表 | 地址转换表 |
filter表 | 数据过滤表 |
raw表 | 状态跟踪表 |
mangle表 | 包标记表 |
iptables的的链名称 | 内容 |
---|---|
INPUT链 | 入站规则 |
OUTPUT链 | 出站规则 |
FORWARD链 | 转发规则 |
PREROUTING链 | 路有前规则 |
POSTROUTING链 | 路由后规则 |
iptables -->四表五链
添加规则是的考量点:
(1)要实现那种功能:判断添加在那张表上
(2)报文流经的路径:判断添加在那个链上
链-->>练上规则的次序,即为检查的次序,因此隐含一定的法则
(1)同类规则(访问同一应用):匹配范围小的放上面
(2)不同类规则(访问不同应用):匹配到报文平率较大的放上面
(3)将可以由条规则描述的多个规则合并为一个
(4)设置默认策略:
功能的优先级次序:raw --> mangle --> nat --> filter
规则:
组成部分:报文的匹配条件,匹配到后处理动作
匹配条件:根据协议报文特征指定匹配条件
基本匹配条件:源IP,目标IP,源端口,目标端口
扩展匹配条件:IP追踪
处理动作:
内建处理机制
自定义处理机制
注意:
报文不会经过自定义链,只能在内置链上通过规则引用后生效
iptables的规则管理工具
添加、修改、删除、显示等功能
规则和链有计数器:
pkgs:有规则或链所匹配到的报文的个数
bytes:由规则或链匹配到的所有报文大小之和
防火墙的匹配规则
- 匹配即可停止
- 匹配有先后顺序
- 默认规则的优先级最低
iptables基本管理
安装iptables-services并启动服务
yum -y install iptables-services
systemctl start iptables.service
iptabels语法格式
iptables [-t table] SUBCOMMAND(子命令) CHAIN(链) CRETERIA(规则) -j TARGET
[SUBCOMMAND]:
链管理命令:
-F:flush-清空规则链:省略链,表示清空指定表上的所有的链
-N:new-创建新的自定义规则链
-X:delete/drop-删除用户自定义的空的规则链
-Z:zero-清零/置零规则计数器,计数器重新开始计数
-P:Policy-为指定链设置默认策略,对于filter表中的链而言,默认策略通常有ACEPT,DROP,REJECT
-E:rename-重名自定义链,引用计数不为0的自定义链,无法改名,也无法删除
规则管理命令:
-A:append-将新的规则追加于指定链的
-I:insert-将新规则插入至指点链的指定位置
-D:delete-删除指定链上的指定规则
(1)指定匹配条件
(2)指定规则的编号
-R:replace-替换指定链上的指定规则
查看:
-L:list-列出指定链上的所有规则
-n:numberic-以数字格式显示地址和端口号
-v:verbose-显示详细信息
-vv/-vvv V越多显示越详细
--line-number:显示规则编号
-x:exactly-显示计数器计数结果的精确值
匹配条件:
基本匹配
[!]-s --src --source IP|Netaddr(网络地址) 检查报文中的源IP地址是否符合当前规则
[i]-d --dst --destination IP|Netaddr 检测目标中的报文目标地址
-p --protocal(传输层协议) {tcp|udp|icmp} 检查报文中的协议,即IP首部中的protockols所标记的协议
-i --in-interface INTERFACE(数据报文的流入接口) 仅仅用于PREROUTING、INPUT、FORWARD链上
-o --out-interface INTERFACE(数据报文的流出接口) 仅仅用于FORWARD、OUTPUT、POSTROUTING链上
扩展匹配[-m macth_name(扩展名称) –spec_options(专用选项)]
例如:-m tcp --dport 22
隐式扩展:对-p protocol指明的协议进行扩展,可以省略-m选项
-p tcp
--dport PORT:目标端口,可以是单个端口或连续多个端口
--sport PORT
--tcp-flags(标志位) LIST1[指明需要检查的标志位] LIST2[出现在LIST1中标志位必须为1的标志位]:
SYN(第一次握手请求同步)
ACK(确认有效),FIN(断开请求)
RST(重置连接)
PSH(推送)
URG(紧急指定有效)
--syn:检查是否是TCP第一次连接的,第一次请求
-P udp
-dport
-sport
-p icmp(报文)
注意事项与规律
- 可以不指定表,默认为filter表
- 可以不指定链,默认为对应表的所有链
- 除非设置默认策略,否则必须指定匹配条件
- 选项/链名/目标操作用大写字母,其余都小写
关于目标的操作:
- ACCEPT:允许通过/放行
- DROP:直接丢弃,不给出任何回应
- REJECT:拒绝通过,必要时会给出提示
- LOG:记录日志,然后传给下一条规则
iptables -t filter -A INPUT -p tcp -j ACCEPT
#追加规则至filter表中的INPUT链的末尾,允许任何人使用TCP协议访问本机
iptables -I INPUT -p udp -j ACCEPT
#插入规则至filter表中的INPUT链的开头,允许任何人使用UDP协议访问本机
iptables -I INPUT 2 -p icmp -j ACCEPT
#插入规则至filter表中的INPUT链的开头,允许任何人使用ICMP协议访问本机
iptables防火墙规则
[root@proxy ~]# iptables -nL INPUT
Chain INPUT (policy ACCEPT)
target prot opt source destination
ACCEPT udp -- 0.0.0.0/0 0.0.0.0/0
ACCEPT icmp -- 0.0.0.0/0 0.0.0.0/0
DROP icmp -- 0.0.0.0/0 0.0.0.0/0
REJECT icmp -- 0.0.0.0/0 0.0.0.0/0 reject-with icmp-port-unreachable
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0
[root@proxy ~]# iptables -nL INPUT --line-numbers
Chain INPUT (policy ACCEPT)
num target prot opt source destination
1 ACCEPT udp -- 0.0.0.0/0 0.0.0.0/0
2 ACCEPT icmp -- 0.0.0.0/0 0.0.0.0/0
3 DROP icmp -- 0.0.0.0/0 0.0.0.0/0
4 REJECT icmp -- 0.0.0.0/0 0.0.0.0/0 reject-with icmp-port-unreachable
5 ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0
删除规则,清空所有规则
iptables -D INPUT 3
#删除filter表中INPUT链的第3条规则
iptables -nL INPUT #查看规则,确认是否删除
iptables -F
#清空filter表中所有链的防火墙规则
iptables -t nat -F
#清空nat表中所有链的防火墙规则
iptables -t mangle -F
#清空mangle表中所有链的防火墙规则
iptables -t raw -F
#清空raw表中所有链的防火墙规则
filter过滤和转发控制
- 利用ip_forward机制实现Linux路由/网关功能
- 针对Linux主机进行出站、入站控制
- 在Linux网关上实现数据包转发访问控制
开启Linux的路由转发功能
Linux内核默认就支持软路由功能,通过修改内核参数即可开启或关闭路由转发功能。
echo 0 > /proc/sys/net/ipv4/ip_forward #关闭路由转发
echo 1 > /proc/sys/net/ipv4/ip_forward #开启路由转发
#注意以上操作仅当前有效,计算机重启后无效
echo 'net.ipv4.ip_forward=1' >> /etc/sysctl.conf
#修改/etc/sysctl.conf配置文件,可以实现永久有效规则
主机型与网络型防火墙
iptables -A INPUT -s 192.168.4.120 -j DROP #丢弃192.168.4.120发给本机的所有数据包
[root@svr7 ~]# iptables -A INPUT -s 10.0.10.0/24 -j DROP #丢弃10.0.10.0/24网络中所有主机发送给本机的所有数据包
[root@svr7 ~]# iptables -A INPUT -s 114.212.33.12 -p tcp --dport 22-j REJECT #拒绝114.212.33.12使用tcp协议远程连接本机ssh(22端口)
实验要求
主机名称 | 网卡、IP网卡设置要求 |
---|---|
Client | eth0 192.168.4.100、网关 192.168.4.5 |
Route | eth0 192.168.4.5 eth1 192.168.2.5 |
web1 | eth1 192.168.2.100、网关 192.168.2.5 |
确认不同网络的联通性
[root@client ~]# ping 192.168.2.100
[root@web1 ~]# ping 192.168.4.100
web1主机上启动http服务
[root@web1 ~]# yum –y install httpd
[root@web1 ~]# echo "test page" > /var/www/html/index.html
[root@web1 ~]# systemctl restart httpd
防火墙的清空下client访问web服务
[root@client ~]# curl http://192.168.2.100 #成功
设置完防火墙规则后,再次使用client客户端访问测试效果
[root@client ~]# curl http://192.168.2.100 #失败
(1)禁ping的相关策略
iptables –I INPUT –p icmp –j DROP
#设置完上面的规则后,其他主机确实无法ping本机,但本机也无法ping其他主机
#当本机ping其他主机,其他主机回应也是使用icmp,对方的回应被丢弃
(2)禁止其他主机ping本机,允许本机ping其他主机
iptables -A INPUT -p icmp --icmp-type echo-request -j DROP
#仅禁止入站的ping请求,不拒绝入站的ping回应包
防火墙扩展规则
- 根据MAC地址封锁主机
- 在一条规则中开放多个TCP服务
- 根据IP范围设置封锁规则
步骤一:根据MAC地址过滤
当限制某个IP后,又有新的ssh连接根据IP过滤的确定是对方修改IP后,防火墙是失效
[root@router ~]# iptables –F
[root@router ~]# iptables –I INPUT -s 192.168.4.100 –p tcp –dport 22 –j DROP
#设置规则禁止192.168.4.100使用ssh远程本机
根据MAC地址过滤,可以防止这种情况的发生
iptables -A INPUT -p tcp --dport 22 -m mac --mac-source 52:54:00:00:00:0b -j DROP
#拒绝52:54:00:00:00:0b这台主机远程本机
步骤二:基于多端口设置过滤规则
iptables -A INPUT -p tcp -m multiport --dports 20:22,25,80,110,143,16501:16800 -j ACCEPT
#一次性开启20,21,22,25,80,110,143,16501到16800所有的端口
步骤三:根据IP地址范围设置规则
iptables -A INPUT -p tcp --dport 22 -m iprange --src-range 192.168.4.10-192.168.4.20 -j ACCEPT #对一个范围进行设置
iptables -A INPUT -s #只能指定一个IP或在一个网段不能指定一个范围
查看实际使用率情况,调低阈值再次check_disk测试
Only wanna remark on few general things, The website style is perfect, the content material is very good. “Earn but don’t burn.” by B. J. Gupta.
Some genuinely quality posts on this website , bookmarked .
My brother recommended I might like this web site. He was entirely right. This post actually made my day. You cann’t imagine just how much time I had spent for this information! Thanks!