路漫漫其修远兮
吾将上下而求索

iptables学习:扩展,动作,保存重载

扩展匹配条件

可以使用 [root@localhost ~]#man iptables-extensions  来查看帮助文档

隐式扩展:可以不用-m选项指定的
-p tcp:可以直接使用的tcp协议对应的扩展选项,如果前面已经指定了是tcp协议,则后面的(-m tcp)可以省略不写
    [!] –source-port,–sport port[:port] 匹配报文中的传输层的源端口,可以给出多个连续的端口23-80:表示很多个端口
    [!] –destination-port,–dport port[:port]

    [!] –tcp-flags mask comp 可选 SYN ACK FIN RST URG PSH ALL NONE,检测是否为tcp连接的第一次连接
        mask:要检查的标志位列表,以逗号分隔,例如:SYN,ACK,FIN,RST
        comp:mask给定的众标志位中,其值必须为1的标志位列表。余下的必须为0.
        例如:–tcp-flags SYN,ACK,FIN,RST SYN (0000 1)tcp的起始连接
    [!] –syn 相当于上面的。It is equivalent to –tcp-flags SYN,RST,ACK,FIN SYN

 

示例:
开放本机的ssh给本地网络。源端口可以是源地址的任意端口,目标端口是22号端口,tcp协议,反过来也要放行返回报文。

iptables -A INPUT -s 172.18.19.0/24 -d 172.18.19.10 -p tcp [-m tcp] –dport 22 -j ACCEPT
iptables -A OUTPUT -s 172.18.19.10 -d 172.18.19.0/24 -p tcp [-m tcp] –sport 22 -j ACCEPT

主机:172.18.19.10
[root@localhost ~]#iptables -A INPUT -s 172.18.19.0/24 -d 172.18.19.10 -p tcp --dport 22 -j ACCEPT
[root@localhost ~]#iptables -A OUTPUT -s 172.18.19.10 -d 172.18.19.0/24 -p tcp --sport 22 -j ACCEPT
[root@localhost ~]#iptables -P INPUT DROP
[root@localhost ~]#iptables -P OUTPUT DROP
[root@localhost ~]#iptables -vnL
Chain INPUT (policy DROP 1 packets, 84 bytes)
pkts bytes target prot opt in out source destination 
15288 ACCEPT tcp -- * * 172.18.19.0/24 172.18.19.10 tcp dpt:22

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination

Chain OUTPUT (policy DROP 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination 
9512 ACCEPT tcp -- * * 172.18.19.10 172.18.19.0/24 tcp spt:22

此时可以将此主机的所有策略改为drop,除了本网络所有主机的ssh,其余的都丢弃,

-p udp:可以直接使用的udp协议对应的扩展选项
    [!] –source-port,–sport port[:port] 匹配报文中的传输层的源端口,可以给出多个连续的端口23-80:表示很多
    [!] –destination-port,–dport port[:port]

 

-p icmp:可以直接使用的icmp协议对应的扩展选项
    [!] –icmp-type {type[/code]|typename}
    例如:–icmp-type 8/0 ping请求的请求报文
    例如:–icmp-type 0/0 ping请求的响应报文

允许本地网络ping本机,

[root@localhost ~]#iptables -A INPUT -s 172.18.19.0/24 -d 172.18.19.10 -p icmp --icmp-type 8/0 -j ACCEPT
[root@localhost ~]#iptables -vnL
Chain INPUT (policy DROP 7 packets, 546 bytes)
pkts bytes target prot opt in out source destination 
37992 ACCEPT tcp -- * * 172.18.19.0/24 172.18.19.10 tcp dpt:22 
2268 ACCEPT icmp -- * * 172.18.19.0/24 172.18.19.10 icmp type 8 code 0 
这时其他主机ping仍然得不到响应,因为还没有设置响应设置。

[root@localhost ~]#iptables -A OUTPUT -s 172.18.19.10 -d 172.18.19.0/24 -p icmp --icmp-type 0/0 -j ACCEPT
[root@localhost ~]#iptables -vnL
Chain INPUT (policy DROP 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination 
67552 ACCEPT tcp -- * * 172.18.19.0/24 172.18.19.10 tcp dpt:22 
37800 ACCEPT icmp -- * * 172.18.19.0/24 172.18.19.10 icmp type 8 code 0

Chain OUTPUT (policy DROP 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination 
61348 ACCEPT tcp -- * * 172.18.19.10 172.18.19.0/24 tcp spt:22 
84 ACCEPT icmp -- * * 172.18.19.10 172.18.19.0/24 icmp type 0 code 0

其他主机ping可以响应了,但是此主机不能ping其他主机,

853909-20161021090521420-505208417.png

显式扩展,必须使用-m来给出matchname的扩展,而且有些扩展还存在专用的选项

multiport :A port range (port:port) counts as two ports,这里是两个端口
    [!] –source-ports,–sports port[,port|,port:port]…指定多个源端口
    [!] –destination-ports,–dports port[,port|,port:port]…指定多个目标端口
    [!] –ports port[,port|,port:port]…匹配此处指定的源或目标端口

开放本机的22 23 80端口

[root@localhost ~]#iptables -F

[root@localhost ~]#iptables -A INPUT -d 172.18.19.10 -p tcp -m multiport --dports 22,23,80 -j ACCEPT
[root@localhost ~]#iptables -A OUTPUT -s 172.18.19.10 -p tcp -m multiport --sports 22,23,80 -j ACCEPT 

[root@localhost ~]#iptables -vnL
Chain INPUT (policy DROP 58 packets, 5056 bytes)
pkts bytes target prot opt in out source destination 
5809 ACCEPT tcp -- * * 0.0.0.0/0 172.18.19.10 multiport dports 22,23,80

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination

Chain OUTPUT (policy DROP 4 packets, 284 bytes)
pkts bytes target prot opt in out source destination 
5029 ACCEPT tcp -- * * 172.18.19.10 0.0.0.0/0 multiport sports 22,23,80 

其他主机可以访问其主机的网页,连接上ssh服务。

iprange:连续的ip范围, 
    [!] –src-range from[-to]
    [!] –dst-range from[-to]

string扩展, 对报文中的应用层的数据做字符串匹配检查。 
    –algo {bm|kmp} :指定用来匹配的算法,必须要指定一个。两种算法速度都差不多
    [!] –string pattern:Matches the given pattern.后面跟上要匹配的关键字

    [!] –hex-string pattern:Matches the given pattern in hex notation.或者16进制的关键字,速度快些

示例:
10主机开放80端口,httpd服务,建立两个网页,每个有不同的关键字。并且30主机可以正常访问

[root@localhost ~]#curl 172.18.19.10/index.html
hello
[root@localhost ~]#curl 172.18.19.10/index1.html
test

主机172.18.19.10设置 
[root@localhost ~]#iptables -I OUTPUT -s 172.18.19.10 -p tcp --sport 80 -m string --string "tes" --algo bm -j REJECT
[root@localhost ~]#iptables -vnL
Chain OUTPUT (policy DROP 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination 
0 REJECT tcp -- * * 172.18.19.10 0.0.0.0/0 tcp spt:80 STRING match "tes" ALGO name bm TO 65535 reject-with icmp-port-unreachable

主机172.18.19.30访问
[root@localhost ~]#curl 172.18.19.10/index.html
hello
[root@localhost ~]#curl 172.18.19.10/index1.html
显示出不来

说明:设置关键字匹配“tes”,请求报文中不会有关键字,在服务器响应报文出口设置关键字匹配,当匹配到时候回复拒绝。

time:时段控制
    –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…] :可能的值:1-31

    [!] –weekdays day[,day…]:Possible values are Mon, Tue, Wed, Thu, Fri, Sat, Sun, or values from 1 to 7

示例:

设置172.18.19.10主机周四23:00-00:00可以访问httpd,其余不能访问httpd,为了简单起见,OUTPUT一直设置为ACCEPT,只控制INPUT链,默认策略设置为DROP,

[root@localhost ~]#iptables -nvL
Chain INPUT (policy DROP 4241 packets, 366K bytes)
 pkts bytes target     prot opt in     out     source               destination         
42884 ACCEPT     tcp  --  *      *       172.18.19.0/24       172.18.19.10        tcp dpt:22         

Chain OUTPUT (policy ACCEPT 287 packets, 18892 bytes)
 pkts bytes target     prot opt in     out     source               destination 

[root@localhost ~]#iptables -I INPUT -d 172.18.19.10 -p tcp --dport 80 -m time --timestart 23:00:00 --timestop 00:00:00 --weekdays Thu -j ACCEPT

[root@localhost ~]#iptables -nvL
Chain INPUT (policy DROP 22 packets, 1776 bytes)
 pkts bytes target     prot opt in     out     source               destination         
    0 ACCEPT     tcp  --  *      *       0.0.0.0/0            172.18.19.10        tcp dpt:80 TIME from 23:00:00 to 00:00:00 on Thu 
80632 ACCEPT     tcp  --  *      *       172.18.19.0/24       172.18.19.10        tcp dpt:22      

Chain OUTPUT (policy ACCEPT 11 packets, 2468 bytes)
 pkts bytes target     prot opt in     out     source               destination         

测试确实是这样的,11点前不能访问,11点后可以访问。测试时注意时间是否正常,不行的话要调整时间。

 

connlimit:根据每客户端IP做并发连接数限制,限制单个客户端能够连接的并发连接数

    –connlimit-upto n:比如n为2,则连接数为1个或者2个都满足

    –connlimit-above n:比如n为2,则连接数为3或者以上

 示例:当ssh连接次数超过2个,就拒绝连接。

[root@localhost ~]#iptables -nvL
Chain INPUT (policy DROP 45 packets, 3994 bytes)
 pkts bytes target     prot opt in     out     source               destination         
 6033 ACCEPT     tcp  --  *      *       172.18.19.0/24       172.18.19.10        tcp dpt:22 

[root@localhost ~]#iptables -I INPUT -d 172.18.19.10 -p tcp --dport 22 -m connlimit --connlimit-above 2 -j REJECT

[root@localhost ~]#iptables -nvL
Chain INPUT (policy DROP 2 packets, 168 bytes)
 pkts bytes target     prot opt in     out     source               destination         
    0 REJECT     tcp  --  *      *       0.0.0.0/0            172.18.19.10        tcp dpt:22 #conn/32 > 2 reject-with icmp-port-unreachable 
21545 ACCEPT     tcp  --  *      *       172.18.19.0/24       172.18.19.10        tcp dpt:22

说明:因为默认INPUT策略为DROP,并且已经有一条规则是目标端口是22的都放行,有两种方案:插入超过2个连接都阻断,插入连接数不大于2的都放行,后来想想后面的达不到预期的效果,不可行。当为第二种的时候,连接数不超过2,符合第一条,放行,当超过2个连接的时候,不符合第一条规则,跳过,第二条规则永远成立,不会拒绝,所以不可行。这里要仔细的想清楚过程,都过一遍看是否符合预期。

结果:当克隆第三个远程客户端的时候连接失败,并且能够在iptables上面看到报文数。

853909-20161020233722873-2114681633.png

 limit:报文速率限制

     –limit rate[/second|/minute|/hour|/day]

     –limit-burst number:令牌桶,默认5个

(令牌桶算法) 服务器当前服务有限,最多进入5/s个报文。但是每个报文停2秒就出去了。

示例:

允许ping请求操作是最多每分钟20个,

[root@localhost ~]#iptables -A INPUT -d 172.18.19.10 -p icmp --icmp-type 8 -m limit --limit-burst 3 --limit 20/minute -j ACCEPT

[root@localhost ~]#iptables -nvL
Chain INPUT (policy DROP 2 packets, 168 bytes)
 pkts bytes target     prot opt in     out     source               destination         
  152 REJECT     tcp  --  *      *       0.0.0.0/0            172.18.19.10        tcp dpt:22 #conn/32 > 2 reject-with icmp-port-unreachable 
48534 ACCEPT     tcp  --  *      *       172.18.19.0/24       172.18.19.10        tcp dpt:22 
  336 ACCEPT     icmp --  *      *       0.0.0.0/0            172.18.19.10        icmp type 8 limit: avg 20/min burst 3       

Chain OUTPUT (policy ACCEPT 11 packets, 1364 bytes)
 pkts bytes target     prot opt in     out     source               destination

 不成功:但重新进行一次又好了,,,,,,,,

 

state:状态检测,

  连接追踪机制(conntrack),远程主机连接过服务器的时候,服务器的防火墙有个hash表,会记录此主机的链接状态,当此主机再次访问的时候,防火墙会去查找hash表,查远程主机的链接状态,当服务器的并发连接非常大的时候,建议不要开启,不然很多会掉线,或者调整到足够大。以httpd为例:80端口不会主动建立其他的链接,非正常情况下不算。80端口只能允许进来为NEW的状态。响应报文就是establish,第二次请求也为establish,可以这样理解:任何时候只要OUTPUT链上,状态为establish的连接,都能放行,这样试图从80端口建立连接的程序都会被阻止。

  NEW:(new)新连接,远程主机以前没来过,第一次建立的连接,超时了才连接还是新连接,

  ESTABLISHED:(established)已建立的连接,远程主机以前来过 

  RELATED:(related)相关联的连接,ftp服务,命令端口和数据端口不是相同的端口,但建立数据端口连接是由命令端口连接发起的建立起来的,不是NEW连接,当数据连接建立后,数据端口连接会变成ESTABLISHED

  INVALID:(invalid)无法识别的连接,

  UNTRACKED:(untracked)未被追踪的连接

 

已追踪到的连接:proc/net/nf_conntrack
查看最大的连接次数:proc/sys/net/nf_conntrack_max

议的连接追踪时长:/proc/sys/net/netfilter 

 

需要装载的相关的内核模块:

  nf_conntrack

  nf_conntrack_ftp:必须要的内核模块,要手动装载

  nf_conntrack_ipv4 

[root@localhost ~]#iptables -A INPUT -d 172.18.19.10 -p tcp -m multiport --dport 22,80 -m state --state NEW,ESTABLISHED -j ACCEPT 
[root@localhost ~]#iptables -A OUTPUT -m state --state ESTABLISHED -j ACCEPT
[root@localhost ~]#iptables -P INPUT DROP
[root@localhost ~]#iptables -P OUTPUT DROP
下面可以将所有的规则都清掉了,先添后删,保证ssh不会掉线,
[root@localhost ~]#iptables -nvL
Chain INPUT (policy DROP 9 packets, 952 bytes)
 pkts bytes target     prot opt in     out     source               destination         
 7433 ACCEPT     tcp  --  *      *       0.0.0.0/0            172.18.19.10        multiport dports 22,80 state NEW,ESTABLISHED 

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         

Chain OUTPUT (policy DROP 9 packets, 580 bytes)
 pkts bytes target     prot opt in     out     source               destination         
 6677 ACCEPT     all  --  *      *       0.0.0.0/0            0.0.0.0/0           state ESTABLISHED

到这里:10主机的ssh服务和httpd服务都工作正常,

 

 添加一条规则,可以ping本机,而输出规则一直是:只要是已建立的连接,都可以放行。

主机:172.18.19.10
[root@localhost ~]#iptables -A INPUT -d 172.18.19.10 -p icmp --icmp-type 8 -m state --state NEW,ESTABLISHED -j ACCEPT
[root@localhost ~]#iptables -nvL
Chain INPUT (policy DROP 3 packets, 234 bytes)
 pkts bytes target     prot opt in     out     source               destination         
28581 ACCEPT     tcp  --  *      *       0.0.0.0/0            172.18.19.10        multiport dports 22,80 state NEW,ESTABLISHED 
    0 ACCEPT     icmp --  *      *       0.0.0.0/0            172.18.19.10        icmp type 8 state NEW,ESTABLISHED 

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         

Chain OUTPUT (policy DROP 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         
24124 ACCEPT     all  --  *      *       0.0.0.0/0            0.0.0.0/0           state ESTABLISHED

实测其他主机可以ping通。

 

 放行本机的FTP服务,要开发21号端口和所有的随机端口,但是我们从连接追踪方面考虑:即放行21号端口为new和related的主机,所有随机端口放行related的和established的主机,

只开发21号端口,请求,放行都正常,但是服务器被动模式下,客户端请求数据端口,是个随机端口,但是状态是related 
如果检测到某一连接是随机端口,但是是establish状态,不用开发对应端口就能将其放行。

 因为防火墙的原因无法通过yum来安装vsftpd服务

[root@localhost ~]#modprobe nf_conntrack_ftp
[root@localhost ~]#lsmod | grep nf_conntrack_ftp
nf_conntrack_ftp       12049  0 nf_conntrack           79537  6 nf_conntrack_ftp,iptable_nat,nf_nat,nf_conntrack_ipv4,nf_conntrack_ipv6,xt_state

[root@localhost /media/CentOS_6.8_Final/Packages]#rpm -ivh vsftpd-2.2.2-21.el6.x86_64.rpm 
[root@localhost /media/CentOS_6.8_Final/Packages]#cd
[root@localhost ~]#service vsftpd start
Starting vsftpd for vsftpd:                                [  OK  ]

#所有服务第二次和以后的请求都是established状态,将这条规则放在第一条,效率会非常高,所有的第一次请求才会往下检查规则

[root@localhost ~]#iptables -I INPUT -d 172.18.19.10 -m state --state ESTABLISHED -j ACCEPT
[root@localhost ~]#iptables -nvL
Chain INPUT (policy DROP 5 packets, 390 bytes)
 pkts bytes target     prot opt in     out     source               destination         
  848 ACCEPT     all  --  *      *       0.0.0.0/0            172.18.19.10        state ESTABLISHED 
31173 ACCEPT     tcp  --  *      *       0.0.0.0/0            172.18.19.10        multiport dports 22,80 state NEW,ESTABLISHED 
  252 ACCEPT     icmp --  *      *       0.0.0.0/0            172.18.19.10        icmp type 8 state NEW,ESTABLISHED 

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         

Chain OUTPUT (policy DROP 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         
29396 ACCEPT     all  --  *      *       0.0.0.0/0            0.0.0.0/0           state ESTABLISHED 
#可以ping通,可以访问网页

[root@localhost ~]#iptables -R INPUT 2 -d 172.18.19.10 -p tcp -m multiport --dports 21,22,80 -m state --state NEW -j ACCEPT   #更改规则
[root@localhost ~]#iptables -nvL
Chain INPUT (policy DROP 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         
16176 ACCEPT     all  --  *      *       0.0.0.0/0            172.18.19.10        state ESTABLISHED 
    0 ACCEPT     tcp  --  *      *       0.0.0.0/0            172.18.19.10        multiport dports 21,22,80 state NEW 
  252 ACCEPT     icmp --  *      *       0.0.0.0/0            172.18.19.10        icmp type 8 state NEW,ESTABLISHED 

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         

Chain OUTPUT (policy DROP 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         
47024 ACCEPT     all  --  *      *       0.0.0.0/0            0.0.0.0/0           state ESTABLISHED 
#可以ping通,可以访问网页,但不能访问ftp。

[root@localhost ~]#iptables -R INPUT 1 -d 172.18.19.10 -m state --state RELATED,ESTABLISHED -j ACCEPT  #进一步优化
[root@localhost ~]#iptables -nvL
Chain INPUT (policy DROP 1 packets, 78 bytes)
 pkts bytes target     prot opt in     out     source               destination         
  396 ACCEPT     all  --  *      *       0.0.0.0/0            172.18.19.10        state RELATED,ESTABLISHED 
    0 ACCEPT     tcp  --  *      *       0.0.0.0/0            172.18.19.10        multiport dports 21,22,80 state NEW 
  252 ACCEPT     icmp --  *      *       0.0.0.0/0            172.18.19.10        icmp type 8 state NEW,ESTABLISHED 

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         

Chain OUTPUT (policy DROP 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         
49376 ACCEPT     all  --  *      *       0.0.0.0/0            0.0.0.0/0           state ESTABLISHED 
#可以ping,可以访问httpd,可以访问ftp

处理动作:跳转目标
-j targetname [per-target-options]
  简单的target:ACCEPT DROP
  扩展的target:REJECT
    –reject-with type:icmp-port-unreachable is the default,The type given can be icmp-net-unreachable, icmp-host-unreachable, icmp-port-unreachable, icmp-proto-unreachable, icmp-net-prohibited, icmp-host-prohibited, or icmp-admin-prohibited (*),
  LOG: Turn on kernel logging of matching packets.记录匹配到条目的日志,必须要放在要执行操作的前面,操作前记录。如果放在执行后面,执行条目匹配到后就不会再匹配下面的记录条目了。
    –log-level level:emerg, alert, crit,  error, warning, notice, info or debug

    –log-prefix prefix:日志信息的前导信息

示例:记录新的ssh连接,不记录每一条连接信息。如果放在第一条,则ssh每条命令都会记录。要放到第二条,这样已建立的连接就不会记录了,

[root@localhost ~]#iptables -I INPUT 2 -d 172.18.19.10 -p tcp --dport 22 -j LOG --log-prefix "i love you"
[root@localhost ~]#iptables -nvL
Chain INPUT (policy DROP 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination 
63798 ACCEPT all -- * * 0.0.0.0/0 172.18.19.10 state RELATED,ESTABLISHED 
0 LOG tcp -- * * 0.0.0.0/0 172.18.19.10 tcp dpt:22 LOG flags 0 level 4 prefix `i love you' 
2812 ACCEPT tcp -- * * 0.0.0.0/0 172.18.19.10 multiport dports 21,22,80 state NEW 
1418 ACCEPT icmp -- * * 0.0.0.0/0 172.18.19.10 icmp type 8 state NEW,ESTABLISHED

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination

Chain OUTPUT (policy DROP 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination 
505K ACCEPT all -- * * 0.0.0.0/0 0.0.0.0/0 state ESTABLISHED

 

只要登录一个ssh,就会匹配到报文,日志保存的位置:/var/log/messages

 

———————————-我是分割线———————————- 

保存和载入规则

保存规则:iptables-save — dump iptables rules to stdout
    [root@localhost ~]#iptables-save > /etc/sysconfig/iptables 保存设置到文件,

载入规则:
  [root@localhost ~]#iptables-restore < /etc/sysconfig/iptables 从文件中读取配置,会清除当前已有的规则

上面的命令6,7都适用

 

对于centos6:
  保存规则:service iptables save 保存规则到/etc/sysconfig/iptables,但是会清除文件中已有的规则
  载入规则:service iptables restart
  脚本配置文件:/etc/sysconfig/iptables-config 用于指明要装载的模块,
  比如ftp:IPTABELS_MODULES=模块名称

对于centos7:
  开机自动生效规则的方式
  firewalld服务
  shell脚本,直接记录iPtables命令
  自定义unit file 或initscript

 

规则优化思路:
  优先放行双方向状态为established的报文
  服务于不同类别的功能规则,匹配到报文可能性大的放前面
  服务于同一类型的功能的规则,匹配条件较严格的放前面
  设置默认策略:

  iptables -P IP drop :默认策略设置为drop,但一不小心清空了规则,则自己ssh都会连接不上,而且127网络自己也ping不通

  可以设置为:#iptables -P INPUT ACCEPT,但是在规则的最后设置所有目标为本机IP的报文都丢弃:iptables -A INPUT -d IP -j drop,这样有个好处,默认的策略是最后执行的,可以在默认策略之前加上全部丢掉。这样,当不小心清除了所有规则,默认策略是accept,自己还能登录。只是丢掉了所有的对应IP的所有包,还是能ping通127的网络。还有个问题,默认为通过的策略,会不会出现目标IP不是本机的IP的IP报文进入本系统。

 

 centos6的默认策略:

[root@localhost ~]#iptables -nvL
Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         
  35M ACCEPT     all  --  *      *       0.0.0.0/0            0.0.0.0/0           state RELATED,ESTABLISHED 
    0 ACCEPT     icmp --  *      *       0.0.0.0/0            0.0.0.0/0           
 3015 ACCEPT     all  --  lo     *       0.0.0.0/0            0.0.0.0/0           
  248 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           state NEW tcp dpt:22 
 370K REJECT     all  --  *      *       0.0.0.0/0            0.0.0.0/0           reject-with icmp-host-prohibited 

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         
    0 REJECT     all  --  *      *       0.0.0.0/0            0.0.0.0/0           reject-with icmp-host-prohibited 

Chain OUTPUT (policy ACCEPT 11723 packets, 686K bytes)
 pkts bytes target     prot opt in     out     source               destination

翻译:

  所有的forward链上的报文都拒绝,

  通过所有related,established报文

  通过所有icmp报文

  通过所有的lo网卡报文,本地回环

  通过ssh新链接

  拒绝所有的报文。

 修改:

  所有的forward链上的报文都拒绝,

  通过所有related,established报文

 

  icmp每3秒1个

通过所有的lo网卡报文,本地回环

  拒绝所有的报文。

 

 查看nmap扫描原理,关闭对应的回应。

 –

未经允许不得转载:江哥架构师笔记 » iptables学习:扩展,动作,保存重载

分享到:更多 ()

评论 抢沙发

评论前必须登录!