iptables配置

1、详述iptables五链
2、举例实现iptables多端口匹配、连接追踪、字符串匹配、时间匹配、并发连接限制、速率匹配、报文状态匹配等应用
3、举例实现iptables之SNAT源地址修改及DNAT目标地址修改和PNAT端口修改等应用
4、简述sudo安全切换工具,及详细讲解visudoer

1、详述iptables五链

iptables是linux自带的防火墙,工作在系统空间,根据事先定义好的规则对出入的包进行过滤,做出相应的动作。在数据包过滤的表中,规则被分组放在我们所谓的链(chain)中。

iptables实际上由两个组件netfilter 和 iptables 组成。
iptables 组件是一种工具,也称为用户空间(userspace),它使插入、修改和除去信息包过滤表中的规则变得容易。
netfilter组件也称为内核空间(kernelspace),是内核的一部分,由一些信息包过滤表组成,这些表包含内核用来控制信息包过滤处理的规则集。

五链:

13920922-052b2582c5505ae8.png
image.png

可以看到netfilter在内核空间的五个位置虚拟了五个钩子,数据包经过的时候,一但被任何一个钩子的规则所匹配到就会执行相应的操作。

  • prerouting: 流入的数据包进入路由表之前
  • input:通过路由表判断后目的是本机,然后进入本机内部资源
  • forward:通过路由表判断后目的地不是本机,然后通过路由转发到其他地方
  • output:由本机产生的数据包向外部转发
  • postrouting:传出的数据包到达网卡出口之前

四表:

13920922-d775932b0fde7a9d.png
image.png
  • filter表——过滤数据包
  • Nat表——用于网络地址转换(IP、端口)
  • Mangle表——修改数据包的服务类型、TTL、并且可以配置路由实现QOS
  • Raw表——决定数据包是否被状态跟踪机制处理

图片中显示的是四表与五链的对应关系,表就相当于规则的集合,表工作在哪些钩子上,代表了数据包流经过哪些钩子会被哪些表给匹配到。表在哪些钩子上是有指定意义的,譬如filter不需要工作在prerouting,ouput链上,因为数据包不需要进入用户空间,直接被路由走,那么也不需要进行过滤了
默认表是filter(没有指定表的时候就是filter表)。表的处理优先级:raw>mangle>nat>filter。

2、举例实现iptables多端口匹配、连接追踪、字符串匹配、时间匹配、并发连接限制、速率匹配、报文状态匹配等应用

多端口匹配

以离散方式定义多端口匹配;最多指定15个端口;     
--source-ports,--sports port[,port|,port:port]...:指定多个源端口;
--destination-ports,--dports port[,port|,port:port]...:指定多个目标端口;
--ports port[,port|,port:port]...:指明多个端口;

服务器端的web服务监听在80,8080,8000三个端口上,只有8000能访问到,这里多端口使用了显式声明
iptables -t filter -I INPUT -d 192.168.31.200 -s 192.168.31.201 -p tcp -m multiport --dports 80,8080 -j DROP
[root@lvq-7-4-2 ~]# curl http://192.168.31.200:80
^C
[root@lvq-7-4-2 ~]# curl http://192.168.31.200:8080
^C
[root@lvq-7-4-2 ~]# curl http://192.168.31.200:8000
<h1>The node1 Server</h1>

连接追踪
连接追踪需要知道以下几个状态的意思

  • NEW:新发出请求;连接追踪模板中不存在此连接的相关信息条目,因此,将其识别为第一次发出的请求;
  • ESTABLISHED:NEW状态之后,连接追踪模板中为其建立的条目失效之前期间内所进行的通信状态;
  • RELATED:相关联的连接;如ftp协议中的数据连接与命令连接之间的关系;
  • INVALID:无效的连接;
  • UNTRACKED:未进行追踪的连接;
    这里我们设定允许ESTABLISHED的22号端口进出,然后再开一个终端来进行实验
iptables -A INPUT  -j DROP
iptables -A INPUT -m state --state ESTABLISHED -j ACCEPT

新开的终端无法连接
字符串匹配
使用到string的扩展
注意:仅对明文协议有效对ssh,https等加密协议无效

--algo {bm|kmp}:字符串匹配检测算法;
        bm:Boyer-Moore
        kmp:Knuth-Pratt-Morris
--string pattern:要检测的字符串模式;
--hex-string pattern:要检测的字符串模式,16进制格式;

规则需要定义在在OUTPUT链上,在INPUT链上无效,因为请求时不带有字符,出来的数据包才带有匹配的字符
iptables -I OUTPUT -m string --algo kmp --string "erver" -j DROP

时间匹配

--datestart YYYY[-MM[-DD[Thh[:mm[:ss]]]]]
--datestop YYYY[-MM[-DD[Thh[:mm[:ss]]]]]
            
--timestart hh:mm[:ss]
--timestop hh:mm[:ss]

--monthdays day[,day...]
--weekdays day[,day...]

--kerneltz:使用内核上的时区,而非默认的UTC;

拒绝周一到周六晚上7点50到8点所有访问80端口的请求
iptables -A INPUT -d 192.168.31.200 -p tcp --dport 80 -m time --timestart 19:50 --timestop 18:00 --weekdays 1,2,3,4,5,6 -j DROP 

并发连接限制

--connlimit-upto n:连接的数量小于等于n时匹配;小于允许
--connlimit-above n:连接的数量大于n时匹配;大于拒绝
最多打开两个终端
iptables -A INPUT -d 192.168.31.200 -p tcp --dport 22 -m connlimit --connlimit-above 2 -j REJECT

速率匹配

--limit rate[/second|/minute|/hour|/day]   --limit 20/minute  :每分钟20个
--limit-burst number     :令牌桶最大多少个

iptables -I INPUT -d 192.168.31.200 -p icmp --icmp-type 8 -m limit --limit 3/minute --limit-burst 5 -j ACCEPT
iptables -A INPUT -p icmp -j REJECT

[root@lvq-7-4-2 ~]# ping 192.168.31.200
PING 192.168.31.200 (192.168.31.200) 56(84) bytes of data.
64 bytes from 192.168.31.200: icmp_seq=1 ttl=64 time=0.970 ms
64 bytes from 192.168.31.200: icmp_seq=2 ttl=64 time=0.266 ms
64 bytes from 192.168.31.200: icmp_seq=3 ttl=64 time=0.250 ms
64 bytes from 192.168.31.200: icmp_seq=4 ttl=64 time=0.273 ms
64 bytes from 192.168.31.200: icmp_seq=5 ttl=64 time=0.344 ms
From 192.168.31.200 icmp_seq=6 Destination Port Unreachable
From 192.168.31.200 icmp_seq=7 Destination Port Unreachable
From 192.168.31.200 icmp_seq=8 Destination Port Unreachable

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

nat表的target:
    SNAT
        --to-source [ipaddr[-ipaddr]][:port[-port]]
        --random
    DNAT
        --to-destination [ipaddr[-ipaddr]][:port[-port]]
    MASQUERADE
        --to-ports port[-port]
        --random

SNAT

iptables -t nat -A POSTROUTING -s 192.168.31.200 -j SNAT --to-source 192.168.31.11  

20:25:15.015281 IP 192.168.31.200 > 192.168.31.201: ICMP echo request, id 7815, seq 3, length 64
20:32:28.319994 IP 192.168.31.11 > 192.168.31.201: ICMP echo request, id 7938, seq 1, length 64

DNAT

iptables -t nat -A PREROUTING -d 192.168.31.201  -j DNAT --to-destination 192.168.31.22

192.168.31.200 > 192.168.31.201: ICMP echo request, id 7980, seq 4, length 64
ARP, Request who-has 192.168.31.22 tell192.168.31.201, length 28

PNAT

REDIRECT:端口重定向;
iptables -t nat -A PREROUTING -d 192.168.31.200 -p tcp --dport 80 -j  REDIRECT --to-ports 9999
curl http://192.168.31.200:80
curl: (7) Failed connect to 192.168.31.200:80; 拒绝连接
[root@lvq-7-4-2 ~]# curl http://192.168.31.200:8080
<h1>The node1 Server</h1>

4、简述sudo安全切换工具,及详细讲解visudoer

我们日常使用系统不可能全都用root来进行操作,所以就有了不同权限的用户,但当用户需要使用当前不具备权限的命令时就可以使用sudo,用户权限都在/etc/sudoers配置文件中
以sudo的方式来运行指定的命令;

    sudo  [options]  COMMAND
        -l     command 列出用户能执行的命令
        -k     清除此前缓存用户成功认证结果;

可以直接使用visudo命令进入/etc/sudoers文件

root    ALL=(ALL)   ALL 
%wheel  ALL=(ALL)   ALL 
可以使用!排除命令

users   hosts=(runas)       commands
users:
    username
    #uid
    %groupname
    %#gid
    user_alias
                        
支持将多个用户定义为一组用户,称之为用户别名,user_alias;

hosts:
    ip
    hostname
    NetAddr
    host_alias
                        
runas:
    ...
    runas_alias
                        
commands:
    command
    directory
    sudoedit:特殊权限,可用于向其它用户授予sudo权限;
    cmnd_alias

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值