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