iptables用法及常用模块总结

iptables用法及常用模块总结

2023年7月10日发(作者:)

iptables⽤法及常⽤模块总结

iptables传输数据包的过程:  1. 当⼀个数据包进⼊⽹卡时,它⾸先进⼊PREROUTING链,内核根据数据包⽬的IP判断是否需要转送出去。  2. 如果数据包就是进⼊本机的,它就会沿着图向下移动,到达INPUT链。数据包到了INPUT链后,任何进程都会收到它。本机上运⾏的程序可以发送数据包,这些数据包会经过OUTPUT链,然后到达POSTROUTING链输出。  3. 如果数据包是要转发出去的,且内核允许转发,数据包就会如图所⽰向右移动,经过FORWARD链,然后到达POSTROUTING链输出。

第⼀部分:常⽤显⽰模块介绍注意:本⽂所有实例都是在默认规则为DROP下。# 开放ssh服务端⼝iptables -A INPUT -p tcp --dport 22 -j ACCEPTiptables -A INPUT -p tcp --sport 22 -j ACCEPT# 修改默认规则为DROPiptables -P INPUT DROPiptables -P OUTPUT DROP

1. multiport: 多端⼝匹配 可⽤于匹配⾮连续或连续端⼝;最多指定15个端⼝; 实例iptables -A INPUT -p tcp -m multiport --dport 22,80 -j ACCEPTiptables -A OUTPUT -p tcp -m multiport --sport 22,80 -j ACCEPT

2. iprange: 匹配指定范围内的地址 匹配⼀段连续的地址⽽⾮整个⽹络时有⽤ 实例:iptables -A INPUT -p tcp -m iprange --src-range 192.168.118.0-192.168.118.60 --dport 22 -j ACCEPTiptables -A OUTPUT -p tcp -m iprange --dst-range 192.168.118.0-192.168.118.60 --sport 22 -j ACCEPT

3. string: 字符串匹配,能够检测报⽂应⽤层中的字符串 字符匹配检查⾼效算法:kmp, bm

能够屏蔽⾮法字符 实例:# 注意该条规则需要添加到OUTPUT链,当服务端返回数据报⽂检查到有关键字"sex"时,则丢弃该报⽂,可⽤于web敏感词过滤iptables -A OUTPUT -p tcp --dport 80 -m string --algo kmp --string "sex" -j DROP

4. connlimit: 连接数限制,对每IP所能够发起并发连接数做限制; 实例:# 默认INPUT 为 DROP. 每个ip对ssh服务的访问最⼤为3个并发连接,超过则丢弃iptables -A INPUT -p tcp --dport 22 -m connlimit ! --connlimit-above 3 -j ACCEPT

5. limit: 速率限制 limit-burst: 设置默认阀值# 默认放⾏10个,当到达limit-burst阀值后,平均6秒放⾏1个iptables -A INPUT -p icmp -m limit --limit 10/minute --limit-burst 10 -j ACCEPT

6. state: 状态检查 连接追踪中的状态: NEW: 新建⽴⼀个会话 ESTABLISHED:已建⽴的连接 RELATED: 有关联关系的连接 INVALID: ⽆法识别的连接# 放⾏ssh的⾸次连接状态iptables -A INPUT -p tcp --dport 22 -m state --state NEW -j ACCEPT

第⼆部分:编写常⽤规则编写iptables注意:做默认规则drop的时候⼀定要先开放ssh端⼝,否则就杯具了。# 清空⾃建规则iptables -Fiptables -X# 在INPUT链上,tcp为RELATED,ESTABLISHED的数据包为放⾏iptables -A INPUT -p tcp -m state --state RELATED,ESTABLISHED -j ACCEPT# 在INPUT链上,tcp为NEW⽽且端⼝为22,80的数据包放⾏iptables -A INPUT -p tcp -m state --state NEW -m multiport 22,80 -j ACCEPT# 在OUTPUT链上,tcp为ESTABLISHED都放⾏iptables -A OUTPUT -p tcp -m state --state ESTABLISHED -j ACCEPT# INPUT链和OUTPUT链默认规则都为DROP状态iptables -P INPUT DROPiptables -P OUTPUT DROP# 打开本地回环地址iptables -A INPUT -i lo -j ACCEPTiptables -A OUTPUT -o lo -j ACCEPT# 允许服务器ping对端主机⽽不允许对端主机ping服务器iptables -A OUTPUT -p icmp --icmp-type 8 -j ACCEPTiptables -A INPUT -p icmp --icmp-type 0 -j ACCEPT# 开放主机对dns的访问iptables -A INPUT -p udp --sport 53 -j ACCEPTiptables -A OUTPUT -p udp --dport 53 -j ACCEPT 第三部分:针对特定的服务定制相关规则1. 对ssh进⾏管控,1⼩时内最多发起5个连接,防⽌⿊客暴⼒破解ssh# 清空默认规则iptables -Fiptables -X# 添加已建⽴的连接规则iptables -A INPUT -p tcp -m state --state ESTABLISHED -j ACCEPTiptables -A OUTPUT -p tcp -m state --state ESTABLISHED -j ACCEPT# 设置默认规则iptables -P INPUT DROPiptables -P OUTPUT DROP# 设置iptables记录匹配ssh规则iptables -I INPUT 2 -p tcp --syn -m state --state NEW -j LOG --log-level 5 --log-prefix "[SSH Login]:"# 使⽤recent显⽰模块限定每⼩时最多匹配到2次,超过则丢弃。(每⼩时建⽴超过2次 ssh 请求连接,每次ssh连接有三次密码验证,2次也就是输⼊超过6次密码)iptables -I INPUT -p tcp --dport 22 -m connlimit --connlimit-above 2 -j DROPiptables -I INPUT -p tcp --dport 22 -m state --state NEW -m recent --set --name SSHiptables -I INPUT -p tcp --dport 22 -m state --state NEW -m recent --update --seconds 3600 --hitcount 2 --name SSH -j DROP

2. 对web服务进⾏并发管控,防⽌Ddos# 清空默认规则iptables -Fiptables -X# 添加已建⽴的连接规则iptables -A INPUT -p tcp -m state --state ESTABLISHED -j ACCEPTiptables -A OUTPUT -p tcp -m state --state ESTABLISHED -j ACCEPT# 设置默认规则iptables -P INPUT DROPiptables -P OUTPUT DROP# 每个ip的并发连接请求最⼤50,超过则丢弃,建议调⼤值,容易误伤nat上⽹⽤户iptables -A INPUT -p tcp --syn --dport 80 -m state --state NEW -m connlimit ! --connlimit-above 50 -j DROP

3. 对icmp进⾏流控,防⽌icmp攻击# 清空默认规则iptables -Fiptables -X# 添加已建⽴的连接规则iptables -A INPUT -p tcp -m state --state ESTABLISHED -j ACCEPTiptables -A OUTPUT -p tcp -m state --state ESTABLISHED -j ACCEPT# 设置默认规则iptables -P INPUT DROPiptables -P OUTPUT DROP# 利⽤limit模块限制icmp速率,阀值为10个,当到达10个后,限速每秒钟1个iptables -A INPUT -p icmp --icmp-type 0 -m limit --limit 1/s --limit-burst 10 -j ACCEPT

第四部分:NAT 常⽤规则站在服务器的⾓度:  当内⽹服务器要访问外⽹时,需要做源地址转换;# 打开转发功能sysctl -w _forward=1# 把 192.168.1.0 ⽹段流出的数据的 source ip address 修改成为 10.0.0.11:iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -j SNAT --to-source 10.0.0.11

  当外⽹主机要访问内⽹服务器服务时,需要做⽬标地址转换;# 打开转发功能sysctl -w _forward=1# 把访问 10.0.0.11:2222 的访问转发到 192.168.1.11:22 上::iptables -t nat -A PREROUTING -d 10.0.0.11 -p tcp --dport 2222 -j DNAT --to-destination 192.168.1.11:22

  单纯的将访问本机80端⼝的请求转发到8080上iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 8080

补充:iptables 独⽴⽇志配置:  当在iptables中启⽤⽇志记录时,会被当做系统⽇志记录到/var/log/message⾥⾯,如果想要独⽴⽇志配置如下:grep -r 'iptables' /etc/

kern.* /var/log/temctl restart rsyslog在 /etc/ 中添加⼀条规则,并重启服务。

发布者:admin,转转请注明出处:http://www.yc00.com/news/1688986164a191802.html

相关推荐

发表回复

评论列表(0条)

  • 暂无评论

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信