脚本(测试)备忘录

发布时间 2023-04-12 17:45:31作者: Mugetsukun

防火墙

#!/bin/bash
# 删除已有规则
iptables -F
# 设置链的默认策略
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT
# 阻止指定的IP地址(这里以192.168.1.100为例)
iptables -A INPUT -s 192.168.1.100 -j DROP
# 使用multiport将ssh,http,https的流量访问连接
iptables -A INPUT -p tcp -m multiport --dports 22,80,443 -j ACCEPT
iptables -A OUTPUT -p tcp -m multiport --sports 22,80,443 -j ACCEPT
# 允许本地发起的SSH请求
iptables -A OUTPUT -p tcp --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A INPUT -p tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT
# 做好负载平衡传入的网络流量(这里以两台服务器进行负载均衡为例)
iptables -A PREROUTING -t nat -i eth0 -p tcp --dport 80 -m state --state NEW -m nth --counter 0 --every 2 --packet 0 -j DNAT --to-destination 192.168.1.10:80
iptables -A PREROUTING -t nat -i eth0 -p tcp --dport 80 -m state --state NEW -m nth --counter 1 --every 2 --packet 0 -j DNAT --to-destination 192.168.1.11:80
# 内部网络与外部网络的通信
iptables -A FORWARD -i eth0 -o eth1 -j ACCEPT
iptables -A FORWARD -i eth1 -o eth0 -j ACCEPT
# 出战的DNS连接(这里以Google Public DNS为例)
iptables -A OUTPUT -p udp --dport 53 -d 8.8.8.8 -j ACCEPT
iptables -A OUTPUT -p udp --dport 53 -d 8.8.4.4 -j ACCEPT
# 指定网络的mysql连接(这里以192.168.1.0/24为例)
iptables -A INPUT -p tcp -s 192.168.1.0/24 --dport 3306 -j ACCEPT
iptables -A OUTPUT -p tcp -d 192.168.1.0/24 --sport 3306 -m state --state ESTABLISHED -j ACCEPT
# 允许IMAP和IMAPS
iptables -A INPUT -p tcp --dport 143 -j ACCEPT
iptables -A OUTPUT -p tcp --sport 143 -j ACCEPT
iptables -A INPUT -p tcp --dport 993 -j ACCEPT
iptables -A OUTPUT -p tcp --sport 993 -j ACCEPT
# 防止DoS攻击(这里以synflood为例)
iptables -N synflood
iptables -A synflood -m limit --limit 1/s --limit-burst 3 -j RETURN
iptables -A synflood -j DROP
iptables -A INPUT -p tcp --syn -j synflood
# 422端口的流量全部转移到22端口
iptables -A PREROUTING -t nat -p tcp --dport 422 -j REDIRECT --to-port 22
  1. 第一行“#!/bin/bash”指定了这个脚本使用的解释器是Bash。
  2. “iptables -F”命令会清空iptables中的所有规则,相当于删除已有规则。
  3. “iptables -P INPUT DROP”命令设置INPUT链的默认策略为DROP,即拒绝所有传入的数据包;“iptables -P FORWARD DROP”命令设置FORWARD链的默认策略为DROP,即拒绝所有转发的数据包;“iptables -P OUTPUT ACCEPT”命令设置OUTPUT链的默认策略为ACCEPT,即允许所有传出的数据包。
  4. “iptables -A INPUT -s 192.168.1.100 -j DROP”命令添加一条规则,将源IP地址为192.168.1.100的数据包丢弃。
  5. “iptables -A INPUT -p tcp -m multiport --dports 22,80,443 -j ACCEPT”命令添加一条规则,允许TCP协议的ssh、http、https流量访问连接;“iptables -A OUTPUT -p tcp -m multiport --sports 22,80,443 -j ACCEPT”命令添加一条规则,允许TCP协议的ssh、http、https流量访问连接的回复数据包。
  6. “iptables -A OUTPUT -p tcp --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT”命令添加一条规则,允许TCP协议的ssh连接的发起数据包;“iptables -A INPUT -p tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT”命令添加一条规则,允许TCP协议的ssh连接的回复数据包。
  7. “iptables -A PREROUTING -t nat -i eth0 -p tcp --dport 80 -m state --state NEW -m nth --counter 0 --every 2 --packet 0 -j DNAT --to-destination 192.168.1.10:80”和“iptables -A PREROUTING -t nat -i eth0 -p tcp --dport 80 -m state --state NEW -m nth --counter 1 --every 2 --packet 0 -j DNAT --to-destination 192.168.1.11:80”命令添加了两条规则,将传入的80端口的TCP流量进行负载均衡,分别转发到两台服务器上。
  8. “iptables -A FORWARD -i eth0 -o eth1 -j ACCEPT”和“iptables -A FORWARD -i eth1 -o eth0 -j ACCEPT”命令添加了两条规则,允许eth0和eth1之间的数据包转发。
  9. “iptables -A OUTPUT -p udp --dport 53 -d 8.8.8.8 -j ACCEPT”和“iptables -A OUTPUT -p udp --dport 53 -d 8.8.4.4 -j ACCEPT”命令添加了两条规则,允许向Google Public DNS发送DNS查询请求。
  10. “iptables -A INPUT -p tcp -s 192.168.1.0/24 --dport 3306 -j ACCEPT”和“iptables -A OUTPUT -p tcp -d 192.168.1.0/24 --sport 3306 -m state --state ESTABLISHED -j ACCEPT”命令添加了两条规则,允许192.168.1.0/24网段的主机通过TCP协议访问本机的3306端口,并允许本机向192.168.1.0/24网段的主机发送TCP连接的回复数据包。
  11. “iptables -A INPUT -p tcp --dport 143 -j ACCEPT”和“iptables -A OUTPUT -p tcp --sport 143 -j ACCEPT”命令添加了两条规则,允许IMAP协议的流量访问连接和回复连接。
  12. “iptables -N synflood”命令添加了一个名为synflood的用户自定义链。
  13. “iptables -A synflood -m limit --limit 1/s --limit-burst 3 -j RETURN”命令向synflood链中添加了一条规则,限制每秒最多处理一个syn数据包,每次处理不超过三个syn数据包。
  14. “iptables -A synflood -j DROP”命令向synflood链中添加了一条规则,将超出限制的syn数据包丢弃。
  15. “iptables -A INPUT -p tcp --syn -j synflood”命令向INPUT链中添加了一条规则,将所有的syn数据包传递到synflood链中进行处理。
  16. “iptables -A PREROUTING -t nat -p tcp --dport 422 -j REDIRECT --to-port 22”命令添加了一条规则,将422端口的流量全部转发到22端口上。