Linux中iptables那點兒事兒

1、NetFilter

是Linux系統核心層內部的一個數據包處理模塊

2、Hook point

數據包在NetFilter中的掛載點,包括

  • PRE_ROUTING
  • INPUT
  • OUTPUT
  • FORWARD
  • POST_ROUTING

iptables命令最終會調用netfilter,通過hook point掛載到網絡層五個不同的掛載點,數據包通過這些掛載點,進行相應的操作,實現目的;

3、iptables規則組成

四張表+五條鏈+規則

3.1 四張表:

  • filter表:訪問控制、規則匹配;
  • nat表:地址轉發;
  • mangle表:修改數據包,改變包頭中內容(TTL、TOS、MARK),不常用;
  • raw表:數據包的狀態跟蹤和分析,不常用;

3.2 五條鏈:INPUT、OUTPUT、FORWARD、PREROUTING、POSTROUTING

3.3 規則

  • 數據包訪問控制:ACCEPT、DROP、REJECT
  • 數據包改寫地址:SNAT(源地址)、DNAT(目標地址)
  • 信息記錄:LOG

4、配置實例

4.1 查看本機端口使用情況

netstat -lntp

4.2 查看iptables版本

iptables --version
iptables v1.4.21

4.3 開放指定端口

查看已有iptables規則

iptables -nL

清除已有規則

iptables -F

4.3.1 規則1:

  • 開放22、80、10-21tcp端口訪問
  • 開放基於ICMP協議的數據包訪問(即ping)
  • 其他禁止訪問
iptables -I INPUT -p tcp --dport 22 -j ACCEPT
iptables -I INPUT -p tcp --dport 80 -j ACCEPT
iptables -I INPUT -p tcp --dport 10:21 -j ACCEPT
iptables -I INPUT -p icmp -j ACCEPT
iptables -A INPUT -j REJECT

刪除80端口

iptables -D INPUT -p tcp --dport 80 -j ACCEPT

禁止訪問80端口

iptables -I INPUT -p tcp --dport 80 -j REJECT

4.3.2 規則2:

  • 本機可以訪問本機
  • 本機可以訪問其他主機
iptables -I INPUT -i lo -j ACCEPT
iptables -I INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

4.3.3 規則3:

只允許指定IP地址訪問指定的端口80

iptables -I INPUT -p tcp -s 118.24.9.139 --dport 80 -j ACCEPT

設置後,在139上訪問80端口

[root@centos ~]# curl -I http://ip:80
HTTP/1.1 403 Forbidden
Date: Sat, 20 Apr 2019 15:53:35 GMT
Server: Apache/2.4.6 (CentOS)
Last-Modified: Thu, 16 Oct 2014 13:20:58 GMT
ETag: "1321-5058a1e728280"
Accept-Ranges: bytes
Content-Length: 4897
Content-Type: text/html; charset=UTF-8

在其他電腦上訪問80端口

curl -I http://ip:80
curl: (7) Failed to connect to ip port 80: Connection refused

4.4 FTP場景

  • 主動模式:1、客戶端向服務器21端口發送用戶名密碼登錄服務器;2、服務端由21端口返回登錄成功消息;3、客戶端隨機開放端口;4、客戶端向服務端21號端口發送PORT命令,上傳隨機端口號;5、服務端由20端口向客戶端的隨機端口主動發送數據;
  • 被動模式:1、客戶端向服務器21端口發送用戶名密碼登錄服務器;2、服務端由21端口返回登錄成功消息;3、客戶端向服務端21號端口發送PASV命令;4、服務端隨機開放端口;5、客戶端接收服務端隨機端口信息;6、客戶端連接到隨機端口獲取數據;

4.4.1 FTP主動模式

ftp連接的默認模式爲被動模式

vsftpd服務支持主動模式需要注意配置選項(vim /etc/vsftpd/vsftpd.conf)

  • port_enable=yes
  • connect_from_port_20=YES

iptables需要開啓21端口訪問權限,而不需要開啓20端口號,因爲20端口從服務端向客戶端發送數據,而不是從客戶端向服務端發送數據;

iptables -I INPUT -p tcp -dport 21 -j ACCEPT

主動模式下規則:

iptables -F
iptables -I INPUT -p tcp --dport 21 -j ACCEPT
iptables -I INPUT -p tcp --dport 22 -j ACCEPT
iptables -I INPUT -p icmp -j ACCEPT
iptables -I INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -j REJECT
iptables -nL

因爲主動模式中,服務端通過20端口向客戶端隨機端口發送數據,只有局域網內直連的情況下,纔會成功,所以一般建議使用被動模式;

4.4.2 被動模式

爲vsftpd指定數據端口,並且通過iptables開放相應需要傳輸的端口段;

修改vsftpd配置文件vim /etc/vsftpd/vsftpd.conf

  • pasv_min_port=50000
  • pasv_max_port=60000

被動模式下規則:

iptables -F
iptables -I INPUT -p tcp --dport 21 -j ACCEPT
iptables -I INPUT -p tcp --dport 22 -j ACCEPT
iptables -I INPUT -p tcp --dport 50000:60000 -j ACCEPT
iptables -I INPUT -p icmp -j ACCEPT
iptables -I INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -j REJECT
iptables -nL

4.5 常見端口梳理

常見允許外網訪問的服務

  • 網站:http-80/tcp,https-443/tcp
  • 郵件:smtp-25/tcp,smtps-465/tcp,pop3-110/tcp,pop3s-995/tcp,imap-143/tcp

常見不允許外網訪問的服務

  • 文件服務器:nfs-123/udp,samba-137:139/tcp-445/tcp,ftp-20:21/tcp
  • 遠程管理:ssh-22/tcp
  • 數據庫:mysql-3306/tcp,oracle-1521/tcp

4.6 將規則保存到配置文件中

[root@server ~]# service iptables save
iptables: Saving firewall rules to /etc/sysconfig/iptables:[  OK  ]

將服務設置爲開機啓動

chkconfig iptables on

查看是否已經加入開機啓動列表

chkconfig --list | grep iptables

如果上述命令不能顯示,使用如下命令:

[root@server ~]# systemctl list-unit-files | grep iptables
iptables.service                          enabled

4.7 手動將規則寫入shell腳本中

將規則寫入iptables_ssh.sh文件中,並將啓動該腳本的命令加入到/etc/rc.local文件中,實現開機自啓效果;

5、NAT模式

  • SNAT:源地址轉換,作用在出口POSTROUTING作用連上;
  • DNAT:目標地址轉換,作用在入口PREROUTING作用連上;

 

更加詳細請移步

http://www.cnblogs.com/gaorong/p/8047559.html

 

 

 

 

 

 

 

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章