iptables常用实例


一、普通规则

1.1 操作规则

查看本机关于iptables的设置情况,默认查看的是-t filter,可以指定-t nat

# iptables -nL

设置chain默认策略

# iptables -P INPUT DROP
# iptables -P FORWARD ACCEPT
# iptables -P OUTPUT ACCEPT

注:将INPUT链默认处理策略设置为DROP,前提是已经存在一条可以访问22端口的规则。
在添加这类拒绝访问的规则之前,一定要想好执行完,会不会把自己关在防火墙外面

保存当前的防火墙规则设置至指定文件,命令行下通过iptables配置的规则在下次重启后会失效,当然这也是为了防止错误的配置防火墙。默认读取和保存的配置文件地址为/etc/sysconfig/iptables

# iptables-save > /PATH/TO/SOMEFILE

从指定文件中重载规则

# iptables-restore < /PATH/TO/SOMEFILE

1.2 限制访问规则

把这条语句插在input链的最前面(第一条),对状态为ESTABLISHED,RELATED的连接放行

# iptables -I INPUT 1 -m state --state RELATED,ESTABLISHED -j ACCEPT

允许所有,不安全,默认

# iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT

指定IP范围的地址可以SSH连接

# iptables -A INPUT -s 192.168.10.0/24 -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT

允许一个IP段访问多个端口

# iptables -A INPUT -s 192.168.10.0/24 -p tcp -m tcp -m multiport --dports 80,443 -j ACCEPT

禁止某IP段访问80端口,将-j DROP改成 -j REJECT --reject-with icmp-host-prohibited作用相同

# iptables -A INPUT -s 192.168.10.0/24 -p tcp -m tcp --dport 80 -j DROP

完全信任某一主机,尽量不使用

# iptables -A INPUT -s 192.168.10.7 -j ACCEPT

允许loopback。回环接口是一个主机内部发送和接收数据的虚拟设备接口,应该放行所有数据包。指定插入位置为 2 则之前该编号为 2 的规则依次后移

# iptables -I INPUT 2 -i lo -j ACCEPT

接受icmp数据包,可以ping。也可以设置只允许某个特定的IP可ping

# iptables -A INPUT -p icmp -j ACCEPT
# iptables -I INPUT -s 192.168.10.17 -p icmp -j ACCEPT

1.3 删除规则

显示每条规则链的编号

# iptables -nL --line-number

删除INPUT链的第2条规则,编号由上一条得知。如果删除的是nat表中的链,需要指定表名 -t nat

# iptables -D INPUT 2

丢弃非法连接

# iptables -A INPUT -m state –state INVALID -j DROP
# iptables -A OUTPUT -m state –state INVALID -j DROP
# iptables-A FORWARD -m state –state INVALID -j DROP

二、几种情形

2.1 端口转发

首先要开启端口转发必须先修改内核运行参数ip_forward,打开转发

# echo 1 > /proc/sys/net/ipv4/ip_forward        #此方法临时生效
或修改配置文件添加
# vim /ect/sysctl.conf            #此方法永久生效
net.ipv4.ip_forward = 1
# sysctl -p

本机端口转发

# iptables -t nat -A PREROUTING -p tcp -d $YOUR_HOST_IP --dport 80 -j DNAT --to-destination $YOUR_HOST_IP:8080

异机端口转发

要实现的是所有访问 192.168.10.17:8001 的请求,转发到 172.16.1.17:80 上,在 192.168.10.17 添加如下规则:

# iptables -t nat -A PREROUTING -p tcp -d 192.168.10.17 --dport 8001 -j DNAT --to-destination 172.16.1.17:80
# iptables -t nat -A POSTROUTING -s 172.16.1.0/16 -j SNAT --to-source 192.168.10.17

2.2 记录日志

为22端口的INPUT包增加日志功能,插在input的第1个规则前面,为避免日志信息塞满/var/log/message,用--limit限制

# iptables -R INPUT 1 -p tcp --dport 22 -m limit --limit 3/minute --limit-burst 8 -j LOG

vim /etc/rsyslog.conf编辑日志配置文件,添加kern.=notice /var/log/iptables.log,可以将日志记录到自定义的文件中。

重启日志服务
# service rsyslog restart

2.3 防止DoS攻击

SYN洪水是攻击者发送海量的SYN请求到目标服务器上的一种DoS攻击方法,下面的脚本用于预防轻量级的DoS攻击

#!/bin/bash
#
iptables -N syn-flood   (如果您的防火墙默认配置有“ :syn-flood - [0:0] ”则不许要该项,因为重复了)
iptables -A INPUT -p tcp --syn -j syn-flood   
iptables -I syn-flood -p tcp -m limit --limit 2/s --limit-burst 5 -j RETURN   
iptables -A syn-flood -j REJECT   
# 防止DOS太多连接进来,可以允许外网网卡每个IP最多15个初始连接,超过的丢弃
# 需要iptables v1.4.19以上版本:iptables -V 
iptables -A INPUT -p tcp --syn -i eth0 --dport 80 -m connlimit --connlimit-above 20 --connlimit-mask 24 -j DROP   
#用Iptables抵御DDOS (参数与上相同)   
iptables -A INPUT -p tcp --syn -m limit --limit 5/s --limit-burst 10 -j ACCEPT  
iptables -A FORWARD -p tcp --syn -m limit --limit 1/s -j ACCEPT 
iptables -A FORWARD -p icmp -m limit --limit 2/s --limit-burst 10 -j ACCEPT
iptables -A INPUT -p icmp --icmp-type 0 -s ! 192.168.10.0/24 -j DROP

声明:Jason|版权所有,违者必究|如未注明,均为原创|本网站采用BY-NC-SA协议进行授权

转载:转载请注明原文链接 - iptables常用实例


Carpe Diem and Do what I like