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要相对安全一些。