iptables基础

什么是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测试

iptables基础》有4个想法

发表评论