iptables的配置
发布日期: 2014-07-16更新日期:2015-08-27
iptables是linux里用来制定通过本地网卡的数据通信规则的一个软件,能过滤转发数据包。是比较常用的防火墙和网络配置程序。下面就把iptables的一些基本知识总结出来备忘。
- iptables的表和链
- filter表:用于实现通过网卡的数据包的过滤。
- INPUT链: 处理从外往内到达本地网卡的数据包
- OUTPUT链: 处理从内往外离开本地网卡的数据包
- FORWARD链: 处理经过本地网卡转发的数据包
- NAT表:网络地址转换
- SNAT固定源地址转换
- PANT不固定源地址转换,用于PPP或PPPoE连接
- DNAT目的地址转换
其中包含了一下三条链:
- PREROUTING链
数据包到达的时候改变目的地地址。
- OUTPUT链
改变本地产生的数据包的目的地地址。
- POSTROUTING链
数据包离开的时候改变源地址。
- MANGLE表:修改数据包的头部信息
- PREROUTING链
数据包到达以后,通过路由表获得目的地地址以前
- POSTROUTING链
数据包通过路由表获得目的地地址以后
- OUTPUT链
离开本地网卡的数据包路由前
- INPUT链
到达本地网卡的数据包路由后
- FORWARD链
在第一次路由判断之后,最后一次路由判断之前改变数据包
- 数据包通过iptables的流程
网络A -> PREROUTING -> 路由 -> [INPUT -> 路由 -> OUTPUT | FORDWARD] -> POSTROUTING -> 网络B
- iptables的用法(引用自$ iptables --help)
iptables -[ACD] chain rule-specification [options]
iptables -I chain [rulenum] rule-specification [options]
iptables -R chain rulenum rule-specification [options]
iptables -D chain rulenum [options]
iptables -[LS] [chain [rulenum]] [options]
iptables -[FZ] [chain] [options]
iptables -[NX] chain
iptables -E old-chain-name new-chain-name
iptables -P chain target [options]
iptables -h (print this help information)
解释如下:
- Command
- --append -A chain
Append to chain
- --check -C chain
Check for the existence of a rule
- --delete -D chain
Delete matching rule from chain
- --delete -D chain rulenum
Delete rule rulenum (1 = first) from chain
- --insert -I chain [rulenum]
Insert in chain as rulenum (default 1=first)
- --replace -R chain rulenum
Replace rule rulenum (1 = first) in chain
- --list -L [chain [rulenum]]
List the rules in a chain or all chains
- --list-rules -S [chain [rulenum]]
Print the rules in a chain or all chains
- --flush -F [chain]
Delete all rules in chain or all chains
- --zero -Z [chain [rulenum]]
Zero counters in chain or all chains
- --new -N chain
Create a new user-defined chain
- --delete-chain -X [chain]
Delete a user-defined chain
- --policy -P chain target
Change policy on chain to target
- --rename-chain -E old-chain new-chain
Change chain name, (moving any references)
- Options
- --ipv4 -4
Nothing (line is ignored by ip6tables-restore)
- --ipv6 -6
Error (line is ignored by iptables-restore)
- [!] --protocol -p proto
protocol: by number or name, eg. 'tcp', 'udp', 'icmp'
- [!] --source -s address[/mask][...]
source specification
- [!] --destination -d address[/mask][...]
destination specification
- [!] --in-interface -i input name[+]
network interface name ([+] for wildcard), e.g. 'eth0'
- --jump -j target
target for rule (may load target extension)
- --goto -g chain
jump to chain with no return
- --match -m match
extended match (may load extension)
- --numeric -n
numeric output of addresses and ports
- [!] --out-interface -o output name[+]
network interface name ([+] for wildcard), e.g. 'eth0'
- --table -t table
table to manipulate (default: `filter')
- --verbose -v
verbose mode
- --wait -w
wait for the xtables lock
- --line-numbers
print line numbers when listing
- --exact -x
expand numbers (display exact values)
- [!] --fragment -f
match second or further fragments only
- --modprobe=
try to insert modules using this command
- --set-counters PKTS BYTES
set the counter during insert/append
- [!] --version -V
print package version.
- -j Target for rule
- ACCEPT 允许
- REJECT 拒绝
- DROP 拒绝并提示信息
- SNAT 源地址转换
- DNAT 目标地址转换
- REDIRECT 重定向
- MASQUERAED 地址伪装
- LOG --log-prefix "" 记录日志
- 一个服务器常用的脚本
iptables -F
iptables -X
iptables -Z
iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -p tcp --dport 443 -j ACCEPT
iptables -A INPUT -p icmp -m icmp --icmp-type 8 -j ACCEPT
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT
- iptables的保存
对于iptables的操作如果不做保存将在重新启动以后全部清空,所以如果想要更改过的iptables能长期有效就需要在改动后保存下来。Ubuntu下可以使用iptables-save命令来进行保存。如果没有的话可以apt-get install一下。具体为
- iptables-save > /etc/iptables.rules
- 在/etc/network/interfaces的末尾添加pre-up iptables-restore < /etc/iptables.rules
- 在上面的pre-up下面再添加post-down iptables-save > /etc/iptables.rules可以让ubuntu在切断网络连接以后自动保存在这之前改动过的iptables命令,而不需要在手动敲一遍iptables-save命令。