Netfilter/iptables

Netfilter/iptables

Basic

  • -t filter|nat|mangle 指定 table。默认 filter。

Commons

# conntrack 的几种状态:ESTABLISHED,RELATED,NEW,INVALID
# 允许本机主动发起的连接的所有(接收的)数据包
iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT

# 丢弃所有接收的连接状态不合法的包
iptables -A INPUT -m conntrack --ctstate INVALID -j DROP

# vpn server. must also set net.ipv4.ip_forward=1
iptables -t nat -A POSTROUTING -j MASQUERADE
# 或者,限制仅对 src IP 是内网的数据包 MASQUERADE
iptables -t nat -A POSTROUTING -s 192.168.0.0/16 -j MASQUERADE

# MSS CLAMP to fix all MTU related problems
iptables -t mangle -A POSTROUTING -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu

# 对属于某个 ipset 的 dst IP 做策略路由,以 "china" 这个 ipset 为例
iptables -t mangle -A PREROUTING -m set --match-set china dst -j MARK --set-mark 0x1/0x1
iptables -t mangle -A OUTPUT -m set --match-set china dst -j MARK --set-mark 0x1/0x1
ip rule add fwmark 0x1/0x1 lookup main prio 1

# 对 PREROUTING 符合特定 mark 比特位的流量做 DNAT
iptables -t nat -A PREROUTING -m mark --mark 0x1/0x1 -j DNAT --to 1.2.3.4:443

# 劫持所有途径本机的udp 53 DNS 流量到本机
# 一般用在路由器上,配合 dnsmasq 使用。
iptables -t nat -A PREROUTING -p udp --dport 53 -j REDIRECT --to-port 53

Others

# 修改转发的数据包的TTL
iptables -t mangle -A PREROUTING -i eth0 -j TTL --ttl-set 64

Last update: 2019-02-19 11:31:40 UTC