iptables一些杂七杂八配置整理
这是很久之前的草稿,写的时候大概是2015年,现在(2020年8月),还有三个月centos 6系列就停止维护了,标志着iptables已经快入土了,简单整理了一下格式,还是发出来吧
1. iptables 开启日志
新建一个LOGGIN链:
iptables -N LOGGING
将需要记录日志的规则跳转到LOGGING链:
iptables -A INPUT -s 192.168.100.0/24 -j LOGGING --log-level 4
也可以指定日志的前缀:
iptables -A INPUT -s 192.168.100.0/24 -j LOGGING --log-level 4 --log-prefix "IPTables-Dropped: "
日志记录在: /var/log/message ,如果想记录在不同的文件,需要配置syslog服务
2. 使用iptables进行单ip限速
创建一个新链:
iptables --new-chain RATE-LIMIT
按源IP进行限速,每秒中最多30个并发,突发20个:
iptables --append RATE-LIMIT \
--match hashlimit \
--hashlimit-mode srcip \
--hashlimit-upto 30/sec \
--hashlimit-burst 20 \
--hashlimit-name conn_rate_limit \
--jump ACCEPT
超过的ip直接DROP掉:
iptables --append RATE-LIMIT --jump DROP
记录日志:
iptables --append RATE-LIMIT --jump LOG --log-prefix "IPTables-Rejected: "
iptables --append RATE-LIMIT --jump REJECT
3. iptables 配合ipset 高效拉黑IP
iptables 拉黑大量ip时性能很差,更效的方式是使用ipset + iptables,先安装 ipset:
yum install ipset
创建一个集合blackip,通过maxelem指定大小:
ipset create blackip hash:ip hashsize 4096 maxelem 10000000
集合有很多类型,hash:ip/hash:net/hash:ip,port,net 等等,可以满足各种类型的集合需求
使用iptables拒绝blackip集合中所有ip:
iptables -I INPUT -m set --match-set attack src -j DROP
也可以创建带超时时间的集合,ip拉黑后达到超时时间自动解封:
ipset create blackip hash:net hashsize 4096 maxelem 10000000000 timeout 7200
4. iptables 进行端口转发
先要开启服务器的IP转发功能:
echo 1 > /proc/sys/net/ipv4/ip_forward
允许FORWARD:
iptables -A FORWARD -p tcp -d 192.168.1.200 --dport 8080 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
到本机eth0 8000端口的流量转发到192.168.1.200:
iptables -t nat -A PREROUTING -p tcp -i eth0 --dport 8000 -j DNAT --to-destination 192.168.1.200:8080
如果服务器上有多网卡,如一块公网网卡eth0(192.168.1.100),一块内网网卡eth1,还需做snat:
iptables -A POSTROUTING -d 192.168.1.100 -o eth1 -p tcp --dport 8000 -j SNAT --to-source 192.168.1.200:8080
或者使用:
iptables -t nat -A POSTROUTING -s 192.168.1.100 -o eth1 -j MASQUERADE
这样就实现了访问本机8000端口的流量转发到192.168.1.200:8080
参考文章:
https://making.pusher.com/per-ip-rate-limiting-with-iptables/
https://tecadmin.net/enable-logging-in-iptables-on-linux/