首页 » 操作系统 » Linux » iptables命令整理

iptables命令整理

 

以下是iptables的帮助说明:


[root@localhost sahinn]# iptables --help iptables v1.4.21 Usage: 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) Commands: Either long or short options are allowed. --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 chainNEW 支持用户新建一个链 Create a new user-defined chain --delete-chain -X [chain]用于删除用户自定义的空链 Delete a user-defined chain --policy -P chain target 设置默认策略的 --rename-chain -E old-chain new-chain 用来Rename 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' [!] --source -s address[/mask][...] source specification [!] --destination -d address[/mask][...] destination specification [!] --in-interface -i input name[+] network interface name ([+] for wildcard) --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) --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=<command> try to insert modules using this command --set-counters PKTS BYTES set the counter during insert/append [!] --version -V print package version.

规则写法

iptables定义规则的方式比较复杂:


格式:iptables [-t table] COMMAND chain CRETIRIA -j ACTION -t table :3个filter nat mangle COMMAND:定义如何对规则进行管理 chain:指定你接下来的规则到底是在哪个链上操作的,当定义策略的时候,是可以省略的 CRETIRIA:指定匹配标准 -j ACTION :指定如何进行处理

1. 删除已有规则

设定iptables规则时,先确保清除旧规则,用以下命令清除旧规则:


#--flush -F [chain] Delete all rules in chain or all chains 删除所有的规则 iptables -F 或 iptables --flush

2. 设置chain策略

iptables -P 可以设置策略。

对于filter table,默认的chain策略为ACCEPT,我们可以通过以下命令修改chain的策略:

规则链有以下5个

  1. PREROUTING (路由前)
  2. INPUT (数据包流入口)
  3. FORWARD (转发管卡)
  4. OUTPUT(数据包出口)
  5. POSTROUTING(路由后)
注意:

对于filter(定义允许或者不允许的)来讲一般只能做在3个链上:INPUT ,FORWARD ,OUTPUT

对于nat(定义地址转换的 )来讲一般也只能做在3个链上:PREROUTING ,OUTPUT ,POSTROUTING

而mangle(修改报文原数据)则是5个链都可以做:PREROUTING,INPUT,FORWARD,OUTPUT,POSTROUTING

以下为例:


#iptables -P chain target [options] iptables -P INPUT DROP iptables -P FORWARD DROP iptables -P OUTPUT DROP

以上配置是将chain target : 接收(INPUT)、转发(FORWARD)、发出(OUTPUT)包

的option均丢弃(DROP)还有(Accept)。

此处接收和发包均被设置为丢弃,需进一步针对INPUT和OUTPUT分别配置。

第三条规则可不必配置(此处是信任往外发出)。

3. 屏蔽指定ip

如果某个ip不停的往服务器发包,可以使用以下命令,将指定ip发来的包丢弃:


--append -A chainAppend to chain 添加规则链 --in-interface -i input name 流入网卡名 -protocol -p proto protocol 协议名 --source -s address 源地址 --jump -j target 赋予的规则 iptables -A INPUT -i eth1 -p tcp -s “114.112.115.102” -j DROP

以上命令就是添加 ip为114.112.115.102,发往eth1网口的tcp包丢弃(DROP)。

4. 配置服务项

利用iptables,可以对日常用到的服务项进行安全管理,比如设定只能通过指定网段、由指定网口通过SSH连接本机:


iptables -A INPUT -i eth0 -p tcp -s 192.168.100.0/24 --dport 22 -m state --state NEW,ESTABLESHED -j ACCEPT iptables -A OUTPUT -o eth0 -p tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT

若要支持由本机通过SSH连接其他机器,由于在本机端口建立连接,因而还需要设置以下规则:

iptables -A INPUT -i eth0 -p tcp -s 192.168.100.0/24 --dport 22 -m state --state ESTABLESHED -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp --sport 22 -m state --state NEW,ESTABLISHED -j ACCEPT

类似的,对于HTTP/HTTPS(80/443)、pop3(110)、rsync(873)、MySQL(3306)等基于tcp连接的服务,也一样。

对于基于udp的dns服务,使用以下命令开启端口服务:


iptables -A OUTPUT -p udp -o eth0 --dport 53 -j ACCEPT iptables -A INPUT -p udp -i eth0 --sport 53 -j ACCEPT

5. 网口转发配置

对于用作防火墙或网关的服务器,一个网口连接到公网,其他网口的包转发到该网口实现内网向公网通信,
假设eth0连接内网,eth1连接公网,配置规则如下:


iptables -A FORWARD -i eth0 -o eth1 -j ACCEPT

6. 端口转发配置

对于端口,也可以运用iptables完成转发配置,好处是不用使用第三方软件就能完成。


iptables -t nat -A PREROUTING -p tcp -d 192.168.102.37 --dport 422 -j DNAT --to 192.168.102.37:22

以上命令将422端口的包转发到22端口,因而通过422端口也可进行SSH连接,
当然对于422端口,我们也需要像以上“4.配置服务项”一节一样,配置其支持连接建立的规则。

7. DoS攻击防范

利用扩展模块limit,可以配置iptables规则,实现DoS攻击防范:

iptables -A INPUT -p tcp --dport 80 -m limit --limit 25/minute --limit-burst 100 -j ACCEPT

–limit 25/minute 指示每分钟限制最大连接数为25
–limit-burst 100 指示当总连接数超过100时,启动 limit/minute 限制

8. 配置web流量均衡

可以将一台服务器作为前端服务器,利用iptables进行流量分发,配置方法如下:


iptables -A PREROUTING -i eth0 -p tcp --dport 80 -m state --state NEW -m nth --counter 0 --every 3 --packet 0 -j DNAT --to-destination 192.168.1.101:80 iptables -A PREROUTING -i eth0 -p tcp --dport 80 -m state --state NEW -m nth --counter 0 --every 3 --packet 0 -j DNAT --to-destination 192.168.1.102:80 iptables -A PREROUTING -i eth0 -p tcp --dport 80 -m state --state NEW -m nth --counter 0 --every 3 --packet 0 -j DNAT --to-destination 192.168.1.103:80

以上配置规则用到nth扩展模块,将80端口的流量均衡到三台服务器。

9. 将丢弃包情况记入日志

使用LOG目标和syslog服务,可以记录某协议某端口下的收发包情况。

拿记录丢包情况举例,可以通过以下方式实现。
首先自定义一个chain:


iptables -N LOGGING

其次将所有接收包导入LOGGING chain中:

iptables -A INPUT -j LOGGING

然后设置日志前缀、日志级别:

iptables -A LOGGING -m limit --limit 2/min -j LOG --log-prefix "IPTables Packet Dropped: " --log-level 7

最后将包倒向DROP,将包丢弃:

iptables -A LOGGING -j DROP

另可以配置syslog.conf文件,指定iptables的日志输出。

确认你的iptables使用了log-level 4参数(前面有一个log-prefix标志). 例如:


DROP everything and Log it iptables -A INPUT -j LOG –log-level 4 iptables -A INPUT -j DROP

举一个例子, 丢弃和记录所有来自IP地址65.55.11.2的连接信息到/var/log/iptables.log文件.


iptables -A INPUT -s 64.55.11.2 -m limit –limit 5/m –limit-burst 7 -j LOG –log-prefix ‘** HACKERS **’ –log-level 4 iptables -A INPUT -s 64.55.11.2 -j DROP

命令解释:

– log-level 4: 记录的级别. 级别4为警告(warning).

– log-prefix ‘*** TEXT ***’: 这里定义了在日志输出信息前加上TEXT前缀. TEXT信息最长可以是29个字符,
这样你就可以在记录文件中方便找到相关的信息.

查看定义的规则


iptables -L -n -v#查看定义规则的详细信息


原文链接:iptables命令整理,转载请注明来源!

0