netfilter 防火墙
table –> chain
iptables 的三个表
filter 表 ==>过滤包
内建 3 个链
==>
INPUT:作用于进入本机的包
OUTPUT:作用于本机送出去的包
FORWARD:作用于与本机无关的包
nat 表 ==> 网络地址转换
内建 3 个链
==>
OUTPUT:改变本地产生的包的目的地址
PREROUTING:在包刚刚到达防火墙时改变目的地
POSTOUTING:将要离开防火墙之前改变源地址
1mangle 表 ==> 给数据包打标记,然后根据标记操作哪些包
INPUT:
OUTPUT:
FORWARD:
PREROUTING:
POSTOUTING:
iptables -t nat -nvL
- -t 后面跟表名,-nvL 即查看该表的规则;
- -n表示不针对IP反解析主机名;
- -L表示列出的意思;
- -v表示列出的信息更加详细。
如果不加-t ,则打印filter表的相关信息
iptables -A INPUT -s 10.72.11.12 -p tcp –sport 1234 -d 10.72.137.159 –dport 80 -j DROP
iptables 规则匹配从上往下
- -A 增加一条规则 (在原有规则最下面增加)
- -I 插入一条规则 (在原有规则最上面增加)
- -D 删除一条规则
删除规则的简单方法:
iptables -nvL –line-numbers //列出规则并用数字标记
1. Chain INPUT (policy ACCEPT 133 packets, 9740 bytes)
2. num pkts bytes target prot opt in out source destination
3. 1 0 0 ACCEPT all – eth0 * 192.168.1.0/24 0.0.0.0/0
删除某一条规则:
iptables -D INPUT 1
- -D 后跟链名,然后是规则 num,这个 num 就是查看 iptables 规则时第一列的值。
- -s 跟源地址
- -p 指定协议
- –sport/–dport 源端口/目标端口 跟-p 一起使用
- -d 跟目的地址
- -j 动作 (DROP、REJECT、ACCEPT)
- -i 指定网卡
- -P INPUT ACCEPT 预设链的默认处理规则 (policy)
- -Z 清除计数器
- -F 清空规则
备份防火墙规则:
iptables-save > 1.ipt
恢复备份规则:
iptables-restore < 1.ipt
DROP 与 REJECT 的区别:
DROP:直接丢弃,不做任何的反馈。客户端需要等待超时才能判断是否连接成功
REJECT:拒绝后返回一个拒绝的 ICMP 数据包。马上断开连接
DROP比REJECT好在节省资源,而且延缓黑客攻击的进度(因为不会给黑客返回任何有关服务器的信息);坏在容易让企业的网络问题难以排查,而且在DDoS攻击的情况容易耗尽所有的带宽。
REJECT比DROP的好处在于容易诊断和调试网络设备或防火墙造成的问题;坏处你给骗子回个信,相当于暴露了自己的服务器信息。
所以一般的建议是在上游防火墙中使用REJECT,在比较危险的面向外网的基础防火墙上,使用DROP要相对安全一些。