iptables
iptables命令
1 内建三个表:nat mangle 和 filter 2 filter预设规则表,有INPUT、FORWARD 和 OUTPUT 三个规则链 3 vi /etc/sysconfig/iptables # 配置文件 4 INPUT # 进入 5 FORWARD # 转发 6 OUTPUT # 出去 7 ACCEPT # 将封包放行 8 REJECT # 拦阻该封包 9 DROP # 丢弃封包不予处理 10 -A # 在所选择的链(INPUT等)末添加一条或更多规则 11 -D # 删除一条 12 -E # 修改 13 -p # tcp、udp、icmp 0相当于所有all !取反 14 -P # 设置缺省策略(与所有链都不匹配强制使用此策略) 15 -s # IP/掩码 (IP/24) 主机名、网络名和清楚的IP地址 !取反 16 -j # 目标跳转,立即决定包的命运的专用内建目标 17 -i # 进入的(网络)接口 [名称] eth0 18 -o # 输出接口[名称] 19 -m # 模块 20 --sport # 源端口 21 --dport # 目标端口 22 23 iptables -F # 将防火墙中的规则条目清除掉 # 注意: iptables -P INPUT ACCEPT 24 iptables-restore < 规则文件 # 导入防火墙规则 25 /etc/init.d/iptables save # 保存防火墙设置 26 /etc/init.d/iptables restart # 重启防火墙服务 27 iptables -L -n # 查看规则 28 iptables -t nat -nL # 查看转发
iptables实例
1 iptables -L INPUT # 列出某规则链中的所有规则 2 iptables -X allowed # 删除某个规则链 ,不加规则链,清除所有非内建的 3 iptables -Z INPUT # 将封包计数器归零 4 iptables -N allowed # 定义新的规则链 5 iptables -P INPUT DROP # 定义过滤政策 6 iptables -A INPUT -s 192.168.1.1 # 比对封包的来源IP # ! 192.168.0.0/24 ! 反向对比 7 iptables -A INPUT -d 192.168.1.1 # 比对封包的目的地IP 8 iptables -A INPUT -i eth0 # 比对封包是从哪片网卡进入 9 iptables -A FORWARD -o eth0 # 比对封包要从哪片网卡送出 eth+表示所有的网卡 10 iptables -A INPUT -p tcp # -p ! tcp 排除tcp以外的udp、icmp。-p all所有类型 11 iptables -D INPUT 8 # 从某个规则链中删除一条规则 12 iptables -D INPUT --dport 80 -j DROP # 从某个规则链中删除一条规则 13 iptables -R INPUT 8 -s 192.168.0.1 -j DROP # 取代现行规则 14 iptables -I INPUT 8 --dport 80 -j ACCEPT # 插入一条规则 15 iptables -A INPUT -i eth0 -j DROP # 其它情况不允许 16 iptables -A INPUT -p tcp -s IP -j DROP # 禁止指定IP访问 17 iptables -A INPUT -p tcp -s IP --dport port -j DROP # 禁止指定IP访问端口 18 iptables -A INPUT -s IP -p tcp --dport port -j ACCEPT # 允许在IP访问指定端口 19 iptables -A INPUT -p tcp --dport 22 -j DROP # 禁止使用某端口 20 iptables -A INPUT -i eth0 -p icmp -m icmp --icmp-type 8 -j DROP # 禁止icmp端口 21 iptables -A INPUT -i eth0 -p icmp -j DROP # 禁止icmp端口 22 iptables -t filter -A INPUT -i eth0 -p tcp --syn -j DROP # 阻止所有没有经过你系统授权的TCP连接 23 iptables -A INPUT -f -m limit --limit 100/s --limit-burst 100 -j ACCEPT # IP包流量限制 24 iptables -A INPUT -i eth0 -s 192.168.62.1/32 -p icmp -m icmp --icmp-type 8 -j ACCEPT # 除192.168.62.1外,禁止其它人ping我的主机 25 iptables -A INPUT -p tcp -m tcp --dport 80 -m state --state NEW -m recent --update --seconds 5 --hitcount 20 --rttl --name WEB --rsource -j DROP # 可防御cc攻击(未测试)
iptables配置实例文件
1 # Generated by iptables-save v1.2.11 on Fri Feb 9 12:10:37 2007 2 *filter 3 :INPUT ACCEPT [637:58967] 4 :FORWARD DROP [0:0] 5 :OUTPUT ACCEPT [5091:1301533] 6 # 允许的IP或IP段访问 建议多个 7 -A INPUT -s 127.0.0.1 -p tcp -j ACCEPT 8 -A INPUT -s 192.168.0.0/255.255.0.0 -p tcp -j ACCEPT 9 # 开放对外开放端口 10 -A INPUT -p tcp --dport 80 -j ACCEPT 11 # 指定某端口针对IP开放 12 -A INPUT -s 192.168.10.37 -p tcp --dport 22 -j ACCEPT 13 # 拒绝所有协议(INPUT允许) 14 -A INPUT -p tcp -m tcp --tcp-flags FIN,SYN,RST,PSH,URG RST -j DROP 15 # 允许已建立的或相关连的通行 16 iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT 17 # 拒绝ping 18 -A INPUT -p tcp -m tcp -j REJECT --reject-with icmp-port-unreachable 19 COMMIT 20 # Completed on Fri Feb 9 12:10:37 2007
iptables配置实例
1 # 允许某段IP访问任何端口 2 iptables -A INPUT -s 192.168.0.3/24 -p tcp -j ACCEPT 3 # 设定预设规则 (拒绝所有的数据包,再允许需要的,如只做WEB服务器.还是推荐三个链都是DROP) 4 iptables -P INPUT DROP 5 iptables -P FORWARD DROP 6 iptables -P OUTPUT ACCEPT 7 # 注意: 直接设置这三条会掉线 8 # 开启22端口 9 iptables -A INPUT -p tcp --dport 22 -j ACCEPT 10 # 如果OUTPUT 设置成DROP的,要写上下面一条 11 iptables -A OUTPUT -p tcp --sport 22 -j ACCEPT 12 # 注:不写导致无法SSH.其他的端口一样,OUTPUT设置成DROP的话,也要添加一条链 13 # 如果开启了web服务器,OUTPUT设置成DROP的话,同样也要添加一条链 14 iptables -A OUTPUT -p tcp --sport 80 -j ACCEPT 15 # 做WEB服务器,开启80端口 ,其他同理 16 iptables -A INPUT -p tcp --dport 80 -j ACCEPT 17 # 做邮件服务器,开启25,110端口 18 iptables -A INPUT -p tcp --dport 110 -j ACCEPT 19 iptables -A INPUT -p tcp --dport 25 -j ACCEPT 20 # 允许icmp包通过,允许ping 21 iptables -A OUTPUT -p icmp -j ACCEPT (OUTPUT设置成DROP的话) 22 iptables -A INPUT -p icmp -j ACCEPT (INPUT设置成DROP的话) 23 # 允许loopback!(不然会导致DNS无法正常关闭等问题) 24 IPTABLES -A INPUT -i lo -p all -j ACCEPT (如果是INPUT DROP) 25 IPTABLES -A OUTPUT -o lo -p all -j ACCEPT(如果是OUTPUT DROP)
iptables添加网段转发
1 # 例如通过vpn上网 2 echo 1 > /proc/sys/net/ipv4/ip_forward # 在内核里打开ip转发功能 3 iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -j MASQUERADE # 添加网段转发 4 iptables -t nat -A POSTROUTING -s 10.0.0.0/255.0.0.0 -o eth0 -j SNAT --to 192.168.10.158 # 原IP网段经过哪个网卡IP出去 5 iptables -t nat -nL # 查看转发
iptables端口映射
1 # 内网通过有外网IP的机器映射端口 2 echo 1 > /proc/sys/net/ipv4/ip_forward # 在内核里打开ip转发功能 3 route add -net 10.10.20.0 netmask 255.255.255.0 gw 10.10.20.111 # 内网需要添加默认网关,并且网关开启转发 4 iptables -t nat -A PREROUTING -d 192.168.10.158 -p tcp --dport 9999 -j DNAT --to 10.10.20.55:22 5 iptables -t nat -nL # 查看转发