标签:iptables

IPtables配置实践

IPtables配置实践

前言

在大企业中防火墙角色主要交给硬件来支持,效果自然没话说只是需要增加一点点成本,但对于大多数个人或者互联网公司来说选择系统自带的iptables或者第三方云防火墙似乎是更加合适的选择,通过一些合理的优化和灵活的配置,我们也可以很轻松实现硬件防火墙的部分功能,够用就好。

建立防火墙白名单机制很重要


更新历史

2015年07月24日 – 初稿

阅读原文 – http://wsgzao.github.io/post/iptables/

扩展阅读

防火墙与 NAT 服务器 – http://vbird.dic.ksu.edu.tw/linux_server/0250simple_firewall_3.php
Linux 防火墙和 iptables – http://liaoph.com/iptables/


基础知识

原理部分请参考扩展阅读

关闭iptables

 

基础语法

继续...

Filed under: LinuxTagged with:

iptables的基本操作

系统环境:Debian 6 32-bit
iptables版本:1.4.8

iptables -N cracker
创建一个名为cracker的新链

iptables -A INPUT
在INPUT链的最末尾添加一条规则

iptables -I INPUT 3
在INPUT链的第三条规则处插入一条规则(如果不指定插入的位置,则插到INPUT链的最前面,即成为INPUT链的第一条规则)

iptables -R INPUT 3
替换INPUT链中的第三条规则

iptables -D INPUT 3
删除INPUT链中的第三条规则

iptables -F
清空iptables定义的所有规则

iptables -F cracker
清空cracker链中的所有规则

iptables -X
删除所有自定义链(前提是所有自定义链中的规则已清空)

iptables -X cracker
删除自定义链cracker(前提是当前链中的所有规则已清空)

iptables -L -vn –line-numbers
以数字的方式详细显示各条规则的统计数据,并显示各条规则的编号

iptables -L INPUT -vn –line-numbers
以数字的方式详细INPUT链中各条规则的统计数据,并显示各条规则的编号

iptables -Z
清空iptables统计数据

iptables -Z INPUT
清空INPUT链中的统计数据

iptables -P
设置链的默认动作

iptables-save > /etc/firewall
将当前内存中的iptables规则保存到/etc/firewall文件中

iptables-restore 将/etc/firewall文件中的iptables规则加载到内存中

iptables规则实例:
iptables -P INPUT ACCEPT
将INPUT链的默认target设为ACCEPT

iptables -A INPUT -d 11.11.11.11 -m state –state INVALID -j DROP
将所有目的地址为11.11.11.11且状态为INVALID的数据包直接丢弃

iptables -A INPUT -i lo -j ACCEPT
接受所有来自lo接口的数据包

iptables -A INPUT -j cracker
将所有数据直接交个cracker链

iptables -A INPUT -d 11.11.11.11 -p icmp –icmp-type echo-request -m state –state NEW -j ACCEPT
接受所有目的地址为11.11.11.11且协议为icmp、icmp类型为echo-request、连接状态为NEW的数据包

iptables -A INPUT -d 11.11.11.11 -p tcp -m state –state NEW -m tcp –dport 22 -j ACCEPT
接受所有目的地址为11.11.11.11且协议为tcp、目的端口为22、连接状态为NEW的数据包

iptables -A INPUT -d 11.11.11.11 -p tcp -m state –state NEW -m tcp –dport 80 -j ACCEPT
接受所有目的地址为11.11.11.11且协议为tcp、目的端口为80、连接状态为NEW的数据包

iptables -A INPUT -d 11.11.11.11 -m state –state RELATED,ESTABLISHED -j ACCEPT
接受所有目的地址为11.11.11.11且连接状态为RELATED或ESTABLISHED的数据包(此规则放在倒数第三条,放在前面会影响recent、limit等模块的效果)

iptables -A INPUT -j LOG –log-prefix “GOD-IN: ”
对所有通过INPUT链的数据生成日志,且日志前缀为”GOD-IN”,日志等级为warn(warn也是默认等级,对应的数字为4),被LOG的数据包会继续向下匹配规则(此规则放在倒数第二条,方便记录所有丢弃的数据包)

iptables -A INPUT -j DROP
对于所有通过INPUT链的数据包执行丢弃动作(因默认target的统计不准,所以我一般将此规则加到INPUT链的末尾,这样所有数据包就不会匹配INPUT链的默认target了)

iptables -A OUTPUT -s 11.11.11.11 -m state –state INVALID -j DROP
丢弃所有源为11.11.11.11且状态为INVALID的数据包

iptables -A OUTPUT -o lo -j ACCEPT
允许所有来自lo接口的数据包出去

iptables -A OUTPUT -s 11.11.11.11 -p icmp -m state –state NEW -m icmp –icmp-type 8 -j ACCEPT
允许所有源为11.11.11.11且协议为icmp、icmp类型为echo-request、状态为NEW的数据包出去

iptables -A OUTPUT -s 11.11.11.11 -p tcp -m state –state NEW -m tcp –dport 25 -j ACCEPT
允许所有源为11.11.11.11且协议为tcp、目的端口为25、状态为NEW的数据包出去

iptables -A OUTPUT -s 11.11.11.11 -p tcp -m state –state NEW -m udp –dport 53 -j ACCEPT
允许所有源为11.11.11.11且协议为udp、目的端口为53、状态为NEW的数据包出去

iptables -A OUTPUT -s 11.11.11.11 -p tcp -m state –state NEW -m tcp –dport 80 -j ACCEPT
允许所有源为11.11.11.11且协议为tcp、目的端口为80、状态为NEW的数据包出去

iptables -A OUTPUT -s 11.11.11.11 -m state –state RELATED,ESTABLISHED -j ACCEPT
允许所有源为11.11.11.11且状态为RELATED或ESTABLISHED的数据包出去

iptables -A OUTPUT -j LOG –log-prefix “GOD-OUT: ”
对所有通过OUTPUT链的数据生成日志,且日志前缀为”GOD-OUT”,日志等级为warn

iptables -A OUTPUT -j DROP
对于所有通过OUTPUT链的数据包执行丢弃动作

查看连接跟踪状态:
cat /proc/net/nf_conntrack

iptables1.4.8之前的某些比较老版本为
cat /proc/net/ip_conntrack

备注:
1.iptables是按顺序向下执行的,如果一个数据包匹配了ACCEPT、DROP、REJECT等动作,就不会再向下去匹配其他的规则了
2.发送连接重置包比直接将数据包丢弃要好,因为如果是直接丢弃数据包的话客户端并不知道具体网络状况,基于TCP协议的重发和超时机制,客户端就会不停地等待和重发加重服务器的负担… 继续...

Filed under: LinuxTagged with: