第十二周作业

`iptables 防火墙

iptbales是通过调用内核空间的netfiter来实现防火墙功能,在第三代版本后衍生出了五个钩子(hook)来进行约束访问控制。

image

chain 与 hook

五条钩子分别对应五条链(chain),而链则是iptables 命令约束的参数,链的名字必须大写

钩子【hiook】 链【chain】 功能:
preouting PREOUTING 目标地址转化(DNAT)
inout INOUT 处理输入数据包
forward FORWARD 处理数据包转发
output OUTPUT 处理输出数据包
postrouting POSTROUTING 源地址转换(SNAT)

 

每条链所能实现的功能:

  1. raw:关闭nat表上启用的连接追踪机制;
  2. mangle:拆解报文,做出修改并重新封装起来;
  3. 用于修改源IP或目标IP,也可修改端口;
  4. filter:过滤,防火墙。
  PREOUTING INOUT FORWARD OUTPUT POSTROUTING
raw      
mangle
nat    
filter    

链【chain】的优先级:图中蓝色文件至左而右标示image

报文流向:
  • 流入本机: PREROUTING–> INPUT
  • 流出本机:OUTPUT –> POSTROUTING
  • 转发:PREROUT –> FORWARD –> POSTROUING 
 路由器功能条件判断:
  • 报文进入本通过网卡进入本机后;判断目标是否本机,如果不是则转发
  • 报文离开本机前;判断经由哪个接口送往下一跳。
规则:
组成部分:根据规则匹配条件来尝试匹配报文,一旦匹配成功就有规则定义的处理动作做出处理;

匹配条件:

内建基本匹配条件:

扩展模块匹配条件;

处理动作:

内建基本处理动作

扩展处理动作;

自定义链处理机制;

iptbales 的链:内置链和自定义链
  • 内置链:对应hook function
  • 自定义链:用于内置链的扩展和补充,可实现更灵活的规则管理机制(需要被内置链调用)
添加规则时的注意:
  • 要实现那哪种功能:判断添加到哪个表上。
  • 报文流经的路径:判断添加到哪个链上,请求和响应方向是相仿。
链–规则次序,几位检查的次序,因此隐含一定的应用法则;
  1. 同类规则,匹配范围小的放上面;
  2. 不同的规则(访问不同的应用),匹配到报文频率较大的放到上边。
  3. 将那些可由一条规则藐视的多个规则合并起来;
  4. 设置默认策略。
删除自定义链要注意:
  1. 自定义链的应用引用要为0;
  2. 自定义链不可以有规则;

iptables 命令

iptables- IP包过滤管理

格式:
iptables -t 表名 <-A/I/D/R> 规则链名 [规则号] <-i/o 网卡名> -p 协议名 <-s 源IP/源子网> --sport 源端口 <-d 目标IP/目标子网> --dport 目标端口 -j 动作
表名默认:firewalld
规则链名:PREROUTING、INPUT、FORWARD、OUTPUT、POSTROUTING
协议名:TCP、UDP、icmp
动作:
  • ACCEPT:允许
  • REJECT:拒绝
  • DROP:丢弃
语法:
  • iptables -ADC 指定链的规则 [-A 添加 -D 删除 -C 修改]
  • iptables -RI
  • iptables -D chain rule num[option]
  • iptables -[NX] 指定链
  • iptables -P chain target [option]
  • iptables -E 源链名 新链名

COMMAND:

链管理:
  • -N:new, 自定义一条新规则链;
  • -X:delete,删除自定义的规则链;
  • -p:policy,设置默认策略,对filter表中的链而言,其默认策略有ACCEPT、DROP、REJECT。
  • -E:重命名自定义链,不可以修改或删除计数不为0的自定义链。
规则管理:
  • -A:追加
  • -I:插入,要指明的位置,省略时默认第一条。
  • -D:删除,可以指明序列号或者指明规则本身。
  • -R:替换自定义链上的指定规则;
  • -F:清空指定的规则链
  • -Z:置零,iptabels的每条规则都有个计数器,
  • 匹配到的报文个数
  • 匹配搭配的所有报文的大小之和;
查看:
  • -L:列出指定链上的所有规则;
  • -n:以数字的格式查看地址和端口号
  • -v:详细嘻嘻,-vv,-vvv 更详细的显示
  • -x:显示计数器结果的精确值;
  • –line-nmubers:显示规则的序号。
参数:
  • -p:规则或包检查(待检查)的协议,指定的协议可以是tpc、udp、icmp的一个或全部
  • -s:指定源地址,可以是主机名、网络名、和ip地址
  • -d:指定的目标地址
  • -j:(跳转目标)指定的规则的目标
  • -i:进入的网络接口,由INPUT、FORWARD和PREROUTING中进入的包,则所有已此接口开头都会匹配,如果这个选项被忽略,会假设为'+',匹配任意接口。
  • -o:(接口名称)这个包经由接口FORWARD、 OUPUT和POSTROUTING中送出的包前边带有!则取反,如果后边加上+规则匹配所有已此接口开头的接口,如果忽略则默认为+将匹配所有任意接口。
  • -f:(分片)这意味着在分片的包中,规则只询问第二及以后的片,之后由于无法判断这种把包源端口或目标端口(或者icmp类型的)这列包将不能匹配任何指定对他们进行匹配的规则,如果!说明用在了-f标志在前,标示相反的意思。

 

允许连接

禁止连接

查看命令

在默认表filter表中添加自定义链:

 

iptables 模块

格式:

iptbales [-t 表] COMMAND [链] [PARAMETERS] [-m 模块[ 模块选项] [-j 规则 [规则选项]

匹配条件:

基本匹配条件

扩展匹配条件

隐式扩展:在使用-p选项指明了特定的协议时,无需再次使用-m选着指明扩展模块。

显示扩展:必须使用-m选项指明要调用的扩展模块的扩展机制。

隐式扩展:
tcp:
  • --source-port,--sport port [:port]: --匹配报文的源端口;--可以是端口范围(连续的用符号;分隔)。
  • --destination-port,--dport port [:port]:--匹配报文的目标端口;--可以是范围端口(断续的用符号;分隔)
  • --tcp-flags SYN,ACK,FIN,RST : --匹配哪些SYN标记被设置FIN和ACK标记没有设置的包,注意标记之间用分号;区分中间没有空格。其中SYN必须为1 其余为0
  • --syn:用于匹配第一次握手,相当于--tcp-flags SYN,ACK,FIN,RST 简写
upd:
  • --source-port --sport[:port] --匹配报文的源端口,可以是端口范围(连续的用符号:分隔)
  • --destination-port,--dport -port [:port]:匹配报文的目标端口,可以是端口范围,断续的用符号:分隔
icmp
  • --icmp-type {type[/code[|typename}
  • echo-reply:0 响应
  • echo-request: 8 发送

tcp是可靠的传输协议、有3此握手机制保证传输的可靠性,如果有丢包,则重新传输数据,向ftp文件传输,远程登录,电子邮件,都是基于tcp协议,保存传输的完整性。

udp实时性较强,但可靠性不强,有丢包清苦,通常用来传输语音、电话、视屏等偶尔丢失不会影响整体效果。

icmp仅作网络测速是否畅通。

显示扩展:

multiport:以离散或连续的方式定义多端口匹配条件,最多15个;

  1. –source-ports,–sports port[,port | ,port:port] … :指定多个源端口;
  2. –destination-ports,–dports port[,port | port:port]… :指定多个目标端口;
允许访问主机192.168.124.4的 80,139,445,3306号端口

允许访问主机20-60端口

 

iprange: 用来指定连续IP段的条件匹配。

  1. –src-range from [-to] 源地址
  2. –dst-range from [-to] 目标地址
允许192.168.124.1-50 IP段访问主机的udp 137端口

允许192.168.124.1-50 返回主机的upd 137端口

time: 时间限制

  1. –timestart hh:mm[:ss] 启示时间范围
  2. –timestop hh:mm[:ss] 结束时间范围(如果不指定则表示循环)
  3. –weekdays day[,day…] 周几
  4. -monthdays day[,day…] 每个月的几号
  5. –datestart YYYY[-MM[-DD[Thh[:mm[:ss]]]] 直接指明允许日期
  6. –datestop YYYY[-MM[-DD[Thh[:mm[:ss]]]] 直接指明禁止日期

CentOS6 默认是内核时间,CentOS 7 需呀–kerneltz 指明内核时区。

允许2018年2月1日-2018年8月31号 早上8点到下午5点访问

允许2018年2月1日-2018年8月31号 早上8点到下午5点放行

string 字符串匹配能做七层检查,但是无法解密重新编的https

  1. –algo{bm|kmp}算法
  2. –string pattern
  3. –hex-string pattern
  4. –from offset
  5. –to offset 
创建一个web测试页面 内容是hello world,匹配到hello 拒绝访问,

connlimit 限制但客户端最多可并发访问数量

  1. –connlimit-upto n 并发数量小于N上限
  2. –commlimit-above n 并发数量大于N是拒绝的

取决于默认规则是什么,默认规则是白名单,默认是拒绝的写成小于才允许,大于则不符合条件了,就被拒绝掉了,
默认规则是黑名单那就意味着默认是允许的,那就写成大于拒绝,那么小于的时候默认规则是允许的。

limit 数率限制 令牌桶算法;

  1. –limit rate [/second |/minute | /hour |/day] 数率
  2. –limit-burst number 令牌桶可以收集多少个令牌

 

state 是conntrack的一个子集用来追踪查看报文当前的连接状态

-0state state

  1. NEW:新的连接请求
  2. ESTABLISHED:已建立的连接
  3. INVALID:无法识别的连接
  4. RELATED:相关的连接,当前连接是一个新请求,但附属于某个已经存在的连接;
  5. UNTRACKED:未追踪的连接。

state扩展:内核模块装载

  1. nf_conntrack
  2. nf_conntrack_ipv4

 

手动装载:

  1. nf_conntrack_ftp

state的连接记录:

  1. 已经追中到的连接/proc/net/nf_conntrack
  2. 调整可记录的连接数量最大值:/proc/sys/net/nf_conntrack_max
  3. 超长时长:/proc/sys/net/netfilter/*timeout*

处理动作

-j targetname [per-target-options]

简单target:

  • ACCEPT
  • DROP

扩展target:

  • REJECT –reject-with type

icmp-unreachable

icmp-host-unreachable

icmp-port-unreachable

icmp-proto-unreach-able

icmp-net-prohibited

icmp-host-prohibited

icmp-andmin-prohibited

LOG:

  1. –log-level 级别
  2. –log-prefix 标示

默认日志保存为/var/log/messages

LOG:

 

保存和载入规则:

保存规则:iptables-save > /PATH/TO/SOME_RULE_FILE

载入规则:iptables-restore < /PATH/FROM/SOME_RULE_FILE

-n,–noflush:不清楚原有规则

-t,–test:仅分析成规则集,但不提交

centos 6 :

保存规则:
service iptables save保存规则于/etc/sysconfig/iptables 文件,覆盖保存
重载规则:
service iptables restart 默认重载/etc/sysconfig/iptbales 文件中的规则。

默认文件:/etc/sysconfig/iptables-restore

实现iptables之SNAT源地址修改及DNAT目标地址修改和PNAT端口修改等应用

image

实现模式:

  • 网关策略

FORWARD链转发策略(位于filter表)

需要注意请求报文和响应报文的规则方向。

如果要启用conntrack(连接追踪)机制,建议将双方向的状态为ESTABLISHED的报文直接放行。


NAT:位于nat表

  • 请求报文:设置策略规则

修改源地址:SNAT,MASQUERADE

修改目标地址: DNAT

  • 响应报文:由NAT的conntrack(连接追踪)机制自动实现;

 

nat表:

SNAT:源地址修改,仅用在POTROUTING、INPUT(很少)和user—defined自定义链上

–to-source [ipaddr[-ipaddr]] 指定源地址(可范围)地址1:地址2

  • DNAT:修改目标地址或端口,仅用在PREROUTING、OUTPUT和user-defined自自定义上。

     

     

     

     

     

    –to-destiantion [ipaddr[ipaddr[-ipaddr]][:port[-port]]

  • MASQUER ADE:仅在动态POSTROUTING中有效 动态IP地址。
3台测试主机设置分别设置:

 FORWARD 转发控制

 

放行响应报文的时候尽量使用RELATED 以便保持连接

 

NAT表-SNAT

NAT表-DNAT

sudo

非登录用户下执行授权用户的命令

 

格式:

sudo [COMMAND]

sudo [COMMAND] – [USER]

常用选项:

-l:command列出用户能执行的命令

-k:清楚此缓存用户认证密码。

 

配置文件:

/etc/sudoers.d

也可以使用visudo直接编辑

授权机制:

users hosts=(runas) command

users:

username:用户名

#uid:用户ID

%groupname:用户组名

%#gid:用户组ID

user_alias:定义用户别名

hsots:

ip:ip地址

hostname:主机名

Netaddr:网络地址

host_alias:定义别名

runas:

runas_alias 

command:

command:命令

directory:目录

sudoedit:

cmnd_alias:别名授权

授权示例:

1、root ALL=(ALL) ALL

解释:用户  所有终端=(所有用户) 所有命令

2、%whell ALL=(ALL) ALL

解释:whell 用户组  所有终端=(所有用户) 所有命令

3、自定义组

User_Alias NETADMIN=tom,jerry

cmnd_Alias NETADMIN=/usr/sbin/ip

解释:自定义用户组 NETADMIN (必须大写),NETADMIN(用户组)定义可使用权限,ip(必须是完整路径)

tom ALL=(ALL) NETADMIN 

解释:用户所有终端=所有用户 执行NETADMIN自定义组授权命令

授权限定机制:

Cmnd_Alias NETADMIN= /usr/sbin/ip, !/usr/bin/passwd [a-z|A-Z]*, !/usr/bin/passwd root

解释:
*   /usr/sbin/ip 可访执行命令。
*   !/usr/bin/passwd[a-z|A-Z]*:不允许passwd命令后带有字母的命令。
*   /usr/bin/passwd root:不运行执行修改root密码。

2、常用验证验证授权

2-1:tom ALL=(ALL) NOPASSWD: NETADMIN

解释:用户 所有终端=(所有用户)无需输入密码(自定义组)

2-2:
tom ALL=(ALL) PASSWD: NETADMIN

解释:用户 所有终端=(所有用户)需输入密码(自定义组)
 

用户权限设定

用户组权限设定

禁止权限设定

按组添加用户权限

1、编辑配置文件

 

参考资料:马哥笔记

原创文章,作者:N28_刚好遇到小熊猫,如若转载,请注明出处:http://www.178linux.com/124681

发表评论

登录后才能评论

This site uses Akismet to reduce spam. Learn how your comment data is processed.

联系我们

400-080-6560

在线咨询

工作时间:周一至周五,9:30-18:30,节假日同时也值班

QR code