iptables -F //删除iptables现有规则
iptables -L [-v[vv] -n] //查看iptables规则
iptables -t nat -A POSTROUTING -s 10.10.10.0/24 -o eth1 -j MASQUERADE //在POSTROUTING链尾添加一条规则
iptables -t nat -A POSTROUTING -s 20.20.20.0/24 -o eth1 -j MASQUERADE //在POSTROUTING链中插入为第2条规则
iptables -t nat -R POSTROUTING 2 -s 40.40.40.40 -o eth1 -j MASQUERAD //替换修改第二条规则
iptables -t nat -D POSTROUTING 2 //删除POSTROUTING链中第2条规则
iptables -t nat -P POSTROUTING DROP //设置默认策略为DROP
//限制ping 192.168.146.3主机的数据包数,平均2/s个,最多不能超过3个
iptables -A INPUT -i eth0 -d 192.168.146.3 -p icmp --icmp-type 8 -m limit --limit 2/second --limit-burst 3 -j ACCEPT
//限制SSH连接速率(默认策略是DROP)
iptables -I INPUT 1 -p tcp --dport 22 -d 192.168.146.3 -m state --state ESTABLISHED -j ACCEPT
iptables -I INPUT 2 -p tcp --dport 22 -d 192.168.146.3 -m limit --limit 2/minute --limit-burst 2 -m state --state NEW -j ACCEPT
//防止syn攻击(限制syn的请求速度)
iptables -N syn-flood
iptables -A INPUT -p tcp --syn -j syn-flood
iptables -A syn-flood -m limit --limit 1/s --limit-burst 4 -j RETURN
iptables -A syn-flood -j DROP
//防止syn攻击(限制单个ip的最大syn连接数)
iptables –A INPUT –i eth0 –p tcp --syn -m connlimit --connlimit-above 15 -j DROP
iptables -I INPUT -p tcp -dport 22 -m connlimit --connlimit-above 3 -j DROP //利用recent模块抵御DOS攻击
iptables -I INPUT -p tcp --dport 22 -m state --state NEW -m recent --set --name SSH //单个IP最多连接3个会话
Iptables -I INPUT -p tcp --dport 22 -m state NEW -m recent --update --seconds 300 --hitcount 3 --name SSH -j DROP //只要是新的连接请求,就把它加入到SSH列表中。5分钟内你的尝试次数达到3次,就拒绝提供SSH列表中的这个IP服务。被限制5分钟后即可恢复访问。
iptables -I INPUT -p tcp --dport 80 -m connlimit --connlimit-above 30 -j DROP //防止单个IP访问量过大
iptables –A OUTPUT –m state --state NEW –j DROP //阻止反弹木马
iptables -A INPUT -p icmp --icmp-type echo-request -m limit --limit 1/m -j ACCEPT //防止ping攻击
-m tcp //-p tcp的扩展
--sport [!]N[:M] //源端口, 服务名、端口、端口范围。
--dport [!]N[:M] //目标端口,服务名、端口、端口范围
--tcp-flags CHECKFLAGS FLAGSOFTRUE //TCP标志位:SYN(同步),ACK(应答),RST(重置),FIN(结束),URG(紧急),PSH(强迫推送)。多个标志位逗号分隔。
//CHECKFLAGS为要检查的标志位,FLAGSOFTRUE为必须为1的标志位(其余的应该为0)
--syn //第一次握手。 等效于 --tcpflags syn,ack,fin,rst syn 四个标志中只有syn为1
-m udp //-p udp的扩展
--sport N[-M]
--dport N[-M]
-m icmp //隐含条件为-p icmp
--icmp-type N //8:echo-request 0:echo-reply
-m state
--state //连接状态检测,NEW,ESTABLISHED,RELATED,INVALID
-m multiport
--source-ports PORT[,PORT]...|N:M //多个源端口,多个端口用逗号分隔,
--destination-ports PORT[,PORT]...|N:M //多个目的端口
--ports //多个端口,每个包的源端口和目的端口相同才会匹配
-m limit
--limit N/UNIT //速率,如3/minute, 1/s, n/second , n/day
--limit-burst N //峰值速率,如100,表示最大不能超过100个数据包
-m connlimit
--connlimit-above N //多于n个,前面加!取反
-m iprange
--src-range IP-IP
--dst-range IP-IP
-m mac
--mac-source //mac地址限制,不能用在OUTPUT和POSTROUTING规则链上,因为封包要送到网卡后,才能由网卡驱动程序透过ARP 通讯协议查出目的地的MAC 地址
-m string
--algo [bm|kmp] //匹配算法
--string "PATTERN" //匹配字符模式
-m recent
--name //设定列表名称,默认为DEFAULT
--rsource //源地址
--rdest //目的地址
--set //添加源地址的包到列表中
--update //每次建立连接都更新列表
--rcheck //检查地址是否在列表
--seconds //指定时间。必须与--rcheck或--update配合使用
--hitcount //命中次数。必须和--rcheck或--update配合使用
--remove //在列表中删除地址
-m time
--timestart h:mm
--timestop hh:mm
--days DAYS //Mon,Tue,Wed,Thu,Fri,Sat,Sun; 逗号分隔
-m mark
--mark N //是否包含标记号N
-m owner
--uid-owner 500 //用来匹配来自本机的封包,是否为某特定使用者所产生的,可以避免服务器使用root或其它身分将敏感数据传送出
--gid-owner O //用来匹配来自本机的封包,是否为某特定使用者群组所产生的
--pid-owner 78 //用来匹配来自本机的封包,是否为某特定进程所产生的
--sid-owner 100 //用来匹配来自本机的封包,是否为某特定连接(Session ID)的响应封包
标签:iptables,--,syn,tcp,state,limit
From: https://www.cnblogs.com/wheat0/p/16875275.html