IPTables 规则举例
删除现有的规则
用下面的命令来清空当前所设置的所有规则.
iptables -F
(or)
iptables --flush
设置默认的链规则
默认的规则是允许通过, 如果你有特殊需求, 可以设置成拒绝:
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT DROP
当你设置了默认的INPUT 和 OUTPUT 链为DROP时, 在你的所有防火墙上必须要再定义两条规则, 一个是入, 另一个是出.
下面的所有例子中, 每一个方案都定义了两条规则, 一条是入规则, 另一条则是出规则.(因为默认是拒绝通过出入包的.)
当然, 如果你足够相信你的用户, 也可以将默认的出站规则设置为接受, 允许所有的出站请求.这样的话, 防火墙就只需要一条入站规则了.
拒绝某个特定的ip地址
在列举更多的例子之前, 先来看一下怎样拒绝来自某个ip的全部请求:
iptables -A INPUT -s "ip_address_to_block" -j DROP
当你在日志中发现某个ip异常时, 你就可以用这条规则来限制这个ip地址.
你也可以用下面的方式来拒绝eth0网卡上来自这个ip地址的tcp请求:
iptables -A INPUT -i eth0 -s "ip_address_to_block" -j DROP
iptables -A INPUT -i eth0 -p tcp -s "ip_address_to_block" -j DROP
允许所有的SSH入站请求
iptables -A INPUT -i eth0 -p tcp --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT
上面的规则允许了所有eth0网卡上的SSH入站请求.
限制特定的ip建立SSH连接
iptables -A INPUT -i eth0 -p tcp -s 192.168.100.0/24 --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT
上面的例子仅允许来自192.168.100.*的连接.
当然也可以把192.168.100.0/24
换成192.168.100.0/255.255.255.0
, 如果你不嫌麻烦的话…
扩展阅读
- 25 Most Frequently Used Linux IPTables Rules Examples
- IPTables Tables, Chains, Rules Fundamentals
- How to Add Firewall Rules
- Incoming and Outgoing Rule Examples
都是英文的, 一点一点啃吧 :)