关于iptables的常用技巧方法

原创
2017/12/22 22:24
阅读数 158

前序

iptables的起源发展防火墙的工作原理等这里我们就不在复述。这里主要记录下日常运维过程中关于iptables的命令,参数及实际运用。

链路管理命令

iptables -F 清除预设表filter中的所有规则链的规则

iptables -X 清除预设表filter中使用者自定链中的规则

iptables -P :设置默认策略的

iptables -Z:清空链,及链中默认规则的计数器

iptables -N:NEW 支持用户新建一个链

iptables -L -n 查看规则

链表规则管理命令

-A:追加,在当前链的最后新增一个规则

-I num : 插入,把当前规则插入为第几条。

-I 3 :插入为第三条

-o 指定数据包传出的那个网络接口。经常与OUTPUT链配合

-p 指定规则使用的协议

常用 tcp,udp,icmp,all

-s 指定来源ip或者网络,可以整个段,可以单个ip

例如 192.168.31.0/24 192.168.31.2

规则前加 !表示取反 例如:

iptables -A INPUT -i eth0 -p tcp --dport=80 -s 192.168.31.0/24 -j ACCEPT

这表示允许192.168.31.0网段的机器通过eth0网卡访问本机80端口

iptables -A INPUT -i eth0 -p tcp --dport=80 -s !192.168.31.0/24 -j ACCEPT

这就表示不允许了 因为!取反

-d 与-s类似功能

-j 需要执行的动作

主要有ACCEPT,DROP,REJECT,REDIRECT

-i 指定数据包进入的那个网卡。

如 eth0,lo 此参数一般配合INPUT链使用

-m 指定使用的模块

例如: multiport(启用多端口扩展)
     
      state(状态监测)
    
      limit(限制)
    
      mac(网卡物理地址)
      .......

-R num:Replays替换/修改第几条规则

格式:iptables -R 3 …………

-D num:删除,明确指定删除第几条规则

设置预置规则

-P 指定链策略

-t 指定链表

例如允许所有数据流出

iptables -P OUTPUT ACCEPT (不指定-t 默认为filter表)

--sport与--dport

--sport 限制来源的端口号 tcp连接实际是两个端口建立连接。 所以来源端口号就是别人访问你这个服务时他的端口号

--dport 恰恰相反.也就是你服务的端口号。所以我们基本使用的都是dport

状态检测

-m state --state <状态> 有数种状态,状态有:

  • INVALID:无效的封包,例如数据破损的封包状态
  • ESTABLISHED:已经联机成功的联机状态;
  • NEW:想要新建立联机的封包状态;
  • RELATED:表示这个封包是与我们主机发送出去的封包有关, 可能是响应封包或者是联机成功之后的传送封包!这个状态很常被设定,因为设定了他之后,只要未来由本机发送出去的封包,即使我们没有设定封包的 INPUT 规则,该有关的封包还是可以进入我们主机, 可以简化相当多的设定规则。
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

iptables -P OUTPUT  ACCEPT

iptables -A INPUT -i lo -j ACCEPT

一般当我们需要建立一些临时规则时 一般会在开头加上这3句

这样的作用:

不影响现有的传入数据。而且也不用担心开放了之前拒绝的端口

不影响流出数据

不影响本地Lo环路数据(访问本地127.0.0.1)

常用的规则配置:

允许192.168.31.0网段访问80端口

iptables -A INPUT -p tcp --dport 80 -s 192.168.31.0/24 -j ACCEPT

不允许

iptables -A INPUT -p tcp --dport 80 -s !192.168.31.0/24 -j ACCEPT

或

iptables -A INPUT -p tcp --dport 80 -s 192.168.31.0/24 -j DROP

只允许 mac地址为aa:bb:cc:dd:ee:ff 的机器访问本地ssh端口

iptables -A INPUT -m mac --mac-source aa:bb:cc:dd:ee:ff -p tcp --dport 22 -j ACCEPT

将80端口重定向到8080端口

iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-ports 8080

443端口限流,每秒最多150个连接(防ddos)

iptables -A INPUT -i eth0 -p tcp --dport 443  -m limit --limit 150/s  --limit-burst 150 -j ACCEPT

防SYN_FLOOD

iptables -N syn-flood   (新建一条链)

iptables -A INPUT -p tcp --syn -j syn-flood 

iptables -A syn-flood  -p tcp -m limit --limit 2/s --limit-burst 50 -j RETURN

iptables -A syn-flood -j DROP

单个ip最大并发数50

iptables -I INPUT -p tcp --dport 80 -m connlimit  --connlimit-above 50 -j REJECT

对访问本机的22端口进行限制,每个ip每小时只能连接5次,超过的拒接,1小时候重新计算次数

iptables -A INPUT -p tcp --dport 22 -m state --state NEW -m recent --name SSHPOOL --rcheck --seconds 3600 --hitcount 5 -j DROP

iptables -A INPUT -p tcp --dport 22 -m state --state NEW -m recent --name SSHPOOL --set -j ACCEPT

(上面recent规则只适用于默认规则为DROP中,如果要适用默认ACCEPT的规则,需要--set放前面 并且无-j ACCEPT)

预防cc攻击

 tcpdump -tnn dst port 80 -c 100 | awk -F"." '{print $1"."$2"."$3"."$4}' | sort | uniq -c | sort -n -r |head -20
 
 查找发包最多的ip
 
 iptables -I INPUT -s ip -j REJECT 
 
 封掉
展开阅读全文
打赏
0
0 收藏
分享
加载中
更多评论
打赏
0 评论
0 收藏
0
分享
OSCHINA
登录后可查看更多优质内容
返回顶部
顶部